Aufbau einer Schaltung für Aussenbeleuchtung mit Dämmerung und Zufall (DOIF)

Begonnen von moonsorrox, 18 November 2014, 21:04:47

Vorheriges Thema - Nächstes Thema

moonsorrox

ich versuche mir eine Schaltung mit einem Dummy für meine Aussenbeleuchtung zu bauen, die einmal folgendes machen soll
1. Aus - ist klar komplett ausgeschaltet
2. Dämmerung - hier sollen sich die Zeiten nach Sonnenuntergang richten mit evtl. anderen Zeiten am Wochenende
3. Zufall - eine Art Anwesenheitssimulation zu verschiedenen Zeiten (noch nicht fertig)


zu Punkt 2. das funktioniert nun mit folgenden Code siehe unten
Der Code für die Dämmerung wäre so wie ich das haben möchte.
Die erste Lampe wird zu einer 1. Zeit "Ein" geschaltet, dann zu einer 2. Zeit wieder "Aus" geschaltet hier wird dann die 2.Lampe "Ein" geschaltet und diese soll dann zu einer festen Zeit wieder ausgehen.


zu Punkt 3. es ist leider nicht möglich dieses mit einem DOIF zu machen, also möchte ich hier erreichen, wenn das Dummy auf Zufall steht, dass ein RandomTimer eingeschaltet wird.
Gelöst habe ich es mit zwei weiteren notify die mir den Zufallstimer Aus/Ein schalten.
Ein netter User hat hier eine weitere Möglichkeit gezeigt, die ich jetzt auch im Einsatz habe...
Hier die Erklärung dazu:

Du könntest also das bestehende DOIF erweitern um
DOELSEIF([Zeitsteuerung] eq "Dämmerung")(attr ZufallsTimerAussenlicht disable 1)
DOELSEIF([Zeitsteuerung] eq "Zufall")(attr ZufallsTimerAussenlicht disable 0)


wobei es so noch konsequenter wäre für Dämmerung und Aus:
DOELSEIF([Zeitsteuerung] ~= "Dämmerung|Aus")(attr ZufallsTimerAussenlicht disable 1)



Hier der Code für das Dummy:

#### Zeitsteuerung Dummy ###
define Zeitsteuerung dummy
attr Zeitsteuerung alias Zeitsteuerung aktivieren
attr Zeitsteuerung devStateIcon Aus:general_aus@lightgreen Dämmerung:weather_sunrise@blue Zufall:general_an_fuer_zeit@Crimson
attr Zeitsteuerung eventMap Aus Dämmerung Zufall
attr Zeitsteuerung group Aussen Beleuchtung
attr Zeitsteuerung icon time_clock
attr Zeitsteuerung room Automation
attr Zeitsteuerung setList state:Aus,Dämmerung,Zufall
attr Zeitsteuerung sortby 01
attr Zeitsteuerung webCmd state


Hier der Code für die Kondition 2. "Dämmerung":

define di_Aussenlampe DOIF ( [Zeitsteuerung] eq "Dämmerung" and ([{sunset("CIVIL",1200,"17:00","22:20")}|12345] or [{sunset("CIVIL",800,"17:00","22:20")}|06]))\
    (set WegLampe_Sw_01 on)\
DOELSEIF ( [Zeitsteuerung] eq "Dämmerung" and ([{sunset("CIVIL",9000,"19:00","22:20")}|0123456]))\
    (set WegLampe_Sw_01 off,set WegLampe_Sw_02 on)\
DOELSEIF ([Zeitsteuerung] eq "Dämmerung" and ([00:15|12345] or [01:15|06]))\
    (set WegLampe_Sw_02 off)\
\
\

attr di_Aussenlampe room Automation


Hier der Code für die Kondition 3. "Zufall":

define umschaltung_RT_Aus notify Zeitsteuerung:Dämmerung attr ZufallsTimerAussenlicht disable 1
attr umschaltung_RT_Aus room Automation

define umschaltung_RT_Ein notify Zeitsteuerung:Zufall attr ZufallsTimerAussenlicht disable 0
attr umschaltung_RT_Ein room Automation


