[Gelöst] Sunset DOIF Problem ?

Begonnen von Rampler, 12 Dezember 2014, 23:59:01

Vorheriges Thema - Nächstes Thema

Rampler

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


3 HMUART (2 via ESP8266), 1 DUOFERN, 12 ESP8266, SolvisBen, GoodWE WR, RPI2 (Bullseye), ZWAVE, HM-Classic, und hoch zufrieden ...
Danke an alle, die was dazu beigetragen haben !!

Puschel74

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.

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rudolfkoenig

"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.

Puschel74

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
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.

Rampler

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") }}
3 HMUART (2 via ESP8266), 1 DUOFERN, 12 ESP8266, SolvisBen, GoodWE WR, RPI2 (Bullseye), ZWAVE, HM-Classic, und hoch zufrieden ...
Danke an alle, die was dazu beigetragen haben !!

Spartacus

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
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R