DOIF und Wait für Lüftersteuerung und Relais

Begonnen von Ruggy, 29 November 2021, 22:32:39

Vorheriges Thema - Nächstes Thema

Ruggy

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

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?

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ruggy

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.

Damian

Dann poste das list vom DOIF, wo du kein wait auswählen kannst.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ruggy

#5

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

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ruggy

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.



Damian

#8
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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ruggy

#9
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?).


Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ruggy

#11
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?

Damian

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

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ruggy

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?

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF