FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Esteban am 16 Februar 2016, 13:08:05

Titel: [at] Befehl - Steckdosen schalten mit sunset und sunrise an verschiedenen Tagen
Beitrag von: Esteban am 16 Februar 2016, 13:08:05
Hallo!

Ich bin am 7.2. in die FHEM-Welt eingestiegen.

Der Grund war schlicht und einfach, dass ich eine Gigaset Elements "Alarmanlage" habe - na ja vielmehr eine ereignisorientierte Meldeanlage. Das funktioniert auch durchaus gut und reicht für meine Bedürfnisse, allerdings fand ich schaltbare Steckdosen für den Preis von 44 Euro mit einem miesen Regel-Manager nicht gerechtfertigt. Also machte ich mich auf der Suche nach einer Alternative.

So bin ich bei FHEM gelandet. Kurzerhand einen meiner OpenELEC-Pi2 umfunktioniert zum FHEM Server und mir einen CUL bei busware bestellt.

Die Schaltung von selbstlernenden Intertechno-Steckdosen [IT-1500] funktioniert auch ganz wunderbar. Dann entdeckte ich den at-Befehl und hab die Schaltung der Steckdosen so verändert, dass diese dann zum Zeitpunkt X abhängig vom Sonnenuntergang schalten sollen.

Das ging auch tadellos, dann fing ich aber an die Tage zu verändern.

Es kam dabei folgender Code raus:


# AT-Befehle
# MORGENS

# Flur-LED werktags um 05:50h an, außer Donnerstag. Wenn es hell ist nichts unternehmen.
define fl_LED_Morgens_AN_WT at *{sunrise(-3600,"05:50","05:50")} { if($wday == 1) || if($wday == 2) || if($wday == 3) || if($wday == 5) { fhem("set fl_LED on") }}
attr fl_LED_Morgens_AN_WT room Flur
# Flur-LED Donnerstags um 07:30 an.
define fl_LED_Morgens_AN_DO at *{sunrise(-3600,"07:30","07:30")} { if($wday == 4) { fhem("set fl_LED on") }}
attr fl_LED_Morgens_AN_DO room Flur
# Flur-LED Wochenende um 8 an. 
define fl_LED_Morgens_AN_WE at *{sunrise(-3600,"08:00","08:00")} { if($wday == 6) || if($wday == 7) { fhem("set fl_LED on") }}
attr fl_LED_Morgens_AN_WE room Flur

# Flur-LED AUS
define fl_LED_Morgens_AUS at *{sunrise(+3600,"05:50","08:30")} set fl_LED off
attr fl_LED_Morgens_AUS room Flur

# Balkon-LED werktags um 05:50 an, außer Donnerstag.
define wz_LED_Balkon_Morgens_AN_WT at *{sunrise(-3600,"05:50","05:50")} { if($wday == 1) || if($wday == 2) || if($wday == 3) || if($wday == 5) { fhem("set wz_LED_Balkon on") }}
attr wz_LED_Balkon_Morgens_AN_WT room Wohnzimmer
# Balkon-LED Donnerstags um 07:30 an.
define wz_LED_Balkon_Morgens_AN_DO at *{sunrise(-3600,"07:30","07:30")} { if($wday == 4) { fhem("set wz_LED_Balkon on") }}
attr wz_LED_Balkon_Morgens_AN_DO room Wohnzimmer
# Balkon-LED am Wochenende um 8 an.
define wz_LED_Balkon_Morgens_AN_WE at *{sunrise(-3600,"08:00","08:00")} { if($wday == 6) || if($wday == 7) { fhem("set wz_LED_Balkon on") }}
attr wz_LED_Balkon_Morgens_AN_WE room Wohnzimmer

# Balkon-LED generell AUS
define wz_LED_Balkon_Morgens_AUS at *{sunrise(+3600,"05:50","08:30")} set wz_LED_Balkon off
attr wz_LED_Balkon_Morgens_AUS room Wohnzimmer

# ABENDS
# ABENDS AN
define fl_LED_Abends_AN at *{sunset(-3600,"16:00","23:00")} set fl_LED on
attr fl_LED_Abends_AN room Flur
define wz_LED_Balkon_Abends_AN at *{sunset(-3600,"16:00","23:00")} set wz_LED_Balkon on
attr wz_LED_Balkon_Abends_AN room Wohnzimmer
define wz_Highboard_Abends_AN at *{sunset(-3600,"16:00","23:00")} set wz_Highboard on
attr wz_Highboard_Abends_AN room Wohnzimmer
define wz_DekoLED_Abends_AN at *{sunset(-3600,"16:00","23:00")} set wz_DekoLED on
attr wz_DekoLED_Abends_AN room Wohnzimmer

# ABENDS AUS
# Highboard
# Highboard Mo bis Do + So
define wz_Highboard_Abends_AUS_WT at *01:00:00 { if($wday == 1) || if($wday == 2) || if($wday == 3) || if($wday == 4)|| if($wday == 0) { fhem("set wz_Highboard off") }}
attr wz_Highboard_Abends_AUS_WT room Wohnzimmer
# Highboard Fr und Sa
define wz_Highboard_Abends_AUS_WE at *03:00:00 { if($wday == 5) || if($wday == 6) { fhem("set wz_Highboard off") }}
attr wz_Highboard_Abends_AUS_WE room Wohnzimmer

# LED Balkon
# Balkon-LED Mo bis Do + So
define wz_LED_Balkon_Abends_AUS_WT at *01:00:00 { if($wday == 1) || if($wday == 2) || if($wday == 3) || if($wday == 4)|| if($wday == 0) { fhem("set wz_LED_Balkon off") }}
attr wz_LED_Balkon_Abends_AUS_WT room Wohnzimmer
# Balkon-LED Fr und Sa
define wz_LED_Balkon_Abends_AUS_WE at *03:00:00 { if($wday == 5) || if($wday == 6) { fhem("set wz_LED_Balkon off") }}
attr wz_LED_Balkon_Abends_AUS_WE room Wohnzimmer

# LED Flur
# LED Flur Mo bis Do + So
define fl_LED_Abends_AUS_WT at *01:00:00 { if($wday == 1) || if($wday == 2) || if($wday == 3) || if($wday == 4)|| if($wday == 0) { fhem("set fl_LED off") }}
attr fl_LED_Abends_AUS_WT room Flur
# LED Flur Fr und Sa
define fl_LED_Abends_AUS_WE at *03:00:00 { if($wday == 5) || if($wday == 6) { fhem("set fl_LED off") }}
attr fl_LED_Abends_AUS_WE room Flur

# Deko LED
# Deko LED Mo bis Do + So
define wz_DekoLED_Abends_AUS_WT at *01:00:00 { if($wday == 1) || if($wday == 2) || if($wday == 3) || if($wday == 4)|| if($wday == 0) { fhem("set wz_DekoLED off") }}
attr wz_DekoLED_Abends_AUS_WT room Wohnzimmer
# Deko LED Fr und Sa
define wz_DekoLED_Abends_AUS_WE at *03:00:00 { if($wday == 5) || if($wday == 6) { fhem("set wz_DekoLED off") }}
attr wz_DekoLED_Abends_AUS_WE room Wohnzimmer


Sie ihr seht will ich zu verschiedenen Zeiten schalten und walten.

Meine Fragen...

Heute morgen hats nicht funktioniert:
2016.02.16 05:49:59 3: fl_LED_Morgens_AN_WT: syntax error at (eval 167) line 1, near "|| if"
syntax error at (eval 167) line 1, near "}}"

2016.02.16 05:49:59 3: wz_LED_Balkon_Morgens_AN_WT: syntax error at (eval 169) line 1, near "|| if"
syntax error at (eval 169) line 1, near "}}"


Daraufhin hab ich den Code angepasst:

define fl_LED_Morgens_AN_WT at *{sunrise(-3600,"05:50","05:50")} { if($wday == 1) || if($wday == 2) || if($wday == 3) || if($wday == 5) { fhem("set fl_LED on") }}

Um es kurz zu erklären - im If waren nie die (runden) Klammern zu.

sah vorher so aus:
define fl_LED_Morgens_AN_WT at *{sunrise(-3600,"05:50","05:50")} { if($wday == 1 || if($wday == 2 || if($wday == 3 || if($wday == 5) { fhem("set fl_LED on") }}


Getestet hab ich aber noch nicht, um 17:09 Uhr weiß ich mehr.

Eigentlich bin ich wohl nur auf der Suche nach der richtigen Syntax und eventuell lässt sich der ganze Krempel ja kompakter schreiben?

Danke! :)
Titel: Antw:[at] Befehl - Steckdosen schalten mit sunset und sunrise an verschiedenen Tagen
Beitrag von: Esteban am 16 Februar 2016, 13:17:12
einen Fehler hab ich gerade entdeckt. wday == 7 gibts nicht, das ist wday == 0 (Sonntag)
Titel: Antw:[at] Befehl - Steckdosen schalten mit sunset und sunrise an verschiedenen Tagen
Beitrag von: Bartimaus am 16 Februar 2016, 13:39:48
Lies mal die Commandref zu DOIF
Titel: Antw:[at] Befehl - Steckdosen schalten mit sunset und sunrise an verschiedenen Tagen
Beitrag von: Esteban am 16 Februar 2016, 15:41:00
Danke!

http://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung

das hilft mir schon sehr! Ich werde berichten.

Ist der o.g. Code denn grundsätzlich möglich??
Titel: Antw:[at] Befehl - Steckdosen schalten mit sunset und sunrise an verschiedenen Tagen
Beitrag von: Thorsten Pferdekaemper am 16 Februar 2016, 15:48:54
Hi,
ist das nicht etwas für WeekdayTimer?
Gruß,
   Thorsten
Titel: Antw:[at] Befehl - Steckdosen schalten mit sunset und sunrise an verschiedenen Tagen
Beitrag von: Bartimaus am 16 Februar 2016, 19:18:27
Zitat von: Esteban am 16 Februar 2016, 15:41:00

Ist der o.g. Code denn grundsätzlich möglich??

Ja, aber mit DOIF kannst Du den deutlich abspecken. Da kannst Du mittels DOELSEIF oder "or"-Verknüpfungen alles in ein DOIF packen.
Titel: Antw:[at] Befehl - Steckdosen schalten mit sunset und sunrise an verschiedenen Tagen
Beitrag von: Hollo am 16 Februar 2016, 20:07:54
Zitat von: Esteban am 16 Februar 2016, 13:08:05
...Eigentlich bin ich wohl nur auf der Suche nach der richtigen Syntax und eventuell lässt sich der ganze Krempel ja kompakter schreiben?
Lies mal hier http://www.fhemwiki.de/wiki/If-condition (http://www.fhemwiki.de/wiki/If-condition) unter "komplexere if-Bedingung" , dann verstehst Du auch Deine Fehlermeldung "near "|| if"  ".  Die "ifs" nach dem ODER sind nämlich zu viel.  ;)

Einfache Möglichkeiten gibt es natürlich über Weekdaytimer oder DOIF, wie schon geschrieben.
Gerade als Anfänger lernt man aber mit dem Korrigieren des eigenen Codes mehr; umstellen kannst Du danach auch noch.


Titel: Antw:[at] Befehl - Steckdosen schalten mit sunset und sunrise an verschiedenen Tagen
Beitrag von: betateilchen am 16 Februar 2016, 20:18:31
if($wday == 1) || if($wday == 2) || if($wday == 3) || if($wday == 5)

Viel zuviele if :)

Probier mal:

if($wday == 1 || $wday == 2 || $wday == 3 || $wday == 5)
Titel: Antw:[at] Befehl - Steckdosen schalten mit sunset und sunrise an verschiedenen Tagen
Beitrag von: Esteban am 17 Februar 2016, 16:09:21
Moin! :)

Ja danke mit den Hinweis auf die if's! Ich kenne die Syntax ja noch nicht so daher ist es alles eine Frage der Gewöhnung aber schlussendlich hat mal wieder der Kopf versagt, da hätt ich auch von alleine drauf kommen können :)

Ich hab die ifs nun angepasst und es funktioniert auch. Ich werde mir am Wochenende aber DOIF anschauen und entsprechend die Config-Datei mal austauschen.

Bislang bin ich recht zufrieden außer die 433 MHZ-Reichweite des CULs... aber das hätte ich vorher wissen müssen. Es werden sicher noch mehr Geräte hinzu kommen - aber es ist eher so ein Winter-Projekt für mich.... ;-)

Ist denn

define wz_LED_Balkon_Morgens_AN_WT at *{sunrise(-3600,"05:50","05:50")} { if($wday == 1 || $wday == 2 || $wday == 3 || $wday == 5) { fhem("set wz_LED_Balkon on") }}


so okay? Ich möchte, dass das Licht ne Stunde vor Sonnenaufgang an geht, aber spätestens um 05:50 und wenn es früher hell ist möchte ich, dass es gar nicht angeht....
Titel: Antw:[at] Befehl - Steckdosen schalten mit sunset und sunrise an verschiedenen Tagen
Beitrag von: Puschel74 am 18 Februar 2016, 10:35:13
Wenn ich mir die ganzen wday-Vergleiche anschaue würde mir ganz old-school-FHEM-like Weekdaytimer einfallen um das ganze etwas zu vereinfachen.
Aber auch DOIF mit seiner deutschen commandref und den unzähligen Beispielen darin sollten hilfreich sein.
Titel: Antw:[at] Befehl - Steckdosen schalten mit sunset und sunrise an verschiedenen Tagen
Beitrag von: Hollo am 18 Februar 2016, 12:39:41
Zitat von: Esteban am 17 Februar 2016, 16:09:21
...
so okay? Ich möchte, dass das Licht ne Stunde vor Sonnenaufgang an geht, aber spätestens um 05:50 und wenn es früher hell ist möchte ich, dass es gar nicht angeht....
Nee, dat löppt nich bzw. ist irgendwie unlogisch  :o
Wenn Du spätestens um 5:50 anschalten willst, darfst Du nicht gleichzeitig frühestens um 5:50 anschalten!
Du musst mit der 1. Zeitangabe die früheste Zeit definieren, zu der eingeschaltet werden darf.
Die 2. Zeitangabe ist dann der Zeitpunkt, zu dem spätestens eingeschaltet wird.

Vermutlich willst Du eigentlich eher das Gegenteil...
- zu einer bestimmten Zeit morgens einschalten und wenn es hell wird wieder ausschalten?
- einfach zu Zeit x einschalten, sofern es nicht schon hell ist

Da wäre evtl. folgendes einfacher...
- ein at zum Einschalten mit if-Bedingung "wenn nicht schon hell" -> guck mal nach "isday()"
- sunrise zum Ausschalten wenn es hell genug ist
Titel: Antw:[at] Befehl - Steckdosen schalten mit sunset und sunrise an verschiedenen Tagen
Beitrag von: Esteban am 21 Februar 2016, 10:58:49
Moin!

Gibts hier gar keine Forums-Danke-Funktion? :)

Ich werde mir das noch einmal anschauen. Momentan hat mich das Wochenende schon überholt... die Lampen schalten sich um 7:58 aus (sunrise...) aber an geht sie dann um 8... vor 4 Tagen sah es noch anders herum aus und damit auch logisch :)

Besten Dank!

Grüße

Stefan
Titel: Antw:[at] Befehl - Steckdosen schalten mit sunset und sunrise an verschiedenen Tagen
Beitrag von: Esteban am 22 Februar 2016, 20:21:44
Hi!

Ich hab eben mal ein wenig mit DOIF rumgebastelt.

Allerdings weiß ich nicht genau, wie die Syntax ist, um im DOIF quasi ein IF im IF zu schreiben... um das mal kurz zu erklären:


- es gibt Dummys für Sonnenaufgang und Untergang
- es gibt eine Struktur mit den zu schaltenden Lampen --> wz_Lampen_Morgens

define wz_LichtMorgensAN DOIF ([+{Sonnenaufgang(,"05:50,"08:00")}|1235]) ##Mo, Di, Mi und Fr
(set wz_Lampen_Morgens on)
DOELSEIF ([07:30|4]) ##Do
(set wz_Lampen_Morgens on)
DOELSEIF ([08:00|60])##Sa und So
(set wz_Lampen_Morgens on)


Do sowie Sa und So habe ich NICHT angepasst bezüglich Sonnenaufgang. Das fehlt natürlich noch.

Was ich hier möchte...

- Das Licht soll zum definierten Zeitpunkt angehen und zwar um 05:50 aber spätestens um 08:00 Uhr Mo,Di,Mi und Fr --> wahrscheinlich ist die Definition |1235 hier im DOIF falsch, Donnerstags soll es erst um 07:30 angehen, Sa+So nicht vor 08:00 Uhr
- allerdings muss jetzt noch folgendes dazu: Sofern die definierte Zeit im Sonnenaufgang vor 05:50 Uhr etc liegt soll gar nichts passieren, denn es ist ja hell. Hier wäre wohl isday() hilfreich - wie auch immer man es jetzt benutzt?


Zugegeben... ich bin recht neu, verstehe vieles auf Anhieb aber manchmal hat man ein Brett vor dem Kopf... Hab mir auch sicherlich nicht die leichteste Anfängeraufgabe rausgesucht...


Dankeschön!! :)



Titel: Antw:[at] Befehl - Steckdosen schalten mit sunset und sunrise an verschiedenen Tagen
Beitrag von: Esteban am 23 Februar 2016, 00:54:34
Konnt nicht schlafen und hab etwas Denksport betrieben  ;)

Hab das Modul Twilight entdeckt und dieses entsprechend angepasst. Ich hab dem erzeugten Objekt den Namen T zugewiesen.

Nun hab ich den Code zum Anschalten morgens entsprechend angepasst:

define wz_LichtMorgensAN_TEST DOIF ([{twilight("T","ss_indoor","5:50","8:30")}|1235]) ##Mo, Di, Mi und Fr
(set wz_Lampen_Morgens on)
DOELSEIF ([{twilight("T","ss_indoor","7:30","8:30")}|4]) ##Do
(set wz_Lampen_Morgens on)
DOELSEIF ([{twilight("T","ss_indoor","8:00","9:00")}|60]) ##Sa und So
(set wz_Lampen_Morgens on)


Das müsste die Lampen nun einschalten und das nur, wenn es dunkel ist.

Folglich kann ich mit ein wenig Änderung am Code halt die Ausschalt-Funktion...

define wz_LichtMorgensAUS_TEST DOIF ([{twilight("T","ss_indoor")}]) ##Lampen aus wenn es hell ist
(set wz_Lampen_Morgens off)


Was meint ihr, kann ich einen Test mal wagen oder gibts noch Verbesserungspotential?

Und ist es wirklich so, dass die Lampen nun NICHT angehen, wenn es um 5:45 Uhr schon hell ist, also die sr_indoor-Zeit vor 5:50 liegt???

Danke und GN8! :-)
Titel: Antw:[at] Befehl - Steckdosen schalten mit sunset und sunrise an verschiedenen Tagen
Beitrag von: Esteban am 24 Februar 2016, 01:08:13
 ::) ::) ::) ::) ::)  8)

besser so...?

define LichtMorgens DOIF (([05:50-08:30|1235]) or ([07:30-08:30|4]) or ([08:00-09:00|60]) and ([Helligkeit:twilight_weather] < 70)) (set grp_Lampen_Morgens on) DOELSE (set grp_Lampen_Morgens off)

Nach einigem Lesen war mir klar, dass ich DOIF grundlegend anders verstehen muss.

Twilight lässt sich nicht so einbinden wie erhofft - zu viele Parameter und zu kompliziert. Dann hab ich http://forum.fhem.de/index.php?topic=35191.0 (http://forum.fhem.de/index.php?topic=35191.0) diesen Beitrag hier gelesen.

Logisch, dass Twilight am besten als AND benutzt werden sollte um mit einem bestimmten Helligkeitswert dann das ELSE zu erzwingen... also hab ich in mein Log geschaut und den Wert 70 für mich ausfindig gemacht - mal sehen, was morgen so passiert!!!

Bin ich auf dem richtigen Weg? :)
Titel: Antw:[at] Befehl - Steckdosen schalten mit sunset und sunrise an verschiedenen Tagen
Beitrag von: Damian am 24 Februar 2016, 11:25:43
Zitat von: Esteban am 24 Februar 2016, 01:08:13
::) ::) ::) ::) ::)  8)

besser so...?

define LichtMorgens DOIF (([05:50-08:30|1235]) or ([07:30-08:30|4]) or ([08:00-09:00|60]) and ([Helligkeit:twilight_weather] < 70)) (set grp_Lampen_Morgens on) DOELSE (set grp_Lampen_Morgens off)

Nach einigem Lesen war mir klar, dass ich DOIF grundlegend anders verstehen muss.

Twilight lässt sich nicht so einbinden wie erhofft - zu viele Parameter und zu kompliziert. Dann hab ich http://forum.fhem.de/index.php?topic=35191.0 (http://forum.fhem.de/index.php?topic=35191.0) diesen Beitrag hier gelesen.

Logisch, dass Twilight am besten als AND benutzt werden sollte um mit einem bestimmten Helligkeitswert dann das ELSE zu erzwingen... also hab ich in mein Log geschaut und den Wert 70 für mich ausfindig gemacht - mal sehen, was morgen so passiert!!!

Bin ich auf dem richtigen Weg? :)

ja, wenn die Helligkeit für alle Tage gelten soll, dann musst du wegen der Priorität der Operatoren die Sache anders klammern (and bindet stärker als or) und die anderen Klammern kannst du weglassen:

define LichtMorgens DOIF (([05:50-08:30|1235] or [07:30-08:30|4] or [08:00-09:00|60]) and [Helligkeit:twilight_weather] < 70) (set grp_Lampen_Morgens on) DOELSE (set grp_Lampen_Morgens off)


Gruß

Damian
Titel: Antw:[at] Befehl - Steckdosen schalten mit sunset und sunrise an verschiedenen Tagen
Beitrag von: Esteban am 24 Februar 2016, 12:08:14
Hi Damian,

na da hab ich ja den richtigen an der Strippe :)

Vielen Dank!

Ich hab deinen Ratschlag jetzt berücksichtigt, aber hier mal der Code der Lampen für morgens - T ist "Helligkeit" geworden, also Twilight und ich hab die Struktur der Lampen durch die einzelnen Elemente ersetzt weil ich es dann einfacher handhaben kann.


define LichtMorgens DOIF (([05:50|1235] or [07:30|4] or [08:00|60]) and [Helligkeit:twilight_weather] < 70)\
(set fl_LED on)\
(set wz_LED_Balkon on)\
DOELSEIF  ([[Helligkeit:sr_weather]])\
(set fl_LED off)\
(set wz_LED_Balkon off)
attr LichtMorgens room Flur


und hier für abends:


define LichtAbends DOIF (([{twilight("Helligkeit","ss_indoor","15:00","23:00")}]) and ([Helligkeit:twilight_weather] < 50))\
(set fl_LED on)\
(set wz_LED_Balkon on)\
(set wz_DekoLED on)\
(set wz_Highboard on)\
(set gal_LED_Lese on)\
DOELSEIF ([00:30|12345])\
(set fl_LED off)\
(set wz_DekoLED off)\
(set wz_Highboard off)\
(set gal_LED_Lese off)\
DOELSEIF ([01:30|12345])\
(set wz_LED_Balkon off)\
DOELSEIF ([01:30|60])\
(set fl_LED off)\
(set wz_DekoLED off)\
(set wz_Highboard off)\
(set gal_LED_Lese off)\
DOELSEIF ([02:00|60])\
(set wz_LED_Balkon off)\

attr LichtAbends room Flur


Jetzt komme ich mit den STATE noch durcheinander. Abends steht jetzt auf "initialized", morgens steht auf "cmd_2". Das hab ich noch nicht so ganz durchblickt. Ich dachte STATE wird nur geändert, wenn es einen DOELSE gibt. Ich hatte zuerst bei morgens einen DOELSE aber dann hab ich das Problem, dass z.B. auch das Licht ausgeschaltet wird wenn ich es Nachts mal manuell anmachen will.

Schöner Einstieg, macht mir Spaß und ich finde das super, dass einem hier geholfen wird! :)

Edit: ich hab jetzt ein Attribut do always hinzugefügt. Leuchtet mir ein. Was die states aber sollen - da hab ich nach gesucht aber dabei leider nix Gescheites gefunden...
Titel: Antw:[at] Befehl - Steckdosen schalten mit sunset und sunrise an verschiedenen Tagen
Beitrag von: Esteban am 24 Februar 2016, 12:14:59
und noch was zum twilight_weather:

Hier mal der Log aus twilight, wie der wert twilight_weather war:

2016-02-24_07:22:31 Helligkeit twilight_weather: 48.8
2016-02-24_07:25:33 Helligkeit nextEvent: sr_indoor
2016-02-24_07:25:33 Helligkeit nextEventTime: 07:32:32
2016-02-24_07:27:31 Helligkeit twilight_weather: 52.8
2016-02-24_07:32:31 Helligkeit twilight_weather: 56.8
2016-02-24_07:32:32 Helligkeit nextEvent: sr_weather
2016-02-24_07:37:31 Helligkeit twilight_weather: 60.7
2016-02-24_07:42:32 Helligkeit twilight_weather: 64.7
2016-02-24_07:47:32 Helligkeit twilight_weather: 68.6
2016-02-24_07:49:32 Helligkeit aktEvent: sr_weather
2016-02-24_07:49:32 Helligkeit nextEvent: ss_weather
2016-02-24_07:49:32 Helligkeit nextEventTime: 17:18:45
2016-02-24_07:52:32 Helligkeit twilight_weather: 72.5
2016-02-24_07:57:38 Helligkeit twilight_weather: 76.4


das bedeutet, dass der Wert 70 irgendwann zwischen 07:47 und 07:52 überschritten wurde.

Allerdings sagt mir das Logfile:

Zitat
2016.02.24 05:50:09 2: IT set fl_LED on
2016.02.24 05:50:10 2: IT set wz_LED_Balkon on

2016.02.24 07:32:32 2: IT set fl_LED off
2016.02.24 07:32:32 2: IT set wz_LED_Balkon off

Erklären kann ich mir das jetzt nicht :) Anscheinend hat das was mit dem Wechsel auf sr_indoor zu tun?
Titel: Antw:[at] Befehl - Steckdosen schalten mit sunset und sunrise an verschiedenen Tagen
Beitrag von: Esteban am 25 Februar 2016, 12:33:03
Sooo es funktioniert soweit alles  ;D Danke!

Hier der funktionierende Code aus der fhem.cfg:


define LichtMorgens DOIF (([05:50|1235] or [07:30|4] or [08:00|60]) and [Helligkeit:twilight_weather] < 70)\
(set fl_LED on)\
(set wz_LED_Balkon on)\
DOELSEIF  ([[Helligkeit:sr_weather]])\
(set fl_LED off)\
(set wz_LED_Balkon off)
attr LichtMorgens do always
attr LichtMorgens room Flur

define LichtAbends DOIF (([{twilight("Helligkeit","ss_indoor","15:00","23:00")}]) and ([Helligkeit:twilight_weather] < 50))\
(set fl_LED on)\
(set wz_LED_Balkon on)\
(set wz_DekoLED on)\
(set wz_Highboard on)\
(set gal_LED_Lese on)\
DOELSEIF ([00:30|12345])\
(set fl_LED off)\
(set wz_DekoLED off)\
(set wz_Highboard off)\
(set gal_LED_Lese off)\
DOELSEIF ([01:30|12345])\
(set wz_LED_Balkon off)\
DOELSEIF ([01:30|60])\
(set fl_LED off)\
(set wz_DekoLED off)\
(set wz_Highboard off)\
(set gal_LED_Lese off)\
DOELSEIF ([02:00|60])\
(set wz_LED_Balkon off)\

attr LichtAbends do always
attr LichtAbends room Flur


...mit dem Wert STATE hab ich aber immer noch ein Problem. Bei morgens steht nun cmd_2 und bei Abends cmd_3 - hat jemand da mal ein schönes Anwendungsbeispiel um es zu verstehen? Und muss ich noch was tun oder reicht ein do always??? Besten Dank!
Titel: Antw:[at] Befehl - Steckdosen schalten mit sunset und sunrise an verschiedenen Tagen
Beitrag von: Esteban am 27 Februar 2016, 18:50:53
Heute gingen die Lampen nicht an :(

(([{twilight("Helligkeit","ss_indoor","15:00","23:00")}]) and ([Helligkeit:twilight_weather] < 50))
(set fl_LED on)
(set wz_LED_Balkon on)
(set wz_DekoLED on)
(set wz_Highboard on)
(set gal_LED_Lese on)
DOELSEIF ([00:30|12345])
(set fl_LED off)
(set wz_DekoLED off)
(set wz_Highboard off)
(set gal_LED_Lese off)
DOELSEIF ([01:30|12345])
(set wz_LED_Balkon off)
DOELSEIF ([01:30|60])
(set fl_LED off)
(set wz_DekoLED off)
(set wz_Highboard off)
(set gal_LED_Lese off)
DOELSEIF ([02:00|60])
(set wz_LED_Balkon off)


Readings
state cmd_5
timer_1_c1  28.02.2016 17:41:39
timer_2_c2 28.02.2016 00:30:00|12345
timer_3_c3 28.02.2016 01:30:00|12345
timer_4_c4 28.02.2016 01:30:00|60
timer_5_c5 28.02.2016 02:00:00|60


Letztendlich war es um 17:41:39 Uhr noch hell, weil die Sonne schien. Also war twilight_weather < 50 aber danach ist nichts mehr passiert. Kleiner 50 traf um 17:48 ein laut Logfile...

2016-02-27_17:30:50 Helligkeit azimuth: 253.14
2016-02-27_17:30:50 Helligkeit elevation: 3
2016-02-27_17:30:50 Helligkeit twilight: 83.3
2016-02-27_17:30:50 Helligkeit twilight_weather: 64.4
2016-02-27_17:30:50 Helligkeit compasspoint: west-southwest
2016-02-27_17:35:50 Helligkeit azimuth: 254.15
2016-02-27_17:35:50 Helligkeit elevation: 2.28
2016-02-27_17:35:50 Helligkeit twilight: 79.3
2016-02-27_17:35:50 Helligkeit twilight_weather: 60.4
2016-02-27_17:35:50 Helligkeit compasspoint: west-southwest
2016-02-27_17:40:50 Helligkeit azimuth: 255.16
2016-02-27_17:40:50 Helligkeit elevation: 1.56
2016-02-27_17:40:50 Helligkeit twilight: 75.3
2016-02-27_17:40:50 Helligkeit twilight_weather: 56.4
2016-02-27_17:40:50 Helligkeit compasspoint: west-southwest
2016-02-27_17:41:39 Helligkeit 8
2016-02-27_17:41:39 Helligkeit light: 4
2016-02-27_17:41:39 Helligkeit horizon: 1
2016-02-27_17:41:39 Helligkeit aktEvent: ss_indoor
2016-02-27_17:41:39 Helligkeit nextEvent: ss
2016-02-27_17:41:39 Helligkeit nextEventTime: 17:48:34
2016-02-27_17:45:50 Helligkeit azimuth: 256.17
2016-02-27_17:45:50 Helligkeit elevation: 0.84
2016-02-27_17:45:50 Helligkeit twilight: 71.3
2016-02-27_17:45:50 Helligkeit twilight_weather: 52.4
2016-02-27_17:45:50 Helligkeit compasspoint: west-southwest
2016-02-27_17:48:34 Helligkeit 9
2016-02-27_17:48:34 Helligkeit light: 3
2016-02-27_17:48:34 Helligkeit horizon: 0
2016-02-27_17:48:34 Helligkeit aktEvent: ss
2016-02-27_17:48:34 Helligkeit nextEvent: ss_civil
2016-02-27_17:48:34 Helligkeit nextEventTime: 18:29:26
2016-02-27_17:50:51 Helligkeit azimuth: 257.18
2016-02-27_17:50:51 Helligkeit elevation: 0.11
2016-02-27_17:50:51 Helligkeit twilight: 67.3
2016-02-27_17:50:51 Helligkeit twilight_weather: 48.4
2016-02-27_17:50:51 Helligkeit compasspoint: west-southwest
2016-02-27_17:55:51 Helligkeit azimuth: 258.18
2016-02-27_17:55:51 Helligkeit elevation: -0.61
2016-02-27_17:55:51 Helligkeit twilight: 63.2
2016-02-27_17:55:51 Helligkeit twilight_weather: 44.3
2016-02-27_17:55:51 Helligkeit compasspoint: west-southwest


Irgendeine Idee?
Titel: Antw:[at] Befehl - Steckdosen schalten mit sunset und sunrise an verschiedenen Tagen
Beitrag von: Esteban am 27 Februar 2016, 19:08:32
ich könnte ja auch einfach nur nach twilight_weather fragen, ist ja eigentlich sinnvoll??? Denn wenns zu dunkel wird soll es halt an gehen. Auch wenn keiner da ist.

habs mal umgedreht:

(([Helligkeit:twilight_weather] < 50) or ([{twilight("Helligkeit","ss_indoor","15:00","23:00")}]))
Titel: Antw:[at] Befehl - Steckdosen schalten mit sunset und sunrise an verschiedenen Tagen
Beitrag von: Esteban am 28 Februar 2016, 11:41:42
Ok ich muss noch eine zweite Bedingung nehmen sonst geht das Licht gleich wieder an  :P
Titel: Antw:[at] Befehl - Steckdosen schalten mit sunset und sunrise an verschiedenen Tagen
Beitrag von: Esteban am 29 Februar 2016, 21:13:26
so, ich habe fertig und verstanden...

Auszug aus fhem.cfg:

define LichtMorgens DOIF (([05:50|1235] or [07:30|4] or [08:00|60]) and [Helligkeit:twilight_weather] < 70)\
(set fl_LED on)\
(set wz_LED_Balkon on)\
DOELSEIF  ([[Helligkeit:sr_weather]])\
(set fl_LED off)\
(set wz_LED_Balkon off)
attr LichtMorgens cmdState an|aus
attr LichtMorgens room AutoFunc
define LichtAbends DOIF
([15:00-23:00] and [Helligkeit:twilight_weather] < 65)\
(set fl_LED on)\
(set wz_LED_Balkon on)\
(set wz_DekoLED on)\
(set wz_Highboard on)\
(set gal_LED_Lese on)\
DOELSEIF ([00:30|12345])\
(set fl_LED off)\
(set wz_DekoLED off)\
(set wz_Highboard off)\
(set gal_LED_Lese off)\
DOELSEIF ([01:30|12345])\
(set wz_LED_Balkon off)\
DOELSEIF ([01:30|60])\
(set fl_LED off)\
(set wz_DekoLED off)\
(set wz_Highboard off)\
(set gal_LED_Lese off)\
DOELSEIF ([02:00|60])\
(set wz_LED_Balkon off)\

attr LichtAbends cmdState alle_an|WT_aus|WT_Balkon_aus|WE_aus|WE_Balkon_aus
attr LichtAbends room AutoFunc
Titel: Antw:[at] Befehl - Steckdosen schalten mit sunset und sunrise an verschiedenen Tagen
Beitrag von: Damian am 29 Februar 2016, 21:27:39
Zitat von: Esteban am 29 Februar 2016, 21:13:26
so, ich habe fertig und verstanden...

Auszug aus fhem.cfg:

define LichtMorgens DOIF (([05:50|1235] or [07:30|4] or [08:00|60]) and [Helligkeit:twilight_weather] < 70)\
(set fl_LED on)\
(set wz_LED_Balkon on)\
DOELSEIF  ([[Helligkeit:sr_weather]])\
(set fl_LED off)\
(set wz_LED_Balkon off)
attr LichtMorgens cmdState an|aus
attr LichtMorgens room AutoFunc
define LichtAbends DOIF
([15:00-23:00] and [Helligkeit:twilight_weather] < 65)\
(set fl_LED on)\
(set wz_LED_Balkon on)\
(set wz_DekoLED on)\
(set wz_Highboard on)\
(set gal_LED_Lese on)\
DOELSEIF ([00:30|12345])\
(set fl_LED off)\
(set wz_DekoLED off)\
(set wz_Highboard off)\
(set gal_LED_Lese off)\
DOELSEIF ([01:30|12345])\
(set wz_LED_Balkon off)\
DOELSEIF ([01:30|60])\
(set fl_LED off)\
(set wz_DekoLED off)\
(set wz_Highboard off)\
(set gal_LED_Lese off)\
DOELSEIF ([02:00|60])\
(set wz_LED_Balkon off)\

attr LichtAbends cmdState alle_an|WT_aus|WT_Balkon_aus|WE_aus|WE_Balkon_aus
attr LichtAbends room AutoFunc


Hat wohl mehrere Posts gebraucht, bis du meinen Vorschlag hier umgesetzt hast ;)
Ich würde dir empfehlen die Befehlsabfolgen jeweils in eine Sequenz zu packen. Da du keine Verzögerungen zwischen den Befehlen brauchst, brauchst du auch keine Zwischenzustände, die Events erzeugen und dein System unnötig belasten, also z. B.:

statt

(set fl_LED on)\
(set wz_LED_Balkon on)\
(set wz_DekoLED on)\
(set wz_Highboard on)\
(set gal_LED_Lese on)\


definieren:

(set fl_LED on,\
set wz_LED_Balkon on,\
set wz_DekoLED on,\
set wz_Highboard on,\
set gal_LED_Lese on)\


Gruß

Damian
Titel: Antw:[at] Befehl - Steckdosen schalten mit sunset und sunrise an verschiedenen Tagen
Beitrag von: Esteban am 29 Februar 2016, 22:00:37
Hi Damian,

erst einmal DANKE! :)

Kurzum: ich bin eigentlich nicht so der RTFM-Typ  8) Aber das Schweigen im Forum zwang mich dazu, dann doch mal die Komplette CommandREF vom DOIF zu lesen :)

Ich dachte, dass die Befehle hintereinander erfolgen müssen damit es sauber funktioniert. Wieder was dazugelernt. :)

Gruß

Stefan