Userreading unverändert lassen

Begonnen von roedert, 31 März 2016, 11:13:44

Vorheriges Thema - Nächstes Thema

roedert

Ist es irgendwie möglich ein Userreading nur bei erfüllter Bedingung zusetzen und sonst unverändert zu lassen.
Statt es unverändert zu lassen, könnte ich es natürlich wieder mit dem alten Wert füllen - was allerdings auch wieder ein event auslöst. Das wiederrum könnte ich ich mit event-on-change abfangen .... aber "schöner" wäre natürlich das Userreading gar nicht erst anzufassen.

Hintergrund:
Ein simpler Bodenfeuchtesensor an einem analogen Eingang eines Firmata-Arduinos. Der liefert natürlich kontunierlich Werte (immer 0), zur Feuchtemessung wird aber nur periodisch für kurze Zeit eine Spannung angelegt - und auch nur diese Werte sollen übernommen werden.

def analogA0 FRM_AD 14
attr analogA0 userReadings moisture:reading { ReadingsVal($name,'reading',0)==0 ? ReadingsVal($name,'moisture',0) : ReadingsVal($name,'reading',0) }


Der Code funktioniert soweit, nur wäre es schöner statt bei jeder Nullmessung statt sich selbst mit seinem alten Wert zu überschreiben, das UserReading moisture gar nicht erst neu zu setzen.
Oder gibt es einen ganz anderen Ansatz die "Nullmessungen" zu ignorieren?

Kann man das irgendwie im UserReading implementieren?
 

frank

ich würde die "nullmessungen" auf jedenfall an der quelle stoppen. das ist ja sozusagen datenmüll, der unnötigerweise das ganze system belastet.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

roedert

Die Quelle ist ja "doof" .. und soll auch so bleiben ;)
Auf dem Aurduino ist der Standard-Firmata-Sketch ... und weitere Änderungen/Logik wollte ich da auch nicht reinbringen, das soll alles zentral in FHEM verbleiben.
Das Einschalten der Spannung zur Messung erfolgt ja auch von FHEM aus gesteuert über einen Ausgabepin FRM_OUT.

Hans Franz

Vieleicht habe ich das Problem ja nicht verstanden, aber warum geht ein
{ ReadingsVal($name,'reading',0)!=0 ? ReadingsVal($name,'reading',0) }
nicht?

Gruß
Hans
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

roedert

Error evaluating analogA0 userReading moisture: syntax error at (eval 240) line 1, at EOF

Schon irgndwie klar ... das userReading erwartet ja einen Wert den es setzen soll ... und wenn ich den einfach weglasse (also : und den else-wert) dann fehlt ihm natürlich was.

Hans Franz

Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

frank

ZitatDas Einschalten der Spannung zur Messung erfolgt ja auch von FHEM aus gesteuert über einen Ausgabepin FRM_OUT.
mit diesem signal lässt sich die messung nicht steuern, also start/stop? zb über ein attr disable, sodass die quelle der messungen (wahrscheinlich FRM_AD) ruhig bleibt. 
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

roedert

Den Gedanken hatte ich auch schon, aber FRM_AD hat leider kein disable-Attribut.

frank

wenn du es wirklich nicht stoppen kannst, was ich für eine lücke im modul halten würde, sollte folgendes funktionieren:

attr analogA0 userReadings moisture:reading { ReadingsVal($name,'reading',0)!=0 ? ReadingsVal($name,'reading',0):undef }

bei einem fensterkontakt hat folgendes gerade funktioniert:
test:contact {
my $val = ReadingsVal($name,"contact","hallo");
return (($val =~ "open")?"offen":undef);
}
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

roedert

#9
Wunderbar ... undef als else-Wert funktioniert.

Die Werte stimmen und es kommen keine Fehlermeldungen :)

Danke!