Einfach Bedingung für sunrise

Begonnen von 4ndreas, 30 August 2017, 18:56:34

Vorheriges Thema - Nächstes Thema

4ndreas

Hallo,

als absoluter Neuling versuche ich mich gerade in der ersten Schaltung.
Ich habe eine Lampe für den Außenbereich eingebunden, die bei Sonnenuntergang einschalten und um 00:00 Uhr ausschalten soll.
Das war kein großes Problem.
Jetzt möchte ich aber, dass die Lampe morgens um 6:00 Uhr angeht und bei Sonnanaufgang wieder ausgeht.
Wenn die der Sonnenaufgang aber vor 6 Uhr liegt, soll sie aus bleiben.
Nach ein wenig Recherche habe ich folgendes versucht:
define OdKammerAnSunset at {if (sunrise("REAL") < "06:00:00") {fhem("set Od.Kammer on")}}
define OdKammerAnSunset at {if (sunrise() < "06:00:00") {fhem("set Od.Kammer on")}}
FHEM meldet: Wrong timespec {if: either HH:MM:SS or {perlcode}

Ich habe es auch ohne Anführungszeichen versucht, aber leider ohne Erfolg.
Kann mir bitte jemand auf die Sprünge helfen?

Gruß Andreas

Otto123

#1
Hallo Andreas,

beim at kannst Du als Trigger keine Bedingung sondern nur einen Zeitpunkt angeben. Du kannst zu einem Zeitpunkt starten und dann eine Bedingung im Ausführungsteil angeben.

Was Du willst, kannst Du eigentlich einfach mit einem DOIF machen.

defmod di_OdKammer DOIF ([06:00-{sunrise_abs("REAL")}])(set Od.Kammer on) DOELSE (set Od.Kammer off)


Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

cs-online

Hallo,

Bedingungen gehen schon, ich habe sowas für einen Rolladen so gelöst:

define Fruehschaltung_Wohnzimmer at *{sunrise(3000,"07:00","08:30")} { fhem("set Rolladen_Wohnzimmer on") if (!$we) }

es soll also frühestens um 7 und spätestens um 8:30 nach Sonnenaufgang mit Verzögerung (3000), aber nur wenn nicht Wochenende ist, geschaltet werden...
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266/32 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20+S26,Shelly1/2/2.5, Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV+Speicher, alles auf einem RPI und da geht noch mehr

4ndreas

Zunächst einmal danke für die schnellen und hilfreichen Antworten.

@Otto:
Deine Lösung wird von FHEM akzeptiert und wird wahrscheinlich funktionieren.
Leider zeigt FHEM nicht explizit an, wann die nächste Schaltung passiert.
Der STATE zeigt nur initialized. Bei den anderen Schaltungen wird die nächste Schaltung angezeigt, was mir mehr Übersicht gibt.
Ich verstehe allerdings eine Kleinigkeit nicht...
Wieso ist die Bedingung "([06:00-{sunrise_abs("REAL")}])" = True?

@cs-online:
Bei Deinem Ansatz würde ich (vermutlich) die nächste Schaltzeit sehen.
Ich habe mir die Abfrage von Otto benommen und folgendes versucht:
define od_Kammer_morgens_an at *06:00:00 {fhem("set Od.Kammer on") if ([06:00-{sunrise_abs("REAL")}])}
Hierbei bekomme ich die Meldung:
syntax error at (eval 191) line 1, near "06:"

Otto123

#4
Zitat von: 4ndreas am 31 August 2017, 14:02:18
Wieso ist die Bedingung "([06:00-{sunrise_abs("REAL")}])" = True?
Nicht wieso sondern wann  ;) -> von um 6:00 bis Sonnenaufgang.
Zitat der Doku
ZitatZeitsteuerung mit Zeitintervallen   back

Zeitintervalle werden im Format angegeben: [<begin>-<end>], für <begin> bzw. <end> wird das gleiche Zeitformat verwendet, wie bei einzelnen Zeitangaben. Getriggert wird das Modul zum Zeitpunkt <begin> und zum Zeitpunkt <end>. Soll ein Zeitintervall ohne Zeittrigger lediglich zur Abfrage dienen, so muss hinter der eckigen Klammer ein Fragezeichen angegeben werden (siehe Beispiele weiter unten). Das Zeitintervall ist als logischer Ausdruck ab dem Zeitpunkt <begin> wahr und ab dem Zeitpunkt <end> nicht mehr wahr.
In den Readings des DOIFs werden Dir exakt die nächsten Timer angezeigt und der Status!

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

4ndreas

Zitat von: Otto123 am 31 August 2017, 14:49:57
In den Readings des DOIFs werden Dir exakt die nächsten Timer angezeigt und der Status!

Das ist für mich noch etwas ungewohnt. Ich sehe zwar die Infos über die timer, aber so ganz eindeutig ist das nicht für mich.
READINGS:
     2017-08-31 20:43:58   cmd             0
     2017-08-31 20:43:58   state           initialized
     2017-08-31 20:43:58   timer_01_c01    01.09.2017 06:00:00
     2017-08-31 20:43:58   timer_02_c01    01.09.2017 06:48:45


Im Vergleich dazu ist bei der at Variante die nächste Schaltung eindeutig erkennbar:
at
Od_Kammer_abends_an   Next: 20:10:27
Od_Kammer_abends_aus  Next: 23:59:00
Od_Kammer_morgens_aus Next: 06:48:45


Trotzdem hat mir Deine Lösung geholfen - vielen Dank!