Hauptmenü

[gelöst] Doif einmal im Tag

Begonnen von choetzu, 16 Juli 2017, 16:22:24

Vorheriges Thema - Nächstes Thema

choetzu

Hallo,

herzlichen Dank für Eure Hilfen. Ich werde beide mal testen. Einmal per Dummy mit Zustand und einmal mit DOIF und Mitternachtszurücksetzung. Wobei ich die Mitternachtszurücksetzung nicht ganz verstehe (cmdstate an/aus/init), da muss ich wohl noch etwas Zeit investieren. Und was passiert nach 18.30, wenn er auf cmd2 steckt ? Denn da greift ja weder cmd1 noch cmd2 und auch nicht cmd3 sondern springt zum DOELSE, also cmd4.  Oder muss cmd3 erfüllt sein, bevor es zu DOELSE (cmd4) geht?

lg c

Raspi3, EnOcean, Zwave, Homematic

Otto123

Zitat von: choetzu am 18 Juli 2017, 10:46:40
Hallo,

herzlichen Dank für Eure Hilfen. Ich werde beide mal testen. Einmal per Dummy mit Zustand und einmal mit DOIF und Mitternachtszurücksetzung. Wobei ich die Mitternachtszurücksetzung nicht ganz verstehe (cmdstate an/aus/init), da muss ich wohl noch etwas Zeit investieren. Und was passiert nach 18.30, wenn er auf cmd2 steckt ? Denn da greift ja weder cmd1 noch cmd2 und auch nicht cmd3 sondern springt zum DOELSE, also cmd4.  Oder muss cmd3 erfüllt sein, bevor es zu DOELSE (cmd4) geht?

lg c
Dieser Satz aus der Doku sollte doch die Wirkungsweise erklären, zumindest wenn man ihn öfters mit seinem eigenen Code liest  ;)
ZitatDie Angaben werden immer von links nach rechts abgearbeitet. Zu beachten ist, dass nur die Bedingungen überprüft werden, die zum ausgelösten Event das dazughörige Device bzw. die dazugehörige Triggerzeit beinhalten. Kommt ein Device in mehreren Bedingungen vor, so wird immer nur ein Kommando ausgeführt, und zwar das erste, für das die dazugehörige Bedingung in der abgearbeiteten Reihenfolge wahr ist.
Noch von mir der Zusatz (so stelle ich mir das vor, heißt nicht das es unbedingt stimmt)
Ein Event von einem der beteiligten Geräte triggert das DOIF, daraufhin werden die Bedingungen in den einzelnen Zweigen geprüft. Passt die Bedingung in einem Zweig und führt zur Zustandsänderung, ist an der Stelle erstmal Schluss. Ändert sich der Zustand im Zweig nicht, führt das ohne do always nicht zur wiederholten Ausführung des Kommandos.

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

choetzu

Zitat von: Otto123 am 18 Juli 2017, 11:41:37
Dieser Satz aus der Doku sollte doch die Wirkungsweise erklären, zumindest wenn man ihn öfters mit seinem eigenen Code liest  ;)Noch von mir der Zusatz (so stelle ich mir das vor, heißt nicht das es unbedingt stimmt)
Ein Event von einem der beteiligten Geräte triggert das DOIF, daraufhin werden die Bedingungen in den einzelnen Zweigen geprüft. Passt die Bedingung in einem Zweig und führt zur Zustandsänderung, ist an der Stelle erstmal Schluss. Ändert sich der Zustand im Zweig nicht, führt das ohne do always nicht zur wiederholten Ausführung des Kommandos.

Gruß Otto

Herzlichen Dank für die Erläuterung. Genau deshalb habe ich meine liebe Mühe mit der Mitternachtszurücksetzung. Wenn ich doch bei cmd2 (nämlich msg Abdeckung schliessen?) bin und dann wird es wieder >1 Grad wärmer, dann spring ich doch zu cmd1 zurück, ohne dass ich bei cmd3 (Mitternachtszurücksetzung) war. Oder auch wenn es 19 Uhr ist, dann kommt doch weder cmd1, cmd2 noch cmd3 zum Tragen...

