Nicht wirklich.
Die KM200 funktioniert nur mit einem RC300 Modul (Ich habe ein SC300) und das RC300 funktioniert wiederum nur mit einem Brenner oder Wärmepumpe zusammen (Ich habe Solar).
Mit anderen Worten: KM200 funktioniert bei mir nicht.
Du kannst aber den KM200 mit folgendem Skript auslesen, kommt irgendwo hier aus dem Forum:
<?
include_once( "45307.ips.php" ); // KM200 Gateway
$RootCategoryID = 32306 /*[Heizung\KM 200 Web]*/;
$km200_REST_URLs = array( '/gateway', '/system', '/heatingCircuits', '/solarCircuits', '/heatSources',);
function CreateCategory( $Name, $Ident = '', $ParentID = 0 ){ global $RootCategoryID;
echo "CreateCategory: ( $Name, $Ident, $ParentID )
";
if ( '' != $Ident ) { $CatID = @IPS_GetObjectIDByIdent( $Ident, $ParentID ); if ( false !== $CatID ) { $Obj = IPS_GetObject( $CatID ); if ( 0 == $Obj['ObjectType'] ) // is category? return $CatID; } } $CatID = IPS_CreateCategory(); IPS_SetName( $CatID, $Name ); IPS_SetIdent( $CatID, $Ident );
if ( 0 == $ParentID ) if ( IPS_ObjectExists( $RootCategoryID ) ) $ParentID = $RootCategoryID; IPS_SetParent( $CatID, $ParentID );
return $CatID;}
function SetVariable( $VarID, $Type, $Value ){ switch( $Type ) { case 0: // boolean SetValueBoolean( $VarID, $Value ); break; case 1: // integer SetValueInteger( $VarID, $Value ); break; case 2: // float SetValueFloat( $VarID, $Value ); break; case 3: // string SetValueString( $VarID, $Value ); break; }}function CreateVariable( $Name, $Type, $Value, $Ident = '', $ParentID = 0 ){ echo "CreateVariable: ( $Name, $Type, $Value, $Ident, $ParentID )
"; if ( '' != $Ident ) { $VarID = @IPS_GetObjectIDByIdent( $Ident, $ParentID ); if ( false !== $VarID ) { SetVariable( $VarID, $Type, $Value ); return; } } $VarID = @IPS_GetObjectIDByName( $Name, $ParentID ); if ( false !== $VarID ) // exists? { $Obj = IPS_GetObject( $VarID ); if ( 2 == $Obj['ObjectType'] ) // is variable? { $Var = IPS_GetVariable( $VarID ); if ( $Type == $Var['VariableValue']['ValueType'] ) { SetVariable( $VarID, $Type, $Value ); return; } } } $VarID = IPS_CreateVariable( $Type ); IPS_SetParent( $VarID, $ParentID ); IPS_SetName( $VarID, $Name ); if ( '' != $Ident ) IPS_SetIdent( $VarID, $Ident ); SetVariable( $VarID, $Type, $Value );}
function Traverse_REST_URL( $REST_Service, $ParentID = 0 ){ $Name = $REST_Service; $REST_Obj = km200_GetData( $REST_Service ); if( NULL == $REST_Obj ) { echo "Service $REST_Service returned NULL
"; return; } $Ident = str_replace( '/', '0', $REST_Obj->id );
if ( property_exists( $REST_Obj, 'writeable' ) ) if( 0 !== $REST_Obj->writeable ) $Name .= " (writeable)"; if ( property_exists( $REST_Obj, 'recordable' ) ) if( 0 !== $REST_Obj->writeable ) $Name .= " (recordable)";
switch( $REST_Obj->type ) { case 'refEnum': // create category $CatID = CreateCategory( $Name, $Ident, $ParentID ); // loop through enum array foreach( $REST_Obj->references as $SubService ) Traverse_REST_URL( $SubService->id, $CatID ); // recurse break; case 'moduleList': // create category $CatID = CreateCategory( $Name, $Ident, $ParentID ); // loop through values array foreach( $REST_Obj->values as $Modules ) CreateVariable( $Modules->Name, 3, $Modules->Version, $Ident . "0" . $Modules->Token, $CatID ); break; case 'floatValue': CreateVariable( $Name, 2, $REST_Obj->value, $Ident, $ParentID ); break; case 'stringValue': CreateVariable( $Name, 3, $REST_Obj->value, $Ident, $ParentID ); break; case 'switchProgram': CreateVariable( $Name, 3, "switchProgram, toDo!", $Ident, $ParentID ); break; default: echo "$Name ist Typ $REST_Obj->type !
"; CreateVariable( $Name + $REST_Obj->type, 3, (string) $REST_Obj->value, $Ident, $ParentID ); break; }}
foreach( $km200_REST_URLs as $REST_Service ) Traverse_REST_URL( $REST_Service, $RootCategoryID )
?>
Das include Skript ist:
<?php
// IP Adresse oder DNS-Hostname des KM200
define( "km200_gateway_host", 'IP DES HOSTS', true );
// Port des KM200, nur bei Zugriff über Internet mit Portweiterleitung am Router ändern!
define( "km200_gateway_port", '80', true );
/*
Für die Einbindung des Schlüssels zur Kommunikation mit dem KM200 gibt folgende Möglichkeit
Online unter https://ssl-account.com/km200.andreashahn.info/
mit Geräte- und Benutzer-Passwort den AES-Key ausrechnen lassen und folgende Zeile in das Coding einbinden:
Hier den Parameter von hex2bin durch den eigenen AES-Key ersetzen
define( "km200_crypt_key_private", hex2bin( '22D3CF8751ED6BB163BE8D7CDE20210E0C2F9378C0DA3108F0673987B0D63E37' ), 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
" .
"User-Agent: TeleHeater/2.2.3
"
)
);
$context = stream_context_create( $options );
$content = @file_get_contents(
'http://' . km200_gateway_host . ':' . km200_gateway_port . $REST_URL,
false,
$context
);
if ( false === $content )
return false;
return json_decode(
km200_Decrypt(
$content
)
);
}
function km200_SetData( $REST_URL, $Value )
{
$content = json_encode(
array(
"value" => $Value
)
);
$options = array(
'http' => array(
'method' => "PUT",
'header' => "Content-type: application/json
" .
"User-Agent: TeleHeater/2.2.3
",
'content' => km200_Encrypt( $content )
)
);
$context = stream_context_create( $options );
@file_get_contents(
'http://' . km200_gateway_host . ':' . km200_gateway_port . $REST_URL,
false,
$context
);
}
?>