Die neuste Version des km200 Moduls kommt seit dem 07.01.2015 per update-Befehl automatisch in das fhem-System geliefert.
Das zugehörige WIKI ist hier zu finden: http://www.fhemwiki.de/wiki/Buderus_Web_Gateway#Aktivierung_und_Definition_in_FHEMEin herzerfrischendes "Moin" vom hinterm-Deich vorweg
Ich habe eine Frage/Bitte an jene die der Programmiersprache Perl und PHP gleichermaßen mächtig sind.
Da sich meine Programmier - Kenntnisse nicht so weit erstrecken, ein eigenes Modul zu schreiben, brauche ich Eure Unterstützung.
Ich bin seit kurzem stolzer Besitzer einer nagelneuen Gasheizung von Buderus, welche das Kommunikationsmodul "Buderus KM200" als Schnittstelle zum Netz hat.
Dies funktioniert so weit auch recht gut mit der Buderus App "EasyControl", jedoch vermisse ich die Anbindung an fhem.
Die Kollegen von IP-SymCon haben diese Nuss offensichtlich für sich schon "geknackt":
http://www.ip-symcon.de/forum/threads/25103-Buderus-Logamatic-Web-KM200Der Code, den sie dafür verwenden lautet
// IP Adresse oder DNS-Hostname des KM200
define( "km200_gateway_host", '192.168.0.7', true );
// Achtung: Gerätepasswort ohne Bindestriche und in ASCII!
define( "km200_gateway_password", 'aaaBBBcccDDD', true );
// Achtung: Eigenes Passwort in ASCII!
define( "km200_private_password", '0000', true );
// 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 );
$content = @file_get_contents(
'http://' . km200_gateway_host . $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\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
);
}
Refer:
http://www.ip-symcon.de/forum/threads/25103-Buderus-Logamatic-Web-KM200?p=230031#post230031Scheinbar liegen alle Werte (Readings) in einer Art Verzeichnisstruktur:
http://www.ip-symcon.de/wiki/Buderus_KM200Da ich weder der dort verwendeten Programmiersprache (Ist es PHP?) mächtig bin, noch ausreichend Erfahrung in der Programmierung von fhem Modulen habe, meine Frage an die Community:
Hat Jemand Lust mich dabei zu unterstüzen (oder gar es zu übernehmen) ein fhem Modul für das Buderus KM200-Modul zu schreiben?

Kann doch schließlich nicht sein, dass uns die Mitbewerber etwas voraus haben, oder?

Vielen Dank für Eure Anregungen vorweg!
Beste Grüsse
Sailor