irgendwo ist bei mir der Wurm drin.
Raspi3, EnOcean, Zwave, Homematic

choetzu

#18
so, jetzt habe ich Brockmanns Variante kapiert und es hat beim Testen auch glatt funktioniert. TOP. Ich verstehe nun auch das CMDstate prinzip.. Das hat mir schlussendlich geholfen.. Mein DOIF sieht nun wie folgt aus:


([09:00-18:30] and [PoolController:Pool_Temp_Num] > 21 and ([PoolController:Pool_Aussen_Num]-[PoolController:Pool_Temp_Num]) > 0.5 and [TEMP_Abdeckung_Pool_DOIF] eq "INIT")
  (set PoolController AUF_manuell on) (set Pushover msg title="POOL Abdeckung" message="Die Poolabdeckung ÖFFNET sich")

DOELSEIF ([PoolController:Pool_Temp_Num] > 21 and ([PoolController:Pool_Aussen_Num]-[PoolController:Pool_Temp_Num]) < 0.5 and [TEMP_Abdeckung_Pool_DOIF] eq "AUF")
  (set Pushover msg title="POOL Abdeckung" message="Poolabdeckung SCHLIESSEN? ")

DOELSEIF ([00:00])
  ()

DOELSE


ATTR cmdState noch auf AUF|ZU|INIT gemacht...

Ich musste noch - zusätzlich zum Vorschlag von Brockmann - in der zweiten Bedingung eine Verbindung zu CMD1 (also "AUF") machen, damit das dann auch wirklich funktioniert..

hat jemand Einwände? ;)

Jetzt versuch ich noch via Dummy den Zustand der Abdeckung festzuhalten, damit ich es dann auch noch ins DOIF einbauen kann..
Raspi3, EnOcean, Zwave, Homematic

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Frank_Huber

Zitat von: choetzu am 18 Juli 2017, 16:25:12
so, jetzt habe ich Brockmanns Variante kapiert und es hat beim Testen auch glatt funktioniert. TOP. Ich verstehe nun auch das CMDstate prinzip.. Das hat mir schlussendlich geholfen.. Mein DOIF sieht nun
hat jemand Einwände? ;)

Einwände nicht, aber das DOELSE am Ende kann denke ich raus. das hat keinen Zweck.

choetzu

#21
Zitat von: Frank_Huber am 18 Juli 2017, 16:45:18
Einwände nicht, aber das DOELSE am Ende kann denke ich raus. das hat keinen Zweck.

Ganz wichtig, danke. Denn mit dem DOELSE geht es nicht, denn nach Mitternacht würde es auf cmd4 gehen, was somit dann nicht mehr funktionieren würde (da nicht mehr INIT).

Danke für den Hinweis..

Zitat von: amenomade am 18 Juli 2017, 16:44:23
and [?$SELF:cmd] eq "1"

danke, ginge auch anstelle von "AUF". oder willst du mich auf einen Fehler hinweisen?
Raspi3, EnOcean, Zwave, Homematic

amenomade

Nicht nur "kann" sondern MUSS weg. Ansonsten wechselt das DOIF auf cmd_4 sobald die Bedingung 2 nicht mehr wahr ist, und das DOIF ist dann konkret wieder Bereit auf cmd_1 zu gehen, sobald Bedingung 1 wieder wahr ist.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

Wobei... es wird sowieso nicht wie gewünscht funktionieren. Egal ob DOELSE oder nicht, wird das DOIF nach cmd_2 wieder bereit für cmd_1.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

Sowas funktioniert wie gewünscht:

([schalter] eq "on" and [?$SELF:cmd] ne "2")
   (öffnen)
DOELSEIF ([schalter] eq "off" and [?$SELF:cmd] eq "1")
   (schliessen)
DOELSEIF ([schalter1] eq "on")
   ()


schalter simuliert deine Bedingungen
schalter1 wäre bei dir [00:00] zum Reinit einmal am Tag um Mitternacht.