Der Code für ZufallsTimerAussenlicht ist dann individuell von jedem selbst zu erstellen, je nachdem was man möchte.
Viel Spaß und Funktion damit ;)
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Brockmann

Zitat von: moonsorrox am 18 November 2014, 21:04:47
Frage dazu...?
Für die Ausschaltzeit der 2. Lampe muss ich dann extra ein DOIF einsetzen zum Ausschalten, oder kann ich die hinten dran setzen..?
Klar kannst Du das hinten dran setzen. Im Prinzip kannst Du das alles (bis auf den Dummy) in ein einziges DOIF packen. Die Zeitsteuerung-DOIFs lässt Du weg und verwendest statt dessen den Dummy direkt in der Kondition, also etwa so (ohne die Klammern gezählt zu haben):


define di_Aussenlampe DOIF ( [Zeitsteuerung] eq "Dämmerung" and ([{sunset("CIVIL",1800,"18:00","22:20")}-{sunset("CIVIL",9000,"18:00","22:20")}|8] or [{sunset("CIVIL",2400,"18:00","22:20")}- {sunset("CIVIL",9600,"18:00","22:20")}|7]))
    (set WegLampe_Sw_01 on)
DOELSEIF  ([Zeitsteuerung] eq "Zufall" and ([{sunset("REAL",1800,"17:00","22:20")}-{sunset("REAL",9000,"18:00","22:20")}|8] or [{sunset("REAL",2400,"17:00","22:20")}-{sunset("REAL",9600,"18:00","22:20")}|7] ))
    (set WegLampe_Sw_01 on)
DOELSE
    (set WegLampe_Sw_01 off,set WegLampe_Sw_02 on)


Das hätte noch den Nebeneffekt, dass Du den Status jederzeit (auch während der Dämmerung) ändern könntest und die Lampen würde sofort reagieren. Im Moment würde das nämlich bis zum nächsten Zeittrigger nichts bewirken.

PS: Das mit RandomTimer hast Du vielleicht noch nicht richtig durchschaut. Dieses Modul liefert nicht Zufallszeiten, sondern würde die zufallsbasierte Steuerung Deiner Lampen nach Deinen Vorgaben komplett übernehmen. Die Logik wäre also:
Zeitsteuerung = "Dämmerung" -> DOIF aktivieren, RandomTimer deaktivieren
Zeitsteuerung = "Zufall" -> DOIF deaktivieren, RandomTimer aktivieren

moonsorrox

OK das hört sich alles sehr gut an... da mache ich mich mal ran und werde den Code modifizieren...

Hatte aus verschiedene Beiträge so das wichtigste für mich heraus gesucht und erst einmal losgelegt... Ich habe gestern Abend/Nacht noch etwas experimentiert und habe eine Ausschaltzeit für die Tage [7|8] also Werktage und Wochenende definiert (evtl. baue ich das separat auf also Werktage anders als Wochenende) und immer mal probiert, leider hat das nicht geklappt, anstatt das die Lampe die zuletzt leuchtet ausgeht ist die andere mit angegangen  :-\ muss heute mal suchen, war evtl. zu spät  ;)

Zu deinem Hinweis mit dem RandomTimer, dass wollte ich als nächstes angehen.
Meine Variante wäre gewesen (natürlich mit den beiden Dummys) die Schaltzeiten aus dem DOIF komplett raus zu nehmen und den RandomTimer einzusetzen... die Umschaltung muss ich mir einmal überlegen wie ich das mache..!
Die jetzigen Sunset Zeiten sind nur erst einmal drin, dass ist dann jetzt die nächste Baustelle.
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

moonsorrox

umgebaut habe ich das jetzt mal...
ich will ja jetzt noch für das DOIF "Dämmerung" ein Ausschaltzeit für für die Wochentage und das Wochenende rein bringen und Sunset für "Zufall" kommt ja weg dafür soll ja der RandomTimer rein, siehe unten ;)

wenn ich das richtig verstanden habe brauche ich doch eigentlich "nur" in diesem Bereich des Code:

DOELSEIF  ([Zeitsteuerung] eq "Zufall" and ([{sunset("REAL",1800,"17:00","22:20")}-{sunset("REAL",9000,"18:00","22:20")}|8] or [{sunset("REAL",2400,"17:00","22:20")}-{sunset("REAL",9600,"18:00","22:20")}|7] ))
    (set WegLampe_Sw_01 on)


alles was hinter "Zufall" and kommt, dann gegen den RandomTimer (mit dem ich mich als nächstes beschäftige) ersetzen, oder wird das nichts..? Denn nur als Hinweis, die "sunset" Geschichten habe ich nur erst mal rein geschrieben damit ich da was drin habe zum testen, denn das wird ja nur bei Dämmerung gebraucht
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Brockmann

Vielleicht schaust Du erstmal, dass das DOIF für die reguläre Dämmerung (ohne Zufall) so läuft, wie Du es möchtest. Und dann schaust Du Dir mal in Ruhe RandomTimer an und überlegst, wie Du beides verbinden kannst.

moonsorrox

ich bin an beiden dran  8)
ich probiere gerade das Dämmerungs DOIF aber dieses stellt mich vor Probleme...
Mal als Erklärung wie es sein soll die 1. Lampe geht ja mit der Dämmerungs Kondition an, über eine zweite Kondition wieder aus und die 2. Lampe soll genau mit dieser Kondition einschalten und mit einer fest gesetzten Endzeit ausschalten. Das gleiche gilt dann mit dem Wochenende wo ich die Zeiten dann eben etwas verändere... Hoffentlich habe ich das soweit verständlich erklärt.

Der Code sollte eigentlich schon soweit OK sein nur eben die Endzeit Abschaltzeit ist da noch nicht drin


viel später dann die RT Sachen ;)

Die RandomTimer Kondition habe ich erst mal als eigenständiges Dummy erstellt (das integrieren in die Zufalls Steuerung habe ich bis auf jede Menge Syntaxfehler noch nicht gebacken bekommen  :-\ aber das eben später
Dummy sieht momentan so aus zum testen für eine andere Aussenlampe:
define Zufall dummy
attr Zufall room Automation
attr Zufall webCmd ja:nein

define ZufallsTimerAussenlicht RandomTimer *{sunset_abs("CIVIL")} AussenLampe 01:05:00 480 800/100
attr ZufallsTimerAussenlicht room Automation
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

moonsorrox

ich habe mal etwas getestet, mir ist nicht klar welcher Timer was macht zu diesem Code aus dem DEF
ich habe erst mal zum probieren die ersten beiden Timer zeitlich angepasst und es funktioniert mit den Zeit und der Umschaltung

Die 1. Lampe ist richtig um 15.45 Uhr angegangen und um 15.46 aus, dann ging die 2. Lampe an.
d.h. ich definiere mit dem 1.Timer die Einschaltzeit und mit dem 2.Timer die Ausschaltzeit
Die Zeitsteuerung für Zufall überspringt er ja.

Mit der DOELSE Kondition macht er die Umschaltung..?
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Brockmann

Ich würde in diesem Fall ein DOELSE vermeiden und nur mit DOELSEIFs arbeiten, die sicherstellen, dass bestimmte Aktionen eben nur ausgeführt werden, wenn die Voraussetzungen dafür stimmen.
Das Ausschalten kannst Du über ein zusätzliches DOELSEIF einbauen:

DOELSEIF ([Zeitsteuerung] eq "Dämmerung" and ([23:59|8] or [22:59|7]))
    (set WegLampe_Sw_02 off)


Da kannst Du Deine Uhrzeiten rein setzen, an denen die Lampe 2 ausgehen soll.
Allerdings muss Du selbst darauf achten, dass die Logik stimmt, also das dieser Ausschaltzeitpunkt hinter dem spätestens Zeitpunkt liegt, den das von Dir definierte sunset-Intervall im Verlauf des Jahres liefern kann.
Wenn Du [Zeitsteuerung] eq ... weglässt, würde die Lampe auch ausgeschaltet, wenn Zeitsteuerung auf "Zufall" steht.

moonsorrox

was ich absolut noch nicht verstehe - er liest ja von links nach rechts den Code soweit ich das verstanden habe.
Der Einschaltzeitpunkt heute war OK aber die Umschaltung von Lampe 1 auf Lampe 2 war leider viel zu früh..!
Eingeschaltet hat er nach dem Log um 17.14 aber die Umschaltung haut nicht hin sollte eigentlich der Timer (ca.2Std später) mit der Zeit 19.40 Uhr sein, aber genommen hat er einen anderen Timer ich weiß gar nicht welcher das sein soll mit einer Zeit um 17.31 das ist Timer 7 der ist aber gar nicht in der Dämmerungssteuerung drin, der ist bei Zufall drin und sollte doch gar nicht schalten...
Das verstehe ich jetzt nicht  :-\


2014.11.20 17:31:24 3: CUL_HM set WegLampe_Sw_02 on
2014.11.20 17:31:24 3: CUL_HM set WegLampe_Sw_01 off
2014.11.20 17:14:44 3: CUL_HM set WegLampe_Sw_01 on
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Puschel74

Hallo,

hat zwar mit Beleuchtung nix zu tun aber

Die commandref zu DOIF (auch auf Deutsch) und den Beitrag zu DOIF in Automatisierung hast du gelesen ???
Damian hat dort wirklich jede Menge Fragen geklärt und es wäre vielleicht zielführender direkt dort zu Fragen als hier einen Beitrag zu öffnen und dann mMn unnötig "aufzublähen".

Grüße

P.S.: Nein auch wenn es um eine Beleuchtung geht, DOIF ist DOIF und sollte auch dort behandelt werden wo es hingehört - Automatisierung.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

moonsorrox

also es läuft grad chaotisch durcheinander der Timer 6 (so die Anzeige in den Readings 22.11.2014 01:15:00|7) schaltete die Lampe 2 um 01.15 Uhr wieder an obwohl er eigentlich laut commandref
ZitatNur am Wochenende bzw. an Feiertagen lt. holiday-Datei (7 entspricht $we)

arbeiten sollte. Feiertag ist auch nicht..!

Zitat von: Puschel74 am 20 November 2014, 21:24:19
Die commandref zu DOIF (auch auf Deutsch) und den Beitrag zu DOIF in Automatisierung hast du gelesen ???
Damian hat dort wirklich jede Menge Fragen geklärt und es wäre vielleicht zielführender direkt dort zu Fragen als hier einen Beitrag zu öffnen und dann mMn unnötig "aufzublähen".
ja ich habe die Commandref gelesen immer wieder und immer wieder und habe dazu einige Versuche hinter mir (siehe oben wieder), nur eben leider ohne den Erfolg den ich gern hätte und dann frage ich... könnte ja sein das, wenn ich dann den Erfolg habe mit Hilfe des Forum das ich es dann verstanden habe..!  :-\
Momentan verstehe ich nichts obwohl ich wie am obigen Bsp. mich an die commandref gehalten habe...!

Es ist ja nicht so das ich hier ein fertig entwickelte Schaltung bekomme, denn auch ich habe mit dem Anfang schon einiges dazu beigesteuert.
Es ist hier schon ein ziemlich mit Timern verschachteltes DOIF welches wirklich erst mal verstanden werden muss...!
Jetzt wurde alles etwas umgestellt und ich verstehe dabei einiges nicht und dies möchte ich bis zum Ende fertig bringen... und wenn jemand hier rein schaut sieht er den Weg (hoffentlich) zum Ziel... und kann es evl. für sich nutzen.

Nichts für ungut, aber was ist jetzt an 9 Beiträgen (ohne deinen, der rein gar nichts bringt) aufgebläht...

Wenn du meinst es sollte in Automatisierung verschoben werden, dann verschiebe es doch gern  ;)
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Puschel74

