[gelöst] Homegear Miscellaneous Devices

Ich versuche gerade meine Wärmepumpe als Homegear Device abzubilden. Die Kanalliste habe ich nach diesem Template erstellt: https://github.com/Homegear/Homegear/blob/master/homegear-miscellaneous/misc/Device%20Description%20Files/Template.xml und konnte das Device mittels “peers create 4368 LUX169-001” erfolgreich anlegen.
Beim Start vom Homgear kriege ich aber immer folgende Logeinträge:

10/09/16 21:07:35.443 Error: Could not start program: Exec format error
10/09/16 21:07:35.454 Script Engine Server: Error: Client process with pid 17975 exited with code 1.
10/09/16 21:07:35.455 Module Miscellaneous: Critical error executing waitpid: No child processes. Exiting run program thread of peer 41

Wenn ich nur das Skript aus meiner Entwicklungsumgebung laufen lasse, wird alles anstandslos ausgeführt.
Hat jmd einen Tipp, wo das Problem liegt. Das PHP-Skript hat das executable-Flag gesetzt und owner/group sind homegear/homegear, Homegear Version ist 0.6.7-1480 auf Debian Jessie (Olimex A20).
Skript und Kanalliste (beides noch unvollständig, da in der Entwicklungsphase) im Anhang.

LuxDevice.zip (5.2 KB)

Hi,

ich gebe zu, ich habe noch nie ein eigenes Device in Homegear gebaut. Aber in deiner XML unter <path> ist ein relativer Pfad angegeben. Kannst du sicherstellen, dass der richtig ist?

so long,
p

ja, der passt definitiv. Wenn ich gezielt einen falschen Pfad angebe, bekomme ich andere Fehlermeldungen:

10/09/16 22:33:39.290 Module Miscellaneous: Error: Could not execute script: No such file or directory
10/09/16 22:33:39.891 Module Miscellaneous: Error: Could not execute script: No such file or directory
10/09/16 22:33:40.492 Module Miscellaneous: Error: Could not execute script: No such file or directory
10/09/16 22:33:41.094 Module Miscellaneous: Error: Could not execute script: No such file or directory

Eine Angabe des kompletten Pfades geht leider auch nicht.

Gruß,
Frank

Ok… war nur ein quick shot. Da muss @sathya wohl ran.

Eine Idee wäre noch das Loglevel zu erhöhen um zu schauen ob du mehr Info bekommst.

Danke, war durchaus berechtigt, wenn auxh leider hier nicht zutreffend …
Die Erhöhung auf Debuglevel 6 hat leider (soweit ich das einschätzen kann) auch keine weiteren Informationen gebracht:

10/09/16 22:59:43.604 Script Engine Server: Info: Spawning new script engine process.
10/09/16 22:59:43.627 Module Miscellaneous: Info: Started program /var/lib/homegear/scripts/DeviceScripts/LuxDevice/LuxDevice.php. PID is 21057.
10/09/16 22:59:43.636 Error: Could not start program: Exec format error
10/09/16 22:59:43.645 Info: Process with id 21057 ended.
10/09/16 22:59:43.646 Script Engine Server: Error: Client process with pid 21057 exited with code 1.
10/09/16 22:59:43.647 Module Miscellaneous: Critical error executing waitpid: No child processes. Exiting run program thread of peer 41
10/09/16 22:59:43.768 Debug: debugLevel set to 6
10/09/16 22:59:43.769 Debug: memoryDebugging set to 0
10/09/16 22:59:43.770 Debug: devLog set to 0
10/09/16 22:59:43.770 Debug: enableCoreDumps set to 1

Wenn ich das richtig deute, wird auch erst danach der Debuglevel wirklich geändert, obwohl die Informationen sind ja ausführlicher …

Gruß,
Frank

Ok, letzte Idee von mir: Mal mit php-cli das Script auf dem Pi ausführen. Eventuell display_errors bzw. error_log mit einer angepassten php.ini über -c mitladen? error_reporting im Script auf E_ALL stellen und schauen ob was bei raus kommt…

Hmm, hab keinen Pi, aber so wie ich es sehe wird das Skript ja nicht mal gestartet, also bringt das so nichts. Und da im PHP ja nicht die Homegear Erweiterungen einkompiliert sind, geht das ohne weiteres sowieso nicht.

Um Skripte in der Entwicklung zu testen habe ich mir halt einen Wrapper geschrieben, der sich als in PHP als Homegear Klasse darstellt und dafür die XMLRPC-Schnittstelle verwendet. Bringt aber so oder so nichts, wenn das Skript nicht gestartet wird …

Vielleicht hat @sathya ja einen Hinweis, ist vermutlich eine Kleinigkeit. Trotzdem vielen Dank für den schnellen Support.

1 Like

Hab grad ein wenig nachgeforscht: Wenn ich das richtig sehe, entsteht der Fehler beim Aufruf mittels execv( ) in der libhomegear-base. Kann es sein, dass ich in der PHP-Datei das shebang hätte mit angeben müssen?
Ich kann es leider erst heute Abend zuhause ausprobieren …

Das halte ich für sehr gut möglich. execv() ist ja nicht nur für php gemacht…

tatsächlich, das war die Ursache. Dann werde ich mal weiter machen … bis zum nächsten Problem …

1 Like

Hallo @DasKleingedruckte,

Dabei helfe ich dir gerne weiter ;-).

Ich würde empfehlen, wie im OpenWeatherMap-Modul den Skript-Teil direkt in die XML-Datei zu packen. Der externe Aufruf ist für Nicht-PHP-Skripte gedacht.

Viele Grüße

Sathya

ja, wie sich herausstellt, muss ich das sowieso, da ich sonst nicht auf die interne PHP7.0-Engine zugreifen kann und damit weder die Homegear-Erweiterungen noch ZTS habe.
Bin gerade dabei das umzubauen …

Gruß,
Frank

Du könntest das Skript auch in der Art “/usr/bin/homegear -e rs Skriptname.php ARGUMENTE” starten. Aber die Variante in der XML-Datei ist vermutlich eleganter.

Viele Grüße

Sathya

Hab es jetzt grundlegend am Laufen, es fehlen “nur” noch die Erweiterungen für einen sinnvollen Nutzen in der Homegear-Umgebung. Da ich mich nicht so recht damit anfreunden konnte, dass das PHP-Skript als Kommentar eingebunden wird, weil damit Syntax-Highlighting und Debugging ausfällt, habe ich das einfach gelöst, indem ich in die XML-Datei das Skript per include eingefügt habe. Damit steht mir dann auch PHP7 zur Verfügung …

Könntest Du kurz ein Beispiel dafür geben, wie genau das “include” in der XML-Datei konkret aussieht?

im Prinzip ganz einfach, wie jeder include in einer PHP-Datei:
In das < script >-Tag schreibst Du sinngemäß

< script>

]]>

< /script>

Der Pfad muss entweder absolut angegeben werden (also z.B. /var/lib/homegear/scripts/includefile.php) oder relativ zu Deinem Script-Pfad (sollte /var/lib/homegear/scripts/ sein).

Wenn das Device irgendwann mal mindestens Beta-Status hat und entsprechend aufgeräumt ist, kann ich es auch zur Verfügung stellen. Je nach verfügbarer Zeit kann das aber noch ein wenig dauern …

1 Like