FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Rampler am 12 Dezember 2014, 23:59:01

Titel: [Gelöst] Sunset DOIF Problem ?
Beitrag von: Rampler am 12 Dezember 2014, 23:59:01
Hallo zusammen,
hoffe Ihr könnt mir helfen, bin noch recht neu hier ...
Möchte eigentlich nur eine Lampe bei Sonnenuntergang einschalten (bis 23:00 Uhr), allerdings nur, solange der Sonnenuntergang vor 20:00 Uhr ist. Also nur in den Wintermonaten..
Testweise habe ich dies probiert:
( {sunset_abs("REAL",0) > sprintf("%02d:%02d", "20", "00") } and [{sunset_abs("REAL",0)}-23:00]) (set FL.AZ.steckdose.sw on) DOELSE (set FL.AZ.steckdose.sw off)

allerdings wird dann trotzdem die Lampe um 16:10 on geschaltet.
{sunset_abs("REAL",0)}  ==> 16:10:35
{sunset_abs("REAL",0) > sprintf("%02d:%02d", "20", "00") }  ==> nicht wahr = 0
{sunset_abs("REAL",0) < sprintf("%02d:%02d", "20", "00") }  ==> wahr = 1

Durch die und Verknüpfung sollte doch bei > nicht geschaltet werden oder ?

danke


Titel: Antw:Sunset DOIF Problem ?
Beitrag von: Puschel74 am 13 Dezember 2014, 08:16:41
http://forum.fhem.de/index.php/topic,16311.0.html (http://forum.fhem.de/index.php/topic,16311.0.html)
Titel: Antw:Sunset DOIF Problem ?
Beitrag von: Damian am 13 Dezember 2014, 08:24:55
Zitat von: Rampler am 12 Dezember 2014, 23:59:01
Hallo zusammen,
hoffe Ihr könnt mir helfen, bin noch recht neu hier ...
Möchte eigentlich nur eine Lampe bei Sonnenuntergang einschalten (bis 23:00 Uhr), allerdings nur, solange der Sonnenuntergang vor 20:00 Uhr ist. Also nur in den Wintermonaten..
Testweise habe ich dies probiert:
( {sunset_abs("REAL",0) > sprintf("%02d:%02d", "20", "00") } and [{sunset_abs("REAL",0)}-23:00]) (set FL.AZ.steckdose.sw on) DOELSE (set FL.AZ.steckdose.sw off)

allerdings wird dann trotzdem die Lampe um 16:10 on geschaltet.
{sunset_abs("REAL",0)}  ==> 16:10:35
{sunset_abs("REAL",0) > sprintf("%02d:%02d", "20", "00") }  ==> nicht wahr = 0
{sunset_abs("REAL",0) < sprintf("%02d:%02d", "20", "00") }  ==> wahr = 1

Durch die und Verknüpfung sollte doch bei > nicht geschaltet werden oder ?

danke

Zeichenketten werden in Perl anders verglichen als Zahlen:

Gleichheit: eq statt ==
kleiner als: lt statt <
größer als: gt statt >
kleine gleich: le statt <=
größer gleich: ge stattt >=

Weiteres Infos: http://de.selfhtml.org/perl/sprache/operatoren.htm

Gruß

Damian
Titel: Antw:Sunset DOIF Problem ?
Beitrag von: rudolfkoenig am 13 Dezember 2014, 08:25:27
"20:00" (das sprintf liefert auch nichts anderes) kann man nicht mit < vergleichen, fuer Stringvergleiche verwendet man lt
Oder auch: bitte ein bisschen Perl Syntax lernen, bevor man mit Perl Programmieren anfaengt.
Titel: Antw:Sunset DOIF Problem ?
Beitrag von: Puschel74 am 13 Dezember 2014, 08:27:25
Hallo,

na jetzt wird es aber etwas viel.
Jetzt sollen Anfänger schon einen Syntax lernen nur um mal eben ein bischen mit Zeiten spielen zu können.
Wenn das Suchen schon so mühsam ist wird das mit dem lernen nicht viel einfacher werden  8)

Grüße
Titel: [Gelöst] Sunset DOIF Problem ?
Beitrag von: Rampler am 14 Dezember 2014, 20:21:08
Hallo *,
danke für eure Antworten ..
Entscheiden war der Tipp, statt < lt zu verwenden.
Habe es jetzt aber so gelöst unt funktioniert super:
define FL.AZ.steckdose.on.off at *{sunset_abs("REAL",1200)} { if (sunset_abs("REAL",1200) lt "20:00:00") { fhem("set FL.AZ.steckdose.sw on-till 23:00:00") }}
Titel: Antw:[Gelöst] Sunset DOIF Problem ?
Beitrag von: Spartacus am 16 Dezember 2014, 16:58:22
Hallo,
mein Problem passt hier gerade hinein. Derzeit setzte ich folgenden Code im DOIF ein:
(
([16:30-22:30|56] or
[16:30-22:30] and  [hl.01.Feiertag:tomorrow] ne "none" or
[16:30-21:30|01234] and [hl.01.Feiertag:tomorrow] eq "none" or
[16:30-02:00] and [hl.01.Feiertag:state] eq "Silverster"
) and [tw.01.Daemmerung:twilight] < 55) (set Gartenlicht on) DOELSE (set Gartenlicht off)


DasTwilight-Modul muss ich gegen Sunset austauschen, da ich Offsets verarbeiten muss.
Das würde dann m.E. so aussehen:
([16:30-22:30|56] or
[{sunrise(180,"HORIZON=-6)} -22:30] and [hl.01.Feiertag:tomorrow] ne "none" or
[{sunrise(180,"HORIZON=-6)} -21:30|01234] and [hl.01.Feiertag:tomorrow] eq "none" or
[{sunrise(180,"HORIZON=-6)} -02:00] and [hl.01.Feiertag:state] eq "Silvester"
) (set Gartenlicht on) DOELSE (set Gartenlicht off)


Die Sorge, die ich habe ist, dass fhem in diesem DOIF ständig den Sonnenuntergang für alle Konditionen berechnen muss. Geht das nicht ziemlich auf die Rechenzeit? Meine Idee war es, das sunset nur 1 x zu berechnen, den Wert in einen Dummy zu schreiben und das DOIF damit zu verknüpfen. Das funktioniert aber nicht, da das DOIF nicht mehr korrekt getriggert wird.

Spartacus