Eigentlich ganz simpel :-\
Ich lese über GPIO 1-Wire Sensoren ein und möchte Reading Temperaturwert in einem notify oder auch DIOF verarbeiten.
Wenn ein Wert von z.B. 30 unterschritten ist, soll eine Pumpe angehen.
notify wird einfach nicht ausgelöset
([Heizung_Zirk.Pumpe:temperature]<30) (set Keller_Z_Pumpe on)
oder das
my $temperature = ReadingsVal("Heizung_Zirk.Pumpe", "temperature", 0);
if ($temperature <= 30) {
fhem("set Keller_Z_Pumpe on");
}
elsif ($temperature >= 40) {
fhem("set Keller_Z_Pumpe off");
Wie wäre es mit kompletten list aller beteiligten Devices und kompletten lists etc. deiner Versuche?
Siehe: https://forum.fhem.de/index.php?topic=71806.0
Schon mal versucht mit dem Eventmonitor ein notify anlegen zu lassen? :)
Siehe:https://wiki.fhem.de/wiki/Event_monitor
Entweder ein "generelles"/"generelleres" notify generieren (lassen) und dann innerhalb mit Perl und if oder eben per Regex einschränken was du haben willst... 8)
Wenn DOIF, dann auch besser bei DOIF posten: "help DOIF" in die FhemWeb-Zeile...
Bzw.: https://forum.fhem.de/index.php?topic=13092.0
Gruß, Joachim
Also List ist kein Problem.
Eventmonitor habe ich nur als Anzeige benutzt :o
Internals:
CFGFN ./FHEM/fhem_GPIO.cfg
DEF 22
FUUID 5ceaca9f-f33f-bc22-6c74-0d42fec6a4758295
GPIO_Basedir /sys/class/gpio
GPIO_Nr 22
NAME Keller_Z_Pumpe
NR 39
STATE off
TYPE RPI_GPIO
WiringPi_gpio /usr/local/bin/gpio
READINGS:
2024-08-16 09:29:59 state off
fhem:
interfaces switch
Attributes:
active_low yes
direction output
room 09 Keller
webCmd on:off
Internals:
CFGFN ./FHEM/fhem_1_WIRE.cfg
DEF 28-00000622b64d
FUUID 5ceacaae-f33f-bc22-4052-e3c0978ac4823923
NAME Heizung_Zirk.Pumpe
NR 106
NTFY_ORDER 50-Heizung_Zirk.Pumpe
STATE T: 28
TYPE GPIO4
READINGS:
2024-08-10 21:41:15 failures 0
2024-08-16 10:35:16 state T: 28
2024-08-16 10:35:16 temperature 28
fhem:
interfaces temperature
Attributes:
event-min-interval 10
event-on-change-reading state
fp_HOME 600,500,2,Warmwasser
group 1-wire
model DS18B20
room 09 Keller
Internals:
CFGFN
DEF ([Heizung_Zirk.Pumpe:temperature]<30) (set Keller_Z_Pumpe on)
FUUID 66bee102-f33f-bc22-df85-f8fd043930de9eae
NAME Regler_Temperatur
NR 112794
NTFY_ORDER 50-Regler_Temperatur
REGEXP ([Heizung_Zirk.Pumpe:temperature]<30)
STATE active
TRIGGERTIME 1723793231.04794
TYPE notify
READINGS:
2024-08-16 09:28:41 state active
2024-08-16 09:27:11 triggeredByDev Heizung_Zirk.Pumpe
2024-08-16 09:27:11 triggeredByEvent T: 29.812
Attributes:
room 14 Spielwiese
Zitat von: -jato- am 16 August 2024, 10:48:59Eventmonitor habe ich nur als Anzeige benutzt
Würde ich mal ändern ;)
Ein paar Anmerkungen:
event-on-change-reading state halte ich für falsch.
Wenn du den Evenmonitor öffnest (und einen Filter auf Heizung_Zirk.Pumpe einstellst) bekommst du überhaupt Events von Heizung_Zirk.Pumpe bzgl. temperature?
Falls nicht, dann geht auch kein notify/DOIF etc.
([Heizung_Zirk.Pumpe:temperature]<30) (set Keller_Z_Pumpe on) <- sieht nach DOIF aus, ist aber laut Device Typ ein notify.
Notify: define Name notify RegEx Command
Ob das als DOIF geht: keine Ahnung, nutze ich nicht.
Wenn du DOIF willst, dann ändern als DOIF und den Thread verschieben nach DOIF (Knopf dazu ist irgendwo unten).
Falls es notify sein/bleiben soll: neu und richtig anlegen (lassen)
Gruß, Joachim
Doch die Temperatur des Geräts Heizung_Zirk.Pumpe wird im Eventmonitor wiedergegeben.
Ich habe ein neues Notify angelegt. Wie kann man reading, also einen Wert auswerten? Oder geht es mit notify nicht?
Internals:
CFGFN
DEF Heizung_Zirk.Pumpe:.* set Keller_Z_Pumpe off-for-timer 2
FUUID 66bf2241-f33f-bc22-fa45-8de1bf0b58d9fa20
NAME no_Zirkulationspumpe
NOTIFYDEV Heizung_Zirk.Pumpe
NR 117311
NTFY_ORDER 50-no_Zirkulationspumpe
REGEXP Heizung_Zirk.Pumpe:.*
STATE 2024-08-16 12:00:47
TRIGGERTIME 1723802447.8901
TYPE notify
READINGS:
2024-08-16 11:58:37 state active
2024-08-16 12:00:47 triggeredByDev Heizung_Zirk.Pumpe
2024-08-16 12:00:47 triggeredByEvent T: 31.812
Attributes:
room 09 Keller
hi
etwa so:
ESP51:BM0201:.(0|1) {
if(ReadingsVal("ESP51","BM0201",0) == 1) {
fhem("set BM_0201 motion motion");
} else {
fhem("set BM_0201 motion noMotion");
}
}
gruss
Bzw. Anmerkung: bei Zahlenwerten eher mal Richtung ReadingsNum (statt ReadingsVal) schauen ;)
Ansonsten quasi so in der Art 8)
Oder das ganze zu DOIF schieben ;)
Allerdings: Heizung_Zirk.Pumpe:.* -> da würde ich doch eher einen Event mit temperature nehmen als Trigger!? So reagiert das notify ja auf ALLES was vom Device kommt...
Evtl. so: Heizung_Zirk.Pumpe:temperature.*
-> besser Eventmonitor nutzen...
Gruß, Joachim
Und wir kann ich zudem einen bestimmten Temperaturwert verarbeiten hierEvtl. so: Heizung_Zirk.Pumpe:temperature.*
Zitat von: -jato- am 16 August 2024, 13:10:13Und wir kann ich zudem einen bestimmten Temperaturwert verarbeiten hier
Wenn du meinst direkt im Trigger -> RegEx.
Statt .* (-> mindestens 1 Zeichen, egal welches -> Punkt und dann u.U. noch weitere "davon" -> Stern) eben eine RegEx die deinen Kriterien genügt.
Siehe auch: https://regex101.com/
Oder (finde ich einfacher/flexibler) im notify dann mittels Perl -> { hier perl code } eben mittels ReadingsNum/ReadingsVal und if etc.
Siehe: https://wiki.fhem.de/wiki/Klammerebenen
Oder eben: DOIF (dann halt den Thread verschieben oder commandref zu DOIF lesen oder oder oder).
Gruß, Joachim
hi, etwa so
Heizung_Zirk.Pumpe:temperature:.* {
my $Temp = ReadingsNum("Keller_Z_Pumpe,"temperature", 0);
if ($Temp < 10) { fhem("set Keller_Z_Pumpe off-for-timer 2" }
elsif ($Temp >= 10 and $Temp < 18) { fhem("set Keller_Z_Pumpe off-for-timer 4" }
elsif ($Temp >= 18 and $Temp < 20) { fhem("set Keller_Z_Pumpe off-for-timer 6" }
elsif ($Temp >= 20 and $Temp < 23) { fhem("set Keller_Z_Pumpe off-for-timer 8" }
elsif ($Temp >= 23) { fhem("set Keller_Z_Pumpe off-for-timer 0" }
}
oder
Heizung_Zirk.Pumpe:temperature:.30 set Keller_Z_Pumpe off-for-timer 2;
gruss
Hi, es funktioniert, danke! :)