Module mqtt implemented

This commit is contained in:
Dirk Alders 2022-09-13 06:57:24 +02:00
parent 82521d16c1
commit 0e2a063bd1
4 changed files with 33 additions and 31 deletions

3
.gitmodules vendored
View File

@ -10,3 +10,6 @@
[submodule "task"] [submodule "task"]
path = task path = task
url = https://git.mount-mockery.de/pylib/task.git url = https://git.mount-mockery.de/pylib/task.git
[submodule "mqtt"]
path = mqtt
url = https://git.mount-mockery.de/pylib/mqtt.git

View File

@ -20,4 +20,4 @@ if __name__ == '__main__':
while True: while True:
time.sleep(30) time.sleep(30)
#l.publish_states() l.publish_states()

1
mqtt Submodule

@ -0,0 +1 @@
Subproject commit cf97fa066cdff0e2f7eda0ff4d3c8c0f59c3f2ec

View File

@ -9,7 +9,7 @@ import config
import geo import geo
import json import json
import logging import logging
import paho.mqtt.client as mqtt import mqtt
import state_machine import state_machine
import task import task
import random import random
@ -319,18 +319,15 @@ class leyk(object):
RX_TOPIC_REESE_HOUSE RX_TOPIC_REESE_HOUSE
] ]
def __init__(self): def __init__(self):
self.__client__ = mqtt.Client("mqtt_leyk") # create client object self.__client__ = mqtt.mqtt_client(config.APP_NAME, config.MQTT_SERVER, 1883, config.MQTT_USER, config.MQTT_PASS)
self.__client__.on_message = self.__receive__ # attach function to callback self.__client__.add_callback(self.RX_TOPIC_BAKE_HOUSE, self.__rx_bake_house__)
self.__client__.username_pw_set(config.MQTT_USER, config.MQTT_PASS) # login with credentials self.__client__.add_callback(self.RX_TOPIC_BAKERY, self.__rx_bakery__)
try: self.__client__.add_callback(self.RX_TOPIC_MILL, self.__rx_mill__)
self.__client__.connect(config.MQTT_SERVER, 1883) # establish connection self.__client__.add_callback(self.RX_TOPIC_PLOENLEIN, self.__rx_ploenlein__)
self.__client__.loop_start() # start the loop self.__client__.add_callback(self.RX_TOPIC_REESE_HOUSE, self.__rx_reese_house__)
self.__topics__ = [] self.__client__.add_callback(self.RX_TOPIC_MODE, self.__rx_mode__)
for topic in self.RX_TOPICS:
self.__client__.subscribe(topic) # subscibe a topic
except (socket.timeout, OSError) as e:
logger.warning("Error while setting up mqtt instance and listener")
self.TOPIC_DATA = { self.TOPIC_DATA = {
self.TOPIC_BAKE_HOUSE: self.get_bake_house, self.TOPIC_BAKE_HOUSE: self.get_bake_house,
@ -368,22 +365,23 @@ class leyk(object):
self.publish(self.TOPIC_MODE_BOOL) self.publish(self.TOPIC_MODE_BOOL)
self.publish(self.TOPIC_STATE) self.publish(self.TOPIC_STATE)
def __receive__(self, client, userdata, message): def __rx_bake_house__(self, client, userdata, message):
logger.info("Received message %s with %s", message.topic, str(message.payload)) self.set_bake_house(message.payload == b'true')
if message.topic == self.RX_TOPIC_MODE:
self.set_mode(self.sm_mode.STATE_AUTOMATIC if message.payload == b'true' else self.sm_mode.STATE_MANUAL) def __rx_bakery__(self, client, userdata, message):
elif message.topic == self.RX_TOPIC_BAKE_HOUSE: self.set_bakery(message.payload == b'true')
self.set_bake_house(message.payload == b'true')
elif message.topic == self.RX_TOPIC_BAKERY: def __rx_mill__(self, client, userdata, message):
self.set_bakery(message.payload == b'true') self.set_mill(message.payload == b'true')
elif message.topic == self.RX_TOPIC_MILL:
self.set_mill(message.payload == b'true') def __rx_ploenlein__(self, client, userdata, message):
elif message.topic == self.RX_TOPIC_PLOENLEIN: self.set_ploenlein(message.payload == b'true')
self.set_ploenlein(message.payload == b'true')
elif message.topic == self.RX_TOPIC_REESE_HOUSE: def __rx_reese_house__(self, client, userdata, message):
self.set_reese_house(message.payload == b'true') self.set_reese_house(message.payload == b'true')
else:
logger.warning("Ignoring unknown mqtt topic %s", message.topic) def __rx_mode__(self, client, userdata, message):
self.set_mode(self.sm_mode.STATE_AUTOMATIC if message.payload == b'true' else self.sm_mode.STATE_MANUAL)
def publish_states(self): def publish_states(self):
for name in self.TOPIC_DATA: for name in self.TOPIC_DATA:
@ -392,7 +390,7 @@ class leyk(object):
def publish(self, topic): def publish(self, topic):
logger.info("Sending Leyk status information to mqtt %s = %s", topic, json.dumps(self.TOPIC_DATA[topic]())) logger.info("Sending Leyk status information to mqtt %s = %s", topic, json.dumps(self.TOPIC_DATA[topic]()))
try: try:
self.__client__.publish(topic, json.dumps(self.TOPIC_DATA[topic]())) self.__client__.send(topic, json.dumps(self.TOPIC_DATA[topic]()))
except (socket.timeout, OSError) as e: except (socket.timeout, OSError) as e:
logger.warning("Error while sending state information information") logger.warning("Error while sending state information information")