Habe eine Lüftersteuerung (Luftfeuchtigkeitsabhängig) um den Keller trockener zu bekommen. Hier betreibe ich bereits seit einiger Zeit eine Steuerung, welche unter bestimmten Voraussetzung einen Lüfter für einer bestimmte Zeit einschaltet.
Im Lüftungsrohr habe ich zusätzlich eine Klappe, welche zufällt, wenn der Lüfter ausschaltet. Leider friert die Klappe manchmal an, fällt nicht mehr automatisch zu und die Luft kann weiter zirkulieren.
Deshalt habe ich jetzt eine Klappe im Rohr, welche mit 220 Volt auf und zu fährt. Dessen Motor hat drei Anschlüsse. Einmal Neutralleiter und ein Anschluss für öffnen und einer für schließen. Die Klappe benötigt ca. 10 Sekunden bis sie geschlossen oder offen ist. Danach schaltet der Motor automatisch aus.
Steuern möchte ich dies mit einem Zweitwegeschaltmodul (mit zwei Relais) von Xiaomi Aquara. Dies habe ich in FHEM bereits angelernt.
Es wurden zwei Devices (Lüftungsrohr_schießen und Lüftungsrohr_öffnen) angelegt.
Manuell kann ich die Klappe bereits steuern indem ich z.B. Lüftungsrohr_öffnen "on" mit der Maus klicke. Weil es ein Relais ist muß aber danach wieder auf "off" klicken, weil es nicht automatisch auf "off" umschaltet.
Kann folgendes DOIF funktionieren?
([deltadewpoint:state]>2.3 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<=9 and
[AUS_LUFTFEUCHTIGKEIT:temperature]>[KEL_LUFTFEUCHTIGKEIT:temperature])
(set HUEDevice18 on-for-timer 10)
(set HUEDevice9 on-for-timer 700)
(set HUEDevice7 on-for-timer 10)
DOELSE
(set HUEDevice9 off)
Als Attribut habe ich Wait 0,10,720 gesetzt.
Das heißt Strom für Klappe auf für 10 Sek, dann Lüfter nach 10 Sekunden an für 700 Sekunden und dann nach 720 Sekunden Strom für Klappe zu für 10 Sekunden.
Hier das List von der Lüftersteuerung:
Internals:
DEF ([deltadewpoint:state]>2.3 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<=9 and
[AUS_LUFTFEUCHTIGKEIT:temperature]>[KEL_LUFTFEUCHTIGKEIT:temperature])
(set HUEDevice18 on-for-timer 10)
(set HUEDevice9 on-for-timer 700)
(set HUEDevice7 on-for-timer 10)
DOELSE
(set HUEDevice9 off)
FUUID 6060ef63-f33f-f59f-0724-1fb6e7a4b53fc5e7
MODEL FHEM
NAME TAUPUNKT_LUEFTUNG_KALT
NOTIFYDEV KEL_LUFTFEUCHTIGKEIT,AUS_LUFTFEUCHTIGKEIT,global,deltadewpoint
NR 113
NTFY_ORDER 50-TAUPUNKT_LUEFTUNG_KALT
STATE cmd_2
TYPE DOIF
VERSION 24429 2021-05-12 19:22:50
Helper:
DBLOG:
state:
DbLog:
TIME 1638220210.42912
VALUE cmd_2
READINGS:
2021-11-29 22:21:54 Device deltadewpoint
2021-11-29 22:10:10 cmd 2
2021-11-29 22:10:10 cmd_event KEL_LUFTFEUCHTIGKEIT
2021-11-29 22:10:10 cmd_nr 2
2021-11-29 22:21:53 e_AUS_LUFTFEUCHTIGKEIT_temperature -1.27
2021-11-29 22:10:10 e_KEL_LUFTFEUCHTIGKEIT_temperature 8.89
2021-11-29 22:21:54 e_deltadewpoint_state 8.7
2021-11-29 22:07:39 mode enabled
2021-11-29 22:10:10 state cmd_2
Regex:
accu:
collect:
cond:
AUS_LUFTFEUCHTIGKEIT:
0:
temperature ^AUS_LUFTFEUCHTIGKEIT$:^temperature:
KEL_LUFTFEUCHTIGKEIT:
0:
temperature ^KEL_LUFTFEUCHTIGKEIT$:^temperature:
deltadewpoint:
0:
state ^deltadewpoint$:^state:
attr:
cmdState:
repeatcmd:
7500
wait:
0:
0
10
720
waitdel:
condition:
0 ::ReadingValDoIf($hash,'deltadewpoint','state')>2.3 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')<=9 and ::ReadingValDoIf($hash,'AUS_LUFTFEUCHTIGKEIT','temperature')>::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')
do:
0:
0 set HUEDevice18 on-for-timer 10
1 set HUEDevice9 on-for-timer 700
2 set HUEDevice7 on-for-timer 10
1:
0 set HUEDevice9 off
helper:
DEVFILTER ^global$|^KEL_LUFTFEUCHTIGKEIT$|^AUS_LUFTFEUCHTIGKEIT$|^deltadewpoint$
NOTIFYDEV global|KEL_LUFTFEUCHTIGKEIT|AUS_LUFTFEUCHTIGKEIT|deltadewpoint
event 8.7
globalinit 1
last_timer 0
sleeptimer -1
timerdev deltadewpoint
timerevent 8.7
triggerDev deltadewpoint
timerevents:
8.7
timereventsState:
state: 8.7
triggerEvents:
8.7
triggerEventsState:
state: 8.7
internals:
readings:
all deltadewpoint:state KEL_LUFTFEUCHTIGKEIT:temperature AUS_LUFTFEUCHTIGKEIT:temperature
trigger:
uiState:
uiTable:
Attributes:
repeatcmd 7500
room Kellerlüftung
wait 0,10,720
Danke
Grüße
Ruggy
Bevor ich das obere ausprobiere, wollte ich eine "einfachere" Schaltung mal testen (HUEDevice9 ist der Lüfter).
Diese soll immer um 12:15 Uhr ausgeführt werden.
Hier fehlt mir aber jetzt das Attribut "wait"
So sieht mein DEF beim DOIF aus:
([12:15])
(set HUEDevice18 on-for-timer 10)
(set HUEDevice9 on-for-timer 700)
(set HUEDevice7 on-for-timer 10)
DOELSE
(set HUEDevice9 off)
Funktioniert dies grundsätzlich? Stimmt die Angabe mit der Uhrzeit?
Zitat von: Ruggy am 30 November 2021, 12:24:10
Bevor ich das obere ausprobiere, wollte ich eine "einfachere" Schaltung mal testen (HUEDevice9 ist der Lüfter).
Diese soll immer um 12:15 Uhr ausgeführt werden.
Hier fehlt mir aber jetzt das Attribut "wait"
So sieht mein DEF beim DOIF aus:
([12:15])
(set HUEDevice18 on-for-timer 10)
(set HUEDevice9 on-for-timer 700)
(set HUEDevice7 on-for-timer 10)
DOELSE
(set HUEDevice9 off)
Funktioniert dies grundsätzlich? Stimmt die Angabe mit der Uhrzeit?
Du weißt ja: Probieren, geht über studieren. Was wie funktioniert oder nicht funktioniert, wirst du dann schon sehen. Beim Dummy kannst du ja nichts kaputt machen.
Ohne wait werden alle HUEDevices gleichzeitig gestartet.
Aber ich bräuche das Wait, weil
HUEDevice18 sofort
HUEDevice9 nach 10 Sekunden
HUEDevice7 nach 700 Sekunden
eingeschaltet werden sollte.
Das wait ist aber als Attribut unter Module nicht vorhanden.
Bei oberen doif kann ich es dort finden und auswählen.
Leider ist das kein Dummy sondern der echte Lüfter und Xiaomi Zweiwegeschaltmodul für die Rohrklappe.
Deshalb wollte ich vor wissen ob es funktionieren könnte.
Dann poste das list vom DOIF, wo du kein wait auswählen kannst.
Internals:
CFGFN
DEF ([12:15])
(set HUEDevice18 on-for-timer 10)
(set HUEDevice9 on-for-timer 700)
(set HUEDevice7 on-for-timer 10)
DOELSE
(set HUEDevice9 off)
FUUID 61a602c2-f33f-f59f-8df0-4d8fb034c4ccbf58
MODEL FHEM
NAME KELLER_ZWANGSLUEFTUNG
NOTIFYDEV global
NR 1117595
NTFY_ORDER 50-KELLER_ZWANGSLUEFTUNG
STATE initialized
TYPE DOIF
VERSION 24429 2021-05-12 19:22:50
Helper:
DBLOG:
state:
DbLog:
TIME 1638271292.98603
VALUE initialized
READINGS:
2021-11-30 12:21:32 cmd 0
2021-11-30 12:21:32 mode enabled
2021-11-30 12:21:32 state initialized
2021-11-30 12:21:33 timer_01_c01 01.12.2021 12:15:00
Regex:
accu:
collect:
condition:
0 ::DOIF_time_once($hash,0,$wday)
days:
do:
0:
0 set HUEDevice18 on-for-timer 10
1 set HUEDevice9 on-for-timer 700
2 set HUEDevice7 on-for-timer 10
1:
0 set HUEDevice9 off
helper:
DEVFILTER ^global$
NOTIFYDEV global
globalinit 1
last_timer 1
sleeptimer -1
intervalfunc:
localtime:
0 1638357300
realtime:
0 12:15:00
time:
0 12:15:00
timeCond:
0 0
timer:
0 0
timers:
0 0
triggertime:
1638357300:
localtime 1638357300
hash:
uiState:
uiTable:
Attributes:
room Kellerlüftung
Du befindest dich im DOIF-FHEM-Model, daher sollte das Attribut wait auswählbar sein. Vielleicht musst du deine Browserdarstellung aktualisieren. Das wait-Attribut ist dann nicht auswählbar, wenn man sich aufgrund der Definition im DOIF-Perl-Model befindet, das sieht man unter Model im Device.
Danke. Jetzt kann ich wait auswählen.
Unter Model stand pearl. Nachdem ich die Browserdarstellung aktualisiert habe stand FHEM drinnen und ich konnte auch wait auswählen.
Habe ich folgenden Ablauf für das wait richtig verstanden?
(set HUEDevice18 on-for-timer 10)
(set HUEDevice9 on-for-timer 700)
(set HUEDevice7 on-for-timer 10)
wait 0,20,720
HUEDevice18 wird sofort eingeschaltet und nach 10 Sekunden wieder aus
HUEDevice9 wird 20 Sekunden nachdem HUEDevice18 eingeschalten wurde eingeschalten und nach 700 Sekunden wieder aus
HUEDevice7 wird nach 720 Sekunden (700+20) eingeschaltet und nach 10 Sekunden wieder aus.
Habe es mit kürzeren Zeiträumen getestet aber bin mir nicht so ganz sicher.
Möchte vermeiden, dass der Lüfter läuft, wenn die Rohrklappe zu ist.
Entscheidend ist, ob on-for-timer im Gerät läuft oder nur im HUE-Device nachgebildet ist. Beim letzteren hast du keine Garantie, dass der Abschaltbefehlt beim Aktor ankommt und das Gerät tatsächlich abschaltet.
Oh je. Das habe ich mir mal wieder einfacher vorgestellt.
Wie kann ich feststellen ob on-for-timer im Gerät läuft?
Das HUEDevice9 ist eine Osram Smart + Steckdose und das HUEDevice18 und HUEDevice7 wie beschrieben der Xiaomi Aquara Schaltaktor mit 2 Relais.
Was wäre eine bessere Methode für mein Vorhaben?
Vor allem, dass es auch mit meiner "Schaltung" aus dem Eröffnungsthread funktioniert (für das benötige ich ja wahrscheinlich DOIF?).
Zitat von: Ruggy am 30 November 2021, 20:01:35
Oh je. Das habe ich mir mal wieder einfacher vorgestellt.
Wie kann ich feststellen ob on-for-timer im Gerät läuft?
Was wäre eine bessere Methode für mein Vorhaben?
Vor allem, dass es auch mit meiner "Schaltung" aus dem Eröffnungsthread funktioniert (für das benötige ich ja wahrscheinlich DOIF?).
Kritische Steuerungsaufgaben sollten kein Funk verwenden und kein FHEM. So etwas programmierst du besser im Microcontroller mit Relais auf einer Platine.
Zitat von: Damian am 30 November 2021, 20:05:40
Kritische Steuerungsaufgaben sollten kein Funk verwenden und kein FHEM. So etwas programmierst du besser im Microcontroller mit Relais auf einer Platine.
Dann muss ich leider passen. Das kann ich leider nicht.
Die Osram Steckdose müsste einen Rückkanal haben?
Zur Not müsste ich halt anstatt dem Schaltrelais zwei weitere Osram Steckdosen verwenden.
Wäre das sicherer?
Zitat von: Ruggy am 30 November 2021, 20:15:12
Dann muss ich leider passen. Das kann ich leider nicht.
Kann man es evlt. mit einer Art Rückmeldung machen?
Meine Hue-Steckdose ist heute nicht angegangen, obwohl sie korrekt eingeschaltet wurde. Ob Zigbee, HM mit Rückkanal oder sonst was für ein Protokoll - beim Funk wirst du nie eine 100-prozentige Garantie beim Schalten haben.
Vielleicht kannst du dir etwas mit esp und Relais-Modulen etwas bauen oder von jemandem bauen lassen, der sich damit auskennt (230V!)
Habe zwar vor ca. zwei Jahren etwas mit einen ESP gemacht und mit arduino ide bespielt. Aber größtenteils nur nach einer Anleitung nachgebaut. Ich hätte sogar noch einen und ein paar andere Sachen, die ich mir damals bestellt hatte. Evlt. sogar Relais.
Momentan fällt mir leider niemand ein, der soetwas könnte für mich bauen könnte. Ich bin zwar seit ca. 2 Jahren in einem FatLab aber wegen Corona schon längere Zeit nicht mehr dort gewesen. Es findet derzeit auch kein Treffen wie damals statt. Dort hätte ich bestimmt jemanden getroffen, der dies kann.
Evlt. könntest Du mir grob sagen, was der ESP übernehmen soll. Evlt. kann ich beim FatLab per Email mal nachfragen.
Verstehe ich es richtig, dass FHEM z.B. den Befehl gibt set Lüftungs_ESP on und der ESP übernimmt den Teil mit der Steuerung bzgl. Klappe auf, nach 10 Sek Lüfter an, nach 700 Sek Lüfter aus und danach die Klappe zu?
Wobei es schon wichtig wäre die Lüfterzeit per FHEM variabel festzulegen (Winter anders als im Sommer).
Wäre das auch mit ESP möglich? Das dieser nur die Steuerung der Klappen übernimmt und den Lüfter nach Vorgabe der Zeit durch FHEM einschaltet?
Kann der ESP auch über ZigBee angesteuert werden oder ist anderes Funksignal besser?
Ich steuere meine Heizung z. B. auch per FHEM, allerdings nur unkritische Sachen, wie Temperaturvorgabe oder Zeiten, also alles, was man als User von außen verändern darf. Interne Abläufe sind dem Hersteller vorbehalten und das ist aus Sicherheitsgründen auch gut so.
Das würde für dich bedeuten: Dein FHEM kann durchaus etwas steuern, allerdings unter der Annahme, dass es mal nicht funktioniert mit entsprechenden Konsequenzen, die nicht sicherheitsrelevant sein sollten.
Am besten fragst du im anderen Board nach, wo sich mehr Elektronik-Freaks aufhalten. Hier geht es ja in erster Linie um die Steuerung unkritischer Dinge, wie bei allen FHEM-Modulen.
Hallo,
evlt. ist dies doch eine Anfängerfrage, weil es eigenlich nur um einen Zeitablauf bei DoIF und wait geht.
Habe jetzt schon herumprobiert aber irgendwie funktioniert es nicht.
In kürze, was eigentlich passieren sollte (vorheriges bräuchte dazu nicht unbedingt gelesen werden):
- 1. Relais (HUEDevice18) sofort für 17 Sekunden auf ein dann auf aus.
- dann nach 20 Sekunden (also 3 Sekunden nachdem 1.Relais auf aus ist) Lüfter für 900 Sekunden einschalten (HUEDevice9).
- 2. Relais (HUEDevice7) 20 Sekunden nachdem der Lüfter ausgeschalten hat (900 Sekunden Laufzeit) für 17 Sekunden auf ein schalten dann wieder aus
Leider schließt das Relais nach ca. 15 min aber der Lüfter ist nach 17 Minuten immer noch gelaufen.
Was mache ich falsch?
Hier das List (mit dem Wait-Befehl):
Internals:
DEF ([16:11])
(set HUEDevice18 on-for-timer 17)
(set HUEDevice9 on-for-timer 900)
(set HUEDevice7 on-for-timer 17)
DOELSE
(set HUEDevice9 off)
FUUID 61a602c2-f33f-f59f-8df0-4d8fb034c4ccbf58
MODEL FHEM
NAME KELLER_ZWANGSLUEFTUNG
NOTIFYDEV global
NR 146
NTFY_ORDER 50-KELLER_ZWANGSLUEFTUNG
STATE cmd_1
TYPE DOIF
VERSION 24905 2021-09-01 18:35:54
Helper:
DBLOG:
state:
DbLog:
TIME 1638718000.09559
VALUE cmd_1
READINGS:
2021-12-05 16:26:40 cmd 1.3
2021-12-05 16:26:40 cmd_event timer_1
2021-12-05 16:26:40 cmd_nr 1
2021-12-05 16:26:40 cmd_seqnr 3
2021-12-05 16:10:41 mode enabled
2021-12-05 16:26:40 state cmd_1
2021-12-05 16:11:00 timer_01_c01 06.12.2021 16:11:00
2021-12-05 16:26:40 wait_timer no timer
Regex:
accu:
collect:
attr:
cmdState:
wait:
0:
0
20
920
1:
0
waitdel:
condition:
0 ::DOIF_time_once($hash,0,$wday)
days:
do:
0:
0 set HUEDevice18 on-for-timer 17
1 set HUEDevice9 on-for-timer 900
2 set HUEDevice7 on-for-timer 17
1:
0 set HUEDevice9 off
helper:
DEVFILTER ^global$
NOTIFYDEV global
event timer_1
globalinit 1
last_timer 1
sleepdevice timer_1
sleepsubtimer -1
sleeptimer -1
timerdev
timerevent timer_1
triggerDev
timerevents:
timer_1
timereventsState:
timer_1
triggerEvents:
timer_1
triggerEventsState:
timer_1
interval:
intervalfunc:
localtime:
0 1638803460
realtime:
0 16:11:00
time:
0 16:11:00
timeCond:
0 0
timer:
0 0
timers:
0 0
triggertime:
1638803460:
localtime 1638803460
hash:
uiState:
uiTable:
Attributes:
room Kellerlüftung
wait 0,20,920:0
Ist es wichtig, dass beim DOIF zwischen (set...) (set...) ein Leerzeichen ist?
Kann das ein Fehler gewesen sein?
Hatte kein Leerzeichen dazwischen und eins eingefügt und gespeichert.
Jetzt funktionierte es.
Hallo,
leider funktioniert es immer noch nicht so wie ich es mir vorstelle und komme nicht auf den Fehler.
Wo liegt der Fehler, dass die "Zwangslüftung" um 4:00 Uhr nicht ausgeführt wird?
Anfangs funktionierte es ein paar Mal aber dann nicht mehr.
Hier ist der List von dem DOIF:
Internals:
DEF ([04:00])
(set HUEDevice18 on-for-timer 17) (set HUEDevice9 on-for-timer 900) (set HUEDevice7 on-for-timer 17)
DOELSE
(set HUEDevice9 off)
FUUID 61a602c2-f33f-f59f-8df0-4d8fb034c4ccbf58
MODEL FHEM
NAME KELLER_ZWANGSLUEFTUNG
NOTIFYDEV global
NR 146
NTFY_ORDER 50-KELLER_ZWANGSLUEFTUNG
STATE cmd_1
TYPE DOIF
VERSION 24905 2021-09-01 18:35:54
Helper:
DBLOG:
state:
DbLog:
TIME 1639278940.07351
VALUE cmd_1
READINGS:
2021-12-12 04:15:40 cmd 1.3
2021-12-12 04:15:40 cmd_event timer_1
2021-12-12 04:15:40 cmd_nr 1
2021-12-12 04:15:40 cmd_seqnr 3
2021-12-11 23:27:57 mode enabled
2021-12-12 04:15:40 state cmd_1
2021-12-14 04:00:00 timer_01_c01 15.12.2021 04:00:00
2021-12-12 04:15:40 wait_timer no timer
Regex:
accu:
collect:
attr:
cmdState:
wait:
0:
0
20
920
1:
0
waitdel:
condition:
0 ::DOIF_time_once($hash,0,$wday)
days:
do:
0:
0 set HUEDevice18 on-for-timer 17
1 set HUEDevice9 on-for-timer 900
2 set HUEDevice7 on-for-timer 17
1:
0 set HUEDevice9 off
helper:
DEVFILTER ^global$
NOTIFYDEV global
event timer_1
globalinit 1
last_timer 1
sleepdevice timer_1
sleepsubtimer -1
sleeptimer -1
timerdev
timerevent timer_1
triggerDev
DOIF_eventa:
cmd_nr: 1
cmd_seqnr: 3
cmd_event: timer_1
cmd_1
DOIF_eventas:
cmd_nr: 1
cmd_seqnr: 3
cmd_event: timer_1
state: cmd_1
timerevents:
timer_1
timereventsState:
timer_1
triggerEvents:
timer_1
triggerEventsState:
timer_1
interval:
intervalfunc:
localtime:
0 1639537200
realtime:
0 04:00:00
time:
0 04:00:00
timeCond:
0 0
timer:
0 0
timers:
0 0
triggertime:
1639537200:
localtime 1639537200
hash:
uiState:
uiTable:
Attributes:
room Kellerlüftung
wait 0,20,920:0
Du befindest dich im FHEM-Modus, solange cmd_2 nicht kommt, wird cmd_1 nicht wiederholt. Das kannst du mit do always-Attribut ändern.
Ich habe jetzt einfach das Attribut do allways gesetzt und das war alles und sollte funktionieren?
Wird das immer benötigt, wenn ich ein DOIF mit einem Attribut wait habe?
Ich dachte, dass das Ereignis ja immer erneut um 4:00 Uhr statt findet und dann das DOIF immer von Beginn abläuft.
Oder ist das wegen dem Attribut "wait" im DOIF immer so, dass ich auch das "do allways" immer benötige?
Hier der aktuelle List mit den "do allways":
Internals:
DEF ([04:00])
(set HUEDevice18 on-for-timer 17) (set HUEDevice9 on-for-timer 900) (set HUEDevice7 on-for-timer 17)
DOELSE
(set HUEDevice9 off)
FUUID 61a602c2-f33f-f59f-8df0-4d8fb034c4ccbf58
MODEL FHEM
NAME KELLER_ZWANGSLUEFTUNG
NOTIFYDEV global
NR 146
NTFY_ORDER 50-KELLER_ZWANGSLUEFTUNG
STATE cmd_1
TYPE DOIF
VERSION 24905 2021-09-01 18:35:54
Helper:
DBLOG:
state:
DbLog:
TIME 1639278940.07351
VALUE cmd_1
READINGS:
2021-12-12 04:15:40 cmd 1.3
2021-12-12 04:15:40 cmd_event timer_1
2021-12-12 04:15:40 cmd_nr 1
2021-12-12 04:15:40 cmd_seqnr 3
2021-12-11 23:27:57 mode enabled
2021-12-12 04:15:40 state cmd_1
2021-12-14 04:00:00 timer_01_c01 15.12.2021 04:00:00
2021-12-12 04:15:40 wait_timer no timer
Regex:
accu:
collect:
attr:
cmdState:
wait:
0:
0
20
920
1:
0
waitdel:
condition:
0 ::DOIF_time_once($hash,0,$wday)
days:
do:
0:
0 set HUEDevice18 on-for-timer 17
1 set HUEDevice9 on-for-timer 900
2 set HUEDevice7 on-for-timer 17
1:
0 set HUEDevice9 off
helper:
DEVFILTER ^global$
NOTIFYDEV global
event timer_1
globalinit 1
last_timer 1
sleepdevice timer_1
sleepsubtimer -1
sleeptimer -1
timerdev
timerevent timer_1
triggerDev
timerevents:
timer_1
timereventsState:
timer_1
triggerEvents:
timer_1
triggerEventsState:
timer_1
interval:
intervalfunc:
localtime:
0 1639537200
realtime:
0 04:00:00
time:
0 04:00:00
timeCond:
0 0
timer:
0 0
timers:
0 0
triggertime:
1639537200:
localtime 1639537200
hash:
uiState:
uiTable:
Attributes:
do always
room Kellerlüftung
wait 0,20,920:0
Das hat mit wait nichts zu tun, sondern mit der Tatsache, dass DOIF im FHEM-Modus zustandsorientiert arbeitet. Ich merke, du hast die Commanderf zum DOIF noch nicht intensiv genug studiert :)
Dieser Absatz steht direkt in der Einleitung in der Commadref zu DOIF:
ZitatDas DOIF-Modul arbeitet mit Zuständen. Jeder Ausführungszweig DOIF/DOELSEIF..DOELSEIF/DOELSE stellt einen eigenen Zustand dar (cmd_1, cmd_2, usw.). Das Modul merkt sich den zuletzt ausgeführten Ausführungszweig und wiederholt diesen standardmäßig nicht. Ein Ausführungszweig wird erst dann wieder ausgeführt, wenn zwischenzeitlich ein anderer Ausführungszweig ausgeführt wurde, also ein Statuswechsel des DOIF-Moduls stattgefunden hat. Dieses Verhalten ist sinnvoll, um zu verhindern, dass zyklisch sendende Sensoren (Temperatur, Feuchtigkeit, Helligkeit, usw.) zu ständiger Wiederholung des selben Befehls oder Befehlsabfolge führen. Das Verhalten des Moduls im FHEM-Modus kann durch diverse Attribute verändert werden. Im FHEM-Modus wird maximal nur ein Zweig pro Ereignis- oder Zeit-Trigger ausgeführt, es gibt nur einen Wait-Timer.
Hallo,
sorry konnte gestern nicht mehr antworten. Ist was dazwischen gekommen.
Heute nacht hat es funktioniert und der Lüfter hat sich um 4:00 Uhr eingeschaltet.
Und Du hast recht, ich habe anscheindend das Prinzip noch nicht verstanden (wie auch manch andere FHEM-Steuerungen; bin leider nicht vom Fach und habe das Grundverständnis leider noch nicht erreicht).
Die Commandref habe ich mir zwar angeschaut aber es anscheinden falsch verstanden.
Habe es so verstanden, dass ein Ausführungszweig wie in meinem Beispiel das "([04:00])" ist und der andere "DOELSE (set HUEDevice9 off)".
Dann würde doch immer, wenn es gerade nicht 4:00 Uhr ist, der Ausführungszweig mit DOELSE ausgeführt (weil es nicht 4:00 Uhr ist) und somit ein Statuswechsel stattfinden.
Habe ich das anscheinend nicht richtig verstanden?
Naja, bei deiner Definition kann der DOELSE-Fall gar nicht auftreten.
Um 4:00 Uhr wird getriggert und da ist die Bedingung immer wahr, also wird immer der erste Zweig ausgeführt. Da es keine weiteren Trigger gibt, kann der DOELSE-Fall nie zuschlagen.
Das leuchtet mir jetzt ein.
Dann sollte mein anderer dazugehöriger DOIF demnach ohne "do always" funktionieren?
Der erste Ausführungszweig wäre demnach der Teil mit den Bedingungen für Temperatur und dewpoint und der zweite Ausführungszweig bei DOELSE.
Wenn der erste nicht zutrifft würde der zweite zutreffen und umgekehrt; und somit nach der Zeit von 4800 Sekunden (repeatcmd) erneut von vorne beginnen?
Internals:
DEF ([deltadewpoint:state]>2.3 and
[KEL_LUFTFEUCHTIGKEIT:temperature]>8.5 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<12)
(set HUEDevice18 on-for-timer 17)
(set HUEDevice9 on-for-timer 1200)
(set HUEDevice7 on-for-timer 17)
DOELSE
(set HUEDevice9 off)
FUUID 6060ee07-f33f-f59f-9eb7-12b1002aa68bffa8
MODEL FHEM
NAME TAUPUNKT_LUEFTUNG_NORMAL
NOTIFYDEV deltadewpoint,global,KEL_LUFTFEUCHTIGKEIT
NR 111
NTFY_ORDER 50-TAUPUNKT_LUEFTUNG_NORMAL
STATE cmd_1
TYPE DOIF
VERSION 24905 2021-09-01 18:35:54
Helper:
DBLOG:
state:
DbLog:
TIME 1639566310.61321
VALUE cmd_1
READINGS:
2021-12-15 12:56:19 Device deltadewpoint
2021-12-15 12:05:10 cmd 1.3
2021-12-15 12:05:10 cmd_event deltadewpoint
2021-12-15 12:05:10 cmd_nr 1
2021-12-15 12:05:10 cmd_seqnr 3
2021-12-15 12:14:23 e_KEL_LUFTFEUCHTIGKEIT_temperature 8.61
2021-12-15 12:56:19 e_deltadewpoint_state 5.1
2021-12-15 10:50:29 mode enabled
2021-12-15 12:05:10 state cmd_1
2021-12-15 12:05:10 wait_timer 15.12.2021 13:25:10 cmd_1_1 deltadewpoint
Regex:
accu:
collect:
cond:
KEL_LUFTFEUCHTIGKEIT:
0:
temperature ^KEL_LUFTFEUCHTIGKEIT$:^temperature:
deltadewpoint:
0:
state ^deltadewpoint$:^state:
attr:
cmdState:
repeatcmd:
4800
wait:
0:
0
20
1220
1:
0
waitdel:
condition:
0 ::ReadingValDoIf($hash,'deltadewpoint','state')>2.3 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')>8.5 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')<12
do:
0:
0 set HUEDevice18 on-for-timer 17
1 set HUEDevice9 on-for-timer 1200
2 set HUEDevice7 on-for-timer 17
1:
0 set HUEDevice9 off
helper:
DEVFILTER ^global$|^deltadewpoint$|^KEL_LUFTFEUCHTIGKEIT$
NOTIFYDEV global|deltadewpoint|KEL_LUFTFEUCHTIGKEIT
event 5.1
globalinit 1
last_timer 0
sleepdevice deltadewpoint
sleepsubtimer 0
sleeptimer 0
timerdev deltadewpoint
timerevent 5.1
triggerDev deltadewpoint
timerevents:
5.1
timereventsState:
state: 5.1
triggerEvents:
5.1
triggerEventsState:
state: 5.1
internals:
readings:
all deltadewpoint:state KEL_LUFTFEUCHTIGKEIT:temperature
trigger:
uiState:
uiTable:
Attributes:
repeatcmd 4800
room Kellerlüftung
wait 0,20,1220:0
So sollte es sein.
Dann habe ich es jetzt zumindest grundsätzlich verstanden.
Danke.
Hallo.
möchte 2 devices abschalten, aber verzögert. Habe fhem neu auf bullseye aufgesetzt, und bekomme es nicht hin das die verzögerung zutrifft. lampe 2 sollte 20 sekundcen später abschalten
Internals:
CFGFN
DEF ([dummy1] eq "on") (set Socket_4_bf50219899eabfb485synp on, set Gang_oben_bfb727311ed41a0cc8ycsq switch_usb1 on)
DOELSE (set Socket_4_bf50219899eabfb485synp off, set Gang_oben_bfb727311ed41a0cc8ycsq switch_usb1 off)
FUUID 61fd0d4a-f33f-6462-46e0-8631fa18b68ac9c8
MODEL FHEM
NAME wait
NOTIFYDEV dummy1,global
NR 9161
NTFY_ORDER 50-wait
STATE cmd_2
TYPE DOIF
VERSION 25386 2021-12-28 22:19:25
READINGS:
2022-02-04 12:28:42 Device dummy1
2022-02-04 12:28:52 cmd 2
2022-02-04 12:28:52 cmd_event dummy1
2022-02-04 12:28:52 cmd_nr 2
2022-02-04 12:28:42 e_dummy1_STATE off
2022-02-04 12:27:34 mode enabled
2022-02-04 12:28:52 state cmd_2
2022-02-04 12:28:52 wait_timer no timer
Regex:
accu:
collect:
cond:
dummy1:
0:
&STATE ^dummy1$
attr:
cmdState:
wait:
0:
0
1:
10
30
waitdel:
condition:
0 ::InternalDoIf($hash,'dummy1','STATE') eq "on"
do:
0:
0 set Socket_4_bf50219899eabfb485synp on, set Gang_oben_bfb727311ed41a0cc8ycsq switch_usb1 on
1:
0 set Socket_4_bf50219899eabfb485synp off, set Gang_oben_bfb727311ed41a0cc8ycsq switch_usb1 off
helper:
DEVFILTER ^global$|^dummy1$
NOTIFYDEV global|dummy1
event off
globalinit 1
last_timer 0
sleepdevice dummy1
sleepsubtimer -1
sleeptimer -1
timerdev dummy1
timerevent off
triggerDev dummy1
DOIF_eventa:
cmd_nr: 2
cmd: 2
cmd_event: dummy1
cmd_2
DOIF_eventas:
cmd_nr: 2
cmd: 2
cmd_event: dummy1
state: cmd_2
timerevents:
off
timereventsState:
state: off
triggerEvents:
off
triggerEventsState:
state: off
internals:
all dummy1:STATE
readings:
trigger:
uiState:
uiTable:
Attributes:
group test
room DOIF
wait 0:10,30
auf einem älteren system kalppt es aber hervorragend
DOELSEIF ([Ladestrom:state] eq "50" and [Ueberschuss] <1) ("python2 /usr/local/bin/48Amp.py", setreading Wert_I A 48)
statt:
wait 0:10,30
eher
wait 0,20:0,20
hallo.
ich will ja nur abschalten verzögern, muss es daher nicht 0:0,20 sein?
hab ich aber auch getestet, klappt einfach nicht. beide schalten gleichzeitig.
Dann:
DOELSE (set Socket_4_bf50219899eabfb485synp off) (set Gang_oben_bfb727311ed41a0cc8ycsq switch_usb1 off)
wait 0:0,20
Zitat von: Damian am 04 Februar 2022, 15:05:45
Dann:
DOELSE (set Socket_4_bf50219899eabfb485synp off) (set Gang_oben_bfb727311ed41a0cc8ycsq switch_usb1 off)
wait 0:0,20
Interessant. Am alten System klappt aber noch so
DOELSEIF ([Ladestrom:state] eq "50" and [Ueberschuss] <1) ("python2 /usr/local/bin/48Amp.py", setreading Wert_I A 48)
gabs update?
Zitat von: satprofi am 04 Februar 2022, 19:00:39
Interessant. Am alten System klappt aber noch so
DOELSEIF ([Ladestrom:state] eq "50" and [Ueberschuss] <1) ("python2 /usr/local/bin/48Amp.py", setreading Wert_I A 48)
gabs update?
nein
also funktioniert es auch so, nur mit bullseye 2 klammern nötig.
Zitat von: satprofi am 05 Februar 2022, 13:43:42
also funktioniert es auch so, nur mit bullseye 2 klammern nötig.
Also wenn eine Verzögerung beim zweiten Befehl festzustellen war, dann aber nicht durch die wait-Angabe.
Verzögerungen für Befehle einer Sequenz funktionieren nur, wenn man die einzelnen Befehle separat klammert - das war immer so, siehe: https://fhem.de/commandref_DE.html#DOIF_wait
hallo.
so sollte es 100% klappen?
DOELSEIF ([Ladestrom:state] eq "50" and [Ueberschuss] <1) ("python2 /usr/local/bin/48Amp.py") (setreading Wert_I A 48)
wait 0:0,2
Zitat von: satprofi am 05 Februar 2022, 17:56:17
hallo.
so sollte es 100% klappen?
DOELSEIF ([Ladestrom:state] eq "50" and [Ueberschuss] <1) ("python2 /usr/local/bin/48Amp.py") (setreading Wert_I A 48)
wait 0:0,2
du kannst es einfach über
set wait cmd_2 ausprobieren :)
klappr leider nicht. 2. befehl wird nur abgesetzt wenn beide in 1 klammer, mit komma getrennt, stehen.
wiw gesagt, stretch mit fhem 5.8
Zitat von: Ruggy am 30 November 2021, 20:15:12
Das kann ich leider nicht..
Schau dir mal die Logo von Siemens an, die gibt es a als 230V Variante.
Zitat von: Ruggy am 30 November 2021, 20:15:12
Wäre das sicherer?
Nicht wirklich, denn du musst auch sicherstellen, dass nicht beide Steckdosen gleichzeitig schalten. Von der Verkabelung mal ganz abgesehen.