[gelöst] Shell script über timer verzögert ausführen.

Begonnen von StefanV, 12 November 2014, 19:45:00

Vorheriges Thema - Nächstes Thema

StefanV

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 auf FritzBox 7390
Cuno für FS20, HMLAN für HomeMatic
EM 1000-WZ, S300TH
FS20ST-4, FS20 AS4-2
HM-LC-Bl1PBU-FM

Phill

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')");;\
Homebrew 1-Wire / HomeMatic Mix - Cubietruck mit FHEM als Server - Raspberry PI 3 als Informationsanzeige im MagicMirror Stil - Raspberry Pi 1 als Klingelanlage - VDR

Mein Modul: Talk2Fhem - Mein Tipp: https://forum.fhem.de/index.php/topic,82442.0.html

fiedel

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
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

StefanV

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.
FHEM auf FritzBox 7390
Cuno für FS20, HMLAN für HomeMatic
EM 1000-WZ, S300TH
FS20ST-4, FS20 AS4-2
HM-LC-Bl1PBU-FM

Seli

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
Raspberry Pi 3, FHEM 5.8
CUL868 V3 (FS20/IT): FHT80TF|PIRI|PIRI-2|TFK|S4A-2|ST|SU|S8|HMS 100 WD|IT-1500|GRR-3500
HomeMatic HMLAN_UART: HM-CC-RT-DN|HM-SEN-MDIR-O|HM-SEC-SC-2|HM-TC-IT-WM-W-EU|HM-LC-SW4-PCB 4|HM-WDS-OTH|HM-OU-LED16|HM-RC-4-3
JeeLink v3c, Rademacher duoFern, Philips Hue