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 (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.
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.
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 (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.
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.
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.
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.
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.
Die $EVTPARTx die da geliefert werden, sind komplett zerstückelt. Deshalb funktioniert das mit dem Übertragen in die readings nicht.
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".