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