Zeit vom Sonnenuntergang abziehen

Begonnen von KraxelHuber, 23 Oktober 2018, 21:25:50

Vorheriges Thema - Nächstes Thema

KraxelHuber

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."

Otto123

#1
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
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

KraxelHuber

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" );
}

Beta-User

Initialisiere die Variable vor dem if ... else.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

CoolTux

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" );
}
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

#5
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
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

KraxelHuber

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.

Beta-User

Beim compilieren wird wohl das if ... noch nicht ausgewertet.
Damit ist die Variable nicht initialisiert.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

CoolTux

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   ;)
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

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.  :'(
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