stateFormat - Syntax für DHT22 mit Sonoff Basic und Tasmota

Begonnen von romarira, 15 August 2018, 19:58:15

Vorheriges Thema - Nächstes Thema

romarira

Hallo,
ich habe an einen Sonoff Basic mit Tasmota-Software einen DHT22 Temperatur- und Feuchtigkeitsfühler angeschlossen.

Nach einer Anleitung in einem Youtube-Video und dem FHEM-Wiki-Beitrag https://wiki.fhem.de/wiki/Sonoff#Software_Anpassung_DHT22_in_FHEM habe ich die Geräte eingebunden und der Sensor zeigt mir auch Temperatur und Feuchtigkeit an. Anders als im Wiki-Beitrag werden mir aber deutsche Bezeichnungen angezeigt.

Ich möchte nun über stateFormat die Anzeige anpassen und mir unter STATE angepasst anzeigen lassen. Muster: 15,0 Grad 40 % Luftfeuchtigkeit

Ich habe jetzt schon alles mögliche getestet, aber stateFormat will partout die Werte des Sensors nicht mit anzeigen.

Ich habe die Variable $name durch "DHT22" ersetzt, durch "Sensor" usw. Ich habe die 0 hinter dem Komma mal durch eine 1 und eine 4 ersetzt und bekomme dann 1 und 4 angezeigt. Das bedeutet, dass mir anstelle des Sensorwertes immer die Zahl hinter dem Komma im stateFormat angezeigt wird.

Auch die Begriffe Temperatur in temperature und Feuchtigkeit in humidity zu ändern, brachte keinen Erfolg.

Irgendeiner einen Tipp, was ich hier falsch mache?

Im angehängten Bild sieht man die Werte des Devices.

Vielen Dank schon mal für die Unterstützung.
Intel NUC, FHEM VMe auf debian Proxmox-Server, Sonoff S20/Basic/POW, Shelly 1 & 2.5
Homematic IP-HK-Thermostate, Wandthermostat, FTK
FHT80b-HK-Thermostate und FTK
Raspberrymatic auf separater VM
Unifi/Ubiquiti-Wlan-Netzwerk, DHCP-Server über Firtzbox

betateilchen

Naja, Du verwendest ReadingVal() für readings, die es überhaupt nicht gibt. Das kann nicht funktionieren.

Zuerst solltest Du aus dem JSON-String, der im reading "Sensor" steht, einzelne readings erzeugen, dann klappts auch mit stateFormat.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

romarira

Vielen Dank für den Hinweis.

Ich habe mal im Forum nach Umwandlung JSON in Readings gesucht und bin auf folgenden Beitrag gestoßen: https://forum.fhem.de/index.php?topic=66761.0

Ich habe das dann mit meinen Werten eingegeben
define n_j2r notify KellerROMATemp:Sensor:.* { j2r($NAME,$EVENT) }
und dann im Eventlog Fehlermeldungen gesehen.

Ich vermutete, dass es daran lag, dass JSON nicht oder nicht richtig installiert war. Also habe ich über den cpan-Befehl noch JSON installiert.

Nach dem Neustart waren die Fehlermeldungen weg und ich sehe im Notify als state "active".

Was ich aber nicht sehe, sind Readings mit den Bezeichnungen Temperatur und Feuchtigkeit.

Bin ich falsch vorgegangen?

Wie ihr vielleicht an meinen Fragen seht, bin ich wirklich kein FHEM-Experte.
Intel NUC, FHEM VMe auf debian Proxmox-Server, Sonoff S20/Basic/POW, Shelly 1 & 2.5
Homematic IP-HK-Thermostate, Wandthermostat, FTK
FHT80b-HK-Thermostate und FTK
Raspberrymatic auf separater VM
Unifi/Ubiquiti-Wlan-Netzwerk, DHCP-Server über Firtzbox

betateilchen

Zitat von: romarira am 15 August 2018, 21:17:58
Was ich aber nicht sehe, sind Readings mit den Bezeichnungen Temperatur und Feuchtigkeit.
Bin ich falsch vorgegangen?

Probier mal folgendes - funktioniert aber nur mit einer ganz aktuellen Version von FHEM, also ggf. ein Update vorher machen!


define n_j2r notify KellerROMATemp:Sensor:.* { json2reading('KellerROMATemp',$EVENT) }


Die readings sollten erzeugt werden, wenn das nächste Mal Daten von Deinem Sensor kommen.
Falls es nicht funktioniert, bitte ins Logfile schauen und die Fehlermeldungen hier posten.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

romarira

