[gelöst] Verständnisproblem perl-code/Berechnung im Ausführungsteil

Begonnen von Vize, 11 August 2016, 10:24:11

Vorheriges Thema - Nächstes Thema

Vize

Guten Morgen,

ich habe ein Verständnisproblem, bzw. wahrscheinlich ein Brett vorm Kopf bei folgender Situation:

Per DOIF möchte ich die Nummer des aktuellen Tages im Jahr in ein device schreiben, nur klappt das irgendwie nicht...

Gebe ich dafür das hier in die Befehlszeile ein:
setreading httpmod_piko Tag-Nummer {($yday+1)}
funktioniert es.

Probiere ich es mit diesem DOIF:
([00:00:05]) (setreading httpmod_piko Tag-Nummer {($yday+1)})
funktioniert es nicht, und im DOIF-device erhalte ich unter error diese Meldung:
Global symbol "$yday" requires explicit package name at (eval 793442) line 1.

Was mache ich falsch?
Ist das laut commandref nicht eigentlich korrekt?
Berechnungen können in geschweiften Klammern erfolgen. Aus Kompatibilitätsgründen, muss die Berechnung mit einer runden Klammer beginnen.

Vielleicht kann mir jemand behilflich sein oder mir einen Tipp geben, wie es auszusehen hat...

Vielen Dank!

Gruß
Andreas

Ellert

Die Fehlermeldung entsteht, weil $hms im DOIF-Befehlsteil nicht zur Verfügung steht, im Bedingungsteil schon.

Du könntest Dir die Variable selbst definieren und dann verwenden, ungetestet etwa so:

(setreading httpmod_piko Tag-Nummer {my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);;($yday+1)})

Vize

Hallo Ellert,

danke erstmal für den Tipp, aber dein Vorschlag funktioniert leider (noch) nicht...

Da scheint vielleicht noch ein Fehler in der Syntax oder so zu sein...

Kannst du - oder jemand anders - nochmal schauen? Mir fehlt da leider das Fachwissen...

Danke!

Gruß
Andreas

Ellert

#3
Versuch mal

(setreading httpmod_piko Tag-Nummer {(my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);;$yday+1)})

Vize

Hallo Ellert,

danke nochmal für den weiteren Tipp...werde ich nacher ma testen...

Zwischenzeitlich hab ich mal ein wenig geforscht und mir diese funktionierende Version "zusammengebastelt":
({my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);;$yday += 1;;fhem("setreading httpmod_piko Tag-Nummer $yday")})

Ob das nun die eleganteste Lösung ist, weiß ich nicht, aber sie funktioniert...  8)

Gruß
Andreas

Ellert