FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: sash.sc am 27 Januar 2023, 11:07:51

Titel: [gelöst] Abfragen von Werten differenzieren/ignorieren
Beitrag von: sash.sc am 27 Januar 2023, 11:07:51
Hallo zusammen.

Ich fragen über JSNMOD den Eiro Werte alle 15 Minuten ab. Jetzt habe ich das Problem, dass unregelmäßig ein Wert von 0 im Diagramm zu sehen ist, der den Graphen entsprechend verhaut.

Wie kann der 0 Wert ausgefilter werden, so das dieser nicht im Diagramm erscheint. Habe schon event-on-change-reading geschaut. Dort geht es aber nur wenn der Wert größer als x ist und nicht kleiner.

jemand noch eine Idee ?

gruß und Danke
Sascha
Titel: Antw:Abfragen von Werten differenzieren/ignorieren
Beitrag von: Gisbert am 27 Januar 2023, 12:30:35
Hallo Sascha,

das funktioniert bei mir in Feld "Function":
$fld[3]<10||$fld[3]>50?"":$fld[3
Nur Werte von 10 bis 50 werden geplottet.

Es gibt noch eine weitere Lösung, nach der ich erst suchen muss.

Viele Grüße Gisbert
Titel: Antw:Abfragen von Werten differenzieren/ignorieren
Beitrag von: Gisbert am 27 Januar 2023, 13:16:02
Hallo Sascha,

die 2. Möglichkeit ist, die Werte erst gar nicht zu loggen. Das geht im Filelog-Device mit folgendem Attribut, hier die Beschreibung:
acceptedRange col1:min:max[:regexp] ...
This attribute takes a space separated list of ranges. An event wont be logged, if the column of the event (counted from 0) is a number, and it is outside of the specified range. The optional regexp will check the event only, without the usual ^ and $ added to it. Example:
attr fl acceptedRange 1:5:35:[Tt]emperature 1:-90:-40:RSSI


Viele Grüße Gisbert
Titel: Antw:Abfragen von Werten differenzieren/ignorieren
Beitrag von: sash.sc am 27 Januar 2023, 13:21:03
Ok. Filellog anfangen ist schonmal gut. Ich möchte aber direkt das Event verhindern, da die Daten noch parallel nach Influxdb gehen. Dann würde da immer noch die Null mit geloggt werden
Titel: Antw:Abfragen von Werten differenzieren/ignorieren
Beitrag von: Gisbert am 27 Januar 2023, 13:25:04
Hallo Sascha,

in dem Fall musst du dir die Attribute event-on-change-reading oder event-on-update-reading anschauen, ob du damit die unerwünschten Events rausfiltern kannst.
Damit bin ich am Ende mit meinem Latein; vielleicht weiß einer der Entwickler mehr.

Viele Grüße Gisbert
Titel: Antw:Abfragen von Werten differenzieren/ignorieren
Beitrag von: frank am 27 Januar 2023, 13:53:33
man könnte zb ein userreading erzeugen, welches bei bestimmten "eingangs-events" selbst keine events erzeugt.
insgesamt erzeugt man dadurch aber quasi doppelt soviele events.
Titel: Antw:Abfragen von Werten differenzieren/ignorieren
Beitrag von: Beta-User am 27 Januar 2023, 14:05:22
Es wäre schön, wenn readingsChange die Option bieten würde, "kaputte" Werte einfach zu löschen, aber das geht afaik nicht...
Aber man könnte es dazu nutzen, in Verbindung mit OldReadings wenigstens den alten Wert wieder reinzuschreiben.
(Erzeugt aber insgesamt auch ein "doppeltes Reading" pro Event-loop).
Titel: Antw:Abfragen von Werten differenzieren/ignorieren
Beitrag von: sash.sc am 27 Januar 2023, 14:24:37
Zitat von: Gisbert am 27 Januar 2023, 13:25:04
Hallo Sascha,

in dem Fall musst du dir die Attribute event-on-change-reading oder event-on-update-reading anschauen, ob du damit die unerwünschten Events rausfiltern kannst.
Damit bin ich am Ende mit meinem Latein; vielleicht weiß einer der Entwickler mehr.

Viele Grüße Gisbert

Bei event-on-change-reading kannst du nur angeben ab wieviel mehr oder weniger ein event erzeugt wird. Also z.B. 10°C +/- 0.2
Wird das über/unterschritten dann wird ein event erzeugt.

Ich bräcuhte eine Funktion, mit der ich einen Range/Bereich angeben kann, wo ein event erzeugt wird. Liegt der Wert ausserhalb, wird das stumpf ignoriert !

Vielleicht hat jemand noch ne Idee.

Titel: Antw:Abfragen von Werten differenzieren/ignorieren
Beitrag von: sash.sc am 29 Januar 2023, 17:16:48
Habe es jetzt, gelöst, hoffe ich. Habe das ganze über ein DOIF und ein2. reading realisiert.

Eigentlich ganz einfach..... ::)

defmod EUR_check DOIF ([Euro_Dollar:ED2] > 0) (setreading Euro_Dollar Euro_Dollar {(ReadingsVal("Euro_Dollar","ED2",0))})

Euro_Dollar ist das Device. ED2 wird mit dem Boersenwert vom Euro gefütter. DOIF prüft das reading ob größer 0, wenn ja dann den Wert in ein 2. Reading schreiben zum loggen.

Es geht mit Sicherheit auch eleganter. Da müßten dann aber die Profis ran.

Gruß
Sascha