TASMOTA_DEVICE mqtt-Sequenz beeinflussen

Begonnen von Henrik Aalto, 07 November 2018, 21:17:18

Vorheriges Thema - Nächstes Thema

Henrik Aalto

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

kvolstorf

Tausche in der Steckdose "MQTT-Einstellungen" abschnitt "full topic" %prefix%/%topic%/ in %topic%/%prefix%/

Gruß Klaus

Henrik Aalto

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?

mark79

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.
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

Henrik Aalto

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.

mark79

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.
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

kvolstorf

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

Henrik Aalto

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.

Beta-User

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...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Henrik Aalto

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 :-)