Hallo,
habe einen Ultraschallsensor zur Füllstandsanzeige der mir Werte zw. 0 und 100% liefert.
Leider überträgt er auch falsche Werte z.B. -439,5.
Gibt es eine Möglichkeit nur den Wertebereich zw. 0 und 100 zuzulassen?
Mit dem event-aggregator funktioniert es nicht.
CID esp8266_D8_BF_C0_14_16_84
DEF esp8266_D8_BF_C0_14_16_84
FUUID 604b5bb8-f33f-cd72-4ac3-576a473e6117c744
FVERSION 10_MQTT2_DEVICE.pm:0.258890/2022-03-27
IODev MQTT2_Server
LASTInputDev MQTT2_Server
MQTT2_Server_CONN MQTT2_Server_192.168.178.xxxxxxxx
MQTT2_Server_MSGCNT 939
MQTT2_Server_TIME 2022-05-10 18:29:10
MSGCNT 939
NAME MQTT2_esp8266_D8_BF_C0_14_16_84
NR 461
STATE Menge: <b>-24200 L</b><br>
Stand: <b>-439.5 %</b><br>
TYPE MQTT2_DEVICE
READINGS:
2022-05-10 18:29:10 Abstand 1071.5
2022-05-10 18:29:10 Fuellstand -439.5
2022-05-09 16:22:07 IODev MQTT2_Server
2022-05-10 18:29:10 Liter -24200
Attributes:
DbLogExclude .*
IODev MQTT2_Server
alias Zisterne
event-aggregator Liter::none:median:900,Abstand::none:median:900,Fuellstand::none:median:900
event-min-interval Liter:1200,Abstand:1200,Fuellstand:1200
event-on-change-reading .*
icon zisterne_00
readingList esp8266_D8_BF_C0_14_16_84:Fuellstand:.* Fuellstand
esp8266_D8_BF_C0_14_16_84:Abstand:.* Abstand
esp8266_D8_BF_C0_14_16_84:Liter:.* Liter
room Garten,Zähler
stateFormat Menge: <b>[$name:Liter] L</b><br>
Stand: <b>[$name:Fuellstand] %</b><br>
Für Tipps danke ich im Voraus.
VG Dieter
Hi,
machst ein userReadings - als Idee ungetestet
attr MQTT2_esp8266_D8_BF_C0_14_16_84 userReadings Fuellstand1:Fuellstand{my $val=ReadingsNum($name,'Fuellstand',0);;if($val >=0 or $val <= 100){return $val}}
Gruß Otto
Hallo Dieter,
hier noch was von mir aus der Kramkiste. Entsprechend angepasst.
attr MQTT2_esp8266_D8_BF_C0_14_16_84 userReadings Fuellstand1:Fuellstand:.([0-9]\..*|[1-9][0-9]\..*|100) {ReadingsNum($name,"Fuellstand",0);;}
Kurz zu Erklärung. Es wird ein Userreading angelegt "Fuellstand1", das auf Änderungen von "Fuellstand" reagiert. Aber nur, wenn die Bedingung 0-100 zutrifft. Es muss auch immer ein Dezimalpunkt im Wert stehen.
Gruß
Detlef
Direkt filtern?
Ginge bei M2D per Perl-Code in der readingList...
Du meinst so?
readingList esp8266_D8_BF_C0_14_16_84:Fuellstand:.* { if($EVENT >=0 or $EVENT <= 100){{"Fuellstand"=>$EVENT}} }
Zitat von: Otto123 am 11 Mai 2022, 08:40:50
Du meinst so?
readingList esp8266_D8_BF_C0_14_16_84:Fuellstand:.* { if($EVENT >=0 or $EVENT <= 100){{"Fuellstand"=>$EVENT}} }
...der Spur nach...
Mit "warnings-Hosenträger" und ohne unnötige Quotes käme ich auf sowas:
readingList esp8266_D8_BF_C0_14_16_84:Fuellstand:.* { if( looks_like_number($EVENT) && $EVENT >=0 && $EVENT <= 100 ){{Fuellstand=>$EVENT}} }
Hallo an alle Unterstützer,
vielen Dank für die Hilfe.
Werde das letzte Bsp. testen und berichten.
VG Dieter