Sunset und Sunrise

2,743 views
Skip to first unread message

puschel74

unread,
Mar 6, 2012, 11:32:45 AM3/6/12
to FHEM users
Hallo zusammen,

ich steh noch ein bischen auf dem Kriegsfuss mit dem Syntax von fhem.

Ich habe bisher mit

define zuhause_on notify EG_Eingang_Bewegungsmelder:on.* { \
if( $hour >= 19 || $hour <= 5) { \
fhem ("set EG_Vorraum_Licht on-for-timer 120")\
fhem ("set EG_Vorraum_Licht on-for-timer 120")\
}\
}

2 Lampen im Eingangsbereich geschaltet was auch wunderbar funktioniert
hat - bis ich morgens mal später zur Arbeit bin und das Licht ab 05:01
nichtmehr eingeschaltet hat - logisch.
Nun wollte ich mit
if( sunset_abs(-1800) >= sprintf("%%02d:%%02d", $hour, $min) &&
sunrise_abs(1800) <= printf("%%02d:%%02d", $hour, $min)) { \
(leicht abgewandelt aus dem Wiki)
anstelle von
if( $hour >= 19 || $hour <= 5) { \
das Licht innerhalb der Sonnenuntergangs (-30 Minuten)- und -
aufgangszeit (+30 Minuten) schalten lassen was aber leider nicht
klappt.
Das Licht reagiert den ganzen Tag auf den Bewegungsmelder.

Über eine kleine Hilfestellung wäre ich Euch dankbar.

Grüße

Jan-Hinrich Fessel

unread,
Mar 6, 2012, 12:07:01 PM3/6/12
to fhem-...@googlegroups.com, Jan-Hinrich Fessel

Am 06.03.2012 um 17:32 schrieb puschel74:

> Hallo zusammen,
>
> ich steh noch ein bischen auf dem Kriegsfuss mit dem Syntax von fhem.

Du meinst perl.

> Nun wollte ich mit
> if( sunset_abs(-1800) >= sprintf("%%02d:%%02d", $hour, $min) &&
> sunrise_abs(1800) <= printf("%%02d:%%02d", $hour, $min)) { \
> (leicht abgewandelt aus dem Wiki)

Wo im Wiki?

> anstelle von
> if( $hour >= 19 || $hour <= 5) { \
> das Licht innerhalb der Sonnenuntergangs (-30 Minuten)- und -
> aufgangszeit (+30 Minuten) schalten lassen was aber leider nicht
> klappt.

Weil Du nämlich nicht Äpfel mit Birnen, sorry...

das ergibt ausgewertet sowas wie
if( "18:57:30" >= "18:00" && ....)
Das kann nicht funktionieren, weil >= nur mit Zahlen funktioniert, Du hast hier aber Zeichenketten.

Bleibt nur entweder umwandeln, oder aber, wenn's in der Dämmerung auch ohne Licht geht, isday().

puschel74

unread,
Mar 6, 2012, 12:21:29 PM3/6/12
to FHEM users
Äh ja Syntax von Perl,
und das obwohl ich das Anfängerbuch am durchlesen bin ^^

Nach deiner Auswertung nach stimmt schon - ich vergleich mal wieder
Äpfel mit Birnen *grumpf*

Dann müsste ja anstelle von >= ein gt und von <= ein lt besser passen
und
sprintf("%%02d:%%02d", $hour, $min)
um
sprintf("%%02d:%%02d:%%02d", $hour, $min, $sec)
ergänzt sollte auch die Auswertung passen, oder seh ich das falsch?

Gleich mal probieren.

Grüße

puschel74

unread,
Mar 6, 2012, 12:28:29 PM3/6/12
to FHEM users
War ja klar das das auch nicht klappt, wär ja zu schön gewesen.

Auf deine Frage wo im Wiki:

Ich habe das
sunset_abs(1800) lt sprintf("%%02d:%%02d", $hour, $min))
aus dem
http://fhemwiki.de/wiki/Licht_bei_Bedingungen_einschalten
genommen und dachte ich kann das recht einfach umstricken das es
passt.

Pustekuchen

Es geht mir eigentlich gerade um die Funktion während der Dämmerung -
das da das Licht auch einschaltet (daher -1800 / + 1800).

Grüße

oskar

unread,
Mar 6, 2012, 12:33:49 PM3/6/12
to fhem-...@googlegroups.com
Hej,


On Tuesday, March 6, 2012 6:21:29 PM UTC+1, puschel74 wrote:
Äh ja Syntax von Perl,
und das obwohl ich das Anfängerbuch am durchlesen bin ^^

Nach deiner Auswertung nach stimmt schon - ich vergleich mal wieder
Äpfel mit Birnen *grumpf*

Dann müsste ja anstelle von >= ein gt und von <= ein lt besser passen
und
sprintf("%%02d:%%02d", $hour, $min)
um
sprintf("%%02d:%%02d:%%02d", $hour, $min, $sec)
ergänzt sollte auch die Auswertung passen, oder seh ich das falsch?

Wo Du das so sagst, wäre das die dritte Möglichkeit, die mir mal wieder nicht in den Sinn kam.

scheint zu gehen, zumindest mit sun*_abs:
[schneefix:trunk/fhem/FHEM] oskar% perl -e 'print "hello\n" if "18:00:00" lt "19:00:00"'
hello
[schneefix:trunk/fhem/FHEM] oskar% perl -e 'print "hello\n" if "18:00:00" gt "19:00:00"'
[schneefix:trunk/fhem/FHEM] oskar% 

Jan-Hinrich Fessel

unread,
Mar 6, 2012, 12:52:16 PM3/6/12
to fhem-...@googlegroups.com, Jan-Hinrich Fessel

Am 06.03.2012 um 17:32 schrieb puschel74:
> Nun wollte ich mit
> if( sunset_abs(-1800) >= sprintf("%%02d:%%02d", $hour, $min) &&
> sunrise_abs(1800) <= printf("%%02d:%%02d", $hour, $min)) { \
> (leicht abgewandelt aus dem Wiki)
> anstelle von
> if( $hour >= 19 || $hour <= 5) { \

irgendwie sind aber die Bedingungen falsch.

Unten willst Du Nachts schalten, oben aber nur tagsüber.
&& != ||

if( (sunset_abs() gt uhrzeit ) # es ist jetzt vor sonnenuntergang
&& (sunrise_abs() lt uhrzeit) ) # es ist jetzt außerdem nach sonnenaufgang
{ dann mach was }

if((sunset_abs(-1800) lt uhrzeit) || (sunrise_abs(1800) gt uhrzeit))

Sicherheitshalber auch lieber zu viele Klammern als zu wenige machen...

Vielleicht geht das ja so.

Grüße
Oskar

puschel74

unread,
Mar 6, 2012, 1:29:43 PM3/6/12
to FHEM users
Nun ja,

ich bin davon ausgegangen das ich mit
( sunset_abs(-1800) >= sprintf("%%02d:%%02d", $hour, $min)
zwischen 30 Minuten vor dem errechneten Sonnenuntergang (also
sunset_abs-1800 sec >= Uhrzeit
&& mit
sunrise_abs(1800) <= printf("%%02d:%%02d", $hour, $min))
30 Minuten nach dem errechneten Sonnenaufgang
die Lampen durch den Bewegungsmelder einschalten kann.
Ich war der Meinung das ich die Nacht mit Abend- und Morgendämmerung
damit erwische.

Ich versuch jetzt mal
if((sunset_abs(-1800) lt sprintf("%%02d:%%02d:%%02d", $hour, $min,
$sec)) || (sunrise_abs(1800) gt sprintf("%%02d:%%02d:%%02d", $hour,
$min, $sec)))
von Jan-Hinrich.
Ich hoffe ich hab das mit der uhrzeit richtig verstanden und
eingefügt.
Danke schonmal an Euch für die Hilfe.

Grüße

Rudolf Koenig

unread,
Mar 6, 2012, 2:10:08 PM3/6/12
to fhem-...@googlegroups.com
> Ich versuch jetzt mal

Da kann man nicht mehr tatenlos zuschauen :) Wie waers mit:

my $now=sprintf("%%02d:%%02d",$hour,$min);;\
if(sunrise_abs(1800) lt $now && $now lt sunset_abs(-1800)) {\
...\
}


Evtl kann man aber auch in 99_SUNRISE_EL.pm $altit anpassen, und
if(isday()) {\
...\
}
verwenden. Oder auf die Anpassung ganz verzichten :)

puschel74

unread,
Mar 6, 2012, 11:45:38 PM3/6/12
to FHEM users
Guten morgen und danke nochmal für die Hilfe

aber mit deinem $now_________ Rudi lies sich das Licht die ganze Nacht
nicht dazu bewegen einzuschalten.

Grüße

Gerhard Pfeffer

unread,
Mar 7, 2012, 1:03:03 AM3/7/12
to fhem-...@googlegroups.com
Hej,

ich glaube, da hat sich ein Tippfehler eingeschlichen.
Richtig müsste es wohl lauten:

my $now=sprintf("%%02d:%%02d",$hour,$min);;\

if(sunrise_abs(1800) lt $now && $now gt sunset_abs(-1800)) {\
...\
}

Aber Rudi möge mich schnellstmöglich korrigieren (und nicht gleich
schlagen), sollte ich mich irren. :-)

Greetz,
Gerhard

> --
> To unsubscribe from this group, send email to
> fhem-users+...@googlegroups.com

puschel74

unread,
Mar 7, 2012, 11:00:44 AM3/7/12
to FHEM users
Hallo zusammen,

ich behaupte mal Rudi hat den Tippfehler absichtlich eingebaut um zu
schauen ob ich auch ein bischen mitdenke ;-)
Aber gestern abend war ich schon im Stand-By und hab nur noch
copy&paste gemacht.
Ich hatte mich aber schon über die 2 lt gewundert - naja.

Ich hab die Zeile mal angepasst - danke Gerhard

Grüße

On 7 Mrz., 07:03, Gerhard Pfeffer <gerhard.pfef...@gmail.com> wrote:
> Hej,
>
> ich glaube, da hat sich ein Tippfehler eingeschlichen.
> Richtig müsste es wohl lauten:
>
> my $now=sprintf("%%02d:%%02d",$hour,$min);;\
> if(sunrise_abs(1800) lt $now && $now gt sunset_abs(-1800)) {\
>  ...\
>
> }
>
> Aber Rudi möge mich schnellstmöglich korrigieren (und nicht gleich
> schlagen), sollte ich mich irren. :-)
>
> Greetz,
>    Gerhard
>

Gerhard Pfeffer

unread,
Mar 7, 2012, 11:12:34 AM3/7/12
to fhem-...@googlegroups.com

Hej,

bin nicht der Fitteste mit Perl, aber was mir gerade noch aufgefallen ist: sollte statt dem && nicht ein || stehen? && wuerde wohl nur gelten, wenn Perl tagesuebergreifend "denkt". :-)

Greetz,
   Gerhard

puschel74

unread,
Mar 7, 2012, 11:21:22 AM3/7/12
to FHEM users
Hm,

hab das grad auf || geändert.
Wenn jetzt 19:00 ist dann stimmt zwar der Vergleich mit sunset (wenn
sunset z.b. 19:10 liefert) aber der Vergleich mit sunrise muss dann
zwangsläufig fehlschlagen da 19:00 unmöglich kleiner als 06:30 z.b.
sein kann.
Da die beiden mit && verknüpft sind würde das Licht sowieso nie
leuchten.
|| muss eigentlich richtig sein da die Uhrzeit ja entweder größer als
Sonnenuntergang ODER kleiner als Sonnenaufgang sein muss btw. nur sein
kann aber nie beides.

Danke nochmal für den Hinweis Gerhard.

Grüße

On 7 Mrz., 17:12, Gerhard Pfeffer <gerhard.pfef...@gmail.com> wrote:
> Hej,
>
> bin nicht der Fitteste mit Perl, aber was mir gerade noch aufgefallen ist:
> sollte statt dem && nicht ein || stehen? && wuerde wohl nur gelten, wenn
> Perl tagesuebergreifend "denkt". :-)
>
> Greetz,
>    Gerhard

Jan-Hinrich Fessel

unread,
Mar 7, 2012, 11:34:17 AM3/7/12
to fhem-...@googlegroups.com, Jan-Hinrich Fessel
Hej,
Am 07.03.2012 um 17:12 schrieb Gerhard Pfeffer:

Hej,

bin nicht der Fitteste mit Perl, aber was mir gerade noch aufgefallen ist: sollte statt dem && nicht ein || stehen? && wuerde wohl nur gelten, wenn Perl tagesuebergreifend "denkt". :-)

Das hatte ich schon an anderer Stelle angemerkt ;-)
Gerhard:
if(sunrise_abs(1800) lt $now && $now gt sunset_abs(-1800)) {\

Wenn der Sonnenaufgang mehr als 1800 Sekunden zurückliegt und es später als 1800 Sekunden bis zum Sonnenuntergang ist, dann mach was.  Dann geht abends was, morgens aber nicht.
Rudi:
> >> if(sunrise_abs(1800) lt $now && $now lt sunset_abs(-1800)) {\
Wenn der Sonnenaufgang mehr als 1800 Sekunden zurückliegt und es noch mindestens 1800 Sekunden bis zum Sonnenuntergang ist, dann mach was.  Dann geht tagsüber was.

Ich würde
if(sunrise_abs(1800) gt $now || $now gt sunset_abs(-1800)) {\
denken.  Also vor Sonnenaufgang(+1800) oder nach Sonnenuntergang(-1800) soll was getan werden dürfen.
Kann natürlich sein, das ich das falsch verstehe.  Mit der Logik ist das ja nicht immer so einfach. 

Grüße
Oskar

puschel74

unread,
Mar 7, 2012, 11:58:16 AM3/7/12
to FHEM users
Also erstmal eines vorweg

Jan-Hinrich und Gerhard - ihr seid beide mit eurer Logik richtig
gelegen ;-)
|| anstelle von &&
und Jan-Hinrich
beidemale gt anstelle von lt && gt.
Mit
if(sunrise_abs(1800) gt $now || $now gt sunset_abs(7200)) {\
bleibt um 17:50 das Licht aus und mit
if(sunrise_abs(1800) gt $now || $now gt sunset_abs(-1800)) {\
geht das Licht an.

Danke nochmal für Eure Hilfe - dir natürlich auch nochmal danke Rudi.

Grüße

Gerhard Pfeffer

unread,
Mar 7, 2012, 12:03:24 PM3/7/12
to fhem-...@googlegroups.com

Achso ja... Nachdem now einmal vorne und bei der anderen Bedingung hinten steht, muss beide Male gt stehen (immer diese Kleinigkeiten). :-)

Greetz,
   Gerhard

Hubert Melzer

unread,
Mar 7, 2012, 2:32:01 PM3/7/12
to fhem-...@googlegroups.com

Auch ich habe offenbar ein Definitionsproblem mit sunrise(). Folgendes schlägt fehl:

{if (!$we) {fhem("define WZ_Rollladen_hoch at *{sunrise(0,"06:00","08:00")} set Rollo_wz on")} else {fhem("define WZ_Rollladen_hoch at *07:45:00 set Rollo_wz on")}}

Die  zugehörige Fehlermeldung aus dem fhem-log-File lautet:

Number found where operator expected at (eval 303) line 1, near ""define WZ_Rollladen_hoch at *{sunrise(0,"06"
	(Missing operator before 06?)
String found where operator expected at (eval 303) line 1, near "00",""
	(Missing operator before ","?)
Number found where operator expected at (eval 303) line 1, near "","08"
	(Missing operator before 08?)
String found where operator expected at (eval 303) line 1, near "00")} set Rollo_wz on""
	(Missing operator before ")} set Rollo_wz on"?)
2012.03.07 19:16:51 3: Please define WZ_Rollladen_hoch first

Trennt man die einzelnen Zweige innerhalb der if-Anweisung auf und verwendet diese einzeln, kommt es zu keiner Fehlermeldung.

Weiterhin beschäftigt mich die Frage, ob die 99_SUNRISE_EL.pm noch irgendwie in die fhem.cfg eingebunden werden muss,
da eine Änderung der Variable $altit in der 99_SUNRISE_EL.pm auf welchen Wert auch immer keine Veränderung an den Zeiten bewirkt.

Rudolf Koenig

unread,
Mar 8, 2012, 3:23:18 AM3/8/12
to fhem-...@googlegroups.com
> Auch ich habe offenbar ein Definitionsproblem mit sunrise(). Folgendes
> schl�gt fehl:

Klar, " in " ist nicht klug. Entweder mit \ schuetzen, oder abwechselnd " und '
verwenden. Wobei man wissen sollte, dass Variablen in ' Strings nicht ersetzt
werden. Das Kamel laesst gruessen :)

Hubert Melzer

unread,
Mar 8, 2012, 12:30:13 PM3/8/12
to fhem-...@googlegroups.com


On Thursday, March 8, 2012 9:23:18 AM UTC+1, Rudolf Koenig wrote:
> Auch ich habe offenbar ein Definitionsproblem mit sunrise(). Folgendes
> schl�gt fehl:

Klar, " in " ist nicht klug. Entweder mit \ schuetzen, oder abwechselnd " und '
verwenden.

Tut mir leid, aber ich verstehe nicht, was hier mit "in" gemeint ist und auch nicht
was bzw. wie ich was mit \ schützen oder wo ich ein "und" verwenden sollte.

Die Anweisung verwende ich derzeit so, dass ich auf die beiden Argument "06:00","08:00"
verzichtet habe (sunrise(0)).
Dann habe ich zwar keine Fehlermeldung mehr, aber die Funktionalität ist, wie ich gerade bemerkt habe,
genau anders herum wie von mir erwartet.
Eigentlich soll Wochentags das Rollo zum Sonnenaufgang, bzw. zwischen sechs und acht Uhr aufgehen und
am Wochenenende um 7:45 Uhr.
Heute morgen ging es jedoch erst um 7:45 Uhr auf. Was am Wochenende ist, habe ich nich nicht probieren können.
Entferne ich jedoch das "!" vor $we, wird die frühere Zeit angezeigt.


> Wobei man wissen sollte, dass Variablen in ' Strings nicht ersetzt
> werden. Das Kamel laesst gruessen :)

Soweit ich das sehe, habe ich auch keine Variablen innerhalb von Strings verwendet, lediglich Funktionen mit Argumenten.

Was nach wie vor offen bleibt ist, dass eine Änderung von $altit in der 99_SUNRISE_EL.pm keine Auswirkungen
auf die
Schaltzeiten hat.

JörgB

unread,
Mar 8, 2012, 1:17:51 PM3/8/12
to FHEM users
Ich glaube Rudolf meinte damit, dass Du es anstatt mit "
{if (!$we) {fhem("define WZ_Rollladen_hoch at
*{sunrise(0,"06:00","08:00")}

mit ' ausprobieren kannst
{if (!$we) {fhem("define WZ_Rollladen_hoch at
*{sunrise(0,'06:00','08:00')}

Mit den Hochkommas habe ich auch schon meine Probleme gehabt. :D


LG Jörg

Dr. Boris Neubert

unread,
Mar 8, 2012, 1:19:50 PM3/8/12
to fhem-...@googlegroups.com
Am 08.03.2012 18:30, schrieb Hubert Melzer:

Klar, " in " ist nicht klug. Entweder mit \ schuetzen, oder abwechselnd " und '

verwenden.

Tut mir leid, aber ich verstehe nicht, was hier mit "in" gemeint ist und auch nicht
was bzw. wie ich was mit \ schützen oder wo ich ein "und" verwenden sollte.

Rudi schreibt: Gänsefüßchen in Gänsefüßchen ist nicht klug. Entweder mit Backslash schützen oder abwechselnd Gänsefüßchen und Hochkomma verwenden.

Mit Backslash schützen:   Du machst aus " dann \".

Empfehlung: Rainer Krienke, Programmieren in Perl, Hanser, ISBN 3-446-22013-5


Was nach wie vor offen bleibt ist, dass eine Änderung von $altit in der 99_SUNRISE_EL.pm keine Auswirkungen
auf die
Schaltzeiten hat.

Modul neu geladen?

Grüße
Boris

Hubert Melzer

unread,
Mar 8, 2012, 1:37:02 PM3/8/12
to fhem-...@googlegroups.com
Ja, auch danach gibt es keine Änderung!

Dr. Boris Neubert

unread,
Mar 8, 2012, 1:47:19 PM3/8/12
to fhem-...@googlegroups.com
Am 08.03.2012 19:37, schrieb Hubert Melzer:
> Modul neu geladen?
>
> Ja, auch danach gibt es keine Änderung!

Debug das doch mal bitte. Der Befehl

{ sunrise(0,'06:00','08:00') }

gibt Dir die Uhrzeit des Beginns der zivilen Dämmerung aus ($altit= -6).
Bei mir:

30:16:26


30 Uhr heißt hier morgen um 6 Uhr. Wenn ich $altit ändere und

reload 99_SUNRISE_EL.pm

eingebe, bekomme ich eine andere Zeit => bei mir funktioniert das. Und
bei Dir?


Grüße
Boris

Hubert Melzer

unread,
Mar 8, 2012, 2:51:35 PM3/8/12
to fhem-...@googlegroups.com
Wenn ich das so mache bekomme ich auch eine andere Zeit.
Die Zeitangabe bei den at-Befehlen ändert sich jedoch nicht.
Danke Hubert

Dr. Boris Neubert

unread,
Mar 8, 2012, 3:02:15 PM3/8/12
to fhem-...@googlegroups.com
Am 08.03.2012 20:51, schrieb Hubert Melzer:
> Die Zeitangabe bei den at-Befehlen ändert sich jedoch nicht.
Wie sehen die at-Befehle aus? Ich könnte Dir besser helfen, wenn Du mehr
Kontext liefertest.

Grüße
Boris

Hubert Melzer

unread,
Mar 9, 2012, 2:46:59 PM3/9/12
to fhem-...@googlegroups.com

Hallo Boris,

die Zeit ändert sich, wie ich jetzt bemerkt, habe schon, wenn auch nicht sofort.
Nach welcher Zeit eine Aktualisierung erfolgt oder was der Auslöser einer solchen ist,
habe ich noch nicht ermittel können.

Gruß Hubert

 

Hubert Melzer

unread,
Mar 12, 2012, 5:15:04 PM3/12/12
to fhem-...@googlegroups.com
Alle Hinweise beherzigt. Nun funktioniert es zwar grundsätzlich, aber dennoch nicht wie erwartet.
So wie die Definition jetz aussieht, sollte am Wochenende, ($we =1), das Rollo um 07:45 hoch gehen,
in der Woche dann im Ergebnis von sunrise().
Bei mir ist es gerade umgekehrt.
Kann mir das jemand erklären?

{if ($we == 1) \
    {fhem("define WZ_Rollladen_hoch at *07:45:00 set Rollo_wz on ")}\
else\
    {fhem("define WZ_Rollladen_hoch at *{sunrise(0,'06:00','08:00')} set Rollo_wz on")} \
}

Gruß Hubert

Zrrronggg!

unread,
Mar 12, 2012, 9:56:11 PM3/12/12
to FHEM users
Probier doch mal anstatt auf ($we == 1) zu testen nur {if ($we)
{fhem(" bla... zu verwenden. Das müsste eigentlich reichen und liefert
bei mir die richtigen Ergebnisse.

(Um 7:45 am WE aufstehen? Ist ja schrecklich.)

borsti

unread,
Mar 13, 2012, 5:58:03 AM3/13/12
to fhem-...@googlegroups.com
Hallo Hubert,

warum machst Du immer wieder ein DEFINE? Jedes davon erzeugt einen
täglich wiederholten Aufruf - wozu, wenn Du doch eh jeden Tag aufs neue
testest, ob Wochenende ist?
Außerdem: Da fehlen doch auch noch ein paar Zeilen drum herum, wann
genau (bzw. unter welchen Umständen) wird denn dieses Codeschnipsel
überhaupt ausgeführt?

Gruß
Torsten

Hubert Melzer

unread,
Mar 13, 2012, 7:30:11 AM3/13/12
to fhem-...@googlegroups.com
Hallo Torsten,

was das Script machen soll, hatte ich bereits eingangs geschrieben,
nähmlich unterscheidliche Zeiten zu generieren, abhängig davon, ob
nun Wochenende ist oder eben nicht. Das setzt nun mal auch zwei Wege
voraus.
Wo man nun das oder die DEFINE hinschreibt, ob innerhalb von if...else... oder
außerhalb, ist wahrscheinlich Geschmacksache.
Allerdings muss ich gestehem, dass ich nicht genau weiss, was du wirklich meinst,
auch nicht, wass da noch fehlen soll.

Die Anregung von Zrrronggg! muss ich noch ausprobieren, sitze z. Zt. nicht an der FB
und Fernzugriff ist ja immer noch nicht möglich.

Gruß Hubert

> fhem-users+unsubscribe@googlegroups.com


borsti

unread,
Mar 13, 2012, 7:43:27 AM3/13/12
to fhem-...@googlegroups.com
Hi Hubert,

> was das Script machen soll, hatte ich bereits eingangs geschrieben,
> nähmlich unterscheidliche Zeiten zu generieren, abhängig davon, ob
> nun Wochenende ist oder eben nicht. Das setzt nun mal auch zwei Wege
> voraus.

Das finde ich relativ sinnlos... Der DEFINE erzeugt Dir einen Timer, der
automatisch (!) immer wieder ausgeführt wird. Den also immer und immer
wieder neu zu machen, widerspricht dem Sinn eines sich wiederholenden
Timers.
Also hat einer von uns beiden einen massiven Denkfehler... ;)
Ich würde aus Deinen bisherigen Postings eher schließen, dass Du die
SCHALTUNG zu diesen Zeitpunkten erledigt haben möchtest

> wirklich meinst,
> auch nicht, wass da noch fehlen soll.

Dein Auszug beginnt mit einer geschweiften Klammer - das KANN so nicht
in der FHEM.CFG stehen. Da fehlt noch irgendwas davor und/oder danach.
Normalerweise beginnt jeder Anweisungsblock mit DEFINE...

> > {if ($we == 1) \
> > {fhem("define WZ_Rollladen_hoch at *07:45:00 set Rollo_wz on ")}\
> > else\
> > {fhem("define WZ_Rollladen_hoch at *{sunrise(0,'06:00','08:00')} set
> > Rollo_wz on")} \
> > }

Daraus könnte man dann schlussfolgern, wann bzw. unter welchen Umständen
Deine seltsamen DEFINEs überhaupt ausgewertet werden und somit der
scheinbaren Umkehrung der gewünschten Logik auf die Spur kommen.

Um das Ganze mal zu vereinfachen, meine Empfehlung wären ganz schlicht
und einfach ZWEI Timer:

define WZ_Rollladen_hoch_WE at *07:45:00 {if($we){fhem("set Rollo_wz on")}}


define WZ_Rollladen_hoch at *{sunrise(0,'06:00','08:00')}

{if(!$we){fhem("set Rollo_wz on")}}

(ungetestet!)

Gruss
Torsten

Zrrronggg!

unread,
Mar 13, 2012, 2:20:41 PM3/13/12
to FHEM users
Exact das selbe wie Bortsi wollte ich auch schon anmerken, weil ich es
auch GENAU so mache. (und da meine Konfiguration auf Vorarbeiten von
Olaf hier aus dem Forum basiert wären wir dann schon zu dritt)

Ich war mir dann aber auf einmal wie Borsti unsicher, ob ICH da einen
Denkfehler habe und Huberts konfig einen Vorteil hat, den ich nicht
sehe.

In der Version von dir Hubert hat meiner Auffassung nach noch den
Nachteil, das sie ab dem zweiten Tag Fehlermeldungen wirft, weil dann
define WZ_Rollladen_hoch at *07:45:00 set Rollo_wz on vom VORTAG noch
existiert und ab da dann... hm... da fällt mir auf... da liegt auch
das Problem in deiner Konfig!
Was immer du ZUERST definierst, wird von der zweiten Definition ja
nicht überschrieben! Wenn du also z.b. am WE dein Script laufen lässt,
erzeugt es wie geplant:

define WZ_Rollladen_hoch at *07:45:00 set Rollo_wz on

Und was passiert am Montag? Das Script will

define WZ_Rollladen_hoch at *{sunrise(0,'06:00','08:00')} set
Rollo_wz on

ausführen, da es aber schon WZ_Rollladen_hoch vom Wochenende gibt,
wird das gar nicht mehr erzeugt sondern es kommt die Fehlermeldung
"WZ_Rollladen_hoch allready exists, please delete it first"! Und dann
geht der Rolladen mit der Sonntagszeit hoch!

Führst du dein Script hingegen an einem Freitag zuerst aus (oder
irgendeinem anderen Wochentag) ists genau umgekehrt.

Mit anderen Worten: das ist nicht nur Geschmacksfrage, so geht es
nicht.

Wenn du darauf bestehst, dass so rum zu machen wie von dir gedacht,
musst du meiner Meinung nach wie folgt formulieren:

{if ($we) \
{fhem("delete WZ_Rollladen_hoch ;; define WZ_Rollladen_hoch at
*07:45:00 set Rollo_wz on ")}\
else\
{fhem("delete WZ_Rollladen_hoch ;; define WZ_Rollladen_hoch at
*{sunrise(0,'06:00','08:00')} set
Rollo_wz on")} \

Das ergebe bei der allerersten Ausführung eine Fehlermeldung (die man
ignorieren könnte) und danach würde es gehen. Ich selber halte aber
borstis Vorschlag für deutlich besser.

Dr. Boris Neubert

unread,
Mar 15, 2012, 3:03:39 PM3/15/12
to fhem-...@googlegroups.com

Am 12.03.2012 22:15, schrieb Hubert Melzer:
> Alle Hinweise beherzigt. Nun funktioniert es zwar grundsätzlich, aber
> dennoch nicht wie erwartet.

http://fhem.de/commandref.html#perl
5ter Bulletpoint von oben.

bn.

Steffen

unread,
Apr 12, 2012, 2:45:57 PM4/12/12
to fhem-...@googlegroups.com
Hallo!

Würde gerne um mich ein wenig mehr in das Thema ein zu arbeiten mit sunset und sunrise versuchen,
habe zwei Homematic Aktoren und der Wz_LampeSofa soll auf ein notify von Wz_LampeDeckeUp reagieren was er schon tut aber per zusätzlich nur per sunset oder sunrise.
Mein versuch ist: define Licht_an notify Wz_LampeDeckeUp { if (sunset) { fhem("set Wz_LampeSofa %") } } nur schaltet der Aktor immer zu jeder Zeit mit,
wo wäre jetzt der Fehler? Wo könnte ich ansetzten? Wie gesagt bin Anfänger und versuche mich da rein zu Arbeiten:-)
Mfg Ewies

Zrrronggg!

unread,
Apr 12, 2012, 4:15:06 PM4/12/12
to FHEM users

Also: Wz_LampeSofa soll ON gehen, wenn Wz_LampeDeckeUp ON geschaltet
wird.

Richtig?

Aber nur wenn... was?

> per zusätzlich nur per
> sunset oder sunrise.

Da kann zumindest ich eher nur ahnen, was du machen willst: Wenns
Dunkel ist soll Lampe angehen, sonst nicht. Richtig?

(und was soll passieren, wenn Wz_LampeDeckeUp auf OFF geht?)

Ich persönlich würde folgendes Versuchen:

1. nicht gegen sunset und sunrise checken, sondern ein Dummy
einführen, dass per sunrise und sunset befüllt wird.

Etwa so:

define Tageslicht dummy

Dann die Variable "Tageslicht" befüllen:

define SetDummy1 at *{sunset()} set Tageslicht hell
define SetDummy2 at *{sunrise()} set Tageslicht dunkel

Dann dein Konstrukt:

define Licht_an notify Wz_LampeDeckeUp { if ("%" eq "on" ||
"$value{Tageslicht}" eq "dunkel") { fhem("set Wz_LampeSofa on") }
else { fhem("set Wz_LampeSofa off") } }


Vorteil dieser Übung ist, das man später die Variabel "Tageslicht"
auch mit anderen Kontrukten befüllen kann: Google wettervorhersage
(Gewitter = Dunkel), Dämmerungsschalter, zu bestimmten Zeiten
hartverdrahtet, unimatirx Daemmerungstool... etc., OHNE das man alle
notifies die mit hell/dunkle arbeiten immer einzeln angepasst werden
müssen.


(alles ungetestet, nur ne Idee hingeschrieben, die ich selber in den
nächsten Tagen ausprobieren will)

Zrrronggg!

unread,
Apr 12, 2012, 4:19:35 PM4/12/12
to FHEM users
Aeh... tschuldigung:


define Licht_an notify Wz_LampeDeckeUp { if ("%" eq "on" &&
"$value{Tageslicht}" eq "dunkel") { fhem("set Wz_LampeSofa on") }
else { fhem("set Wz_LampeSofa off") } }

&& = und

|| = oder

Steffen

unread,
Apr 12, 2012, 4:51:32 PM4/12/12
to fhem-...@googlegroups.com
Hallo!

Danke erstmal sehr für deine Hilfe aber leider kommt bei mir "Unknown command "$value{Tageslicht}", try help Unknown command else, try help"!
Habe es es genau so gemacht wie du mir beschrieben hattest?! Dummy Tageslicht hat dann auch "???"!

Steffen

unread,
Apr 12, 2012, 5:44:45 PM4/12/12
to fhem-...@googlegroups.com
Habe es nochmal ein gegeben uns es klappt, doch irgenwie schaltet Wz_LampeSofa 2x kurz hintereinander??? 

Zrrronggg!

unread,
Apr 12, 2012, 7:52:54 PM4/12/12
to FHEM users

> Wz_LampeSofa 2x kurz hintereinander???

Hae? Wie meinen?



> Danke erstmal sehr für deine Hilfe aber leider kommt bei mir "*Unknown
> command "$value{Tageslicht}", try help Unknown command else, try help"!*
> Habe es es genau so gemacht wie du mir beschrieben hattest?! Dummy
> Tageslicht hat dann auch "???"!

Kann es sein, das du diese Zeile

define Licht_an notify Wz_LampeDeckeUp { if ("%" eq "on" &&
"$value{Tageslicht}" eq "dunkel") { fhem("set Wz_LampeSofa on") }
else { fhem("set Wz_LampeSofa off") } }

Genau so oben einfach rauskopiert hast? Dann ist da nach jeder Zeile
ein CR (Zeilenumbruch)
und der erzeugt dann eine Neue Zeile die mit

"$value{Tageslicht}"

anfängt und das ist dann tatsächlich unknown.

Du musst meinen ganzen Sermon in EINE Zeile in die conf eintragen.
Zeilenümbrüche, die die Googlegroup Softwar hier einfügt musst du
entfernen!

> Dummy Tageslicht hat dann auch "???"!

Klar. Der Wert von "Tageslicht" wird ja erst gesetzt, wenn wenigstens
1x nach der Definition sunset oder sunrise war.
Denn erst

define SetDummy1 at *{sunset()} set Tageslicht hell
define SetDummy2 at *{sunrise()} set Tageslicht dunkel

weisst dem Dummy einen Wert zu. Vorher ist "Tageslicht" ohne Wert.

Zwischen 22:19 und 22:51 hat aber kein Sonnenauf- oder Untergang
stattgefunden, nicht wahr?

Zum Testen kannst du den Wert aber auch selber setzen ( ein weitere
Vorteil meines Vorschlags) indem du in die Kommandozeile eben einfach
z.B.

set Tageslicht dunkel <ENTERTASTE>

eingibst.






Steffen

unread,
Apr 13, 2012, 1:06:15 AM4/13/12
to fhem-...@googlegroups.com
Guten Morgen!

Nochmal super dank für meine mühe und sorry ich versuche mich erst da rein zu arbeiten;-),

also wenn ich das alles mit || eingebe dann schaltet die Wz_lampeSofa normal im set Dunkel "On" und im Hell bleibt sie "off",
wenn ich aber && setzte dann schaltet die Wz_LampeSofa zwei mal ganz kurz hintereinander und manchmal garnicht in Fhem ist sie "on" aber die Hardware bleibt "Off"?!
Wann schaltet denn Fhem sunset, sind beim SetDummy1 Next: 20:53:31 SetDummy2 Next: 05:56:49 die sunset oder sunrise Zeit angaben??
Mfg Ewies 

Rudolf Koenig

unread,
Apr 13, 2012, 2:25:49 AM4/13/12
to fhem-...@googlegroups.com
> define Tageslicht dummy
> Dann die Variable "Tageslicht" bef�llen:

> define SetDummy1 at *{sunset()} set Tageslicht hell
> define SetDummy2 at *{sunrise()} set Tageslicht dunkel

Laut http://fhem.de/commandref.html#perl gibts schon sowas wie isday().

Das ergibt dann

define Licht_an notify Wz_LampeDeckeUp {\
fhem "set Wz_LampeSofa ".("%" eq "on" or !isday() ? "on" : "off")\
}

Zrrronggg!

unread,
Apr 13, 2012, 12:22:48 PM4/13/12
to FHEM users

Dabei LESE ich doch nun fast jeden Tag in den Commandrefs... seufz.


>Wann schaltet denn Fhem sunset, sind beim SetDummy1 Next: 20:53:31
>SetDummy2 Next: 05:56:49 die sunset oder sunrise Zeit angaben??

Klar.

>also wenn ich das alles mit || eingebe dann schaltet die Wz_lampeSofa
>normal im set Dunkel "On" und im Hell bleibt sie "off",
>wenn ich aber && setzte dann schaltet die Wz_LampeSofa zwei mal ganz kurz
>hintereinander und manchmal garnicht in Fhem ist sie "on" aber die Hardware
>bleibt "Off"?!

Wie gesagt, ich habe das auf die Schnelle als Denkmodell
hingeschrieben, nicht als fertig durchdachte Endlösung. Ich werde da
am WE mal drüber nachdenken, wo da mein Fehler lag, so lange versuch
mal Rudolfs Lösung, die ist sowieso besser.



On 13 Apr., 08:25, Rudolf Koenig <inf...@koeniglich.de> wrote:
> >     define Tageslicht dummy
> > Dann die Variable "Tageslicht" bef llen:
> >     define SetDummy1 at *{sunset()} set Tageslicht hell
> >     define SetDummy2 at *{sunrise()} set Tageslicht dunkel
>
> Lauthttp://fhem.de/commandref.html#perlgibts schon sowas wie isday().

Steffen

unread,
Apr 14, 2012, 4:23:06 AM4/14/12
to fhem-...@googlegroups.com
Hallo! Soweit klappt es jetzt danke sehr nochmal dafür! Könnte ich eigentlich auch das Twilight modul dafür nehmen? Habe schon definiert und könnte man dann doch an den "light" readings ankoppeln?! Mfg Ewies
Reply all
Reply to author
Forward
0 new messages