[HowTo] Sonoff POW an Fhem anbinden

Begonnen von Reinhart, 07 November 2016, 16:53:53

Vorheriges Thema - Nächstes Thema

P.A.Trick

Zitat von: Reinhart am 07 Februar 2017, 21:05:39
ja hat ja dev0 uns schon geschrieben das es auch anders geht, aber das ist auch ein Aufwand und das bei jeder einzelnen Konfiguration. Ich tu mir beim patchen des Sketches leichter, obwohl ich das auch noch nie gemacht habe, aber einlesen muss man sich überall.

Im Augenblick besteht aber auch kein wirklicher Bedarf, denn die Version Sonoff-MQTT-OTA-Arduino  (wie im Wiki beschrieben) funktioniert ja problemlos und ist ja in etwa auf dem selben Entwicklungsstand was Devices und Modelle betrifft. Wer unbedingt Tasmota haben will muss halt patchen oder sich mit JSON Filter näher befassen.

LG

Nun ich habe deinen Tipp befolgt und bin auch auf MQTT umgestiegen. Was mir aber auffällt, das die MQTT Bridge noch wirklich zuverlässig arbeitet. Restarte ich zum Beispiel den mosquitto Server, dann ist einer FHEM Verbindung, ohne Neustart, nicht mehr möglich. Ich "traue" der MQTT Integration in FHEM leider noch nicht so sehr.......ist es nur bei mir so?

BTW: Vielen Dank an Reinhart für den tollen Wiki Eintrag!
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

Reinhart

ich habe das jetzt bei mir nachgestellt, also den Mosquitto gestoppt, dann versucht einen Befehl in Fhem auszuführen. Der Befehl bleibt dann natürlich hängen.
Dann Mosquitto wieder gestartet und versucht einen erneuten Befehl abzusetzen, fehlgeschlagen. Dann den Taster am Sonoff betätigt und am Broker mitgelogt. Der MQTT String kommt an und Fhem synchronisiert sofort wieder und zeigt mir den aktuellen Status des Sonoff an.

D.h., die Kommunikation zu Fhem funktioniert erst wieder, wenn die ersten Meldungen (stat oder tele) vom einem Device eintreffen. So ist das Verhalten zumindest bei mir. Ich bin aber ehrlicherweise noch nie auf die Idee gekommen den Mosquitto zu stoppen, der läuft seit Monaten ohne Probleme durch. Das einzige was ich am Broker mache, ich logge des Öfteren mit um zu sehen was die Devices so schicken, speziell wenn ich was neues einbinde. Den Raspberry (wo auch der Broker läuft) boote  ich aber 3-4 mal pro Jahr um zu sehen ob er nach einem Netzausfall noch fehlerfrei starten würde und schaue mir die Logs dann durch.

Bei mir läuft der Broker und FHEM auf demselben Raspi.

pi@raspberry ~ $ sudo service mosquitto status
[ ok ] mosquitto is running.
pi@raspberry ~ $ sudo service mosquitto stop
[ ok ] Stopping network daemon:: mosquitto.
pi@raspberry ~ $ sudo service mosquitto start
[ ok ] Starting network daemon:: mosquitto.
pi@raspberry ~ $ mosquitto_sub -d -v -t \#
Received CONNACK
Received SUBACK
Subscribed (mid: 1): 0
Received PUBLISH (d0, q0, r0, m0, 'stat/TestSwitch/RESULT', ... (14 bytes))
stat/TestSwitch/RESULT {"POWER":"ON"}
Received PUBLISH (d0, q0, r0, m0, 'stat/TestSwitch/POWER', ... (2 bytes))
stat/TestSwitch/POWER ON
Received PUBLISH (d0, q0, r0, m0, 'stat/TestSwitch/RESULT', ... (15 bytes))
stat/TestSwitch/RESULT {"POWER":"OFF"}
Received PUBLISH (d0, q0, r0, m0, 'stat/TestSwitch/POWER', ... (3 bytes))
stat/TestSwitch/POWER OFF

die Meldung "stat/TestSwitch/POWER ON" kommt vom händischen Tastendruck und synchronisiert sofort die Verbindung zu FHEM.

LG
FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

dev0

Zitat von: Reinhart am 07 Februar 2017, 21:05:39
ja hat ja dev0 uns schon geschrieben das es auch anders geht, aber das ist auch ein Aufwand und das bei jeder einzelnen Konfiguration.

Anscheinend gibt es ja Bedarf für einen Mechnismus, der den (Arends?) JSON String in Readings schreibt. Da das nicht wirklich kompliziert ist, könnte ich Euch das in eine generische Sub verpacken, die dann per Notify aufgerufen werden könnte und nicht weiter angepasst werden muß.

Wird der JSON String immer in ein Reading mit dem gleichen Namen geschrieben oder ist das variable?

JoWiemann

Hm, mit dem Modul httpmod kann ich doch schon Jason parsen!


Gesendet von iPad mit Tapatalk

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

dev0

Zitat von: JoWiemann am 08 Februar 2017, 14:20:21
Hm, mit dem Modul httpmod kann ich doch schon Jason parsen!

Ich hatte den Eindruck, dass für die Arendts Firmware das MQTT Modul genutzt wird, dass dieses Feature nicht bietet. Den Bezug zum HTTPMOD Modul verstehe ich gerade nicht, aber wenn mein Angebot damit überflüssig ist, dann spare ich mir gerne die Zeit.

JoWiemann

Es war nur der Hinweis, wenn ein Webservice JSON liefert, dann gibt es ein Modul. Wenn nicht, dann...


Gesendet von iPad mit Tapatalk

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

JoWiemann

Ok, Arendt macht nur MQTT. Dann verwirrt mich aber JSON, oder wolltest Du das in Arendts Sketch implementieren?


Gesendet von iPad mit Tapatalk

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

dev0


JoWiemann

Ok, mein Fehler.


Gesendet von iPad mit Tapatalk

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

JoWiemann

Zitat von: Mickbaer am 06 Februar 2017, 02:30:48
Hallo,
zuerst mal ein großes Lob an ALLE, die hier an dieser tollen Lösung mitgewirkt haben.

Ich habe auf die Software Version 3.9.11 20170204 (Tasmato)umgestellt.
Das Platformio Package runter geladen,
userconfig.h meine WiFi Daten angepasst,
compiliert und aufs Sonoff Pow runtergeladen
alles Super gelaufen, läuft, lässt sich einstellen,
MQTT subscribes auf das neue Format angepasst,
FHEM kommt alles an und lässt sich auch schalten.

Ab Version 3.9 haben sich die MQTT Topic's verändert z.B.
von:
CURRENT  0.000 2017-02-05 18:33:46

auf:
ENERGY
{"Time":"2017-02-06T02:14:52", "Yesterday":"0.424", "Today":"0.145", "Period":0, "Power":0, "Factor":"0.00", "Voltage":227, "Current":"0.000"}

Meine Frage ist,
wie bekomme ich den String in den Geschweiften Klammern, in FHEM zerlegt, damit ich z.B. Current  auswerten / weiter verarbeiten kann.
Für einen Hinweis wäre Ich dankbar.
Grüße aus Berlin sendet der Mickbaer.
Hm, das kannst Du über ein userReading machen. Den String kannst du mit einer regular Expression oder mit der Perl Funktion split() zerlegen.



Gesendet von iPad mit Tapatalk

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

dev0

Zitat von: JoWiemann am 08 Februar 2017, 15:39:50
Hm, das kannst Du über ein userReading machen. Den String kannst du mit einer regular Expression oder mit der Perl Funktion split() zerlegen.

Genau das hatte ich angeboten, als generische und fehlertolerate Sub bereitzustelllen, die alle gelieferten Werte in Readings schreiben würde. Wird aber anscheinend nicht benötigt und ich bin aus der Diskussion raus.

