Hallo,
ich möchte gerne Twilight in einen WeekdayTimer einbauen.
Meine Rollosteuerung sieht zur Zeit so aus:
define Rollladen_AZ_down WeekdayTimer Rollo_AZ 1234567|{sunset_abs(-600,"16:00","22:00")}|down (ReadingsVal("RolloAutomatik", "state", "Aus") eq "An")
define Rollladen_AZ_up WeekdayTimer Rollo_AZ 1234567|{sunrise_abs(1200,"08:00","09:00")}|up (ReadingsVal("Verreist", "state", "Ja") eq "Nein")
Jetzt will ich aber sunset durch Twilight ersetzen, dazu habe ich als Versuch
define TwilightMessage1 notify myTwilight.*:aktEvent:.*ss_indoor.* set Dunkel on
define TwilightMessage2 notify myTwilight.*:aktEvent:.*sr_weather.* set Dunkel off
define Rollladen_AZ_up WeekdayTimer Rollo_AZ 1234567|08:00|up (Dunkel == off && ReadingsVal("Verreist", "state", "Ja") eq "Nein")
Nur wie bekomme ich eine Zeit von 8:00 bis 09:00 eingebaut, sprich ein up frühstens 8:00 aber spätestens 09:00
Hat einer eine Idee?
Gruß Otto
da müßtet du dir selbst eine kleine Funktion schreiben, die etwa so aussehen könnte:
define Rollladen_AZ_up WeekdayTimer Rollo_AZ 1234567|{leseTwilightWithMinMax("myTwilight","sr_weather","08:00","09:00")}|up
Hallo Dietmar,
wenn ich das 1:1 übernehme kommt
2014.02.28 08:57:18 1: [Rollladen_AZ_up] invalid time in Rollladen_AZ_up <> HH:MM[:SS]
myTwilight sollte richtig eingerichtet sein, der log geht mit.
define TwilightMessage0 notify myTwilight.*:aktEvent:.* {Log 3, "Nachricht von @: %";;}
Würdest du so nett sein und mir auf die Sprünge helfen?
Die Funktion {leseTwilightWithMinMax("myTwilight","sr_weather","08:00","09:00")}
habe ich noch nicht verstanden bzw. weiss nicht wie ich es prüfen kann.
Gruß Otto
leseTwilightWithMinMax("myTwilight","sr_weather","08:00","09:00")}
Diese Funktion gibt es nicht. Die müßte in Perl erstellt werden.
Hallo,
ich habe mich mal versucht mit einer Funktion, läuft aber nicht:
[Rollladen_AZ_down] invalid time in Rollladen_AZ_down <1234567> HH:MM[:SS]
define Rollladen_AZ_down WeekdayTimer Rollo_AZ 1234567|{ZeitMinMax(ReadingsVal("myTwilight", "sr_civil", '0'), "08:00", "09:00")}|down (ReadingsVal("RolloAutomatik", "state", "Aus") eq "An")
attr Rollladen_AZ_down verbose 5
in 99_myUtils.pm
sub ZeitMinMax ($$$) {
my ($leseTwiligt, $MinZeit, $MaxZeit) = @_;
#Log 1, "Zeiten: $leseTwiligt, $Min, $Max";
if ( $leseTwiligt ge $MaxZeit ) # größer oder gleich
{ return $MaxZeit;}
#{Log 1, "Zeiten: $MaxZeit";}
if ( $leseTwiligt le $MinZeit ) # kleiner oder gleich
{ return $MinZeit;}
#{Log 1, "Zeiten: $MinZeit";}
if ( $leseTwiligt ge $MinZeit && $leseTwiligt le $MaxZeit ) # dazwischen
{ return $leseTwiligt;}
#{Log 1, "Zeiten: $leseTwiligt";}
}
Was ist falsch?
Gruß Otto
Du bist aber sehr nah an einer funktionierenden Lösung. Wenn du die ## vor den Logs entfernst, welchen output bekommst du ins log geschrieben, wenn du die Funktion aufrufst?
Welches Ergebnis liefert ZeiMinMax?
Hallo,
ich bekomme 08:00 zurück.
Da kann ja nur das Format nicht stimmen??
Gruß Otto
1234567| wird warum auch immer als Zeitangabe interpretiert. Lass diese Angabe mal weg, und prüfe was Dann passiert.
das Log sagt
2014.03.01 14:49:30 3: no Switchingtime found in <{ZeitMinMax(ReadingsVal("myTwilight", "sr_civil", '0'), "08:00", "09:00")}|down (ReadingsVal("RolloAutomatik", "state", "Aus") eq "An")>, check first parameter
2014.03.01 14:49:32 5: [Rollladen_AZ_down] list of windowsenors found: ''
2014.03.01 14:49:32 4: [Rollladen_AZ_down] 01.01.1970 01:00:00 ; aktParam: 0.0 ; newParam: 0
2014.03.01 14:49:32 4: [Rollladen_AZ_down] is not disabled
2014.03.01 14:49:32 5: [Rollladen_AZ_down] no switch in the yesterdays because of the devices type.
2014.03.01 14:49:32 4: [Rollladen_AZ_down] Next switch 01.01.1970 01:00:00
Ich habe heute keinen Zugriff auf fhem. Werde morgen Abend prüfen was genau passiert.
Ich habe heute keinen Zugriff auf fhem. Werde morgen Abend prüfen was genau passiert.
define Rollladen_AZ_down WeekdayTimer Rollo_AZ 1234567|{ZeitMinMax(ReadingsVal("myTwilight", "sr_civil", '0'), "08:00", "09:00")}|down ...
Ich glaube die Leerzeichen sind schuld:
123|18:00|an 123|18:00|an 123|18:00|an 123|18:00|an 123|18:00|an
Sie trennen die einzelnen Zeitparameter, wenn du mehrere angeben willst.
Probier es mal so:
define Rollladen_AZ_down WeekdayTimer Rollo_AZ 1234567|{ZeitMinMax(ReadingsVal("myTwilight","sr_civil",'0'),"08:00","09:00")}|down ...
zwischen 123...|down darf kein Leerzeichen sein.
Hallo Dietmar,
leider geht es noch nicht, ist aber ein anderer Fehler
ich habe die Leerzeichen entfernt
define Rollladen_AZ_down WeekdayTimer Rollo_AZ 1234567|{ZeitMinMax(ReadingsVal("myTwilight","sr_civil",'0'),"06:00","09:00")}|down (ReadingsVal("RolloAutomatik", "state", "Aus") eq "An")
{ZeitMinMax(ReadingsVal("myTwilight","sr_civil",'0'),"06:00","09:00")}
ergibt 06:32:31
aber das Log sagt mir 6:00
[Rollladen_AZ_down] list of windowsenors found: ''
[Rollladen_AZ_down] 03.03.2014 06:00:00 ; aktParam: 0.0 ; newParam: down
[Rollladen_AZ_down] is not disabled
[Rollladen_AZ_down] no switch in the yesterdays because of the devices type.
[Rollladen_AZ_down] Next switch 04.03.2014 06:00:00
Gruß Otto
Dann stimmt deine MinMax Funktion noch nicht richtig.
Entferne die ## vor den Log-Ausgaben, dann erkennst du wo die Abfrage nicht richtig funktioniert.
Bedenke, dass die Zeit, die von TW zurückkommt das Format HH:MM:SS hat, die min, max-Werte HH:MM haben, und dass du Stringvergleiche durchführst (eq, gt, lt).
Aber die MinMax Funktion liefert doch den richtigen Wert von 06:32:31
Liegt es wirklich an der Funktion?
Ok,
Das Modul WD funtioniert so, dass immer so gegen Mitternacht alle Zeiten, die über Perl ({...}) ermittelt werden müssen, neu berechnet werden.
Dann sollte auch in deinem Fall die richtige Zeit ermittelt werden.
Die "06:00" kommt vielleicht deshalb, weil beim Start deines fhems das Gerät myTwilight noch nicht exisiert - ein Reihenfolgenproblem bei den Definitionen.
Während der Ausdruck {ZeitMinMax(ReadingsVal("myTwilight","sr_civil",'0'),"06:00","09:00")} das richtige Ergebnis liefert, weil fhem komplett hochgefahren ist.
Hallo,
ZitatDas Modul WD funtioniert so, dass immer so gegen Mitternacht alle Zeiten, die über Perl ({...}) ermittelt werden müssen, neu berechnet werden.
Dann sollte auch in deinem Fall die richtige Zeit ermittelt werden.
Eine Neuberechnung erfolgt nicht, im Log kann ich auch keine Aktivität sehen
Habe
attr global verbose 3
attr Rollladen_AZ_down verbose 5
oder reicht das nicht aus um im Log was zu sehen.
wie prüfe ich die Neuberechnung gegen Mitternacht?
Bei einem Restart von FHEM tut sich auch nix.
Was mir noch auffält:
define Rollladen_AZ_down WeekdayTimer Rollo_AZ 1234567|{sunset_abs(-600,"16:00","22:00")}|down (ReadingsVal("RolloAutomatik", "state", "Aus") eq "An")
Hier wird die Zeit von sunset_abs auch nur per Restart geändert und nicht um Mitternacht....
Gruß Otto
mit verbose 5 müßtest du im Log um 00:10 etwas finden.
define Rollladen_AZ_down WeekdayTimer Rollo_AZ 1234567|{sunset_abs(-6 ...
sollte hier auch passieren, weil WD diese Aufgabe übernimmt.
Ich prüfe die Funktion noch einmal und melde mich.
scheint leider nicht so zu funktionieren, wie ich es gedacht hatte.
Es wird allerdings ein wenig dauern, bis ich es repariet habe, weil es nicht ganz so einfach werden wird.
Hallo Dietmar,
hast du schon was Neues zu diesem Thema?
Gruß Otto
Hallo Dietmar,
hattest du schon Gelegenheit dich mit dem Thema zubeschäftigen?
Gruß Otto
ist schon repariert und eingecheckt.
Hallo Dietmar,
danke, sieht gut aus.
Eine Verständnisfrage habe ich noch:
define Rollladen_AZ_down WeekdayTimer Rollo_AZ 1234567|{sunset_abs(-600,"16:00","22:00")}|off
liefert nach einem restart sofort die richtige Zeit.
define Rollladen_AZ_down WeekdayTimer Rollo_AZ 1234567|{ZeitMinMax(ReadingsVal("myTwilight","ss_civil",'0'),"16:00","22:00")}|off
liefert erst um 0:10 die richtige Zeit, beim restart gibt WD mir erst 16:00 h
Kann man das noch irgendwie ändern?
Gruß Otto
ich sehe mir den Fall heute mal an.
ich habe eine verbesserte Version von Twilight eingecheckt.
Pobier' mal, ob sie eine Verbesserung für dich darstellt.
Hallo Dietmar,
leider kann ich keine Änderung feststellen, gleiches Verhalten.
Gruß Otto
In welcher Reihenfolge werden die Geräte beim restart bei dir definiert?
Gib mal bei beiden verbose 5 an.
Wenn der TW noch nicht definiert ist, kannst du auf die Werte nirgends sonst zugreifen, bzw. fhem greift ins Leere.
Vielleicht liegt es daran.
Hallo,
ZitatWenn der TW noch nicht definiert ist, kannst du auf die Werte nirgends sonst zugreifen, bzw. fhem greift ins Leere.
Genau das war es, danke für die gute Arbeit.
Gruß Otto