Hauptmenü

[gelöst] Doif einmal im Tag

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

Vorheriges Thema - Nächstes Thema

choetzu

Hallo
Ich habe ein Doif kreiert,  welcher meine Poolandeckung öffnet, wenn die Aussentemperatur >2 Grad zur Wassertemp ist. Nun kann es vorkommen dass zwischzeitlich durch den Tag die Temperatur kurz (aufgrund von Wolken ) wieder unter >2 kommt und dann wieder drüber, wonach er wieder die Abdeckung öffnen will, obschon ich nicht geschlossen habe. Dies möchte ich vermeiden.

Kann man dies vermeiden indem man nur einmal pro Tag den ersten Befehl ausführt?  Und um Mitternacht stellt es wieder zurück..

Cmdwait?

Lg c



Gesendet von iPhone mit Tapatalk Pro
Raspi3, EnOcean, Zwave, Homematic


choetzu

Danke für den Hinweis. Ich habs gelesen. Leider ist es nicht ganz das selbe.

Ich habe es so definiert:

([09:00-18:30] and [PoolController:Pool_Temp_Num] > 21 and ([PoolController:Pool_Aussen_Num]-[PoolController:Pool_Temp_Num]) > 1) (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]) < 1 and [PoolController:AUF_manuell:sec] < 28800) (set Pushover msg title="POOL Abdeckung" message="Poolabdeckung SCHLIESSEN?.")

DOELSE

attr Pool_DOIF wait 600:600


Also wenn die Temperatur des Pools tagsüber >21 Grad und die Differenz Luft/Pool >1 Grad sind, dann soll es die Abdeckung öffnen und mich benachrichtigen. Wenn aber die Differenz tagsüber <1 Grad ist und der Pool vor weniger als 8 Stunden geöffnet wurde (so verhindere ich, dass ich gefragt werde, auch wenn es nicht offen ist), dann werde ich gefragt/benachrichtigt, ob ich die Abdeckung schliessen möchte.

Nehmen wir nun an die erste Bedingung (cmd1) wird erfüllt und 1std später die zweite Bedingung (cmd2), weils grad mehr als 10min wolkig ist, dann wird etwas später, nämlich wenn die Sonne wieder kommt, die Abdeckung wieder geöffnet (cmd1), obschon Sie offen ist..

Also ich möchte eigentlich, dass pro Tag die cmd-Sequenz nur einmal durchgeführt wird. Mit dem Linkbeispiel bring ich das nicht hin, da ich Zeitangaben in meinen Bedingungen habe.. Oder habe ich etwas überlesen?

Wichtig zu wissen ist, dass meine Abdeckung nur Befehle ausführen kann und keinen Zustand meldet. Also, ich kann nicht abfrage, ob es offen ist oder nicht.

Lg C
Raspi3, EnOcean, Zwave, Homematic

choetzu

Könnte es gehen, wenn ich einfach ein weitere Bedingung angebe, also ein cmd3

DOELSEIF ([09:00-18:30])


also Total:

([09:00-18:30] and [PoolController:Pool_Temp_Num] > 21 and ([PoolController:Pool_Aussen_Num]-[PoolController:Pool_Temp_Num]) > 1) (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]) < 1 and [PoolController:AUF_manuell:sec] < 28800) (set Pushover msg title="POOL Abdeckung" message="Poolabdeckung SCHLIESSEN?.")

DOELSEIF ([09:00-18:30])

DOELSE


dann bleibt er doch nach cmd1 und cmd2 bei cmd3 hängen.. Oder?
Raspi3, EnOcean, Zwave, Homematic

amenomade

Nein, der wird nicht in cmd_3 kommen, da kein weiteres "Zeit" Event generiert wird.

Zitat(so verhindere ich, dass ich gefragt werde, auch wenn es nicht offen ist)
Hast du keine andere Möglichkeit um zu wissen, ob es offen ist? Irgendwelches Reading oder State ?
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

Ich könnte mir ein Dummy basteln, der den Zustand übernimmt. Sehe aber grad nicht, wie dies mein Problem lösen sollte ;) was übersehe ich?
Raspi3, EnOcean, Zwave, Homematic

amenomade

Dein Problem ist : [PoolController:AUF_manuell:sec] < 28800

Wenn Du folgendes hättest, hättest Du kein Problem:
[?Pool] eq "offen"
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

Nicht ganz. Denn während cmd1 die Abdeckung öffnet, macht cmd2 nicht anderes als mir ne Nachricht schicken. Die Abdeckung geht nicht zu, da ich dies immer manuell machen will (=Sicherheit). Wenn also cmd2 ist und dann wieder sonnig, schaltet es mir die Abdeckung wieder auf öffnen obschon ich gar nicht geschlossen habe..

