Hallo Allerseits,
nach längerem Warten auf die Lieferung aus China, sind meine neuen Sonoff-Geräte eingetroffen. Sie lassen sich via MQTT gut steuern und auch ihre Zuständen melden sie korrekt zurück.
Nun lese ich überall von TASMOTA_DEVICE, mit dem sich die Geräte sehr komfortabel bedienen lassen sollen. Ich bekomm's aber nicht hin. Vermutlich nur eine Kleinigkeit aber ich seh's nicht.
Zunächst mal die Fakten:
Bei meinem Test verwende ich einen Sonoff S26 mit Tasmota Firmware 6.2.1.18 (hab ich selbst kompiliert, die Ergebnisse waren mit einer offiziellen Firmware aber nicht anders). In den MQTT-Einstellungen des Sonoff habe ich topic auf sonoff_s26 gesetzt. Das full topic habe ich unverändert auf %prefix%/%topic%/ gelassen.
Der MQTT-Service, ein Mosquitto-Server, der auf einem Armbian-Linux läuft.
In Fhem haben ich das so eingerichtet:
define myBroker MQTT xx.xx.xx.xx:1883
attr myBroker room System
define mqtt_test_sonoff_s26 MQTT_DEVICE
attr mqtt_test_sonoff_s26 userattr room_map structexclude
attr mqtt_test_sonoff_s26 IODev myBroker
attr mqtt_test_sonoff_s26 devStateIcon ON:rc_GREEN:OFF OFF:rc_RED:ON
attr mqtt_test_sonoff_s26 publishSet ON OFF cmnd/sonoff_s26/POWER
attr mqtt_test_sonoff_s26 room TEST
attr mqtt_test_sonoff_s26 stateFormat state
attr mqtt_test_sonoff_s26 subscribeReading_state cmnd stat/sonoff_s26/POWER
Diese Konstellation funktioniert wie gesagt gut. Doch wenn ich mit diesen Einstellungen das TASMOTA_DEVICE in Fhem erstelle...
define test_sonoff_s26 TASMOTA_DEVICE sonoff_s26 %prefix%/%topic%
attr test_sonoff_s26 IODev myBroker
attr test_sonoff_s26 publishSet_.* 1
attr test_sonoff_s26 room TEST
...wird der Status nicht angezeigt.
In der Hoffnung, dort was zu finden, habe ich im Mosquitto-Log nachgeschaut und etwas gesehen, das eine Ursache sein könnte:
...
1541620864: Received PUBLISH from NetMQTTpm14065 (d0, q0, r0, m0, 'cmnd/sonoff_s26/POWER', ... (3 bytes))
1541620864: Sending PUBLISH to sonoff_s26 (d0, q0, r0, m0, 'cmnd/sonoff_s26/POWER', ... (3 bytes))
1541620864: Received PUBLISH from sonoff_s26 (d0, q0, r0, m0, 'stat/sonoff_s26/RESULT', ... (15 bytes))
1541620864: Received PUBLISH from sonoff_s26 (d0, q0, r0, m0, 'stat/sonoff_s26/POWER', ... (3 bytes))
1541620864: Sending PUBLISH to NetMQTTpm14065 (d0, q0, r0, m0, 'stat/sonoff_s26/POWER', ... (3 bytes))
1541620867: Received PUBLISH from NetMQTTpm14065 (d0, q0, r0, m0, 'cmnd/Power/sonoff_s26', ... (2 bytes))
1541620867: Received PUBLISH from NetMQTTpm14065 (d0, q0, r0, m0, 'cmnd/Status/sonoff_s26', ... (1 bytes))
1541620871: Received PINGREQ from sonoff_s26
...
Die rot markierte Sequenz wurde über mqtt_test_sonoff_s26 ausgelöst. Sie zeigt wie gesagt Wirkung.
Die blau markierte Sequenz stammt vom TASMOTA_DEVICE test_sonoff_s26 und bewirkt nicht.
Man sieht, dass bei der TASMOTA_DEVICE-Sequenz die Position von POWER und %topic% vertauscht sind.
Kann mir jemand sagen, wo ich in der Definition den Fehler gemacht habe?
Gruss Henrik
Tausche in der Steckdose "MQTT-Einstellungen" abschnitt "full topic" %prefix%/%topic%/ in %topic%/%prefix%/
Gruß Klaus
Der Tausch beider Variablen, lediglich in der Schaltdose, bringt keine Veränderung. Soweit ich das Zusammenspiel zwischen den Schaltdosen, MQTT und FHEM bisher verstanden habe, hätte ich das auch nicht anders erwartet. Nachdem ich dieses Setting jedoch auch im TASMOTA_DEVICE in FHEM einfügte ließ sich die Dose zumindest ein- und ausschalten. Der Status des Gerätes bleibt in FHEM weiterhin subscription acknowledged.
Ehrlich gesagt verstehe ich noch nicht warum die Definition %topic%/%prefix% funktioniert und %prefix%/%topic% nicht. Vielleicht kann's mir jemand bei Gelegenheit erklären. Leben könnte ich mit beiden Sequenzen. Darum vielen Dank an Klaus für den Tipp.
Der Status der Dose wird derzeit aber noch nicht korrekt in FHEM angezeigt, da nach wie vor keine Readings angezeigt werden. Anscheinend setzt das TASMOTA_DEVICE die erforderlichen Attribute beim Einrichten nicht selbst. Hat da noch jemand einen Tipp?
Hallo, was du meinst geht mit dem MQTT2_SERVER, das ist ein Fhem Modul, was einen MQTT Server bereit stellt: https://wiki.fhem.de/wiki/MQTT2-Module_-_Praxisbeispiele
https://forum.fhem.de/index.php/topic,91807.msg843136.html#msg843136
Das hat auch den Vorteil, das er die Geräte selbständig anlegt.
Bin inzwischen auf hohem Niveau verwirrt. Wenn ich meinen Mosquitto unter Linux abstelle und dafür den MQTT2_SERVER in FHEM starte funktionieren auch die Readings im TASMOTA_DEVICE. Versuche ich jedoch darüber die Schaltdose an- oder auszuschalten crashed FHEM mit der Meldung
Undefined subroutine &TASMOTA::DEVICE::send_publish called at ./FHEM/10_TASMOTA_DEVICE.pm line 185.
Was hast du genau gemacht und am besten poste mal ein list vom deinem Tasmota Device.
Im Grunde brauchst du nur den MQTT2_SERVER in Fhem zu erstellen, dann in diesem MQTT2_SERVER autocreate auf 1 stellen.
Im Tasmota Device gibst du dann die IP vom Fhem MQTT2_Server an. Das Tasmota Device sollte dann automatisch in Fhem angelegt werden.
Vorher am besten noch die alten Devices löschen, die du selbst erstellt hast.
Ich selbst habe das mit Tasmota noch nicht ausprobiert, nur mit Zigbee2mqtt und dort hat es problemlos funktioniert.
Zitat von: Henrik am 10 November 2018, 12:40:06
....
Der Status der Dose wird derzeit aber noch nicht korrekt in FHEM angezeigt, da nach wie vor keine Readings angezeigt werden. Anscheinend setzt das TASMOTA_DEVICE die erforderlichen Attribute beim Einrichten nicht selbst. Hat da noch jemand einen Tipp?
Hast du auch den Befehl "set mqtt_test_sonoff_s26 cmd status 0" abgesetzt?
Gruß Klaus
ZitatHast du auch den Befehl "set mqtt_test_sonoff_s26 cmd status 0" abgesetzt?
Ja, habe ist getan. Geändert hat sich darauf hin aber nichts.
Was kommt am Broker an? mosquitto_sub sollte da helfen (unabhängig davon, ob du mosquitto oder einen anderen Server im Einsatz hast).
Wenn es Mqtt2_Server sein sollte -was ich wie mark79 auch empfehlen würde - ist tasmota-device nicht das richtige client-Modul. Das wäre dann mqtt2_device. Würde ich auch mit externem Broker als client nehmen, dann mit mqtt2_client als io zum Broker.
Aber wie gesagt - erst mal checken, was der Broker an infos erhält...
Mit MQTT2 hat's nun hingehauen!
Der Knackpunkt war letztlich, dass ich den Namen des Gerätes (MQTT-Einstallungen/client) falsch definiert hatte. MQTT2 erwartet bei autocreate=1 eine Definition gemäß der Notation MQTT2_client. Da ich meine Schaltdose aber aus lauter Verzweiflung vor einigen Stunden nochmal komplette zurückgesetzt und neu konfiguriert hatte stand dort im Feld client noch/wieder der Initialwert DVES_0274C5 drin. Das konnte nicht gehen. Nachdem der auf sonoff_s26 geändert war, passte es wieder und die readingList wurden automatisch gefüllt.
sonoff_s26:stat/sonoff_s26/RESULT:.* { json2nameValue($EVENT) }
sonoff_s26:stat/sonoff_s26/POWER:.* POWER
sonoff_s26:tele/sonoff_s26/LWT:.* LWT
sonoff_s26:cmnd/sonoff_s26/POWER:.* POWER
sonoff_s26:tele/sonoff_s26/STATE:.* { json2nameValue($EVENT) }
Eine letzte Anpassung war dann noch nötig: Damit der Status korrekt angezeigt wird, musste ich das POWER in der zweiten Zeile in ein state ändern (sonoff_s26:stat/sonoff_s26/POWER:.* state)
Vielen Dank an alle die geholfen haben :-)