THRESHOLD mit WAIT-Attribut ?

Begonnen von Bartimaus, 10 Februar 2019, 12:17:58

Vorheriges Thema - Nächstes Thema

Bartimaus

Hallo Zusammen,

um meinen Luftentfeuchter im Keller optimal zu nutzen, setze ich THRESHOLD ein. Das funktioniert auch prächtig.
Leider ist mein Lutfeuchtersensor ein Sensibelchen, und der liefert ab und an unplausible Werte (Feuchte 655%).
Die Verkabelung habe ich mehrfach überprüft, und andere Sensoren laufen störungsfrei. Egal.

Sobald der Sensor einen solchen Wert liefert, springt THRESHOLD natürlich an, und schaltet den Luftentfeuchter ein. Mit dem nächsten Abfrageintervall des Luftfeuchtesensors (300s) ist der Luftfeuchtewert wieder normal/korrekt, und Threshold schaltet den Luftentfeuchter aus.

Gibt es für THRESHOLD ähnlich wie bei DOIF ein Attribut "wait" ? Das würde die Steuerung für mich enorm vereinfachen.
Oder hat jemand einen anderen Lösungsansatz ?
LG
B.


FHEM@Intel-J4105@Debian-LXC, CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

rudolfkoenig

Evtl: userreading anlegen, der unplausible Werte filtert, und diesen fuer THRESHOLD als Input verwenden.

Bartimaus

Danke für die Idee.

Userreading ist angelegt, aber jetzt kommen wieder meine 3 Probleme, wie filtere ich die unplausiblen Werte raus ?
Ich denke mal via "regex", aber damit stehe ich auf Kriegsfuß.

Darf ich da bitte nochmal um Unterstützung bitten ?
Der maximale Feuchtewert dürfte ja hier = "100" sein, wie filtere ich alles darüberliegende raus ?
LG
B.


FHEM@Intel-J4105@Debian-LXC, CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Otto123

#3
Hi,
einfach nur Wert schreiben wenn kleiner 100 (oder 90)
UserReading Code
{ReadingsNum("Gerät","Reading","") if (ReadingsNum("Gerät","Reading","") < 100)}
Als Idee  ;)

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

rudolfkoenig

Regex ist fuer sowas nicht zielfuehrend.
Falls es sich um das Event hum geht dann hat man in myHum Werte <= 100:attr dev userReadings myHum:hum:.* { $eventValue > 100 ? $oldvalue : $eventValue }

@Otto123: deine Version scheint bei nur 1 oder 0 zu liefern, evtl. habe ich das falsch ergaenzt.

Otto123

#5
@Rudi Da hast Du Recht. Hatte ich beim Schreiben zu kurz gedacht, habe den Ausdruck editiert.

Deine Variante sieht eleganter aus, aber woher genau kommt $oldvalue? Letztes Wert des userReadings oder von myHum:hum?

Ok die Frage habe ich durch Test geklärt, jetzt bleibt mir nur noch das Konstrukt myHum:hum:.* unklar - weil myHum muss ja ein Reading von dev sein oder geht an der Stelle auch device:reading:trigger ?

Ok habs kapiert

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

rudolfkoenig

Weiss nicht genau, der userReadings Code ist nicht von mir :)
Habs einfach aus fhem.pl geklaut, Zeile 4615, wird eigentlich fuer difference und Co gebraucht.

Bartimaus

#7
Hallo,

danke Otto&Rudi !

@Otto

Dein Vorschlag Feuchte_Th {sprintf("%0.1f",ReadingsVal("$name","Feuchte",0)) < 100}

liefert, wie von Rudi prognostiziert "1"

Rudis Tipp:

Feuchte_Th:Feuchte:.* { $eventValue > 100 ? $oldvalue : $eventValue }

funktioniert....  :-*

Hier das List des Sensors:

Internals:
   ALARM      0
   ASYNC      1
   DEF        DS2450 A2D984001602
   ERRCOUNT   0
   INTERVAL   60
   IODev      1wire
   NAME       Temp_Kino
   NOTIFYDEV  global
   NR         1304
   NTFY_ORDER 50-Temp_Kino
   NUMTASKS   3
   OW_FAMILY  20
   OW_ID      A2D984001602
   PRESENT    1
   ROM_ID     20.A2D984001602.5D
   STATE      21.690
   TYPE       OWAD
   OLDREADINGS:
   READINGS:
     2018-05-15 10:05:34   A               2.724
     2018-05-15 10:05:34   B               0.456
     2019-02-10 14:59:15   C               0.000
     2018-05-15 10:05:34   D               2.525
     2019-02-10 14:59:15   Feuchte         56.040
     2019-02-10 14:58:15   Feuchte_Th      55.460
     2019-02-10 14:59:15   Luftdruck       984.344
     2019-02-10 14:58:15   Taupunkt        12.4
     2019-02-10 14:59:15   Temperatur      21.690
     2019-02-10 14:58:15   absoluteFeuchte 10.6
     2019-01-31 08:09:02   alarm           1
     2019-01-31 08:13:53   present         1
     2019-02-10 14:59:15   state           Temperatur: 21.690 V Feuchte: 56.040 V C: 0.000 V Luftdruck: 984.344 V
     2018-05-15 11:41:07   temperature     21.0
   owg_shigh:
     0
     0
     0
     0
   owg_slow:
     0
     0
     0
     0
   owg_val:
     2.729453125
     0.4378125
     0
     2.460859375
   owg_vhigh:
     5.1
     5.1
     5.1
     5.1
   owg_vlow:
     5.1
     5.1
     5.1
     5.1
   tempf:
     A:
       function   (VA-2.56)*128
     B:
       function   VB*128
     C:
       function   VC
     D:
       function   VD*400
