Hauptmenü

$month im Perlcode

Begonnen von bugster_de, 14 August 2013, 08:46:31

Vorheriges Thema - Nächstes Thema

bugster_de

Hi Leute,

gestern wollte ich die Rolladensteuerung noch auf die Sommermonate begrenzen. Also flugs folgendes in meinen Perlcode eingetragen:

if( ( $month < 4 ) && ( $month > 10 ) ) {
   return;
}


Und siehe da, im Log file steh $month: global symbol requires explicit ....
Sprich die Variable $month ist nicht definiert.

Wie komme ich denn bei FHEM an z.B. den aktuellen Monat in einer Perlfunktion? Muß ich das jedesmal mittels localtime(time); raus suchen?

Hinweis: ich möchte an meine Perlfunktion keinen Parameter übergeben.

MisterEltako

Hi!

Die Antwort hast du dir ja selbst schon gegeben....:-) Entweder als Parameter oder über localtime-Variante.

MfG, MisterEltako.
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

betateilchen

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);

Dann hast Du alles, was Du vielleicht irgendwann brauchst :)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

ph1959de

... und dann vielleicht auch noch das "&&" gegen ein "||" tauschen (oder auf >=4 / <=10 prüfen; dass der Monat kleiner als 4 und gleichzeitig größer als 10 ist, dürfte relativ selten im Jahr vorkommen :-) )
Aktives Mitglied des FHEM e.V. | Moderator im Forenbereich "Wiki"

bugster_de

Danke für eure schnellen Antworten.

ZitatDie Antwort hast du dir ja selbst schon gegeben....:-)
Stimmt. Ich dachte halt vielleicht hat FHEM die aktuellen Daten bereits auf irgendwelchen Variablen liegen. Aber dann mach ich das mittels localtime(time);

betateilchen

Zitat von: ph1959de schrieb am Mi, 14 August 2013 09:32(oder auf >=4 / <=10 prüfen;

if( $month ~~ [4..10] )

wäre doch wohl das einfachste, um "Sommer" festzustellen.

Oder noch einfacher: In localtime steckt ja auch das Sommerzeit-Flag...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

SimonHipp

Zitat von: betateilchen am 14 August 2013, 09:28:18
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);

Dann hast Du alles, was Du vielleicht irgendwann brauchst :)
wo muss das dann rein?
Ich verzweifle gerade an der Monatsabfrage.
Danke!
FHEM 6.0 auf AMD Ryzen 5 MICRO PC (NUC) mit VDSL 100/40Mbit/s

decaflo

Zitat von: SimonHipp am 01 März 2023, 14:24:48
Ich verzweifle gerade an der Monatsabfrage.

Achtung: $mon ist bei localtime 0..11, d.h. Januar ist 0!

Möglicherweise ist das der Grund für Deine Verzweiflung :)

betateilchen

Zitat von: SimonHipp am 01 März 2023, 14:24:48
wo muss das dann rein?

Das ist perl code, der muss halt da hin, wo Du etwas damit bewerkstelligen möchtest.

Zitat von: SimonHipp am 01 März 2023, 14:24:48
Ich verzweifle gerade an der Monatsabfrage.

Ich verzweifle an Deinem Beitrag. Beschreibe doch einfach mal, was Du machen möchtest, dann kann man Dir besser helfen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!