Die Frage zur Beleuchtung hat in Automatisierung nichts zu suchen.
Aber DOIF wird dort behandelt.
Und alles was jemand sieht der sich diesen Beitrag anschaut ist - Chaos.
Warum fragst du nicht einfach im DOIF-Beitrag?
Damian wird sich dann vermutlich die Zeit nehmen und dir das alles erklären (er hat DOIF ja auch programmiert).
Aber klar, du kannst mit deiner Frage auch gerne hier weiter machen (und ich werde mich zukünftig raus halten).
So frei nach dem Motto - warum einfach wenn es auch umständlich und langwierig geht  ;)

Edith: Nein, ich kann dir zu deinem Problem leider keine Hilfestellung geben ausser - frag doch direkt den Programmierer der Funktion  8)
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Brockmann

Zitat von: moonsorrox am 21 November 2014, 00:26:31
also es läuft grad chaotisch durcheinander der Timer 6 (so die Anzeige in den Readings 22.11.2014 01:15:00|7) schaltete die Lampe 2 um 01.15 Uhr wieder an obwohl er eigentlich laut commandref
arbeiten sollte. Feiertag ist auch nicht..!
Bist Du auf dem aktuellen Stand (Update)? Bei den Feiertagen war noch ein Bug drin, der erst vor ein paar Tagen behoben wurde.

Ansonsten: Das Problem dürfte das DOELSE sein (und ich erspare mir jegliches "habe ich doch gesagt"  ;) ).
Du hast auch für Zufall einen Zeitraum mit sunset bestimmt. Der wird getriggert, wenn dieser Zeitpunkt erreicht wurde. Dann stellt DOIF fest, dass die andere Bedingung ("Zufall") nicht erfüllt ist. Also scheitert das DOELSEIF und DOIF schaut, was sonst noch geht - richtig, das DOELSE geht immer! Deshalb schaltet es Lampe 1 aus und Lampe 2 an, wenn der Zeitintervall für Zufall beginnt.

moonsorrox

@Puschel74
ZitatWarum fragst du nicht einfach im DOIF-Beitrag?
genau diesen Beitrag wollte ich nicht zumüllen ;) und nicht sauer sein  :D is WoE

Zitat von: Brockmann am 21 November 2014, 12:19:38
Bist Du auf dem aktuellen Stand (Update)? Bei den Feiertagen war noch ein Bug drin, der erst vor ein paar Tagen behoben wurde.
ja ich mache immer, jeden Tag ein Update Check..! ;)

Zitat von: Brockmann am 21 November 2014, 12:19:38
Ansonsten: Das Problem dürfte das DOELSE sein (und ich erspare mir jegliches "habe ich doch gesagt"  ;) ).
sei geduldig mit mir, ich muss es erst mal schnallen  ;)

Zitat von: Brockmann am 21 November 2014, 12:19:38
Du hast auch für Zufall einen Zeitraum mit sunset bestimmt. Der wird getriggert, wenn dieser Zeitpunkt erreicht wurde. Dann stellt DOIF fest, dass die andere Bedingung ("Zufall") nicht erfüllt ist.
also ich habe nun erst mal alles für "Zufall" entfernt damit ich einen Grund rein bekomme, die vielen Timer haben mich total verwirrt.
Ich habe jetzt den Einschalt und Ausschalt Zeitpunkt jeweils für die Wochentage und das WoE und ebenso die Ausschaltzeit. wenn dieses zuverlässig läuft kommt dann der RandomTimer für Zufall rein, der übrigens von mir schon separat getestet wurde und auch super funktioniert. (nur hier einbauen, da brauche ich wohl Hilfe)

Zitat von: Brockmann am 21 November 2014, 12:19:38
Also scheitert das DOELSEIF und DOIF schaut, was sonst noch geht - richtig, das DOELSE geht immer! Deshalb schaltet es Lampe 1 aus und Lampe 2 an, wenn der Zeitintervall für Zufall beginnt.
deshalb auch gestern die frühe Umschaltung auf den hinteren Bereich (Lampe 2)  :-\
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Puschel74

Keine Panik, ich bin nicht sauer 8)
Warum auch - nur weil du lieber den umständlicheren Weg gehen willst.
Viel Spaß noch - du bekommst das schon noch hin  ;)
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.