Seite 1 von 2

Systemvariable über php abfragen (von aussen)

Verfasst: 25.10.2010, 15:29
von Heizungsjunky
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

Re: Systemvariable über php abfragen (von aussen)

Verfasst: 25.10.2010, 17:11
von owagner
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)

Verfasst: 31.10.2010, 13:34
von Monty1979
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 />';				
	}
	
?>

Re: Systemvariable über php abfragen (von aussen)

Verfasst: 31.10.2010, 13:42
von ColdFireIce
Monty1979 hat geschrieben:ab PHP5 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 />';				
	}
	
?>
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.

Daniel

Re: Systemvariable über php abfragen (von aussen)

Verfasst: 10.02.2018, 20:30
von Micky
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.

Re: Systemvariable über php abfragen (von aussen)

Verfasst: 10.02.2018, 22:31
von NI0X
Syntax ist korrekt, habe beides ausprobiert und beides läuft.
Da wird Dir eine/mehrere Funktion(en) fehlen.

Re: Systemvariable über php abfragen (von aussen)

Verfasst: 10.02.2018, 22:40
von Micky
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

Re: Systemvariable über php abfragen (von aussen)

Verfasst: 11.02.2018, 11:41
von NI0X
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.

Re: Systemvariable über php abfragen (von aussen)

Verfasst: 11.02.2018, 11:48
von Micky
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

Re: Systemvariable über php abfragen (von aussen)

Verfasst: 15.02.2018, 12:03
von Monty1979
Moin,
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 />';
					}
					
				}
			}
		}
	}
?>