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
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.
Hi Stefan,
einfach ein {if ( sprintf ... > 0) {sprintf...}}
Ich weiß sieht nicht elegant aus, aber geht.
Gruß Otto
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!
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) } |