Script bei Event ausführen funktioniert nicht

Hallo,
ich habe ein Script geschrieben, welches bei einem Event ausgeführt werden soll. Das Event habe ich mit diesem Skript registriert:

[code]#!/usr/bin/env php

<?php $event = array( "TYPE" => 0, "ID" => "Switch Switching", "PEERID" => 1, "PEERCHANNEL" => 1, "VARIABLE" => "LEVEL", "TRIGGER" => 7, "TRIGGERVALUE" => true, "EVENTMETHOD" => "runScript", "EVENTMETHODPARAMS" => Array("Lichtchanged.php", (boolean) 1)); hg_invoke("addEvent", $event); ?>

[/code]

Der Inhalt der Lichtchanged.php ist:

#!/usr/bin/env php
<?php
echo "Status: geändert";
$a = "Status";
$datei = fopen("/home/pi/Licht.log", "a");
fwrite($datei, $a);
fclose($datei);
?>

Das Event wird auch tatsächlich ausgeführt. Hier ein Auszug aus dem Log:

03/12/15 08:36:50.733 Info: Event "Switch Switching" raised for peer with id 1, channel 1 and variable "LEVEL". Trigger: "updated" 03/12/15 08:36:50.733 RPC Server (Port 2001): Info: RPC Method called: runScript Parameters: (String) Lichtchanged.php (Boolean) 1 03/12/15 08:36:50.774 RPC Server (Port 2001): Response: (Integer) 125

Allerdings scheint das Skript “Lichtchanged.php” nicht ausgeführt zu werden. Es wird zumindest nichts in die Licht.log geschrieben. Rufe ich das Script direkt auf über “sudo homegear -e rs Lichtchanged.php”, dann wird die Licht.log erwartungsgemäß um einen neuen Eintrag erweitert. Gibt es hier irgendwelche Ansatzpunkt, warum das Skript im Event nicht funktioniert?

Hallo,

ich habe da mit der Dokumentation [1] geschlafen… Die war schon auf dem Stand von Version 0.6. Ich habe jetzt die Signatur zur Nutzung der internen Skriptengine wieder eingefügt.

Bei dir ruft Homegear das Skript direkt auf (als würdest du in der Shell “./Lichtchanged.php” aufrufen). D. h. prinzipiell sollte es trotzdem funktionieren. Funktioniert der direkte Aufruf von Lichtchanged.php? Falls nicht, ist PHP-CLI nicht installiert. Wenn du die interne Skriptengine nutzen möchtest, ändere die Zeile

in

Dann ist der Aufruf äquivalent zu “homegear -e rs Lichtchanged.php”.

Ab Version 0.6 werden alle PHP-Skripte über die interne Engine ausgeführt, da nicht mehr PH7 sondern “echtes” PHP verwendet wird und es daher keinen Sinn mehr macht, zu unterscheiden.

Liebe Grüße

Sathya

[1] https://www.homegear.eu/index.php/RunScript

Danke für die schnelle Antwort. Tatsächlich habe ich PHP nicht installiert, sodass das Script über die interne Engine aufgerufen werden muss.

Heißt das, dass der ursprüngliche Aufruf ab Homegear 0.6 funktionieren würde, da das Script dann automatisch über die interne Engine aufgerufen werden würde?

Noch ein Nachtrag: Gibt es eine Möglichkeit, dem aufgerufenen Script den Wert der beobachteten Variable zu übergeben? Im obigen Beispiel sollte dann der Wert von LEVEL dem Script Lichtchanged.php als Parameter übergeben werden.

Genau.

Gibt es eine Möglichkeit, dem aufgerufenen Script den Wert der beobachteten Variable zu übergeben? Im obigen Beispiel sollte dann der Wert von LEVEL dem Script Lichtchanged.php als Parameter übergeben werden.

Nein, den Wert musst du mit “hg_get_value” abrufen. Aber das werde ich direkt auf die Todo-Liste schreiben :wink:.

Liebe Grüße

Sathya