Hauptmenü

if Befehl Syntax

Begonnen von chaot4ever, 14 Oktober 2013, 16:11:04

Vorheriges Thema - Nächstes Thema

chaot4ever

Hallo
Als Einsteiger in FHEM habe ich wie folgt versucht,  einen Befehl (hier zB an Fernseher) zwei mal pro Jahr zu einem bestimmten Zeitpunkt auszuführen:

define Test at *15:59:00 { if ($yday == 180) || ($yday == 360)  { fhem("set Fernseher off") } }

Leider geht gar nichts und in der Log-Datei steht:

Test: syntax error at (eval 19) line 1, near ") ||"
syntax error at (eval 19) line 1, near "} }"

betateilchen

#1
Das hat wohl ehermit Deinem Verständnis zu tun, was/wie ein IF Befehl eigentlich vergleicht ;)

entweder so:

define Test at *15:59:00 { if ($yday == 180 || $yday == 360)  { fhem("set Fernseher off") } }

oder so:

define Test at *15:59:00 { if (($yday == 180) || ($yday == 360))  { fhem("set Fernseher off") } }
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

chaot4ever

Herzlichen Dank für deine Info.

Die Fehlermeldung ist in beiden Fällen weg, trotzdem passiert nichts, wenn ich für den Tag 287 (=heute, 14.10.2013) und die Schaltzeit auf eine Zeit stelle, die in 2 Minuten erreicht wird. Das Datum und die Zeit habe ich auf dem Raspberry Pi mit date abgefragt, diese sind korrekt.
Zuvor habe ich auch sicherheitshalber ein shutdown restart gemacht.

Was mache ich falsch? Muss ich den Wechsel vom Tag 287 auf den Tag 288 abwarten?

Hier nochmal der Code:

define setFernseherAus at *17:23:00 { if ($yday == 287 || $yday == 360) { fhem("set Fernseher Aus") } }

Der Befehl { fhem("set Fernseher Aus") } funktioiert in der commandzeile bestens.

chaot4ever

Hat niemand eine Ahnung warum der Befehk nicht ausgeführt wird? :(

Hans Franz

Moin,
Ähm..
{$yday} ergibt bei mir für heute (15.10) 287.
Zweifellos ist heute aber der 288. Tag.

Hans
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

hckoe

Hallo Hans,

laut Perl-Dokumentation für localtime() wird $yday folgendermaßen belegt:
$yday - day of the year [0-365] (total of 366 possible for leap year)

Also hat der 288. Tag den Wert 287.

Gruß
Helmut
# CT mit Debian Buster / FHEM aktuell / EnOcean TCM310 / Eltako FSA12, FUD12NPN, FSB12, FRW, FSRP-230V
# Permundo PCS234, Nodon NO-SIN-2-2-00, GTAGS

chaot4ever

Super!!! Herzlichen Dank, nun funzt es!!! :D