Hallo liebes Forum,
ich habe seit einiger Zeit FHEM auf einem Raspberry Pi mit mehreren Komponenten aus FHT-, FS20, Homematic und IT laufen.
Seit längerem habe ich versucht, mittels CUL, Signalduino usw. meine Bresser 5in1 Wetterstation einzubinden. Mittels einem DVB-T-Stick und rtl_433 ist mir das nun gelungen - worauf ich mangels tieferen Linux-Kenntnissen mächtig stolz bin :)
Temperatur, Luftfeuchtigkeit und Wind-Werte sind kein Problem. Die Niederschlagsmenge beschäftigt mich aber nun schon mehrere Tage, ohne dass ich das gewünschte Ergebnis erreichen konnte.
Die Station übermittelt hier einen Wert zwischen 0 und 99,9 mm. Bei Regen erhöht sich dieser Wert entsprechend. Bei Erreichen von 99,9 wird der Wert auf 0 zurückgesetzt und zählt wieder von vorne.
Aufgefallen ist mir das beim Betrachten meines Plots, als die Regenmenge/Tag (delta-d) auf einmal nicht mehr vorhanden war. Jetzt versuche ich verzweifelt, mittels userReading einen fortlaufenden Zähler zu erzeugen, der beim Rücksetzen dann nicht mehr "genullt" wird. Leider komme ich nicht mehr weiter.
Könnt ihr mir bitte weiterhelfen?
Grüße, Sigi
Hallo Sigi,
Zitat von: sigi0601 am 08 Juni 2020, 17:25:24
Die Station übermittelt hier einen Wert zwischen 0 und 99,9 mm. Bei Regen erhöht sich dieser Wert entsprechend. Bei Erreichen von 99,9 wird der Wert auf 0 zurückgesetzt und zählt wieder von vorne.
Aufgefallen ist mir das beim Betrachten meines Plots, als die Regenmenge/Tag (delta-d) auf einmal nicht mehr vorhanden war. Jetzt versuche ich verzweifelt, mittels userReading einen fortlaufenden Zähler zu erzeugen, der beim Rücksetzen dann nicht mehr "genullt" wird. Leider komme ich nicht mehr weiter.
Könnt ihr mir bitte weiterhelfen?
Erstmal super, dass du das mit dem DVB-T-Stick hinbekommen hast. Was hast du denn bzgl. des userRedings schon versucht? Poste mal deine Konfiguration (# oben in der Leiste macht dir Code-Tags, dann wird der kopierte Text als Quellcode formatiert).
Hallo,
so sieht meine aktuelle Konfiguration aus:
Internals:
CID rtl_433_8195ffff
DEF rtl_433_8195ffff
DEVICETOPIC Wetterstation
FUUID 5edbdeff-f33f-fcc8-f1e1-d291a9c7a759c8d6
IODev mqtt2
LASTInputDev mqtt2
MSGCNT 35741
NAME Wetterstation
NR 114
STATE 14.9 °C | 60 % | 0.0 km/h
TYPE MQTT2_DEVICE
mqtt2_MSGCNT 35741
mqtt2_TIME 2020-06-08 19:43:32
OLDREADINGS:
READINGS:
2020-06-08 19:43:31 Bresser-5in1_125_battery_ok 1
2020-06-08 19:43:31 Bresser-5in1_125_humidity 60
2020-06-08 19:43:31 Bresser-5in1_125_id 125
2020-06-08 19:43:32 Bresser-5in1_125_mic CHECKSUM
2020-06-08 19:43:32 Bresser-5in1_125_rain_mm 2.0
2020-06-08 19:43:31 Bresser-5in1_125_temperature_C 14.9
2020-06-08 19:43:31 Bresser-5in1_125_time 2020-06-08 19:43:31
2020-06-08 19:43:32 Bresser-5in1_125_wind_avg_m_s 0
2020-06-08 19:43:32 Bresser-5in1_125_wind_dir_deg 67.5
2020-06-08 19:43:32 Bresser-5in1_125_wind_max_m_s 0
2020-06-08 19:43:31 battery_ok 1
2020-06-08 19:43:31 humidity 60
2020-06-08 19:43:31 id 125
2020-06-08 19:43:31 mic CHECKSUM
2020-06-08 19:43:31 model Bresser-5in1
2020-06-08 19:43:31 rain_mm 2.0
2020-06-08 19:43:31 temperature_C 14.9
2020-06-08 19:43:31 time 2020-06-08 19:43:31
2020-06-08 19:43:32 wind_avg_km_h 0.0
2020-06-08 19:43:31 wind_avg_m_s 0
2020-06-08 19:43:31 wind_dir_deg 67.5
2020-06-08 19:43:32 wind_max_km_h 0.0
2020-06-08 19:43:31 wind_max_m_s 0
Attributes:
IODev mqtt2
autocreate 0
readingList rtl_433_8195ffff:rtl_433/fhem/events:.* { json2nameValue($EVENT) }
rtl_433_8195ffff:rtl_433/fhem/devices/Bresser-5in1/125/time:.* Bresser-5in1_125_time
rtl_433_8195ffff:rtl_433/fhem/devices/Bresser-5in1/125/id:.* Bresser-5in1_125_id
rtl_433_8195ffff:rtl_433/fhem/devices/Bresser-5in1/125/battery_ok:.* Bresser-5in1_125_battery_ok
rtl_433_8195ffff:rtl_433/fhem/devices/Bresser-5in1/125/temperature_C:.* Bresser-5in1_125_temperature_C
rtl_433_8195ffff:rtl_433/fhem/devices/Bresser-5in1/125/humidity:.* Bresser-5in1_125_humidity
rtl_433_8195ffff:rtl_433/fhem/devices/Bresser-5in1/125/wind_max_m_s:.* Bresser-5in1_125_wind_max_m_s
rtl_433_8195ffff:rtl_433/fhem/devices/Bresser-5in1/125/wind_avg_m_s:.* Bresser-5in1_125_wind_avg_m_s
rtl_433_8195ffff:rtl_433/fhem/devices/Bresser-5in1/125/wind_dir_deg:.* Bresser-5in1_125_wind_dir_deg
rtl_433_8195ffff:rtl_433/fhem/devices/Bresser-5in1/125/rain_mm:.* Bresser-5in1_125_rain_mm
rtl_433_8195ffff:rtl_433/fhem/devices/Bresser-5in1/125/mic:.* Bresser-5in1_125_mic
room 4 Außenbereich
stateFormat temperature_C °C | humidity % | wind_avg_km_h km/h
userReadings wind_avg_km_h {sprintf("%.1f",ReadingsVal("$name","wind_avg_m_s","???")*3.6)},
wind_max_km_h {sprintf("%.1f",ReadingsVal("$name","wind_max_m_s","???")*3.6)},
Ich habe versucht, ein userReading "rain_total" anzulegen, welches den aktuellen Wert von "rain_mm" hinzu addiert. Allerdings macht er das mit dem aktuellen Wert dann bei jedem Event. Ich weiß nicht, wie ich das anpacken könnte, um nur eine Änderung von "rain_mm" zu addieren.
Zitat von: sigi0601 am 08 Juni 2020, 19:52:22
Ich habe versucht, ein userReading "rain_total" anzulegen, welches den aktuellen Wert von "rain_mm" hinzu addiert. Allerdings macht er das mit dem aktuellen Wert dann bei jedem Event. Ich weiß nicht, wie ich das anpacken könnte, um nur eine Änderung von "rain_mm" zu addieren.
Du kannst ein Reading auslesen und es direkt neu schreiben. Schau dir mal folgende Beispieldefinition an:
defmod general.test.dummy dummy
attr general.test.dummy userReadings rainTotal:rainNow:.+ { ReadingsVal($name, 'rainTotal', 0) + ReadingsVal($name, 'rainNow', 0);; },\
rainMono:rainNow:.+ monotonic {ReadingsVal($name, 'rainNow', 0);;},
Ich habe zwei Methoden eingebaut um dir zu zeigen, dass a) man ein Reading lesen und wieder schreiben kann und b) in diesem Fall ein monoton ansteigender Zähler nicht funktioniert. Am besten kopierst du dir diese Definition in dein FHEM und führst dann folgende Befehle aus (jeweils einzeln oben in die Zeile kopieren und abschicken):
setreading general.test.dummy rainNow 4
Ergebnis:
rainMono = 4
rainTotal = 4
setreading general.test.dummy rainNow 3
Ergebnis:
rainMono = 4 # montonic funktioniert hier nicht, da 3 kleiner als 4 ist → kein Update auf das Reading
rainTotal = 7
Zitat von: sigi0601 am 08 Juni 2020, 19:52:22
Allerdings macht er das mit dem aktuellen Wert dann bei jedem Event. Ich weiß nicht, wie ich das anpacken könnte
Leider ist dein list unvollständig, aber man sieht schon das du deine userReadings ohne Trigger anlegest und vermutlich gibt es auch kein event-on-change-reading .*
, oder ? IMHO würde das dein Problem aus dem Stand lösen.
Hallo,
dank eurer Hilfe habe ich es nun geschafft. Das Attribut mit "monotonic" ist die Lösung. Getriggert durch eine Änderung in "rain_mm" wird die Differenz zum alten Wert in mein userReading "rain_mm_total" aufaddiert. Hab´s dafür gerade nochmals künstlich regnen lassen ;)
rain_mm_total:rain_mm:.* monotonic {ReadingsVal($name, 'rain_mm', 0);},
Grüße, Sigi
Zitat von: sigi0601 am 09 Juni 2020, 20:30:20
Hallo,
dank eurer Hilfe habe ich es nun geschafft. Das Attribut mit "monotonic" ist die Lösung. Getriggert durch eine Änderung in "rain_mm" wird die Differenz zum alten Wert in mein userReading "rain_mm_total" aufaddiert. Hab´s dafür gerade nochmals künstlich regnen lassen ;)
rain_mm_total:rain_mm:.* monotonic {ReadingsVal($name, 'rain_mm', 0);},
Nein, lies mein Posting noch mal. In deinem Fall funktioniert
monotonic nur so lange, bis
rain_mm_total größer als
rain_mm wird und dann wir nichts mehr addiert.
Hmm - ich hatte das getestet und "rain_mm_total" auf 50 gesetzt, während "rain_mm" den Wert 8.4 hatte.
Nachdem ich es regnen lies, stieg "rain:mm" auf 8.8 und "rain_mm_total" auf 50.4.
Also so würde es passen - oder verstehe ich jetzt was falsch?
ich habe zwar noch nie monotonic benutzt aber laut command.ref
Zitatmonotonic: wenn die Differenz zw. dem aktuellen und dem vorherigen Wert positiv ist wird diese Differenz zum Reading addiert. Damit lässt sich von einem Zähler der bei Stromverlust zurückgesetzt wird ein monoton wachsender Zähler ableiten.
sollte es doch keinen Unterschied machen ob der Zähler nun wegen eines Stromausfalls wieder bei 0 beginnt oder wegen internen Überlauf.
D.h. das Zauberwort ist hier wohl "dem vorherigen Wert positiv" , alt =50 , neu =0 -> keine Zählung. Neu = 2 alt = 0 -> es wird weiter gezählt.
Zitat von: sigi0601 am 09 Juni 2020, 20:46:51
Hmm - ich hatte das getestet und "rain_mm_total" auf 50 gesetzt, während "rain_mm" den Wert 8.4 hatte.
Nachdem ich es regnen lies, stieg "rain:mm" auf 8.8 und "rain_mm_total" auf 50.4.
Also so würde es passen - oder verstehe ich jetzt was falsch?
Ich muss mir dazu mal eine Testsuite schreiben um das zu verifizieren. Wenn ich deine Methode benutze, sollte monotonic eigentlich nicht weiterzählen denn die Differenz ist ja nicht positiv. Ich würde an deiner Stelle erstmal mit meiner
rainTotal-Version weitergehen, die ist ja transparent in dem was sie tut.