Switch driver from MQTT to socket to get synchronous feedback

This commit is contained in:
2021-12-31 11:45:12 +01:00
parent a867bc8722
commit cb014e54ba

View File

@@ -1,22 +1,27 @@
import paho.mqtt.client as mqtt import socket
from driver.models import DriverConfiguration
class Connector: class Connector:
MQTT_HOST = "127.0.0.1"
MQTT_PORT = 1883
@classmethod def __init__(self):
def __mqtt_pub(self, message): config = DriverConfiguration.get_solo()
self.remote_host = config.remote_host
self.remote_port = config.remote_port
def __send_data(self, message):
# to be encoded # to be encoded
client = mqtt.Client() with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
client.connect(self.MQTT_HOST, self.MQTT_PORT) sock.connect((self.remote_host, self.remote_port))
client.publish("dcc/commands", payload=message) sock.sendall(message)
client.disconnect() resp = sock.recv(1024)
print(message)
print(resp)
return True return True
def passthrough(self, data): def passthrough(self, data):
self.__mqtt_pub(data) self.__send_data(data)
def ops(self, address, data, function=False): def ops(self, address, data, function=False):
if function: if function:
@@ -25,7 +30,7 @@ class Connector:
else: else:
message = "<t 1 {0} {1} {2}>".format(address, data['speed'], message = "<t 1 {0} {1} {2}>".format(address, data['speed'],
data['direction']) data['direction'])
self.__mqtt_pub(message) self.__send_data(message)
return True return True
def infra(self, data): def infra(self, data):
@@ -36,9 +41,9 @@ class Connector:
track = "" track = ""
if power: if power:
self.__mqtt_pub('<1{}>'.format(track)) self.__send_data('<1{}>'.format(track))
else: else:
self.__mqtt_pub('<0{}>'.format(track)) self.__send_data('<0{}>'.format(track))
def emergency(self): def emergency(self):
self.__mqtt_pub('<!>') self.__send_data('<!>')