cmd_1 wird nur durchgeführt, wenn Du vorher nicht im cmd_2 bist.
cmd_2 wird nur durchgeführt, wenn Du aus cmd_1 kommst.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

Also:
([09:00-18:30]
and [PoolController:Pool_Temp_Num] > 21
and ([PoolController:Pool_Aussen_Num]-[PoolController:Pool_Temp_Num]) > 0.5
and [?$SELF:cmd] ne "2")
(set PoolController AUF_manuell on)
(set Pushover msg title="POOL Abdeckung" message="Die Poolabdeckung ÖFFNET sich")

DOELSEIF ([09:00-18:30]
and [PoolController:Pool_Temp_Num] > 21
and ([PoolController:Pool_Aussen_Num]-[PoolController:Pool_Temp_Num]) < 0.5
and [?$SELF:cmd] eq "1" )
(set Pushover msg title="POOL Abdeckung" message="Poolabdeckung SCHLIESSEN?.")

DOELSEIF ([00:00])
()


Aber wie schon gesagt:
- wenn z.B. jemand den Pool manuell geöffnet hat, wird das DOIF nix tun (und nicht durch cmd_2 fragen)
- der Pool wurde durch das DOIF geöffnet, aber jemand schliesst den manuell => cmd_2 wird trotzdem fragen, ob Du schliessen willst.
- der Pool wurde manuell geöffnet, dann manuell geschlossen. Werden die Bedigungen 1 dann wahr, wird durch das DOIF den Pool wieder geöffnet.

Deswegen bleibe ich auf meiner Empfehlung: irgendwie einen echten Zustand des Pools ablesen, egal ob manuell oder automatische angestossen.



Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

choetzu

Hallo,
super, das werde ich so machen. Frage:

Du machst bei der cmd1-Bedingung
and [?$SELF:cmd] ne "2")

Wieso nicht
and [?$SELF:cmd] eq "3")

?

Kommt doch m.E. aufs Selbe raus, oder?
Raspi3, EnOcean, Zwave, Homematic

amenomade

Zitat
and [?$SELF:cmd] eq "3")

Kommt doch m.E. aufs Selbe raus, oder
Ausser wenn das System neugestartet worden ist, oder wenn Du die definition gerade geändert hast, oder wenn Du ein "set <doif> initialize" durchführst. Dann ist cmd auf "0". Ansonsten hast Du recht; im "normalen Betrieb" könnte eq "3" funktionieren.

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

choetzu

So, ich habe nun den Zustand der Abdeckung mit eingebaut. Weiter musste ich noch eine Anpassung machen. Bei
and [?$SELF:cmd] ne "2") muss anstelle von cmd nämlich cmd_nr stehen, sonst geht es nicht. Denn bei mir stand bei cmd 1.2 und dann hat es natürlich nicht funktioniert. Hier die richtige Definition:

([09:00-18:30]
and [Abdeckung_Dummy] eq "GESCHLOSSEN"
and [PoolController:Pool_Temp_Num] > 21
and ([PoolController:Pool_Aussen_Num]-[PoolController:Pool_Temp_Num]) > 0.1
and [?$SELF:cmd_nr] ne "2")
(set PoolController AUF_manuell on)
(set Pushover msg title="POOL Abdeckung" message="Die Poolabdeckung ÖFFNET sich")

DOELSEIF
([09:00-23:00]
and [Abeckung_Dummy] eq "OFFEN"
and [PoolController:Pool_Temp_Num] > 21
and ([PoolController:Pool_Aussen_Num]-[PoolController:Pool_Temp_Num]) < 0.1
and [?$SELF:cmd_nr] eq "1" )
(set Pushover msg title="POOL Abdeckung" message="Poolabdeckung SCHLIESSEN?.")

DOELSEIF ([00:00])
()


Danke nochmals..
Raspi3, EnOcean, Zwave, Homematic

Otto123

Moin,

poste doch für so eine finale Lösung doch die Raw Definition (ohne setState), da sind die attr mit dabei, die sind bei DOIF doch sehr wesentlich!


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