Oder bin ich völlig verwirrt?
Raspi3, EnOcean, Zwave, Homematic

amenomade

#8
Ja aber dann könntest Du in Bedingung 1 " and [?Pool] eq "zu" " hinzufügen, und in Bedingung 2 "and [?Pool] eq "offen".

Vielleicht verstehe ich nicht ganz, wie dein Ding funktioniert. Was ist Poolcontroller für ein Device? Kannst Du ein "list" davon posten?

Ansonsten könnte man auch in Bedingung 2 testen, ob cmd_1 vorher durchgeführt worden ist. Aber was denn, wenn jemand "manuell" irgendwann geöffnet oder geschlossen hat?

Deswegen wäre die einfachste Lösung m.A. mit einem Zustand. Kann man nicht einfach testen, ob PoolController:AUF_manuell auf "on" ist?

EDIT: und was soll um 18:30 passieren, wenn es immer noch im Zustand cmd_1 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

Brockmann

Zitat von: choetzu am 16 Juli 2017, 16:22:24
Kann man dies vermeiden indem man nur einmal pro Tag den ersten Befehl ausführt?  Und um Mitternacht stellt es wieder zurück..
Ihr seid zwar in der Diskussion zwar schon etwas weiter, aber das "einmal pro Tag" könntest Du so lösen:

Die zusätzliche Bedingung
DOELSEIF([00:00])()
wird um Mitternacht wahr und setzt das DOIF dann auf diesen Status (Nummer X oder zugeordneter cmdstate).
In der Bedingung für den nur einmal auszuführenden Befehl dann zusätzlich den Status des DOIFs abfragen
and [Name_des_DOIFs] eq "Status_der_Mitternachtsbedingung"

Oder mal komplett:
define DI_Test DOIF (Bedingung1 eq "Parameter1" and Bedingung2 >= Parameter2 and [DI_Test] eq "init")
  (set irgendwas irgendwie)
DOELSEIF (Bedingung1 eq "Parameter1" and Bedingung2 < Parameter2 and [irgendwas:state:sec] < 28800)
  (set irgendwas anders)
DOELSEIF ([00:00])
  ()
attr DI_Test cmdstate an|aus|init

ungetestet und ohne Gewähr...

Damit sollte die erste Aktion grundsätzlich nur einmal pro Tag ausgeführt werden, wenn zum ersten Mal nach Mitternacht die Bedingungen erfüllt sind.

amenomade

#10
Nein, wird nicht gehen.

and [DI_Test] eq "init"Zuerst wäre es eher "initialized" statt "init". Zweitens geht ein DOIF nur auf "initialized" wenn man entweder die Definition ändert, oder explizit ein set <doif> intialize macht.
Mit deiner Definition, wird das DOIF um Mitternacht auf cmd_3 wechseln, und kann dann nie mehr cmd_1 erreichen.

Es gibt zwar eine andere Möglichkeit, das zu machen, was choetzu will. Aber ich versuche zuerst zu wissen, ob es eine einfachere Möglichkeit über einen Zustant gäbe.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Otto123

Hi,

Wenn Du es so machst:([09:00-18:30] and [PoolController:Pool_Temp_Num] > 21 and ([PoolController:Pool_Aussen_Num]-[PoolController:Pool_Temp_Num]) > 1) (set PoolController AUF_manuell on) (set Pushover msg title="POOL Abdeckung" message="Die Poolabdeckung ÖFFNET sich")
Also ohne einen weiteren Zweig!
Macht er es genau einmal am Tag  ;)

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

amenomade

Stimmt. Aber er fragt dann nicht mehr, ob man irgendwann schliessen möchtet ;)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Otto123

Ich habe aber die Textaufgabe aus #1 so verstanden  8)
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

Brockmann

Zitat von: amenomade am 17 Juli 2017, 21:25:42
Nein, wird nicht gehen.

and [DI_Test] eq "init"Zuerst wäre es eher "initialized" statt "init". Zweitens geht ein DOIF nur auf "initialized" wenn man entweder die Definition ändert, oder explizit ein set <doif> intialize macht.
Mit deiner Definition, wird das DOIF um Mitternacht auf cmd_3 wechseln, und kann dann nie mehr cmd_1 erreichen.
Ich finde, mit Beurteilungen wie "wird nicht gehen" sollte man sich zurückhalten, solange man den Code nicht selbst ausprobiert oder zumindest komplett gelesen und verstanden hat.

"init" wird verwendet, weil dieser Status per cmdState-Attribute für cmd_3 gesetzt wird. Deshalb kann das DOIF anschließend auch wieder cmd_1 bzw "an" erreichen und deshalb "wird es gehen".