[gelöst] Readingsgroup filtern, Device mit zu alten Reagings ausschließen

Begonnen von rabehd, 19 August 2024, 12:28:12

Vorheriges Thema - Nächstes Thema

rabehd

Ich habe eine ReadingsGroup in der sich alle Luftdrucksensoren befinden und dort wird der Durchschnitt über die Werte dieser Sensoren gebildet.
Ab und zu meldet ein Sensor einen Wert nicht (Temperatur und Feuchte sind da, Druck bleibt aus).
Ich hätte diese Device gern temporär ausgeschlossen.
Wie mache ich das?
Filter soll wohl nicht temporär sein (wobei ich auch keine echte Idee zum Syntax für meinen Fall gefunden habe), andere Andeutungen (valueFormat) sind mir auch nicht klar.

Hätte jemand einen Schubs/Tipp für mich?


defmod Luftdruck readingsGroup
deCONZ_HUESensor.*:pressure\
MQTT2_SH_Aussenwetter.*:BME280_Pressure\
MQTT2_SH_Innenwetter_WZ.*:BME280_Pressure\
Luftdruck:$avg:r2

attr Luftdruck alwaysTrigger 2
attr Luftdruck mapping %ALIAS
attr Luftdruck room Wetter
attr Luftdruck valueFormat { pressure => '%i hPa', BME280_Pressure => '%i hPa', avg => '%i hPa'}
Auch funktionierende Lösungen kann man hinterfragen.

TomLee

#1
Hallo,

mein erster Versuch/Ansatz aufgrund der Frage (und der Erkenntnisse der letzten Woche weil es vor paar Tagen schonmal eine Frage zum filtern gab):

attr Luftdruck valueFormat {return $VALUE.' hPa' if ( $VALUE ); return undef;}
Klappt das in etwa wie vorgestellt ?

Gruß Thomas

edit:

Keine Ahnung weshalb mit meinem Vorschlag die Readings SUM und avg erstellt werden.


weniger komplizierte Schreibweise des if:
{$VALUE ? return sprintf("%i hPa", $VALUE) : return undef;}

rabehd

Danke, aber keine Ahnung was das tut.
Ich hätte aber gern ein maximales Alter als Ausschlußkriterium irgendwo eingetragen.
Auch funktionierende Lösungen kann man hinterfragen.

TomLee

#3
ZitatDanke, aber keine Ahnung was das tut.

Dann musst Du es eben ausprobieren, wenn Du nicht verstehst was die Zeile macht.
Ich schreib ja nicht um dich zu ärgern, sondern weil ich dachte ich hätte einen Lösungsansatz für dein Anliegen.

Bei meinem Versuch das:
ZitatAb und zu meldet ein Sensor einen Wert nicht (Temperatur und Feuchte sind da, Druck bleibt aus).
Ich hätte diese Device gern temporär ausgeschlossen.
Wie mache ich das?
nachzustellen und wie ich die Aufgabe verstanden habe, werden mit meinem gezeigten Vorschlag nur die Devices in der rG angezeigt, die auch einen Wert in pressure haben.

ZitatIch hätte aber gern ein maximales Alter als Ausschlußkriterium irgendwo eingetragen.
Davon war im ersten Beitrag noch keine Rede von.
Verstehen tu ich es auch nicht ganz, also zusätzlich zu dem Kriterium "zeige nur Devices mit einem Wert im Reading pressure" noch ein weiteres mit "und nur Devices deren pressure-Timestamp nicht älter x ist" ?

rabehd

Zitat von: TomLee am 19 August 2024, 16:12:42Dann musst Du es eben ausprobieren, wenn Du nicht verstehst was die Zeile macht.
Ich schreib ja nicht um dich zu ärgern, sondern weil ich dachte ich hätte einen Lösungsansatz für dein Anliegen.
Das habe ich mal ganz schnell, aber eben mit dem Ergebnis. Ich bin Dir für Deine Mühe dankbar, sorry, wenn das nicht so rüberkam.

Zitat von: TomLee am 19 August 2024, 16:12:42nur die Devices in der rG angezeigt, die auch einen Wert in pressure haben.
Einen Wert haben alle, nur eben einen etwas zu alten.
Aber du hast mich auf die Idee gebracht den Wert mit Readingswatcher zu setzen, dann könnte Deine Lösung funktionieren. Muss ich probieren.

Zitat von: TomLee am 19 August 2024, 16:12:42Davon war im ersten Beitrag noch keine Rede von.
Na ja, zumindest im Titel  ;)
Zitat von: rabehd am 19 August 2024, 12:28:12Ab und zu meldet ein Sensor einen Wert nicht
Das hat er früher mal, somit ist der Wert alt.
Ich verlange (im Beruf) auch klare Aussagen von Testern und Fachseite, dabei bin ich selbst nicht besser. :o   



Auch funktionierende Lösungen kann man hinterfragen.

rabehd

Zitat von: rabehd am 19 August 2024, 16:49:49Aber du hast mich auf die Idee gebracht den Wert mit Readingswatcher zu setzen, dann könnte Deine Lösung funktionieren. Muss ich probieren.
Es scheint nur zu klappen, wenn das Reading nicht existiert.
attr Luftdruck valueFormat {return $VALUE.' hPa' if ( ReadingsAge($READING,$VALUE,undef) < 60 ); return undef;} funktioniert nicht.
Auch funktionierende Lösungen kann man hinterfragen.

TomLee

#6
Du musst doch noch durch 60 teilen ? Dann ist der Vergleich mit Minuten. Also so versteh ich es jetzt wieder und klappt so bei mir

{ReadingsAge($DEVICE,'pressure',undef)/60 < 180 ? return sprintf("%i hPa", $VALUE) : return undef;}
edit:
Achso dein Problem war $DEVICE,$READING,$VALUE durcheinander gebracht hast, ich war halt irgendwie bei Minuten, vergleich wie du willst  :P

edit:
das sprintf kann man sich sparen:
{ReadingsAge($DEVICE,$READING,undef)/60 < 1470 ? return "%i hPa" : return undef;}

rabehd

Zitat von: TomLee am 19 August 2024, 17:32:16Achso dein Problem war $DEVICE,$READING,$VALUE durcheinander gebracht hast
Das stimmt.
Außerdem ist diese kurze Schreibweise nicht so meins.
Bei valueFormat werde ich auch wieder etwas lesen müssen.

Zitat von: TomLee am 19 August 2024, 17:32:16ich war halt irgendwie bei Minuten, vergleich wie du willst
Das kriege ich hin  :D

Danke für Deine Unterstützung, ich habe wieder etwas gelernt.

Auch funktionierende Lösungen kann man hinterfragen.

TomLee

ZitatBei valueFormat werde ich auch wieder etwas lesen müssen.

Was wichtig für das Verständnis ist (so mein ich es zumindest verstanden zu haben die letzten Tage), die Rückgabe von valueFormat wird zeilenweise, Spalte für Spalte ausgewertet und das Ergebnis am Ende irgendwie in FHEMWEB angezeigt. Hoffe das hilft weiter und ich reim mir das korrekt zusammen.