Systemvariable über php abfragen (von aussen)

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Heizungsjunky
Beiträge: 21
Registriert: 14.12.2009, 23:01

Systemvariable über php abfragen (von aussen)

Beitrag von Heizungsjunky » 25.10.2010, 15:29

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

Benutzeravatar
owagner
(verstorben)
Beiträge: 1193
Registriert: 13.05.2008, 19:49
Danksagung erhalten: 1 Mal

Re: Systemvariable über php abfragen (von aussen)

Beitrag von owagner » 25.10.2010, 17:11

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"));

?>

Benutzeravatar
Monty1979
Beiträge: 855
Registriert: 28.10.2010, 20:47
Wohnort: Bremen
Kontaktdaten:

Re: Systemvariable über php abfragen (von aussen)

Beitrag von Monty1979 » 31.10.2010, 13:34

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.

ColdFireIce
Beiträge: 407
Registriert: 06.03.2009, 15:38
Wohnort: Karlsruhe
Danksagung erhalten: 1 Mal

Re: Systemvariable über php abfragen (von aussen)

Beitrag von ColdFireIce » 31.10.2010, 13:42

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

Micky
Beiträge: 211
Registriert: 18.12.2014, 15:52

Re: Systemvariable über php abfragen (von aussen)

Beitrag von Micky » 10.02.2018, 20:30

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.
Ich übernehme keinerlei Haftung/Garantie für Tipps/Hinweise die ich hier gebe. Danke für euer Verständnis.

NI0X
Beiträge: 212
Registriert: 26.11.2017, 14:00

Re: Systemvariable über php abfragen (von aussen)

Beitrag von NI0X » 10.02.2018, 22:31

Syntax ist korrekt, habe beides ausprobiert und beides läuft.
Da wird Dir eine/mehrere Funktion(en) fehlen.

Micky
Beiträge: 211
Registriert: 18.12.2014, 15:52

Re: Systemvariable über php abfragen (von aussen)

Beitrag von Micky » 10.02.2018, 22:40

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
Ich übernehme keinerlei Haftung/Garantie für Tipps/Hinweise die ich hier gebe. Danke für euer Verständnis.

NI0X
Beiträge: 212
Registriert: 26.11.2017, 14:00

Re: Systemvariable über php abfragen (von aussen)

Beitrag von NI0X » 11.02.2018, 11:41

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.

Micky
Beiträge: 211
Registriert: 18.12.2014, 15:52

Re: Systemvariable über php abfragen (von aussen)

Beitrag von Micky » 11.02.2018, 11:48

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
Ich übernehme keinerlei Haftung/Garantie für Tipps/Hinweise die ich hier gebe. Danke für euer Verständnis.

Benutzeravatar
Monty1979
Beiträge: 855
Registriert: 28.10.2010, 20:47
Wohnort: Bremen
Kontaktdaten:

Re: Systemvariable über php abfragen (von aussen)

Beitrag von Monty1979 » 15.02.2018, 12:03

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 />';
					}
					
				}
			}
		}
	}
?>



Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“