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 ?
Evtl: userreading anlegen, der unplausible Werte filtert, und diesen fuer THRESHOLD als Input verwenden.
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 ?
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
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.
@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
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.
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.... ::) )
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 ;)
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...
Hi,
Du kannst das natürlich noch mit einem zweiten Test weiter einschränken, da Werte kleiner 15 auch nicht sein sollten.
Gruß Otto
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)}