SamNitro

Zitat von: dev0 am 08 Februar 2017, 15:51:09
Genau das hatte ich angeboten, als generische und fehlertolerate Sub bereitzustelllen, die alle gelieferten Werte in Readings schreiben würde. Wird aber anscheinend nicht benötigt und ich bin aus der Diskussion raus.

Schade ich fände es gut wenn es so etwas geben würde. Ich kenne mich damit zu wenig aus.
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

ZeitlerW

#117
Hi dev0,

.... ganz im Gegenteil. Ein  sub, die automatisch aus dem json
Zitat
ENERGY
{"Time":"2017-02-06T02:14:52", "Yesterday":"0.424", "Today":"0.145", "Period":0, "Power":0, "Factor":"0.00", "Voltage":227, "Current":"0.000"}
Userreadings erzeugt z.B.
Zitat
ENERGY_Time
ENERGY_Yesterday
ENERGY_Today
ENERGY_Period
ENERGY_Power
ENERGY_Factor
ENERGY_Voltage
fände ich mehr als erstrebenswert!

Idealerweise mit Integration in MQTT_DEVICE :-[

lG
Wolfgang


SamNitro

bekomme aber die werte vom Pow nicht über MQTT

In der console kommt das an:
16:14:46 MQTT: tele/sonoff_pow/STATE = {"Time":"2017-02-08T16:14:46", "Uptime":1, "POWER":"ON", "Wifi":{"AP":1, "SSID":"PC", "RSSI":82}}
16:14:46 RSLT: tele/sonoff_pow/ENERGY = {"Time":"2017-02-08T16:14:46", "Yesterday":"0.000", "Today":"0.005", "Period":0, "Power":38, "Factor":"0.98", "Voltage":230, "Current":"0.169"}


das erste ist MQTT und kann ich abrufen aber das wichtige 2te ist RSLT, wie bekomme ich das zu FHEM übertragen?
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

Reinhart

@SamNitro

schau mal hier, dann geht es wieder:  https://forum.fhem.de/index.php?topic=66714.new#new

@dev0
Danke für dein Angebot, natürlich wäre das eine tolle Sache ein Tool zu haben welches Readings aus dem Pseudo JSON String extrahieren und befüllen könnte. Ich bin zwar nicht unbedingt der Freund von vielen notifys, das dürfte aber der einfachste Weg sein nach eintreffen neuer Daten darauf zu reagieren.

Genau aus diesem Grund (notify) bin ich ja den Weg gegangen und baue LEGACY im Sketch wieder ein, weil hier das Problem an der Wurzel gepackt wird. Bei dem heutigen Versionswechsel habe ich dazu gut 20 Minuten gebraucht, waren aber nur geringfügige Korrekturen in einer Datei, sonst wird es länger.

Ich habe auch schon überlegt sowas in die 99_myUtils zu packen, ist aber für meine Perl Kenntnisse zu hoch für mich, da es doch mehr oder weniger ein Parser werden muss. Die Strings sind zwar immer nach dem gleichen Muster aufgebaut, können aber mehrfach verschachtelte geschweifte Klammern haben (Untergruppen).

tele/sonoffpow3/STATE = {"Time":"2017-02-08T19:18:44", "Uptime":5, "LIGHT":"ON", "Wifi":{"AP":1, "SSID":"myssid", "RSSI":72}}

hier ist so eine, die Gruppe Wifi hat Readings wie AP,SSID, RSSl. Der Doppelpunkt ist immer der Trenner zwischen Readingnamen und dem Wert, außer der Doppelpunkt steht in einem String wie bei der Zeit oder er trennt den Gruppenbegriff wie Wifi, dann folgt allerdings eine {.

Wenn du dir wirklich die Mühe machen willst, stelle ich dir gerne einige Strings zur Verfügung, bzw. haben eh schon einige die gepostet.

LG
Reinhart
FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa