FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: moonsorrox am 18 Dezember 2015, 01:56:44

Titel: DOIF: Schaltzeiten zusätzlich per Handeingabe der Zeiten verändern
Beitrag von: moonsorrox am 18 Dezember 2015, 01:56:44
ich habe für einen Freund ein DOIF für eine Gartenlichtsteuerung gebaut, diese funktioniert so wie sie ist mit den beiden Zuständen die er per dummy umschalten kann.
1. Dämmerung
2. Manuell

define di_Gartenlicht_K3 DOIF ( [?du_Gartenlicht_Modus] eq "Dämmerung" and ([{sunset("CIVIL",0,"16:30","22:20")}|8] or [{sunset("CIVIL",600,"16:30","22:20")}|7])) (set Gartenlicht_Kanal_03 on)\
DOELSEIF ( [?du_Gartenlicht_Modus] eq "Dämmerung" and ([{sunset("CIVIL",22000,"19:00","23:50")}|78])) (set Gartenlicht_Kanal_03 off)\
DOELSEIF ( [?du_Gartenlicht_Modus] eq "Manuell" and ([[du_begin]])) (set Gartenlicht_Kanal_03 on) \
DOELSEIF ( [?du_Gartenlicht_Modus] eq "Manuell" and ([[du_end]])) (set Gartenlicht_Kanal_03 off)


jetzt hat er den Wunsch geäußert das er gerne immer die Dämmerung haben möchte, aber wenn die Zeit des Aus/Einschalten nicht passt möchte er gern diese per Hand/Zeit verändern.

Ich habe da irgendwie gar keinen Einfall, z.B schaltet die Dämmerung heute das Licht um  22:56:09 Uhr Aus, jetzt sagt er dieses ist ihm zu früh er möchte es gern um 23.20 Aus schalten lassen.
Wie kann ich jetzt mit dem DOIF verhindern das er nicht zur Dämmerung sondern um 23.20 Uhr schaltet.
Das DOIF nimmt doch immer den zuerst eintretenden Trigger... das würde doch nur über ein zusätzliches dummy gehen, oder..?
Da er aber die Zeit gern verändern möchte geht das also nur einstellbar...!

Ich habe dazu kein Einfall, aber vllt ist es ja einfacher wie ich denke.

Wenn ich die Dummy Einstellung auf Manuell habe nimmt er immer die Beginn Zeit und die End Zeit

Das sind die Dummys für die Manuell Zeiten:
#########################################################################
#####     Dummy:  Beginn - Ende Gartenlicht                ##############
#########################################################################


define du_begin dummy
attr du_begin alias Gartenbeleuchtung - EIN
attr du_begin devStateIcon .*:rc_BLANK
attr du_begin group Garten Beleuchtung
attr du_begin icon time_clock@LightSeaGreen
attr du_begin room Außenlicht
attr du_begin setList state:time
attr du_begin sortby 02
attr du_begin webCmd state


define du_end dummy
attr du_end alias Gartenbeleuchtung - AUS
attr du_end devStateIcon *:rc_BLANK
attr du_end group Garten Beleuchtung
attr du_end icon time_clock@LightSeaGreen
attr du_end room Außenlicht
attr du_end setList state:time
attr du_end sortby 04
attr du_end webCmd state

Titel: Antw:DOIF: Schaltzeiten zusätzlich per Handeingabe der Zeiten verändern
Beitrag von: igami am 18 Dezember 2015, 05:25:04
Ungetestet, aber sollte funktionieren:
Die Zeitangaben im sunset (z.B. "19:00") durch Readings im DOIF Format ersetzen (z.B. [dummy:off-min]).
Du kannst in einem Dummy auch mehrere Readings setzen, und das ganze dann noch schön in eine readingGroup packen.
Titel: Antw:DOIF: Schaltzeiten zusätzlich per Handeingabe der Zeiten verändern
Beitrag von: Ellert am 18 Dezember 2015, 12:26:49
... [{sunset(...)}] and [[festeZeit]] eq "00:00" or   [[festeZeit]] and  [[festeZeit]] ne "00:00" ...
Titel: Antw:DOIF: Schaltzeiten zusätzlich per Handeingabe der Zeiten verändern
Beitrag von: moonsorrox am 18 Dezember 2015, 17:01:04
Zitat von: igami am 18 Dezember 2015, 05:25:04
Die Zeitangaben im sunset (z.B. "19:00") durch Readings im DOIF Format ersetzen (z.B. [dummy:off-min]).

