Super. Danke.
Es hat jedoch eine Planänderung bei mir gegeben. Ich werde mir noch H801 kaufen und eine LED Ansteuerung nicht mehr selber bauen. Deshalb benötige ich die Logik nicht mehr.
Das Gute ist aber, das ich getestet habe und MQTT aus einer Logik heraus prima funktioniert ;-)
Ankündigung
Einklappen
Keine Ankündigung bisher.
Nutzung des Mqtt Modules aus eigenem Plugin
Einklappen
X
-
Echo So, jetzt gibt es auch im Develop Branch eine Doku zur Nutzung des mqtt Moduls:
Es gibt eine von SmartPlugin abgeleitete Klasse MqttPlugin, die die Nutzung von MQTT in Plugins einfach macht: Class MqttPlugin
Dazu gibt es auch ein Sample Plugin
Damit solltest Du jetzt auch in der Lage sein nicht nur in Logiken MQTT zu nutzen.
- 1 Likes
Einen Kommentar schreiben:
-
Schreib mal deine logeinträge anders. Das nimmt dir dann das type checking ab:
Code:logger.debug('tasmotaPCA9685 triggered by {}'.format(trigger_soruce))
- 1 Likes
Einen Kommentar schreiben:
-
Zitat von Msinn Beitrag anzeigenIch habe nochmal gecheckt. Ich habe alle Modifikationen auf github eingecheckt. Hast Du auch alles vom develop ausgecheckt?Code:git pull remote: Enumerating objects: 41, done. remote: Counting objects: 100% (41/41), done. remote: Compressing objects: 100% (5/5), done. Unpacking objects: 100% (26/26), done. remote: Total 26 (delta 21), reused 26 (delta 21), pack-reused 0 From git://github.com/smarthomeNG/smarthome c66e270..3b303e5 develop -> origin/develop Updating c66e270..3b303e5 Fast-forward dev/sample_plugin/__init__.py | 6 ++++++ lib/model/mqttplugin.py | 23 +++++++++++++++-------- lib/model/smartplugin.py | 6 ++++++ lib/module.py | 4 +++- lib/plugin.py | 4 +++- modules/http/__init__.py | 8 ++++---- modules/mqtt/__init__.py | 6 +++--- 7 files changed, 40 insertions(+), 17 deletions(-)
Test läuft...
Code:Exception: Can't convert 'NoneType' object to str implicitly Traceback (most recent call last): File "/usr/local/smarthome/lib/scheduler.py", line 527, in _task exec(obj.bytecode) File "/usr/local/smarthome/logics/tasmotaPCA9685.py", line 31, in <module> logger.debug('tasmotaPCA9685 triggered by '+trigger_source) TypeError: Can't convert 'NoneType' object to str implicitly
Vielen, vielen Dank!
Einen Kommentar schreiben:
-
Ich habe nochmal gecheckt. Ich habe alle Modifikationen auf github eingecheckt. Hast Du auch alles vom develop ausgecheckt?
Einen Kommentar schreiben:
-
Wenn Du ein eigenes mqtt Objekt erzzeugen willst, kannst Du das zum testen folgendermaßen tun:
Code:from lib.module import Modules mqtt2 = Modules.get_instance().get_module('mqtt')
Denke bei dem Test nur daran mqtt2 beim Aufruf an die Funktionen zu übergeben (statt mqtt)
Einen Kommentar schreiben:
-
Die Zeile habe ich inzwischen wieder auskommentiert. Und 5 Minuten nach dem Reload meiner Logik gewartet. Der Fehler erscheint leider immer noch im Log.
Code:logics.TasmotaPCA9685 MQTT module is not loaded or not yet initialized
Code:#!/usr/bin/env python3 from lib.item import Items items = Items.get_instance() def logic_publish_topic(logger, mqtt, logic, topic, payload): logger.info("Function '{}()' - called by '{}()' in logic '{}'".format(inspect.stack()[0][3], inspect.stack()[1][3], logic.name)) if mqtt.publish_topic(logic.name, topic, payload): logger.info("Function '{}()' - test-topic was published".format(inspect.stack()[0][3], inspect.stack()[1][3])) else: logger.warning("Function '{}()' - test-topic was NOT published".format(inspect.stack()[0][3], inspect.stack()[1][3])) def logic_subscribe_topic(logger, mqtt, logic, topic, payload_type='str'): logger.info("Function '{}()' - called by '{}()' in logic '{}'".format(inspect.stack()[0][3], inspect.stack()[1][3], logic.name)) mqtt.subscribe_topic(logic.name, topic, None, payload_type, logic.name) # logic main-code starts here logger.info("Triggered: trigger['source'] = {}, trigger[by] = {}, trigger[value] = {}".format(trigger['source'], trigger['by'], trigger['value']) ) if mqtt is None: # no MQTT support available logger.error("MQTT module is not loaded or not yet initialized") elif trigger['source'] == 'mqtt': ... <- ab hier ist es erst einmal irrelevant
Einen Kommentar schreiben:
-
Ja, das schaut gut aus. Das mqtt Objekt für die Logiken wird vom Scheduler bereit gestellt. Da kann nur None rauskommen, wenn der Scheduler das Modul mqtt nicht als initialisiertes Objekt findet. ???
Was ich gerade in Deiner Logik sehe:
Code:mqtt = sh.get_module('mqtt')
Einen Kommentar schreiben:
-
Zitat von Msinn Beitrag anzeigenNein, das ist schon da. Hast Du das mqtt Modul in /etc/module.yaml konfiguriert?
Ja, das Modul ist geladen:
Code:2020-01-05 11:47:44 INFO Main Modules: Loaded module 'http' (class 'Http') v1.6.0: Modul zur Implementierung von Backend-Webinterfaces für Plugins 2020-01-05 11:47:44 INFO Main Loading '/usr/local/smarthome/modules/mqtt/module.yaml' to 'OrderedDict' 2020-01-05 11:47:44 INFO Main module 'mqtt': Metadata paramlist = '['broker_host', 'broker_port', 'broker_monitoring', 'qos', 'last_will_topic', 'last_will_payload', 'birt$ 2020-01-05 11:47:44 INFO Main module 'mqtt': has no item-struct definitions in metadata 2020-01-05 11:47:44 INFO Main Loading module 'Mqtt': args = '{'module_name': "'mqtt'"}' 2020-01-05 11:47:44 INFO Main Loading '/usr/local/smarthome/modules/mqtt/locale.yaml' to 'dict' 2020-01-05 11:47:44 INFO Main module 'mqtt': value not found in plugin configuration file for parameter 'broker_host' -> using default value '127.0.0.1' instead 2020-01-05 11:47:44 INFO Main module 'mqtt': value not found in plugin configuration file for parameter 'broker_port' -> using default value '1883' instead 2020-01-05 11:47:44 INFO Main module 'mqtt': value not found in plugin configuration file for parameter 'broker_monitoring' -> using default value 'False' instead 2020-01-05 11:47:44 INFO Main module 'mqtt': value not found in plugin configuration file for parameter 'qos' -> using default value '1' instead 2020-01-05 11:47:44 INFO Main module 'mqtt': value not found in plugin configuration file for parameter 'last_will_topic' -> using default value '' instead 2020-01-05 11:47:44 INFO Main module 'mqtt': value not found in plugin configuration file for parameter 'last_will_payload' -> using default value '' instead 2020-01-05 11:47:44 INFO Main module 'mqtt': value not found in plugin configuration file for parameter 'birth_topic' -> using default value '' instead 2020-01-05 11:47:44 INFO Main module 'mqtt': value not found in plugin configuration file for parameter 'birth_payload' -> using default value '' instead 2020-01-05 11:47:44 INFO Main _get_definition_defaultvalue: default value is 'None*' -> None 2020-01-05 11:47:44 INFO Main module 'mqtt': value not found in plugin configuration file for parameter 'bool_values' -> using default value 'None' instead 2020-01-05 11:47:44 INFO Main module 'mqtt': value not found in plugin configuration file for parameter 'user' -> using default value '' instead 2020-01-05 11:47:44 INFO Main module 'mqtt': value not found in plugin configuration file for parameter 'password' -> using default value '' instead 2020-01-05 11:47:44 INFO Main Connecting to broker '127.0.0.1:1883'. Starting mqtt client 'name.MQTT-module' 2020-01-05 11:47:44 INFO Main Modules: Loaded module 'Mqtt' (class 'Mqtt') v1.7.0: Modul implementiert das MQTT Protokoll zur Nutzung in Logiken und Plugins 2020-01-05 11:47:44 INFO Main Loaded Modules: ['Mqtt', 'http'] 2020-01-05 11:47:44 INFO Main Start Modules 2020-01-05 11:47:44 INFO Main Init Plugins 2020-01-05 11:47:44 INFO Main Loading '/usr/local/smarthome/etc/plugin.yaml' to 'OrderedDict' 2020-01-05 11:47:44 INFO paho_MQTT module for SmartHomeNG Connection returned result 'Connection Accepted.' (userdata=None) 2020-01-05 11:47:44 INFO paho_MQTT module for SmartHomeNG self.topics = {} 2020-01-05 11:47:44 INFO paho_MQTT module for SmartHomeNG Connected to broker 'mosquitto version 1.6.8' at address 127.0.0.1:1883 2020-01-05 11:47:45 INFO Main Load plugins
Einen Kommentar schreiben:
-
Bei mir sieht die Section so aus:
Code:mqtt: module_name: mqtt # broker_host: smarthomeng.local broker_monitoring: true # qos: 1 # acl: '' last_will_topic: devices/shng-module/$online last_will_payload: 'False' birth_topic: devices/shng-module/$online birth_payload: 'True' # bool_values: ['Falsch', 'Wahr'] user: xxx password: yyy
Code:mqtt: module_name: mqtt
mqtt ist None, solange keine Verbindung zum Broker besteht.
Einen Kommentar schreiben:
-
Zitat von Echo Beitrag anzeigenWie bekomme ich mqtt in die Logic hinein? Muss ich es erst laden?
Nein, das ist schon da. Hast Du das mqtt Modul in /etc/module.yaml konfiguriert?
Einen Kommentar schreiben:
-
Ich bin jetzt doch wieder bei einer Logik anstatt ein Plugin zu nutzen.
Wie bekomme ich mqtt in die Logic hinein? Muss ich es erst laden?
Code:#!/usr/bin/env python3 from lib.item import Items items = Items.get_instance() def logic_publish_topic(logger, mqtt, logic, topic, payload): logger.info("Function '{}()' - called by '{}()' in logic '{}'".format(inspect.stack()[0][3], inspect.stack()[1][3], logic.name)) if mqtt.publish_topic(logic.name, topic, payload): logger.info("Function '{}()' - test-topic was published".format(inspect.stack()[0][3], inspect.stack()[1][3])) else: logger.warning("Function '{}()' - test-topic was NOT published".format(inspect.stack()[0][3], inspect.stack()[1][3])) def logic_subscribe_topic(logger, mqtt, logic, topic, payload_type='str'): logger.info("Function '{}()' - called by '{}()' in logic '{}'".format(inspect.stack()[0][3], inspect.stack()[1][3], logic.name)) mqtt.subscribe_topic(logic.name, topic, None, payload_type, logic.name) # try: mqtt = sh.get_module('mqtt') # except: # mqtt = None # logic main-code starts here logger.info("Triggered: trigger['source'] = {}, trigger[by] = {}, trigger[value] = {}".format(trigger['source'], trigger['by'], trigger['value']) ) if mqtt is None: # no MQTT support available logger.error("MQTT module is not loaded or not yet initialized")
Einen Kommentar schreiben:
-
Zitat von Msinn Beitrag anzeigenDa hat sich zum Master aber kaum was verändert?
Einen Kommentar schreiben:
-
Zitat von Echo Beitrag anzeigenich bekomme aktuell die Abhängigkeiten des develop nicht zum laufen.
Einen Kommentar schreiben:
-
Danke schön.
ich bekomme aktuell die Abhängigkeiten des develop nicht zum laufen. Nach langer Zeit (halbe Stunde oder so) bricht ein install der requirements ab :-(
Habe gerade die Meldungen nicht zur Hand, aber ich versuche SH auf einem OrangePI mit Armbian zum fliegen zu bekommen.
Einen Kommentar schreiben:
Einen Kommentar schreiben: