Hallo zusammen,
ich brauche Hilfe bei der Berechnung eines "individuellen" Sonnenuntergangs. Mittels eines at schreibe ich die Uhrzeit des Sonnenauf- und untergangs in Dummy Variablen ("Sonnenaufgang" und "Sonnenuntergang"). Das Schreiben funktioniert auch problemlos, ich nutze folgenden Code:
*00:05:00 {
my $sr = sunrise( 0, "05:45", "08:00" );
my $ss = sunset();
fhem( "set sonnenaufgang $sr" );
fhem( "set sonnenuntergang $ss" );
}
Nun möchte ich, dass in den Monaten November bis Februar jeweils 15 Minuten vom Sonnenuntergang abgezogen werden. Hier komme ich aber nicht ganz weiter. Meine Idee sieht wie folgt aus:
*00:05:00 {
my $sr = sunrise( 0, "05:45", "08:00" );
if ( $month <= 2 || $month >= 11 ) {
my $ss = ( sunset() - (60*15) );
} else {
my $ss = sunset();
}
fhem( "set sonnenaufgang $sr" );
fhem( "set sonnenuntergang $ss" );
}
Das ganze wird mit folgender Fehlermeldung quittiert: "Global symbol "$ss" requires explicit package name (did you forget to declare "my $ss"?) at (eval 11005) line 9."
Hi,
lass doch sunrise_el selbst rechnen.
Zitat Doku
Zitatoffset
Offset in Sekunden, der zu dem Rückgabewert der Funktion addiert wird
->
{sunset(-900)}
Gruß Otto
Hi Otto123,
irgendwas mache ich aber noch falsch. Mit folgendem Code bekomme ich nach wie vor die genannte Fehlermelgung:
*00:05:00 {
my $sr = sunrise( 0, "05:45", "08:00" );
if ( $month <= 2 || $month >= 11 ) {
my $ss = sunset(-900);
} else {
my $ss = sunset();
}
fhem( "set sonnenaufgang $sr" );
fhem( "set sonnenuntergang $ss" );
}
Initialisiere die Variable vor dem if ... else.
Initialisiere deine Variable ss vor der Bedingungsabfrage.
*00:05:00 {
my $ss;
my $sr = sunrise( 0, "05:45", "08:00" );
if ( $month <= 2 || $month >= 11 ) {
$ss = sunset(-900);
} else {
$ss = sunset();
}
fhem( "set sonnenaufgang $sr" );
fhem( "set sonnenuntergang $ss" );
}
Haben die anderen Beiden schon gesagt: Deine erste if Bedingung ist nicht war, deswegen gibt es kein $ss.
Willst Du denn leeres $ss setzen?
Gruß Otto
Zitat von: Otto123 am 23 Oktober 2018, 22:07:26
Haben die anderen Beiden schon gesagt: Deine erste if Bedingung ist nicht war, deswegen gibt es kein $ss.
Willst Du denn leeres $ss setzen?
Gruß Otto
Das verstehe ich jetzt nicht. Heute müsste er doch in den Else-Zweig springen (weil Monat = Oktober). Dort wird $ss doch definiert. Wieso muss ich es erst initialisieren? Das mache ich doch mit $sr auch nicht.
Beim compilieren wird wohl das if ... noch nicht ausgewertet.
Damit ist die Variable nicht initialisiert.
Zitat von: Beta-User am 23 Oktober 2018, 22:23:28
Beim compilieren wird wohl das if ... noch nicht ausgewertet.
Damit ist die Variable nicht initialisiert.
Es gibt zwar Perlcompiler aber in unserem Fall verwenden wir einen Interpreter. Der Rest der Aussage passt dann aber ;)
Zitat von: KraxelHuber am 23 Oktober 2018, 22:19:04
Das verstehe ich jetzt nicht. Heute müsste er doch in den Else-Zweig springen (weil Monat = Oktober). Dort wird $ss doch definiert. Wieso muss ich es erst initialisieren? Das mache ich doch mit $sr auch nicht.
Sorry, ich habe vorhin ein zweites if gesehen. :'(