Systemvariable über php abfragen (von aussen)
Moderator: Co-Administratoren
-
- Beiträge: 21
- Registriert: 14.12.2009, 23:01
Systemvariable über php abfragen (von aussen)
Hallo an alle - ich brauch mal wieder Eure Hilfe!!!
ich möchte über einen externen PHP Server den Wert einer Systemvariablen auf der CCU setzen bzw. auslesen können.
Für alle anderen Werte nutze ich bereits das XML RPC Interface. Nach dem was ich im Forum gelesen haben kann man damit aber nicht auf Systemvariablen zugreifen.
Hätte jemand ein Code Beispiel (PHP wäre ideal) wie man von "aussen" auf Systemvariablen zugreifen kann?
Vielen Dank
ich möchte über einen externen PHP Server den Wert einer Systemvariablen auf der CCU setzen bzw. auslesen können.
Für alle anderen Werte nutze ich bereits das XML RPC Interface. Nach dem was ich im Forum gelesen haben kann man damit aber nicht auf Systemvariablen zugreifen.
Hätte jemand ein Code Beispiel (PHP wäre ideal) wie man von "aussen" auf Systemvariablen zugreifen kann?
Vielen Dank
Re: Systemvariable über php abfragen (von aussen)
Beispiel (benötigt curl-Support in php):
Code: Alles auswählen
<?
function gethmvar($ccuaddr,$varname)
{
$req="Write(dom.GetObject(\"$varname\").Variable());";
$ch=curl_init("http://$ccuaddr:8181/tclrega.exe");
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$req);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$ret=curl_exec($ch);
curl_close($ch);
// Remove the xml trailer, if present
$ret=preg_replace("_<xml><exec>.*</xml>_","",$ret);
return $ret;
}
?>
Example:
<?
echo("Systemmeldungen = ".gethmvar("homematic.w","Servicemeldungen"));
?>
Re: Systemvariable über php abfragen (von aussen)
Ab PHP5 und wenn du die XML API auf der CCU installiert hast. Kannst du einfach die Werte mit simplexml auslesen.
Code: Alles auswählen
<?php
// HomeMatic CCU
$homematic_ip = '192.168.1.1';
$homematic = 'http://'.$homematic_ip.'/config/xmlapi/';
// Enthält u.a. die Namen, Seriennummern (pro Kanal) und ID's
// sysvarlist.cgi Liste alle Systemvariablen mit Werten
$syslist_cgi = $homematic."sysvarlist.cgi";
//systemlist mit simplexml auslesen
$data = file_get_contents($syslist_cgi);
$xml_system = simplexml_load_string($data);
foreach( $xml_system->systemVariable as $system ) {
echo $system['name'].': '.$system['value'].'<br />';
}
?>
Zuletzt geändert von Monty1979 am 31.10.2010, 13:48, insgesamt 1-mal geändert.
-
- Beiträge: 407
- Registriert: 06.03.2009, 15:38
- Wohnort: Karlsruhe
- Danksagung erhalten: 1 Mal
Re: Systemvariable über php abfragen (von aussen)
Du solltest vielleicht noch erwähnen dass das so nur geht wenn du die XML API installiert hast, welche ja nicht zum Standard der CCU gehört.Monty1979 hat geschrieben:ab PHP5 kannst du einfach die Werte mit simplexml auslesenCode: Alles auswählen
<?php // HomeMatic CCU $homematic_ip = '192.168.1.1'; $homematic = 'http://'.$homematic_ip.'/config/xmlapi/'; // Enthält u.a. die Namen, Seriennummern (pro Kanal) und ID's // sysvarlist.cgi Liste alle Systemvariablen mit Werten $syslist_cgi = $homematic."sysvarlist.cgi"; //systemlist mit simplexml auslesen $data = file_get_contents($syslist_cgi); $xml_system = simplexml_load_string($data); foreach( $xml_system->systemVariable as $system ) { echo $system['name'].': '.$system['value'].'<br />'; } ?>
Daniel
-
- Beiträge: 257
- Registriert: 18.12.2014, 15:52
- System: CCU
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 1 Mal
Re: Systemvariable über php abfragen (von aussen)
Nabend @all,
der o.g. PHP-Code verursacht leider einen HTTP 500 Fehler. Kann jemand von den PHP-Profis mal einen Blick auf den Syntax werfen?
Danke und Grüße M.
der o.g. PHP-Code verursacht leider einen HTTP 500 Fehler. Kann jemand von den PHP-Profis mal einen Blick auf den Syntax werfen?
Danke und Grüße M.
Ich übernehme keinerlei Haftung/Garantie für Tipps/Hinweise die ich hier gebe. Danke für euer Verständnis.
Re: Systemvariable über php abfragen (von aussen)
Syntax ist korrekt, habe beides ausprobiert und beides läuft.
Da wird Dir eine/mehrere Funktion(en) fehlen.
Da wird Dir eine/mehrere Funktion(en) fehlen.
-
- Beiträge: 257
- Registriert: 18.12.2014, 15:52
- System: CCU
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 1 Mal
Re: Systemvariable über php abfragen (von aussen)
Vielen Dank für deine Antwort.
Welche Funktionen meinst du genau? Ich habe auf dem WebServer lighttpd/1.4.31 mit PHP Version 5.4.45-0+deb7u5.
Grüße M.
EDIT: simplexml support ist lt. php.info enabled
Welche Funktionen meinst du genau? Ich habe auf dem WebServer lighttpd/1.4.31 mit PHP Version 5.4.45-0+deb7u5.
Grüße M.
EDIT: simplexml support ist lt. php.info enabled
Ich übernehme keinerlei Haftung/Garantie für Tipps/Hinweise die ich hier gebe. Danke für euer Verständnis.
Re: Systemvariable über php abfragen (von aussen)
Das kommt drauf an welchen "o. g. PHP-Code" Du überhaupt meinst.
Kann sein dass dir simplexml_load_string fehlt, oder eben das ganze curl-Geraffel.
Kann sein dass dir simplexml_load_string fehlt, oder eben das ganze curl-Geraffel.
-
- Beiträge: 257
- Registriert: 18.12.2014, 15:52
- System: CCU
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 1 Mal
Re: Systemvariable über php abfragen (von aussen)
Ach sorry, ich meine den PHP Code von Monty bin grad unterwegs, kann also nicht auf die info.php schauen. Falls die Module fehlen sollten, wie werden diese installatiert/aktiviert?
EDIT: Ziel ist es, einfach eine kleine lokale WebSite (z.B. status.php) zu generieren, welche mir 4-5 Stati von CCU2-Systemvariablen anzuzeigen. Es genügt, wenn diese Stati nur beim Aufruf der WebSite aktualisiert werden. Kann mir hier jemand ein Beispiel an die Hand geben?
Danke und Grüße
Micky
EDIT: Ziel ist es, einfach eine kleine lokale WebSite (z.B. status.php) zu generieren, welche mir 4-5 Stati von CCU2-Systemvariablen anzuzeigen. Es genügt, wenn diese Stati nur beim Aufruf der WebSite aktualisiert werden. Kann mir hier jemand ein Beispiel an die Hand geben?
Danke und Grüße
Micky
Ich übernehme keinerlei Haftung/Garantie für Tipps/Hinweise die ich hier gebe. Danke für euer Verständnis.
Re: Systemvariable über php abfragen (von aussen)
Moin,
aus gegeben Anlass poste ich euch hier gleich mal noch ein Beispiel wie ihr die Sysvars aus den Favoriten auslesen könnt.
aus gegeben Anlass poste ich euch hier gleich mal noch ein Beispiel wie ihr die Sysvars aus den Favoriten auslesen könnt.
Code: Alles auswählen
<?php
// HomeMatic CCU
$homematic_ip = '192.168.1.1';
$homematic = 'http://'.$homematic_ip.'/addons/xmlapi/';
$favos = array("Neue Favoritenliste 1");
// Enthält u.a. die Namen, Seriennummern (pro Kanal) und ID's
// sysvarlist.cgi Liste alle Systemvariablen mit Werten
$syslist_cgi = $homematic."sysvar.cgi";
$favolist_cgi = $homematic."favoritelist.cgi";
//systemlist mit simplexml auslesen
$data_favos = file_get_contents($favolist_cgi);
$xml_system_favos = simplexml_load_string($data_favos);
foreach( $xml_system_favos->favorite as $favo ) {
if ( in_array($favo['name'], $favos) ) {
echo $favo['name'].': '.$favo['type'].'<br />';
foreach( $favo->channel as $channel ) {
if ($channel['type'] == "SYSVAR"){
$data_sysvar = file_get_contents($syslist_cgi."?ise_id=".$channel['ise_id']);
$xml_system_sysvar = simplexml_load_string($data_sysvar);
foreach( $xml_system_sysvar->systemVariable as $sysvar ) {
$sysvar['value'] = str_replace("true", "activ", $sysvar['value']);
$sysvar['value'] = str_replace("false", "inactiv", $sysvar['value']);
echo $sysvar['name'].': '.$sysvar['value'].'<br />';
}
}
}
}
}
?>