Hallo Zusammen,
ich möchte gerne ein shell script über einen Timer verzögert ausführen.
Wenn ein Bewegungmelder triggert, soll zunächst ein Licht eingeschaltet werden und 90Sekunden später ein shell Script ausgeführt werden.
Licht einschalten und sofortiges Ausführen des shell scriptes funktioniert auch mit:
define n1_g_bw_Carport notify g_bw_Carport:motion {\
my $br1 = ReadingsVal("g_bw_Carport","brightness","---");;\
Log 1, "Bewegung im Carport: Brightness $br1";;\
if ($br1 < 90) {\
fhem("set g_HM_Carport_Licht on-for-timer 300");;\
system("screen -dm sh -c /opt/fhem/cfg/scripts/mark_video.sh");;\
} else {\
Log 1, "Zu hell! Nichts geschaltet";;\
}\
}
Nun versuche ich aber schon seit einigen Stunden über einen at (timer) das shell script verzögert auszuführen.
Scheitere aber an der syntax von PERL, denke ich.
Entweder bekomme ich eine Fehlermeldung dass der Timer nicht angelegt werden kann, oder wenn der timer
angelegt wurde sagt mir das log file bei Ausführung das es kein Kommando gefunden hat.
Etwa so:
define n1_g_bw_Carport notify g_bw_Carport:motion {\
my $br1 = ReadingsVal("g_bw_Carport","brightness","---");;\
Log 1, "Bewegung im Carport: Brightness $br1";;\
if ($br1 < 90) {\
fhem("set g_HM_Carport_Licht on-for-timer 300");;\
fhem("define at_mark_video at +00:01:30 system("screen -dm sh -c /opt/fhem/cfg/scripts/mark_video.sh")");;\
} else {\
Log 1, "Zu hell! Nichts geschaltet";;\
}\
}
Fehler:
2014.11.12 19:42:27 1: PERL WARNING: Bareword found where operator expected at (eval 54) line 6, near ""define at_mark_video at +00:01:30 system("screen"
2014.11.12 19:42:27 3: eval: {
my $br1 = ReadingsVal("g_bw_Carport","brightness","---");
Log 1, "Bewegung im Carport: Brightness $br1";
if ($br1 < 90) {
fhem("set g_HM_Carport_Licht on-for-timer 300");
fhem("define at_mark_video at +00:01:30 system("screen -dm sh -c /opt/fhem/cfg/scripts/mark_video.sh")");
} else {
Log 1, "Zu hell! Nichts geschaltet";
}
}
Habt Ihr einen Tipp für mich?!
Danke, Stefan.
fhem("define at_mark_video at +00:01:30 system("screen -dm sh -c /opt/fhem/cfg/scripts/mark_video.sh")");;\
Anführungszeichen innerhalb Anführungszeichen hab ich zwar hier schon gesehen ist aber unsauber...
Funktioniert das?
fhem("define at_mark_video at +00:01:30 system('screen -dm sh -c /opt/fhem/cfg/scripts/mark_video.sh')");;\
Hi Stefan,
ich glaub, da fehlt unten auch noch ne schließende Klammer. Mach sowas mal am Besten mit Notepad++. Das kann Syntaxfehler erkennen. Das von Phill mit den Hochkommas musste ich auch schon mal verwenden. Aber falls es trotz richtiger Syntax immer noch nicht geht: Das "at" kann das möglicherweise so nicht. Dann führe in dem at nur ein " trigger notify_xy" aus und lege darunter ein Notify an, in dem dann das Script ausgeführt wird. Etwa so:
define notify_xy notify notify_xy { \
Log 1, 'Eine beliebige optionale Meldung';; \
system("screen -dm sh -c /opt/fhem/cfg/scripts/mark_video.sh");;\
}
Gruß
Frank
ZitatAnführungszeichen innerhalb Anführungszeichen hab ich zwar hier schon gesehen ist aber unsauber...
Funktioniert das?
Funktioniert in so fern, dass sich der Timer anlegen lässt, aber das shell Kommando wird dann nicht ausgeführt.
ZitatDann führe in dem at nur ein " trigger notify_xy" aus und lege darunter ein Notify an, in dem dann das Script ausgeführt wird.
Hab es dann so gelöst, das Triggern des notify und Ausführen des shell Kommandos in dem notify funktioniert einwandfrei.
Danke Euch beiden, Stefan.
Hallo Sascha,
ich bin jetzt nicht gerade ein FHEM-Experte, aber ich habe auch schon einige Zeit in die HM-CC-RT-DN-Regler investiert. Vielleicht helfen Dir meine Anmerkungen auf die richtige Spur:
Sind die Regler noch mit FHEM gepairt? Bei den Readings muss 'R-pairCentral 0x....' stehen. Hast Du die Informationen bzgl. der Channels im Wiki gelesen? Im Laufe der Zeit wurde mindestens ein Kanal umbenannt (ClimRT_tr -> Clima). Entsprechen die Einträge Deiner fhem.cfg noch der aktuellen Dokumentation? Entferne doch mal einen Regler aus der Konfiguration und lerne ihn neu an. Vergleiche dann die durch autocreate angelegten Kanäle mit denen der anderen Regler. Falls das alles ok zu sein scheint, Versuche mal ein 'clear msgEvents' und 'get Config' in der Weboberfläche.
Grüße,
Michael