[gelöst]Sunrise set timer syntax problem

Begonnen von fr3d, 06 November 2015, 09:02:51

Vorheriges Thema - Nächstes Thema

fr3d

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



Nepumuk4321

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
FHEM@RPI2, HMUSB; Keymatic;Thermostate (HM-CC-RT-DN); Rolladenaktoren(HM-LC-BI1PBU-FM); 2xConfig-Firmata@ArduinoUno mit Relaisausgängen und DS18B20;Schaltaktor(HM-LC-SW1-BA-PCB); Rauchmelder(HM-SEC-SD); ArduinoNano+ nRF24L01 MySensors;   FHEM@RPI1 als Teststation mit RF1101se@ArduinoNano.....

fr3d


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.

Nepumuk4321

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
FHEM@RPI2, HMUSB; Keymatic;Thermostate (HM-CC-RT-DN); Rolladenaktoren(HM-LC-BI1PBU-FM); 2xConfig-Firmata@ArduinoUno mit Relaisausgängen und DS18B20;Schaltaktor(HM-LC-SW1-BA-PCB); Rauchmelder(HM-SEC-SD); ArduinoNano+ nRF24L01 MySensors;   FHEM@RPI1 als Teststation mit RF1101se@ArduinoNano.....

fr3d

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



Brice

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")};
}
FHEM auf RPi 4 4GB (Buster) | produktiv) CUL 868 für FS20 | S300TH | KS300 | Max!Cube als CUN 868 für TechemWZ | HM-MOD-RPI-PCB für HM | Z-Wave ZME_UZB1 | FRITZ!DECT 200 | HUE | Lightify | Echo Dot | WS3080

dev0

Das Problem ist, dass die erste Klammer in der 1. Zeile verbleiben muss.

Nepumuk4321

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
FHEM@RPI2, HMUSB; Keymatic;Thermostate (HM-CC-RT-DN); Rolladenaktoren(HM-LC-BI1PBU-FM); 2xConfig-Firmata@ArduinoUno mit Relaisausgängen und DS18B20;Schaltaktor(HM-LC-SW1-BA-PCB); Rauchmelder(HM-SEC-SD); ArduinoNano+ nRF24L01 MySensors;   FHEM@RPI1 als Teststation mit RF1101se@ArduinoNano.....

fr3d