Buderus KM_200 script Systemvariablen

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

mc.olli
Beiträge: 19
Registriert: 08.09.2014, 20:55
Hat sich bedankt: 1 Mal

Buderus KM_200 script Systemvariablen

Beitrag von mc.olli » 20.01.2024, 15:52

Moin,

ich betreibe einen RaspberryMatic mit aktueller Firmwareversion und habe eine Anbindung an meine Buderus Heizung über viele Jahre ohne Probleme laufen. Es liegt ein PHP script auf einem externen pi und die damit ausgelesen Werte (script cuxd), werden in Systemvariablen der homematic geschrieben.
Hat alles einwandfrei und sehr lange funktioniert, nun kann ich das schript ausführen, bekomme keine Fehlermeldung und die Werte werden auch ausgelesen, aber warum auch immer nicht mehr in die Systemvariablen geschrieben.... ich vermute Fehler besteht seit dem letzte Update.

Programmaufruf:

Code: Alles auswählen

string command="LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -k 'http://192.168.1XX.X/km200_Werte.php'";
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State(command);
output
/system/sensors/temperatures/outdoor_t1;
0.9;/solarCircuits/sc1/collectorTemperature;
48.4;/heatingCircuits/hc1/status;
ACTIVE;/heatSources/flameStatus;
off;/solarCircuits/sc1/pumpModulation;
100;/system/sensors/temperatures/hotWater_t2;
65.6;/heatSources/workingTime/totalSystem;
64818;/heatSources/workingTime/centralHeating;
37094;/system/healthStatus;
ok;/heatSources/returnTemperature;
51.2;/heatingCircuits/hc1/actualSupplyTemperature;
49;/system/sensors/temperatures/supply_t1_setpoint;
60;/system/sensors/temperatures/supply_t1;
60.9;/heatSources/numberOfStarts;
40310;/solarCircuits/sc1/status;
ACTIVE;/solarCircuits/sc1/solarYield;
0;/gateway/versionFirmware;
04.08.02;/gateway/versionHardware;
iCom_Low_NSC_v1;/gateway/uuid;
311013344;/gateway/DateTime;
2024-01-20T14:55:37;/system/systemType;
NSC_ICOM_GATEWAY;/heatSources/systemPressure;
1.7;/heatingCircuits/hc1/status;
ACTIVE;


und das erfolgt mit diesem script:

Code: Alles auswählen

<?php
// km200.php
// Buderus KM 200
// Slash, Perseus
// http://www.ip-symcon.de/forum/threads/25103-Buderus-Logamatic-Web-KM200
// V 1.3

// IP Adresse oder DNS-Hostname des KM200
define( "km200_gateway_host", '192.168.168.XXX', true );
// Gerätepasswort. Achtung: Ohne Bindestriche und in ASCII!
define( "km200_gateway_password", 'XXXXXXXXXXXXX', true );
// Eigenes Passwort wie in der App vergeben
define( "km200_private_password", 'XXXXXXXXX', true );
// Dreh- und Angelpunkt: Der geheime Salt der MD5-Hashes zur AES-Schlüsselerzeugung

$Buderus_MD5Salt = pack(
    "c*",
    0x86, 0x78, 0x45, 0xe9, 0x7c, 0x4e, 0x29, 0xdc,
    0xe5, 0x22, 0xb9, 0xa7, 0xd3, 0xa3, 0xe0, 0x7b,
    0x15, 0x2b, 0xff, 0xad, 0xdd, 0xbe, 0xd7, 0xf5,
    0xff, 0xd8, 0x42, 0xe9, 0x89, 0x5a, 0xd1, 0xe4
);
define( "km200_crypt_md5_salt", $Buderus_MD5Salt, true );
// Erste Hälfte des Schlüssels: MD5 von ( Gerätepasswort . Salt )
$key_1 = md5( km200_gateway_password . km200_crypt_md5_salt, true );
// Zweite Hälfte des Schlüssels - initial: MD5 von ( Salt )
$key_2_initial = md5( km200_crypt_md5_salt, true );
// Zweite Hälfte des Schlüssels - privat: MD5 von ( Salt . privates Passwort )
$key_2_private = md5( km200_crypt_md5_salt . km200_private_password, true );
define( "km200_crypt_key_initial", $key_1 . $key_2_initial, true );
define( "km200_crypt_key_private", $key_1 . $key_2_private, true );

function km200_Encrypt( $encryptData )
{
	// add PKCS #7 padding
	$blocksize = mcrypt_get_block_size(
		MCRYPT_RIJNDAEL_128,
		MCRYPT_MODE_ECB
	);
	$encrypt_padchar = $blocksize - ( strlen( $encryptData ) % $blocksize );
	$encryptData .= str_repeat( chr( $encrypt_padchar ), $encrypt_padchar );
	// encrypt
	return base64_encode(
		mcrypt_encrypt(
			MCRYPT_RIJNDAEL_128,
			km200_crypt_key_private,
			$encryptData,
			MCRYPT_MODE_ECB,
			''
		)
	);
}

function km200_Decrypt( $decryptData )
{
	$decrypt = (mcrypt_decrypt( MCRYPT_RIJNDAEL_128, km200_crypt_key_private, base64_decode($decryptData), MCRYPT_MODE_ECB, '' ) );
	// remove zero padding
	$decrypt = rtrim( $decrypt, "\x00" );
	// remove PKCS #7 padding
	$decrypt_len = strlen( $decrypt );
	$decrypt_padchar = ord( $decrypt[ $decrypt_len - 1 ] );
	for ( $i = 0; $i < $decrypt_padchar ; $i++ )
	{
		if ( $decrypt_padchar != ord( $decrypt[$decrypt_len - $i - 1] ) )
		break;
	}
	if ( $i != $decrypt_padchar )
		return $decrypt;
	else
		return substr(
			$decrypt,
			0,
			$decrypt_len - $decrypt_padchar
		);
}

function km200_GetData( $REST_URL )
{
  $options = array(
    'http' => array(
      'method' => "GET",
      'header' => "Accept: application/json\r\n" .
                  "User-Agent: TeleHeater/2.2.3\r\n"
    )
  );
  $context = stream_context_create( $options );
  return json_decode(
    km200_Decrypt(
      file_get_contents(
        'http://' . km200_gateway_host . $REST_URL,
        false,
        $context
      )
    ),
    true //Achtung! Hier das true (und drüber das Komma) macht aus dem decodierten Objekt ein Array zur weiteren Bearbeitung)
  );
}

#function km200_SetData( $REST_URL, $Value )
#{
#	$content = json_encode(
#		array(
#			"value" => $Value
#		)
#	);
#	$options = array(
#		'http' => array(
#	   	'method' => "PUT",
#	    	'header' => "Content-type: application/json\r\n" .
#	                	"User-Agent: TeleHeater/2.2.3\r\n",
#			'content' => km200_Encrypt( $content )
#		)
#	);
#	$context = stream_context_create( $options );
#	@file_get_contents(
#		'http://' . km200_gateway_host . $REST_URL,
#		false,
#		$context
#	);
#} 
 
// Beispielaufruf
#$REST_Service = '/system';
#$json = km200_GetData( $REST_Service );
#echo "Service: " . $REST_Service . "\n";
#var_dump( $json );

#$REST_Service = '/system/sensors/temperatures/outdoor_t1';
#$json = km200_GetData( $REST_Service );
#echo "Service: " . $REST_Service . "\n";
#var_dump( $json );

#$REST_Service = '/system/sensors/temperatures/hotWater_t2';
#$json = km200_GetData( $REST_Service );
#echo "Service: " . $REST_Service . "\n";
#var_dump( $json );

#$REST_Service = '/system/sensors/temperatures/supply_t1';
#$json = km200_GetData( $REST_Service );
#echo "Service: " . $REST_Service . "\n";
#var_dump( $json );

#$REST_Service = '/system/sensors/temperatures/return';
#$json = km200_GetData( $REST_Service );
#echo "Service: " . $REST_Service . "\n";
#var_dump( $json );

#$REST_Service = '/system/sensors/temperatures/switch';
#$json = km200_GetData( $REST_Service );
#echo "Service: " . $REST_Service . "\n";
#var_dump( $json );

#$REST_Service = '/system/sensors/temperatures/chimney';
#$json = km200_GetData( $REST_Service );
#echo "Service: " . $REST_Service . "\n";
#var_dump( $json );

#$REST_Service = '/heatingCircuits/hc1/status';
#$json = km200_GetData( $REST_Service );
#echo "Service: " . $REST_Service . "\n";
#var_dump( $json );

#$REST_Service = '/heatSources';
#$json = km200_GetData( $REST_Service );
#echo "Service: " . $REST_Service . "\n";
#var_dump( $json );

#$REST_Service = '/heatSources/systemPressure';
#$json = km200_GetData( $REST_Service );
#echo "Service: " . $REST_Service . "\n";
#var_dump( $json );


#$REST_Service = '/heatingCircuits/hc1/roomtemperature';
#$json = km200_GetData( $REST_Service );
#echo "Service: " . $REST_Service . "\n";
#var_dump( $json );

#$REST_Service = '/gateway/versionFirmware';
#$json = km200_GetData( $REST_Service );
#echo "Service: " . $REST_Service . "\n";
#var_dump( $json );

#$REST_Service = '/gateway/versionHardware';
#$json = km200_GetData( $REST_Service );
#echo "Service: " . $REST_Service . "\n";
#var_dump( $json );

#hier werden die nicht benötigten Variablen auskommentiert.

$REST_services = array(
"/system/sensors/temperatures/outdoor_t1",
"/solarCircuits/sc1/collectorTemperature",
"/heatingCircuits/hc1/status",
"/heatSources/flameStatus",
"/solarCircuits/sc1/pumpModulation",
"/system/sensors/temperatures/hotWater_t2",
"/heatSources/workingTime/totalSystem",
"/heatSources/workingTime/centralHeating",
"/system/healthStatus",
"/heatSources/returnTemperature",
"/heatingCircuits/hc1/actualSupplyTemperature",
"/system/sensors/temperatures/supply_t1_setpoint",
"/system/sensors/temperatures/supply_t1",
"/heatSources/numberOfStarts",
"/solarCircuits/sc1/status",
"/solarCircuits/sc1/solarYield",
"/gateway/versionFirmware",
"/gateway/versionHardware",
"/gateway/uuid",
"/gateway/DateTime",
"/system/systemType",
#"/system/heatSources/hs1/fuel/density",
"/heatSources/systemPressure",
"/heatingCircuits/hc1/status",
);

$ISE_IDs = array( //ISE_IDs in der Reihenfolge der korrespondierenden Werte des Buderus Systems
"50584",
"50588",
"50585",
"50587",
"50590",
"50591",
"50586",
"50592",
"50610",
"50612",
"51707",
"51708",
"51709",
"50583",
"51717",
"50589",
"50611",
"51710",
"51711",
"51712",
"51713",
#"51714",
"51715",
"51716",
);

//durch alle Services gehen, mit Wert und Einheit rausschreiben
$ise_count = 0;
foreach ($REST_services as $service) {
         $json = km200_GetData( $service );

#         echo "<tr>
#                 <td>$service</td><td>";

				echo $json["id"];
				echo ";<br>";
#		 
                 if(array_key_exists ("value", $json ))
				 {
                         echo $json["value"];
                         ;
						$value01 = explode(";", $json["value"]);
						//Wert über XMLAPI in Homematic CCU übertragen
						hmcontrol($ISE_IDs[$ise_count],"$value01[0]");
						$ise_count++;
						 echo ";";
                 }
				 else
				 {
						echo "x;<br>";	
						//hmcontrol("31911","x"); 			 
				 }
#                 if(array_key_exists ("unitOfMeasure", $json ))
#				 {
#                         echo $json["unitOfMeasure"];
#                 }
#				 echo" \n ";
#         echo "</td>
#              </tr>";

}