Das Update von FHEM hatte ich vor der Installation von JSON schon gemacht.
Ich habe den Befehl jetzt so eingegeben, aber ich finde keine Readings.
Um auszuschließen, dass ich mich nur zu blöd anstelle und an den falschen Stellen suche, wäre es vielleicht gut, mir den HInweis zu geben, wo ich suchen muss  :-[

Im Logfile taucht kein Fehler auf. Da waren aber Fehler vorhanden, als der Befehl noch mit j2r anstelle json2reading geschrieben wurde.

Hier die Ausgabe zu n_j2r
Internals:
   CFGFN     
   DEF        KellerROMATemp:Sensor:.* { json2reading('KellerROMATemp',$EVENT) }
   NAME       n_j2r
   NOTIFYDEV  KellerROMATemp
   NR         471
   NTFY_ORDER 50-n_j2r
   REGEXP     KellerROMATemp:Sensor:.*
   STATE      2018-08-15 22:01:49
   TYPE       notify
   READINGS:
     2018-08-15 21:51:57   state           active
Attributes:


Hier die Ausgabe zu KellerROMATemp

Internals:
   IODev      Mosquitto
   NAME       KellerROMATemp
   NR         356
   STATE      Temperatur: "Temperatur" C - Feuchtigkeit: "Feuchtigkeit" %
   TYPE       MQTT_DEVICE
   READINGS:
     2018-08-15 22:01:49   Sensor          {"Zeit":"2018-08-15T21:01:49", "DHT22":{"Temperatur":22.9, "Feuchtigkeit":60.5}, "TempUnit":"C"}
     2018-08-15 22:01:49   transmission-state incoming publish received
   message_ids:
   sets:
   subscribe:
     Smarthome/Keller/Ventilator/tele/SENSOR
   subscribeExpr:
     ^Smarthome\/Keller\/Ventilator\/tele\/SENSOR$
   subscribeQos:
     Smarthome/Keller/Ventilator/tele/SENSOR 0
   subscribeReadings:
     Smarthome/Keller/Ventilator/tele/SENSOR:
       cmd       
       name       Sensor
Attributes:
   IODev      Mosquitto
   icon       temperature_humidity
   room       Sensoren,Keller
   subscribeReading_Sensor Smarthome/Keller/Ventilator/tele/SENSOR


Der angezeigte STATE stammt noch aus den vorhergehenden Versuchen. Kann den nicht löschen.
Intel NUC, FHEM VMe auf debian Proxmox-Server, Sonoff S20/Basic/POW, Shelly 1 & 2.5
Homematic IP-HK-Thermostate, Wandthermostat, FTK
FHT80b-HK-Thermostate und FTK
Raspberrymatic auf separater VM
Unifi/Ubiquiti-Wlan-Netzwerk, DHCP-Server über Firtzbox

betateilchen

Zitat von: romarira am 15 August 2018, 22:08:15
Um auszuschließen, dass ich mich nur zu blöd anstelle und an den falschen Stellen suche, wäre es vielleicht gut, mir den HInweis zu geben, wo ich suchen muss

naja, die readings sollten logischerweise in dem device auftauchen, wo sie hingehören: KellerROMATemp

Probier mal das notify mit $EVTPART1 anstatt $EVENT, das hat bei mir schonmal geholfen ein ähnliches Problem zu lösen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

romarira

ZitatProbier mal das notify mit $EVTPART1 anstatt $EVENT, das hat bei mir schonmal geholfen ein ähnliches Problem zu lösen.

Habe ich probiert, leider auch ohne Erfolg.
Ich habe dann das Device KellerROMATemp mal gelöscht und (mit anderem Namen) neu angelegt um auszuschließen, dass evtl. in der Anlage des Device noch ein Bug drin ist. Auch ohne Erfolg. Sowohl mit $EVTPART1 wie auch mit $EVENT.

Daraufhin habe ich mir im Logfile noch einmal die Fehlermeldung vor der Umstellung von j2r auf json2reading angeschaut. Da tauchen diese $EVENT auf. Hilft dir die Fehlermeldung vielleicht weiter?

2018.08.15 21:46:48 1: ERROR evaluating my $EVTPART0='Sensor:';my $TYPE='MQTT_DEVICE';my $EVTPART2='"DHT22":{"Temperatur":22.9,';my $NAME='KellerROMATemp';my $EVTPART3='"Feuchtigkeit":60.5},';my $EVTPART4='"TempUnit":"C"}';my $SELF='n_j2r';my $EVENT='Sensor: {"Zeit":"2018-08-15T20:46:48", "DHT22":{"Temperatur":22.9, "Feuchtigkeit":60.5}, "TempUnit":"C"}';my $EVTPART1='{"Zeit":"2018-08-15T20:46:48",';{ j2r($NAME,$EVENT) }: Undefined subroutine &main::j2r called at (eval 9274) line 1.
Intel NUC, FHEM VMe auf debian Proxmox-Server, Sonoff S20/Basic/POW, Shelly 1 & 2.5
Homematic IP-HK-Thermostate, Wandthermostat, FTK
FHT80b-HK-Thermostate und FTK
Raspberrymatic auf separater VM
Unifi/Ubiquiti-Wlan-Netzwerk, DHCP-Server über Firtzbox

betateilchen

Die $EVTPARTx die da geliefert werden, sind komplett zerstückelt. Deshalb funktioniert das mit dem Übertragen in die readings nicht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

romarira

Bedeutet
Zitatkomplett zerstückelt
, dass ich die Werte dann gar nicht aufgeteilt bekomme?

Falls es doch geht: Ich möchte das gerne verstehen, was ich da so mache. Ich habe schon einiges gegoogelt und hier im Forum gesucht. Ich finde aber nichts, wo für einen Laien gut erklärt wird, wie ich aus einem Reading, Werte extrahiere. Hast du vielleicht einen Link für mich, wo das gut erklärt wird?

Vielleicht noch einen Satz zum Hintergrund, was ich überhaupt erreichen will.

Der Sensor DHT22 hängt an einem Sonoff im Keller. Abhängig von dem Feuchtigkeitswert und der Temperatur möchte ich, dass sich der Ventilator einschaltet oder aus bleibt.
Dazu brauche ich halt die Temperatur- und Feuchtigkeitswerte um diese "weiterzuverarbeiten".
Intel NUC, FHEM VMe auf debian Proxmox-Server, Sonoff S20/Basic/POW, Shelly 1 & 2.5
Homematic IP-HK-Thermostate, Wandthermostat, FTK
FHT80b-HK-Thermostate und FTK
Raspberrymatic auf separater VM
Unifi/Ubiquiti-Wlan-Netzwerk, DHCP-Server über Firtzbox