Attributes:
   AFunction  (VA-2.56)*128
   AHigh      5.1
   ALow       5.1
   AName      Temperatur
   BFunction  VB*128
   BHigh      5.1
   BLow       5.1
   BName      Feuchte
   CHigh      5.1
   CLow       5.1
   DFunction  VD*400
   DHigh      5.1
   DLow       5.1
   DName      Luftdruck
   IODev      1wire
   event-on-change-reading Temperatur:0.5,Feuchte:1,Luftdruck:1,Taupunkt,Feuchte_Th:1
   group      Temperaturen
   model      DS2450
   room       1wire,OWX
   stateFormat Temperatur
   userReadings Feuchte_Th:Feuchte:.* { $eventValue > 100 ? $oldvalue : $eventValue }


Wobei ich mir sicher bin, das "pah" als Modulautor von OWAD eine noch elegantere Lösung aus dem Hut zaubern könnte.
Ich denke da an die Attribute BLow und BHigh, wenn es das ist, woran ich denke... zumindest abgeleitet aus dem Attribut-Namen. Leider setzen sich die Werte bei Änderung immer wieder auf "5.1" zurück.

Das ist aber sicher nicht dem Audiosetup meines Heimkinos geschuldet... (das hat nämlich 7.1.... ::) )
LG
B.


FHEM@Intel-J4105@Debian-LXC, CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Bartimaus

#8
Nabend,

sorry, muss nochmal nachhaken.

Heute hatte ich diese Fehlermeldung im Log:
2019-02-10_14:43:13 Temp_Kino Feuchte_Th: 54.3
2019-02-10_14:43:13 Temp_Kino Taupunkt: 11.8
2019-02-10_14:44:13 Temp_Kino Feuchte_Th: 1
2019-02-10_14:51:14 Temp_Kino Feuchte_Th: Error evaluating Temp_Kino userReading Feuchte_Th: syntax error at (eval 1099575) line 1, near ") $eventValue "
2019-02-10_14:52:14 Temp_Kino Feuchte_Th: Error evaluating Temp_Kino userReading Feuchte_Th: syntax error at (eval 1099629) line 1, near ") $eventValue "
2019-02-10_14:53:14 Temp_Kino Feuchte_Th: Error evaluating Temp_Kino userReading Feuchte_Th: syntax error at (eval 1099668) line 1, near ") $eventValue "
2019-02-10_14:54:14 Temp_Kino Feuchte: 56.390


Es sieht so aus, als hätte der Sensor wieder einen fehlerhaften Wert gemeldet.

Edith: jetzt probiere ich Ottos modifizierte Variante  ;)
LG
B.


FHEM@Intel-J4105@Debian-LXC, CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Bartimaus

Hallo,

Ottos Tip hat funktioniert :-*

2019-02-10_17:10:28 Temp_Kino Taupunkt: 11.8
2019-02-11_23:13:04 Temp_Kino Feuchte:
2019-02-11_23:13:04 Temp_Kino Temperatur:
2019-02-11_23:13:04 Temp_Kino Luftdruck:
2019-02-11_23:18:05 Temp_Kino Luftdruck: 1024.344
2019-02-12_00:33:06 Temp_Kino Feuchte: 49.190
2019-02-12_00:33:06 Temp_Kino Taupunkt: 9.4
2019-02-12_01:23:06 Temp_Kino Luftdruck: 1025.469


Heute Nacht gabs scheinbar wieder eine Falschmeldung, wurde jetzt eleganter umgangen...
LG
B.


FHEM@Intel-J4105@Debian-LXC, CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Otto123

Hi,

Du kannst das natürlich noch mit einem zweiten Test weiter einschränken, da Werte kleiner 15 auch nicht sein sollten.

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

Bartimaus

Yo, aber aus der Vergangenheit weiss ich, das solche Werte nie vorkamen.

Aber da das ein 1wire-Multisensor ist, unterbinde ich nun auch direkt fehlerhafte Temperatur,Luftdruck+Luftfeuchtemessungen, da ich das über die Userreadings filtere.

defmod Temp_Kino OWAD DS2450 AAAAAAAAAAA
attr Temp_Kino AFunction (VA-2.56)*128
attr Temp_Kino AHigh 5.1
attr Temp_Kino ALow 5.1
attr Temp_Kino BFunction VB*128
attr Temp_Kino BHigh 5.1
attr Temp_Kino BLow 5.1
attr Temp_Kino CHigh 5.1
attr Temp_Kino CLow 5.1
attr Temp_Kino DFunction VD*400
attr Temp_Kino DHigh 5.1
attr Temp_Kino DLow 5.1
attr Temp_Kino IODev 1wire
attr Temp_Kino event-on-change-reading Temperatur:0.5,Feuchte:1,Luftdruck:1,Taupunkt
attr Temp_Kino group Temperaturen
attr Temp_Kino model DS2450
attr Temp_Kino room 1wire,OWX
attr Temp_Kino stateFormat Temperatur
attr Temp_Kino userReadings Feuchte {ReadingsNum("Temp_Kino","B","") if (ReadingsNum("Temp_Kino","B","") < 101)}, Temperatur {ReadingsNum("Temp_Kino","A","") if (ReadingsNum("Temp_Kino","A","") < 80)}, Luftdruck {ReadingsNum("Temp_Kino","D","") if (ReadingsNum("Temp_Kino","D","") < 1080)}
LG
B.


FHEM@Intel-J4105@Debian-LXC, CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly