> 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().
Ä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?
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
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 :)
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
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
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". :-)
if(sunrise_abs(1800) lt $now && $now gt sunset_abs(-1800)) {\
> >> if(sunrise_abs(1800) lt $now && $now lt sunset_abs(-1800)) {\
Achso ja... Nachdem now einmal vorne und bei der anderen Bedingung hinten steht, muss beide Male gt stehen (immer diese Kleinigkeiten). :-)
Greetz,
Gerhard
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.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 :)
> Auch ich habe offenbar ein Definitionsproblem mit sunrise(). Folgendes
> schl�gt fehl:
Klar, " in " ist nicht klug. Entweder mit \ schuetzen, oder abwechselnd " und '
verwenden.
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.
Was nach wie vor offen bleibt ist, dass eine Änderung von $altit in der 99_SUNRISE_EL.pm keine Auswirkungen
auf die Schaltzeiten hat.
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
Grüße
Boris
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
> fhem-users+unsubscribe@googlegroups.com
> 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
http://fhem.de/commandref.html#perl
5ter Bulletpoint von oben.
bn.
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")\
}