NEWS
[geloest] MQTT an den Sonoff-Adapter senden
-
Hi,
ich habe bisher immer auf Tasmota gesetzt...so schön einfach. Nun will ich an den tasmota-Adapter Temperaturwerte aus dem RaspberryPi4 senden. Das ganze würde ich via Cron auslösen und dann alle 10 Minuten an den ioBroker senden. Aktuell ist noch nicht geplant irgendwas via MQTT zuschalten. Aber nicht ausgeschlossen.Ich kann via python the Luftfeuchtigkeit und Temperatur auf der cosole anzeigen lassen. Passt soweit. Nun will ich das mit MQTT in den ioBroker übertragen. Ich bin mir sicher das kann nict so schwer sein, eine Verbindung klappt... ein Objekt wurde auch erstellt... das wars.
Hier mein Python Script auf dem Raspberry:
import paho.mqtt.client as mqtt #import the client1 broker_address="192.168.178.55" print("creating new instance") client = mqtt.Client("P1") #create new instance client.username_pw_set("User", "Passwort") print("connecting to ioBroker") client.connect(broker_address) #connect to broker print("Subscribing to topic","sonoff") client.subscribe("sonoff/AM2320_Humidity") print("Publishing message to topic","sonoff/AM2320_Humidity") client.publish("sonoff/AM2320_Humidity",5)
So siehts im ioBroker aus:
Und so im Log:
Warum wird der Wert nicht im ioBroker geschrieben?
-
@oberfragger Um es gleich vorwegzunehmen - ich nutze nicht den sonoff Adapter, sondern normales MQTT. Allerdings möchte ich einfach ein paar Fragen stellen , weil ich durchaus auch Tasmota nutze und mir das "spanisch" vorkommt, dass Du hier selbst via cron irgendwas auslösen möchtest. Normalerweise hat tasmota eine MQTT Schnittstelle. Sollte sich eine Änderung in den Daten ergeben, dann sendet tasmota das automatisch. Zudem sendet tasmota automatisch einen Hearbeat an den MQTT-Broker. Also warum konfiguriert Du nicht einfach tasmota ordentlich mit den MQTT-Einstellungen?
-
@mickym Lass dich bitte nicht von "Tasmota" ablenken. Ich nutze auf diversen Sonoffs und ESPs etc. MQTT problemlos.
Nun möchte ich selbstständig Werte an den Sonoff-Adapter, meinetwegen auch an den MQTT-Adapter im ioBroker senden. Also keine vorgefertigte Lösung, wie sie Tasmota bietet.
Ich lese mit dem Raspberry (der noch andere Aufgaben übernimmt) einen Sensor aus. Die Sensorwerte möchte ich gern an den ioBroker-Adapter senden.
-
@oberfragger OK dann hat das aber mit Tasmota gar nichts zu tun. Vielmehr musst Du mit Deiner Software "MQTT" sprechen bzw. dessen Protokoll sprechen. Der Sonoff agiert ja was die Kommunikation betrifft - als MQTT Broker.
Hier ist meines Erachtens der Aufbau des Protokolls: http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html
bzw. dieses wiki: https://github.com/mqtt/mqtt.org/wiki
-
@mickym Bin schon den ganzen Abend am wühlen. Ich bräucht nur von -irgendjemanden- mal ein Beispiel was funktioniert. Also "reiner MQQT-Code".
So falsch kann ich doch nicht liegen bzw. ich verstehe nciht warum der Wert (der ja im ioBroker ankommt) einfach nicht reingeschrieben wird. -
@oberfragger Hier gibts eine MQTT client implementierung für Python - vielleicht hast Du das aber schon implementiert.
https://pypi.org/project/gmqtt/0.6.9/
Ich würde trotzdem lieber den reinen MQTT Broker zum Testen nehmen und keinen Sonoff Adapter, weil Du ja nicht weißt ob der nicht irgendwas macht, um "nicht tasmota" Geräte am Verbinden hindert.
-
@mickym Vermutlich haste recht dass ich vielleicht den richtigen Mqqt-Adapter nehmen sollte.
Habe hier ein Beispiel gefunden was mein Problem gut darstellt.
https://thingsboard.io/docs/samples/raspberry/temperature/Ich will aber ohne das thingsboard auskommen. Sieht aber so aus, als ob da sauch nur MQTT ist.
Ich glaube mittlerweile dass das Zauberwort wohl "payload" heisst. Ma weiter wühlen.
-
@mickym Boah. Leck...
Ja, mit dem MQTT-Adapter klappt es! Mal wieder paar Stunden vergeudet.Ich habe mal den Thingsboard-Code genommen und angepasst.
Jetzt habe ich ein Objekt da drin stehen. Denke mal ich kann problemlos die Werte einzeln übertragen. Zumindest sind die schon mal an der richten Stelle.import os import time import sys #import Adafruit_DHT as dht import paho.mqtt.client as mqtt import json THINGSBOARD_HOST = '192.168.178.55' ACCESS_TOKEN = 'DHT22_DEMO_TOKEN' # Data capture and upload interval in seconds. Less interval will eventually hang the DHT22. INTERVAL=2 sensor_data = {'temperature': 0, 'humidity': 0} next_reading = time.time() client = mqtt.Client("P2") # Set access token client.username_pw_set("user", "passwort") # Connect to ThingsBoard using default MQTT port and 60 seconds keepalive interval client.connect(THINGSBOARD_HOST, 1888, 60) client.loop_start() try: while True: # humidity,temperature = dht.read_retry(dht.DHT22, 4) # humidity = round(humidity, 2) # temperature = round(temperature, 2) humidity = 30 temperature = 20 # print(u"Temperature: {:g}\u00b0C, Humidity: {:g}%".format(temperature, humidity)) sensor_data['temperature'] = temperature sensor_data['humidity'] = humidity # Sending humidity and temperature data to ThingsBoard client.publish('AM2320', json.dumps(sensor_data), 1) next_reading += INTERVAL sleep_time = next_reading-time.time() if sleep_time > 0: time.sleep(sleep_time) except KeyboardInterrupt: pass client.loop_stop() client.disconnect()
-
@oberfragger Na das schaut doch gut aus. Glückwunsch!!!
Warum ich den Sonoff Adapter als problematisch empfunden habe, weil der sich ja bewusst mehr als nur als reiner MQTT Broker verhält bzw. nicht als Standardbroker verhält.
-
@mickym Jupp. Ich bin nun auch am überlegen ob ich alles Devices von Sonoff zu MQTT umziehen soll. Vermutlich werde ich aber alle neuen Devices direkt mit MQTT nutzen.
-
@oberfragger Ich nutze grundsätzlich keine Adapter, wenn Geräte standardmäßig mqtt sprechen. Das ist für mich nur eine zusätzliche Fehlerquelle - Du musst jedem dieser mqtt-Adapter einen eigenen Port gönnen - und bist ggf. darauf angewiesen, dass im Falle der Adapter halt spezifische Dinge kann, diese auch unterstützt werden. Hier ist halt auch der Nachteil, das Du selbst Hand anlegen musst - aber bei Dir seh ich da keine Probleme.
Ich nutze meinen MQTT-Broker für Sonoff, Shelly und owntracks und brauche dafür keine Adapter mehr. Ich hatte allerdings auch ein Problem den MQTT-Adapter als Broker zu verwenden. Deshalb läuft auf meiner Maschine noch ein mosquitto als Server und der MQTT- Adapter als Client und das nun seit längerer Zeit sehr stabil.