irgendwie schnalle ich grad gar nichts..! :-\
wenn ich diese Zeit "19:00" nutze dann wäre es in dem Fall die Triggerzeit vor der er nicht ausschalten soll..?
Das in dieser Definition
([{sunset("CIVIL",22000,"19:00","23:50")}|78])

soll dann so aussehen..?
([{sunset("CIVIL",22000,"[du_end:off]","23:50")}|78])
das geht doch gar nicht...!
Oder habe ich da was falsch verstanden..?

Zitat von: Ellert am 18 Dezember 2015, 12:26:49
... [{sunset(...)}] and [[festeZeit]] eq "00:00" or   [[festeZeit]] and  [[festeZeit]] ne "00:00" ...

was ist denn eq "00:00" das ist doch dann 0 Uhr

ich hatte schon dieses mal vorher probiert aber das funktionierte gar nicht
( [?du_Gartenlicht_Modus] eq "Dämmerung" and (([{sunset("CIVIL",0,"16:30","22:20")}|8] and [[du_beginM]]) or [{sunset("CIVIL",600,"16:30","22:20")}|7])) (set Dachlicht_03 on)
DOELSEIF ( [?du_Gartenlicht_Modus] eq "Dämmerung" and [[du_end]] and [{sunset("CIVIL",22000,"19:00","23:50")}|78]) (set Dachlicht_03 off)


diese von dir vorgeschlagene [[festeZeit]] sollte ich durch mein dummy [[du_end]] ersetzen aber das mit eq "00:00" oder auch ne "00:00" verstehe ich grad nicht

OT
(ist wohl die Nachtschichtarbeit)  :-\ Brett vorm Kopf  ;)
Titel: Antw:DOIF: Schaltzeiten zusätzlich per Handeingabe der Zeiten verändern
Beitrag von: Ellert am 18 Dezember 2015, 17:19:31
Zitatwas ist denn eq "00:00" das ist doch dann 0 Uhr

ich hatte schon dieses mal vorher probiert aber das funktionierte gar nicht
Code: [Auswählen]

( [?du_Gartenlicht_Modus] eq "Dämmerung" and (([{sunset("CIVIL",0,"16:30","22:20")}|8] and [[du_beginM]]) or [{sunset("CIVIL",600,"16:30","22:20")}|7])) (set Dachlicht_03 on)
DOELSEIF ( [?du_Gartenlicht_Modus] eq "Dämmerung" and [[du_end]] and [{sunset("CIVIL",22000,"19:00","23:50")}|78]) (set Dachlicht_03 off)


diese von dir vorgeschlagene [[festeZeit]] sollte ich durch mein dummy [[du_end]] ersetzen aber das mit eq "00:00" oder auch ne "00:00" verstehe ich grad nicht

Ja, [[festeZeit]] ist für Dich [[du_end]] und

immer wenn [[du_end]] gleich 00:00 ist dann schaltet sunset  "oder" wenn [[du_end]] ungleich 00:00 schaltet  [[du_end]]

Diese [{sunset(...)}] and [[du_end]] eq "00:00" Bedingung ist nur wahr  [[du_end]] gleich 00:00 und sie ist falsch wenn  [[du_end]] ungleich 00:00 ist.

Bei [[du_end]] and  [[du_end]] ne "00:00" ist es genau umgekehrt, also ist immer nur eine Bedingung zur Zeit wahr. 00:00 ist daher als Ausschaltzeit nicht möglich.
Titel: Antw:DOIF: Schaltzeiten zusätzlich per Handeingabe der Zeiten verändern
Beitrag von: Damian am 18 Dezember 2015, 18:09:25
Zitat von: Ellert am 18 Dezember 2015, 17:19:31
Ja, [[festeZeit]] ist für Dich [[du_end]] und

immer wenn [[du_end]] gleich 00:00 ist dann schaltet sunset  "oder" wenn [[du_end]] ungleich 00:00 schaltet  [[du_end]]

Diese [{sunset(...)}] and [[du_end]] eq "00:00" Bedingung ist nur wahr  [[du_end]] gleich 00:00 und sie ist falsch wenn  [[du_end]] ungleich 00:00 ist.

Bei [[du_end]] and  [[du_end]] ne "00:00" ist es genau umgekehrt, also ist immer nur eine Bedingung zur Zeit wahr. 00:00 ist daher als Ausschaltzeit nicht möglich.

Vorsicht, das funktioniert so nicht.

Indirekte Zeiten in doppelten Klammern der Art [[<dummy>]] triggern die Bedingung zwar um die Zeit, die in <dummy> steht- man kann sie aber nicht nach einer Zeit abfragen. Dahinter verbirgt sich eine Funktion, die zum Triggerzeitpunkt 1 liefert und sonst immer  0 liefert .

Gruß

Damian
Titel: Antw:DOIF: Schaltzeiten zusätzlich per Handeingabe der Zeiten verändern
Beitrag von: Ellert am 18 Dezember 2015, 19:21:12
Würde es dann so[{sunset(...)}] and [?du_end] eq "00:00" or [[du_end]] and [?du_end] ne "00:00"funktionieren?
Titel: Antw:DOIF: Schaltzeiten zusätzlich per Handeingabe der Zeiten verändern
Beitrag von: Damian am 18 Dezember 2015, 19:41:49
Zitat von: Ellert am 18 Dezember 2015, 19:21:12
Würde es dann so[{sunset(...)}] and [?du_end] eq "00:00" or [[du_end]] and [?du_end] ne "00:00"funktionieren?

ja
Titel: Antw:DOIF: Schaltzeiten zusätzlich per Handeingabe der Zeiten verändern
Beitrag von: moonsorrox am 18 Dezember 2015, 19:45:44
ich danke erst einmal für die Bemühungen und werde das gleich mal bei ihm einbauen und testen..!  ;)

das heißt aber auch ich muss die gesamte Definition einbauen einmal mit der doppelten eckigen Klammer und einmal mit der einfachen eckigen+?
[{sunset(...)}] and [?du_end] eq "00:00" or [[du_end]] and [?du_end] ne "00:00"
Titel: Antw:DOIF: Schaltzeiten zusätzlich per Handeingabe der Zeiten verändern
Beitrag von: moonsorrox am 18 Dezember 2015, 20:10:15
Ich möchte nochmal eine Anmerkung dazu machen...
da ich grad mal mit Zeiten (Ein- und Ausschaltzeit) getestet habe funktioniert das ganze Konstrukt..  ;)

Da dies ja nicht für mich ist habe ich grad mal darüber nachgedacht welchen Sinn das ganze hat, logisch überlegt wenn er die Ausschaltzeit verlängern möchte, dann braucht er irgendwie die Zeit der Dämmerung doch gar nicht mehr, denn exakt den Zeitpunkt dieser mal zu treffen passiert vllt 1x  :-\ klar kann man eine Readingsgroup erstellen mit den ganzen Zeiten und dann eben die Dämmerungszeit einstellen und wenn man möchte die erweiterte Ausschaltzeit.

Ich glaube ich würde das so nicht haben wollen, bei mir würde
1.Dämmerungszeit schalten und wenn ich die Zeit verändern möchte würde ich alles auf Manuell stellen und dann diese Zeiten nutzen.
Titel: Antw:DOIF: Schaltzeiten zusätzlich per Handeingabe der Zeiten verändern
Beitrag von: nettiger am 21 Dezember 2015, 12:43:52
Hallo,


ich habe sowas für meine Rolladen zusammen gebaut. Ich habe einen Dummy, welcher den Modus vorgibt (Winter - via sunset/sunrise und Zeit - die kann dann die Uhrzeit für auf und ab manuell ausgewählt werden, sowie Aus, wenn gar nichts gemacht werden soll.). Für die Zeiten auf und ab existieren 2 weitere Dummys.

Da hier auch nur ein on und off verwendet wird, könntest du das Konstrukt sicher auch verwenden. Zusammenfassen kann man das ganze dann auch noch in einer Readingsgroup, damit es schöner aussieht....ist aber kein muss.

Die Attribute für Group sind optional. Ich habe das nur gruppiert, damit alle Einträge im Raum zusammen sind. Auch sind bei den Zeiten im dropdown nur die von mir benötigten eingetragen. Hier können nach Bedarf weitere hinzugefügt werden.

Zum testen muss theoretisch erstmal nur der Name des Aktors geändert werden

Vielleicht ist es ja etwas, mit dem du was anfangen kannst.

Gruß
Jens

Hier mal mein code:




#Modus Rolladen Kinderzimmer
define DU_EG_KZ_RO_MODE dummy
attr DU_EG_KZ_RO_MODE alias 1-Rolladen Kinderzimmer Modus
attr DU_EG_KZ_RO_MODE group Rolladen_Kinderzimmer
attr DU_EG_KZ_RO_MODE room LichtRollo
attr DU_EG_KZ_RO_MODE setList state:Aus,Zeit,Winter
attr DU_EG_KZ_RO_MODE webCmd state

#Close time Kinderzimmer
define DU_EG_KZ_RO_CLOSETIME dummy
attr DU_EG_KZ_RO_CLOSETIME alias 3-Rolladen Kinderzimmer zu
attr DU_EG_KZ_RO_CLOSETIME group Rolladen_Kinderzimmer
attr DU_EG_KZ_RO_CLOSETIME room LichtRollo
attr DU_EG_KZ_RO_CLOSETIME setList state:16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30,23:45
attr DU_EG_KZ_RO_CLOSETIME webCmd state

# open time Kinderzimmer
define DU_EG_KZ_RO_OPENTIME dummy
attr DU_EG_KZ_RO_OPENTIME alias 2-Rolladen Kinderzimmer Auf
attr DU_EG_KZ_RO_OPENTIME group Rolladen_Kinderzimmer
attr DU_EG_KZ_RO_OPENTIME room LichtRollo
attr DU_EG_KZ_RO_OPENTIME setList state:05:00,05:15,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00
attr DU_EG_KZ_RO_OPENTIME webCmd state


# doif steuerung rolladen Kinderzimmer zu
define DI_STEUERUNG_EG_KZ_RO_CLOSE DOIF ([[DU_EG_KZ_CLOSETIME:state]] and [DU_EG_KZ_RO_MODE:state] eq "Zeit") (set EG_KZ_RO off) DOELSEIF ([{sunset("CIVIL",0,"17:30","20:00")}] and [DU_EG_KZ_RO_MODE:state] eq "Winter") (set EG_KZ_RO off) DOELSE
attr DI_STEUERUNG_EG_KZ_RO_CLOSE alias Steuerung Rolladen Kinderzimmer zu
attr DI_STEUERUNG_EG_KZ_RO_CLOSE do always
attr DI_STEUERUNG_EG_KZ_RO_CLOSE group Rolladen_Kinderzimmer
attr DI_STEUERUNG_EG_KZ_RO_CLOSE room LichtRollo



# doif steuerung rolladen Kinderzimmer auf
define DI_STEUERUNG_EG_KZ_RO_OPEN DOIF ([[DU_EG_KZ_RO_OPENTIME:state]] and [DU_EG_KZ_RO_MODE:state] eq "Zeit") (set EG_KZ_RO on) DOELSEIF ([{sunrise("CIVIL",0,"06:30","09:00")}] and [DU_EG_KZ_RO_MODE:state] eq "Winter") (set EG_KZ_RO on) DOELSE
attr DI_STEUERUNG_EG_KZ_RO_OPEN alias Steuerung Rolladen Kinderzimmer auf
attr DI_STEUERUNG_EG_KZ_RO_OPEN do always
attr DI_STEUERUNG_EG_KZ_RO_OPEN group Rolladen_Kinderzimmer
attr DI_STEUERUNG_EG_KZ_RO_OPEN room LichtRollo

Titel: Antw:DOIF: Schaltzeiten zusätzlich per Handeingabe der Zeiten verändern
Beitrag von: moonsorrox am 21 Dezember 2015, 12:59:58
vielen Dank für die Unterstützung, da dieses ganze Konstrukt nicht für mich ist hatte ich hier geschrieben... und wußte nicht wie man dies umsetzen könnte...
(war ja auch nicht so ganz einfach)
Aber wie ich schon schrieb, kann ich den Sinn nicht ganz nachvollziehen, denn man braucht dafür dann niemals mehr die sunrise Routine, es greift ja immer die eingestellte Zeit...!

Ich selber nutze das auch mit dummys und diversen Zeiten und bin damit zufrieden, dein System ist sicher für viele hier im Forum ein Ansatz, deshalb ist es super das es hier Beispiele gibt..!  :D