guten morgen zusammen,
gleich vorweg, ich hab mir hier schon einen puckel gesucht zum thema "Zeitschaltung", "Zeitschaltuhr" und "Zeitsteuerung" viele Beispiele, viele Links aber für meine anforderung UND mein wissen konnte ich keine lösung finden.
für die trockenkammer in der firma würde ich gerne:
von 19:00 bis 07:00 Uhr die Absaugung alle 20 Minuten für 10 Minuten einschalten, von 07:00 bis 19:00 jedoch nur alle 60 Minuten für 10 Minuten
Tag:
Zitatdefine tAbsaugung_Tag at +*01:00:00 DOIF ($hour >= 07 && $hour < 19) set FS20_ST2_Absaugung on-for-timer 600
Nacht:
Zitatdefine tAbsaugung_Nacht at +*00:20:00 DOIF ($hour <= 07 && $hour > 19) set FS20_ST2_Umluft on-for-timer 600
leider schaltet die nachtsteuerung auch am tag und umgekehrt - hab ich hier einen logischen fehler drinnen?
roman
Vermutlich kann das DOIF auch selbst irgendwie, ohne gehts es aber auch:
define tAbsaugung_Tag at +*01:00:00 set FS20_ST2_Absaugung on-for-timer 600
attr tAbsaugung_Tag disabledForIntervals 00:00-06:59 19:00-23:59
oder mit Perl:
define tAbsaugung_Tag at +*01:00:00 { if($hour >= 7 && $hour < 19) { fhem("set FS20_ST2_Absaugung on-for-timer 600" } }
Und ich wuerde noch ein "attr tAbsaugung_Tag alignTime 00:00" spendieren.
Ich habe gerade die Doku zu DOIF überflogen, hab' aber diese Form der Zeitangabe nicht gesehen. Ich sehe da sinngemäß nur
define name DOIF ([startzeit-endzeit])(.....
Vielleicht hab' ich auch was übersehen. Dann würde mich die Bedingung wundern:
$hour <= 07 && $hour > 19
Es kann eigentlich nicht gleichzeitig die Stunde größer 19 und kleiner 7 sein.
Zitat von: duke-f am 18 Mai 2015, 08:07:37Vielleicht hab' ich auch was übersehen. Dann würde mich die Bedingung wundern:
$hour <= 07 && $hour > 19
Es kann eigentlich nicht gleichzeitig die Stunde größer 19 und kleiner 7 sein.
Das ist wohl wahr, ein 'Oder' wäre hier angebrachter - das definiert ja auch exakt den Zeitrahmen.
Rudolf's Lösung ist aber wohl die Eleganteste. Ich habe ähnliches mit DOIF versucht, wobei ich noch eine weitere Bedingung eingebaut habe. Jedoch habe ich mit DOIF eine AT-Definition mit begrenzter Anzahl an Ausführungen erzeugt (welches sich am Ende ja selber wieder löscht): http://forum.fhem.de/index.php/topic,37253.msg295237.html
Ich werde mal sehen, ob ich Rudolf's Ansatz auch bei mir verwursten kann.
parasitäre Grüße
Niels
danke rudolf!
für mich absolut nachvollziehbar und wieder was gelernt!
Zitat von: Muschelpuster am 18 Mai 2015, 08:29:42
Ich werde mal sehen, ob ich Rudolf's Ansatz auch bei mir verwursten kann.
Niels
Dem schließe ich mich an - scheint mir für einige meiner Fälle deutlich vereinfachend zu sein.
Zitat von: Muschelpuster am 18 Mai 2015, 08:29:42
Das ist wohl wahr, ein 'Oder' wäre hier angebrachter - das definiert ja auch exakt den Zeitrahmen.
Rudolf's Lösung ist aber wohl die Eleganteste. Ich habe ähnliches mit DOIF versucht, wobei ich noch eine weitere Bedingung eingebaut habe. Jedoch habe ich mit DOIF eine AT-Definition mit begrenzter Anzahl an Ausführungen erzeugt (welches sich am Ende ja selber wieder löscht): http://forum.fhem.de/index.php/topic,37253.msg295237.html
Ich werde mal sehen, ob ich Rudolf's Ansatz auch bei mir verwursten kann.
parasitäre Grüße
Niels
nur mal zur Info:
define tAbsaugung_Tag at +*01:00:00 set FS20_ST2_Absaugung on-for-timer 600
attr tAbsaugung_Tag disabledForIntervals 00:00-06:59 19:00-23:59
ist aber nichts anderes als:
define tAbsaugung_Tag DOIF ([+01:00] and [?07:00-19:00]) (set FS20_ST2_Absaugung on-for-timer 600)
attr tAbsaugung_Tag do always
Gruß
Damian