Hauptmenü

Nur Werte zw 0 und 100

Begonnen von dk3572, 10 Mai 2022, 18:37:02

Vorheriges Thema - Nächstes Thema

dk3572

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

Otto123

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
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

DetlefR

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

Beta-User

Direkt filtern?
Ginge bei M2D per Perl-Code in der readingList...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Otto123

Du meinst so?
readingList esp8266_D8_BF_C0_14_16_84:Fuellstand:.* { if($EVENT >=0 or $EVENT <= 100){{"Fuellstand"=>$EVENT}} }
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

Beta-User

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}} }
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

dk3572

Hallo an alle Unterstützer,
vielen Dank für die Hilfe.
Werde das letzte Bsp. testen und berichten.

VG Dieter