[Gelöst] Plausibilitätsprüfung bei Readings / nur loggen bei positiven Werten

Begonnen von stefanru, 20 Juni 2017, 20:57:14

Vorheriges Thema - Nächstes Thema

stefanru

Hi,

ich habe folgendes Problem.
Ich habe einen Ultraschallsensor an einem ESP mit ESPEasy eingebunden für die Regenwasser Messung.

Dieser liefert den abstand zur Wasseroberfläche.
Ich rechne dass direkt um in Liter über eine Formel:
userReadings  Liter {sprintf("%.0f",6780 - 30.8181 * (ReadingsVal("ESPEasy_esp_easy_stefan1_Abstands_Sensor","Abstand",0)-15))}

Nun kommt es sehr selten (1x die Woche vor dass der Sensor eine Wert liefert der Total daneben liegt.
Z.b. heute habe 2600 Liter im Tank und das wurde den ganzen Tag gemessen, aber ein Reading sagt -478757897 Liter.
Also muss der Abstand riesig geworden sein.

Wie könnte ich solche Fehlmessungen verwerfen?
Ein Verwerfen aller Werte im userreading Liter die negativ sind wäre eigentlich schon genug.
Wie kann ich ein Reading einfach verwerfen?

Gruß und Danke,
Stefan




dev0

Ein Beispiel findest du in der Commandref zum ESPEasy Modul (Attribut adjustValue). Wenn Du das ESPEasy Modul nicht verwendest, dann kannst Du Dir mit Hilfe des Beispiels ein UserReading bauen.

Otto123

Hi Stefan,

einfach ein {if ( sprintf ... > 0) {sprintf...}}

Ich weiß sieht nicht elegant aus, aber geht.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

stefanru

Hi,

danke!
Da war ich ja mal wieder Blind. Hatte sogar in die Comandref geschaut. Nach dem Hinweis habe ich das BEispiel auch gefunden :-)

Vielen Dank!

Frank-Synology-DS215J

Ich habe es mit {if ( sprintf ... > 0) {sprintf...}} nicht hinbekommen und habe es mit oldreadings hinbekommen.
Wenn der Wert nicht plausibel ist (bei mir außerhalb von -50 und 100) dann wird der aktuelle Wert durch den vorherigen (oldreading) ersetzt.
Vielleicht gibt es hier noch Optimierungsmöglichkeiten. Ich habe fast 80 1-Wire Sensoren an zwei USB 1-Wire Modulen an einem Raspi hängen und immer mal wieder (alle paar Tage) einen Ausreißer.
Rein theoretisch könnte man so auch eine Schieberegister aufbauen.



   1wireUSB_sms_guard1_MSGCNT 9511
   1wireUSB_sms_guard1_TIME 2022-11-20 14:19:21
   DEF        28FF3A02B2170538 0 DS18B20
   FUUID      617119ca-f33f-f9f3-bae9-1fa3849d28aad468
   FVERSION   00_OW2S0SMSGUARD.pm:v2.0.0-s25824/2022-03-13
   LASTInputDev 1wireUSB_sms_guard1
   MSGCNT     9511
   NAME       OG_Windfang_RL
   NOTIFYDEV  global
   NR         334
   NTFY_ORDER 50-OG_Windfang_RL
   STATE      T: 21.9 °C
   SVN        25824
   TYPE       OW2S0SMSGUARD
   addr       28FF3A02B2170538
   busid      10
   eventCount 547
   OLDREADINGS:
     2022-11-20 14:17:20   temperature.neu 21.8
     2022-11-20 14:17:20   temperature.old 21.9
     2022-11-20 14:17:20   temperature.plausibilitaet2 21.8
   READINGS:
     2022-11-20 14:17:50   state           T: 21.9 °C
     2022-11-20 14:17:50   temperature     21.9
     2022-11-20 14:17:50   temperature.neu 21.9
     2022-11-20 14:17:50   temperature.old 21.8
     2022-11-20 14:17:50   temperature.oldreading 21.8
     2022-11-20 14:17:50   temperature.plausibilitaet1 21.9
     2022-11-20 14:17:50   temperature.plausibilitaet2 21.9
Attributes:
   event-on-change-reading .*
   model      DS18B20
   oldreadings temperature.neu,temperature.old,temperature.plausibilitaet2
   room       -OG->Windfang
   timestamp-on-change-reading .*
   userReadings temperature.neu { ReadingsVal($name,"temperature",0)},
temperature.old { OldReadingsNum($name,"temperature.neu",0) },
temperature.plausibilitaet1 {if (ReadingsVal($name,"temperature.neu",'' ) < 100){ReadingsVal($name,"temperature.neu","")} else {ReadingsVal($name,"temperature.old","")}},
temperature.plausibilitaet2 {if (ReadingsVal($name,"temperature.plausibilitaet1",'' ) > -50){ReadingsVal($name,"temperature.plausibilitaet1","")} else {ReadingsVal($name,"temperature.old","")}},
temperature.oldreading { OldReadingsVal($name,"temperature.plausibilitaet2",0) }