Per Script die Temperatur vom Raspi auslesen und in eine Systemvariable schreiben

Hallo zusammen

Ich mache meine ersten Versuche mit Homegear

Ich wollte die Systemtempearatur vom Raspi per Script auslesen und in eine Systemvariable schreiben.

Folgendes Eventscript habe ich angelegt:

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

<?php $event = array( "TYPE" => 1, "ID" => "Rpi Temperature", "EVENTTIME" => 0, "RECUREVERY" => 60, "EVENTMETHOD" => runScript, "EVENTMETHODPARAMS" => Array(true, "rbptemp.sh", true)); hg_set_system("RPI_TEMP", $event); [/code] Und so sieht das aufzurufende Script aus : [code]#!/bin/bash INPUT=$(/bin/cat /sys/class/thermal/thermal_zone0/temp) echo $INPUT/1000 |bc -l| python -c "print round(float(raw_input()),2)" [/code] Bitte habt ein wenig Einsehen mit mir ich bin Anfänger was das Scripten angeht. Scheinbar wird nichts in die Variable geschrieben, das Script meldet sich bei Aufruf per homegear -e mit Exitcode 0 Vielen Dank im Voraus Gruß Stefan

Hallo Stefan,

du verwendest Homegear 0.5? Damit geht das Ganze vermutlich noch nicht über die interne Skriptengine. Also brauchen wir zwei Skripte:

Erst einmal das Skript zum Abrufen der Temperatur (/var/lib/homegear/scripts/RaspiTemperature.php):

#!/usr/bin/env php
<?php
include("Connect.php");

$temperature = system("/bin/cat /sys/class/thermal/thermal_zone0/temp");
$temperature = round((float)$temperature / 1000, 2);

$Client->send("setSystemVariable", array("SYSTEM_TEMPERATURE", $temperature));
?>

Jetzt das Skript ausführbar machen:

chmod 755 RaspiTemperature.php chown homegear:homegear RaspiTemperature.php

Zum Testen kannst du es einmal ausführen (einfach /var/lib/homegear/scripts/RaspiTemperature.php aufrufen).

Als zweites brauchen wir noch das Skript zum Anlegen des Ereignisses (/var/lib/homegear/scripts/CreateTemperatureEvent.php):

#!/usr/bin/env php
<?php
include("Connect.php");

print_r($Client->send("removeEvent", array("Rpi Temperature")));
print_r($Client->send("addEvent", array(array(
        "TYPE" => 1,
        "ID" => "Rpi Temperature",
        "EVENTTIME" => 0,
        "RECUREVERY" => 60,
        "EVENTMETHOD" => "runScript",
        "EVENTMETHODPARAMS" => Array(false, "RaspiTemperature.php", true)))));
?>

Jetzt wieder ein:

Dieses Skript führst du ebenfalls direkt aus:

Jetzt sollte die Systemvariable jede Minute gesetzt werden :wink:.

Viele Grüße

Sathya

Hallo Sathya

Ich habe schon gedacht mich mag hier keiner :smiley:

Danke für Deine Antwort.

Ja ich benutze hier V0.5 … habe ich vergessen zu schreiben.

Ich habe die Scripte so angelegt und ausgeführt …

Bei RaspiTemperature.php steht folgendes im Log:

10/14/15 16:57:42.610 Script output: #!/usr/bin/env php
10/14/15 16:57:42.612 Script output: Warning: include(): IO error while importing: 'Connect.php'
10/14/15 16:57:42.614 Script output: Warning: Call to undefined function 'system',NULL will be returned
10/14/15 16:57:42.616 Script output: Error: '->': Expecting class instance as left operand,PH7 is loading NULL
10/14/15 16:57:42.617 Script output: Warning: Invalid function name,NULL will be returned
10/14/15 16:57:42.619 Script output: 

Bei CreateTemperatureEvent.php kommt :

10/14/15 17:05:34.566 Info: CLI connection accepted. Client number: 61598 10/14/15 17:05:34.585 Script output: #!/usr/bin/env php 10/14/15 17:05:34.586 Script output: Warning: include(): IO error while importing: 'Connect.php' 10/14/15 17:05:34.588 Script output: Error: '->': Expecting class instance as left operand,PH7 is loading NULL 10/14/15 17:05:34.590 Script output: Warning: Invalid function name,NULL will be returned 10/14/15 17:05:34.592 Script output: 10/14/15 17:05:34.593 Script output: Error: '->': Expecting class instance as left operand,PH7 is loading NULL 10/14/15 17:05:34.595 Script output: Warning: Invalid function name,NULL will be returned 10/14/15 17:05:34.596 Script output:

Ich denke das Grundproblem wird das nicht finden von Connect.php sein … nur woran liegt es ?

Die Datei ist vorhanden und hat chmod 550, der Besitzer ist homegear:homegear

Vielen Dank im Voraus

Gruß

Stefan

Hallo Stefan,

steht bei dir "EVENTMETHODPARAMS" => Array(false, "RaspiTemperature.php", true)))));?

Homegear verwendet die interne Skriptengine. Damit funktioniert das in Version 0.5 nicht (in 0.6 schon, dann auch ohne die XMLRPC-Klasse). Auch die Skripts nicht über “homegear -e rs” bzw. “homegear -e runscript” ausführen, sondern direkt aufrufen. Dann sollte es klappen :wink:.

Viele Grüße

Sathya

Hi

Ja die Zeile sieht genau so aus …

Ich habe die Scripte ja von Dir übernommen :mrgreen:

Beim direkten ausführen kam erst was von wegen php nicht gefunden.

Also php5 nachinstalliert, weil es nicht installiert war :unamused:

Jetzt kommt folgende Meldung beim Aufrufen von RaspiTemperature.php :

root@openhabpi:/var/lib/homegear/scripts# ./RaspiTemperature.php 44388 PHP Fatal error: Call to undefined function XMLRPC\xmlrpc_encode_request() in /var/lib/homegear/scripts/HM-XMLRPC-Client/Client.php on line 227
bei CreateTemperatureEvent.php :

root@openhabpi:/var/lib/homegear/scripts# ./CreateTemperatureEvent.php PHP Fatal error: Call to undefined function XMLRPC\xmlrpc_encode_request() in /var/lib/homegear/scripts/HM-XMLRPC-Client/Client.php on line 227

Gruß

Stefan

sudo apt-get install php5-xmlrpc :wink:.

Hi

Hm das war zu einfach … :mrgreen:

Meiner Meinung nach müsste das in die Abhängigkeit von homegear, damit das beim Installieren von homegear per apt-get gleich mit installiert wird.

OK hier die Ausgaben nach dem Scriptaufrufen :

root@openhabpi:/var/lib/homegear/scripts# ./RaspiTemperature.php 44388 root@openhabpi:/var/lib/homegear/scripts# ./CreateTemperatureEvent.php Array ( [faultCode] => -5 [faultString] => Event not found. )

btw. müsste nicht schon das erste Script die Ausgabe so manipulieren das dort dann 44.39 zurück gegeben wird ?

Gruß

Stefan

Hallo Stefan,

das sieht gut aus. Wenn du dir ein drittes Skript bastelst, mit dem Inhalt

#!/usr/bin/env php
<?php
include("Connect.php");

print $Client->send("getSystemVariable", array("SYSTEM_TEMPERATURE"));
?>

kannst du die geschriebene Temperatur wieder auslesen. Die Ausgabe, die du siehst, ist nur der Inhalt von “/sys/class/thermal/thermal_zone0/temp”. Der geschriebene Wert ist durch 1000 geteilt und auf zwei Nachkommastellen gerunden. Der Wert der Systemvariablen sollte jetzt auch alle 60 Sekunden aktualisiert werden.

Stimmt. Das spielt aber keine Rolle mehr, da in Homegear 0.6 vollwertiges PHP als Skriptengine eingebaut ist. Damit entfällt die Notwendigkeit der Nutzung der XMLRPC-Schnittstelle.

Viele Grüße

Sathya

Hi

OK, dieses Script wäre dann ja nur für mich um zu sehen was in der Systemvariable steht, richtig ?

In Openhab kann ich diese Systemvariable direkt benutzen ?

Zum Thema V0.6 : Kannst Du schon was zu einem Veröffentlichungstermin sagen (stabil) ?

Gruß

Stefan

Ja.

Müsste gehen über “variable”.

Wir sind zwar schon sehr weit, aber die Vergangenheit zeigt, dass ich mit Terminen lieber vorsichtig sein sollte :wink:. Es hängt viel davon ab, wieviel Freizeit ich zur Verfügung habe.

Viele Grüße

Sathya

So dele

Leider bin ich heute erst dazu gekommen die Scripte bzw. die Einbindung in Openhab zu testen.

Es klappt alles … danke Sathya für Deine Hilfe

Gruß

Stefan

Hallo Zusammen

Seit dem letzten Update von Rasbian hat sich auch Homegear auf Version 0.6.7 installiert.
Jetzt läuft das Script zum Auslesen der RPI Temperature nicht mehr.

Als Fehlermeldung taucht im homegear.err folgendes auf:

Could not execute RPC method “runscript” for event “Rpi Temperature”. Error struct:

Das aufrufende Script sieht so aus :

#!/usr/bin/env php 
<?php
 include("Connect.php");

 print_r($Client->send("removeEvent", array("Rpi Temperature")));
 print_r($Client->send("addEvent", array(array(
     "TYPE" => 1,
     "ID" => "Rpi Temperature",
     "EVENTTIME" => 0,
     "RECUREVERY" => 60,
     "EVENTMETHOD" => "runScript",
     "EVENTMETHODPARAMS" => Array(false, "RaspiTemperature.php", true)))));

RaspiTemperature.php sieht so aus :

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

<?php include("Connect.php"); $temperature = system("/bin/cat /sys/class/thermal/thermal_zone0/temp"); $temperature = round((float)$temperature / 1000, 2); $Client->send("setSystemVariable", array("SYSTEM_TEMPERATURE", $temperature)); ?>[/code]

Außer diesem Script mit Sathyas Hilfe habe ich noch nichts an Scripten laufen.
Wie muss ich das jetzt abändern damit es wieder läuft ?

btw. wo finde ich Infos wie die homegear Umgebung in PHP zu nutzen ist ?

Vielen Dank im Voraus

Gruß

Stefan

Nach ein wenig suchen habe ich gefunden was ich brauche …

Es hat gereicht im Event Script bei EVENTMETHODPARAMS das false, wegzulassen.

Jetzt zeigt OpenHab auch wieder die Temperatur des Raspi an.

Hallo @Interceptor43,

genau, da hat sich ein bisschen was getan in Homegear. Ich würde auch empfehlen, nicht mehr die Client-Bibliothek zu verwenden, da die Skriptausführung ohne diese effizienter ist. Dein Skript sieht dann so aus:

<?php
$hg = new \Homegear\Homegear();

$temperature = system("/bin/cat /sys/class/thermal/thermal_zone0/temp");
$temperature = round((float)$temperature / 1000, 2);
$hg->setSystemVariable("SYSTEM_TEMPERATURE", $temperature);

Viele Grüße

Sathya

Super danke Dir Sathya

Wo kann ich nachlesen was Homegear() an Funktionen unterstützt ?

Ich habe das bisher nicht gefunden …

Hi @Interceptor43,

das geht hier: https://ref.homegear.eu/
Alle RPC Methoden sind auch gleichzeit PHP Methoden.

so long,
p

Das ist der Link zur neuen Referenz. Es sind noch nicht alle Methoden umgezogen. Zum Teil sind diese noch hier dokumentiert:

https://www.homegear.eu/index.php/XML_RPC_Method_Reference

Viele Grüße

Sathya