//http://192.168.168.2/addons/xmlapi/sysvarlist.cgi
function hmcontrol($iseid,$state){
$fp = @fopen ("http://192.168.168.2/addons/xmlapi/statechange.cgi?ise_id=".$iseid."&new_value=".$state,"r");
$garbidge = @fread($fp,1);
fclose($fp);
}
?>
Zuletzt geändert von mc.olli am 20.01.2024, 16:17, insgesamt 1-mal geändert.


mc.olli
Beiträge: 19
Registriert: 08.09.2014, 20:55
Hat sich bedankt: 1 Mal

Re: Buderus KM_200 script Systemvariablen

Beitrag von mc.olli » 20.01.2024, 16:03

Ja habe folgenden Stand 2.3

frd030
Beiträge: 3655
Registriert: 14.07.2019, 20:49
System: CCU
Hat sich bedankt: 853 Mal
Danksagung erhalten: 552 Mal

Re: Buderus KM_200 script Systemvariablen

Beitrag von frd030 » 20.01.2024, 16:10

...und Skripte, Programme, etc. bitte in Codetags posten. Danke!
Bildschirmfoto 2024-01-20 um 16.09.32.png


mc.olli
Beiträge: 19
Registriert: 08.09.2014, 20:55
Hat sich bedankt: 1 Mal

Re: Buderus KM_200 script Systemvariablen

Beitrag von mc.olli » 20.01.2024, 16:15

Hallo Baxxy,

müsste das Problem dann doch schon länger bestehen ? weil die Version 2.X ist ja schon länger installiert.

Benutzeravatar
Baxxy
Beiträge: 10980
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 624 Mal
Danksagung erhalten: 2270 Mal

Re: Buderus KM_200 script Systemvariablen

Beitrag von Baxxy » 20.01.2024, 16:21

Ja, müsste.
Diese Zeile...

Code: Alles auswählen

$fp = @fopen ("http://192.168.168.2/addons/xmlapi/statechange.cgi?ise_id=".$iseid."&new_value=".$state,"r");
...dürfte nicht mehr funktionieren weil kein Auth-Token übergeben wird.
Siehe: https://github.com/homematic-community/ ... v-file#use

mc.olli
Beiträge: 19
Registriert: 08.09.2014, 20:55
Hat sich bedankt: 1 Mal

Re: Buderus KM_200 script Systemvariablen

Beitrag von mc.olli » 20.01.2024, 17:00

Danke erstmal,
jetzt bin ich nicht so tief in diesen Themen drin, aber mich hat es dann gewundert, dass es nun erst streikt :-)
Was müsste denn geändert werden ? Ich habe das script seinerzeit mal so bekommen und bin da nicht so fit.

Gruß

Benutzeravatar
Baxxy
Beiträge: 10980
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 624 Mal
Danksagung erhalten: 2270 Mal

Re: Buderus KM_200 script Systemvariablen

Beitrag von Baxxy » 20.01.2024, 17:36

Den Token über das AddOn generieren und in die Zeile einfügen sollte reichen.
Bin da auch nicht firm drin, daher einfach probieren.
Bspw:

Code: Alles auswählen

$fp = @fopen ("http://192.168.168.2/addons/xmlapi/statechange.cgi?sid=DEINTOKEN&ise_id=".$iseid."&new_value=".$state,"r");
Alternativ halt einfach das XML-API-AddOn wieder auf eine Version < 2.0 downgraden.

mc.olli
Beiträge: 19
Registriert: 08.09.2014, 20:55
Hat sich bedankt: 1 Mal

Re: Buderus KM_200 script Systemvariablen

Beitrag von mc.olli » 20.01.2024, 18:01

TOP und tausend dank :D
Hat auf Anhieb funktioniert... token erstellt und wie von Dir beschrieben eingetragen... läuft wieder

:D Gruß :D

Antworten

Zurück zu „HomeMatic allgemein“