Hallo,
Ich verwende folgenden Code von Betateilchen, der fehlerfrei ausgeführt wird:
*08:47:00 { my $s = sunrise(); fhem("set Sonnenaufgang $s"); $s = sunset(); fhem("set Sonnenuntergang $s"); }
Aus Gründen der Übersichtlichkeit, verwende ich gerne eine solche Darstellung (ich habe lediglich Zeilenvorschübe eingefügt).
*08:52:00
{
my $s = sunrise();
fhem("set Sonnenaufgang $s");
$s = sunset();
fhem("set Sonnenuntergang $s");
}
Dies erzeugt folgenden Fehler im log
2015.11.06 08:52:00 3: sun_riseSet_timer: Unknown command {, try help.
Unknown command fhem("set, try help.
Unknown command $s, try help.
Unknown command fhem("set, try help.
Unknown command }, try help.
Ich habe beide Varianten über die DEF Internals eingegeben und editiert. Es sollte doch möglich sein einen Zeilenvorschub einzufügen.
Ich habe das auch bereits an anderen Stellen so gemacht.
Kann mir jemand einen Tipp geben ?
CommandReference, erste Schritte und Suchfunktion habe ich bereits bemüht.
Es kann sein, das ich was übersehen habe, aber ich würde das gerne verstehen.
Gruss
fr3d
Hallo,
wenn du Zeilenumbrüche einfügst, musst du "\" ans Ende der Zeile stellen, damit fhem (oder perl) weiß, dass der Befehl weitergeht
Ich glaube es müsste so aussehen:
*08:52:00 \
{ \
my $s = sunrise(); \
fhem("set Sonnenaufgang $s"); \
$s = sunset(); \
fhem("set Sonnenuntergang $s"); \
}
Gruß
Frank
Du hast Recht: in der fhem.cfg
Im DEF Fenster wird der Zeilenumbruch nicht als \
angezeigt.
So wie in deinem Beispiel sah meine cfg auch aus.
Trotzdem kam die Fehlermeldung.
Also bei mir stehen auch überall 2 ;;
Also so:
*08:52:00 \
{ \
my $s = sunrise();; \
fhem("set Sonnenaufgang $s");; \
$s = sunset();; \
fhem("set Sonnenuntergang $s");; \
}
Gruß
Frank
Bei mir auch (in der cfg !)
Das ergibt folgender Fehler:
sun_riseSet_timer: Unknown command {, try help.
Unknown command fhem("set, try help.
Unknown command $s, try help.
Unknown command fhem("set, try help.
Unknown command }, try help.
Ohne Zeilenvorschub -> kein Fehler
mit Zeilenvorschub -> Fehler
Zitat von: fr3d am 06 November 2015, 09:02:51
Kann mir jemand einen Tipp geben ?
Die Fehlermeldung ist doch eindeutig. Bei Zeilenumbrüchen geschweifte Klammer verwenden. Ich würde vorschlagen
*08:52:00
{
{my $s = sunrise()};
{fhem("set Sonnenaufgang $s")};
{$s = sunset()};
{fhem("set Sonnenuntergang $s")};
}
Das Problem ist, dass die erste Klammer in der 1. Zeile verbleiben muss.
Hallo,
hab zu lange gebraucht, die Antwort kam schon. Schicke es trotzdem noch ab:
ich habe die Lösung von Brice eben mal auf meinem Testsystem ausprobiert, kamen aber auch nur Fehler. Also doch nicht so eindeutig.
So geht's (habe ich bei mir getestet):
define sun_riseSet_timer at *08:52:00 {\
my $s = sunrise();; \
fhem("set Sonnenaufgang $s");;\
$s =sunset();; \
fhem("set Sonnenuntergang $s");;\
}
Ich habe viel probiert, aber das entscheidende schien mir, ist das die erste "{" noch hinter dem *08:52:00 steht und nicht in einer neuen Zeile.
Allerdings würde ich dir empfehlen die Funktion "sunrise_abs()" und sunset_abs() zu verwenden, die gibt dir die Zeit raus, wann es draussen hell/dunkel ist, das ist was anderes als Sonnenuntergang.
define sun_riseSet_timer at *08:52:00 {\
my $s = sunrise_abs();; \
fhem("set Sonnenaufgang $s");;\
$s =sunset_abs();; \
fhem("set Sonnenuntergang $s");;\
}
ich steuere meine Rolläden z.B. mit dieser Funktion:
#Rollladen schliessen 1200 Sekunden also 20 Minuten vor Sonnenuntergang also fast ganz dunkel
define Rolladen_ZU at *{sunset_abs(-1200)} set Wohnzimmer_Rolladen off
Gruß
Frank
Danke euch !