Hello,
i like to share how you can integrate information from your Buderus Boiler with km200/km50 Gateway (km200 is standalone, km50 is a integrated km200 gateway).
****Disclamer: All the stuff posted below is many try and error. I’m not a programming guy or else. Its working for me, but it does not mean, that this is the best way. If you find something to improve, please share
All steps below are done by me on a fresh Pi3 with jeese
Most of the development was done by the FHEM community by decoding the encrypted communication. You can query the IP of your km200 gateway via json, but the requests and response are encrypted with a RSA hash. The FHEM community posted a php script which acts as a “gateway” and en/decrypts the json.
So, what can we do with the km200 gateway:
- Query many states of the boiler
- Change some states of the boiler
At the moment, i only implemented and tested the query part, so feel free to do the change part (it is working within FHEM).
What you need:
- IP of your km200 gateway (its DHCP only, check Router for dhcp leases)
- Gateway passwort (printed on gateway)
- Personal passwort (can be set with the buderus app avaiable on Appstore)
- WebServer (apache2 with php5 and php5_mcrypt module)
- km200.php (can be found here: https://forum.fhem.de/index.php/topic,25540.msg185342.html#msg185342)
- Parser Script
Step 1 - Install Apache
sudo apt-get install apache2
sudo apt-get install php5 libapache2-mod-php5
sudo apt-get install php5_mcrypt
sudo php5enmod mcrypt
sudo service apache2 stop
Then change the ports in
/etc/apache2/ports.conf
from 80 (Pimatic uses port 80) to 8080 or else
Listen 8080
Start apache again
sudo service apach2 start
Test apache by opening http://IP-of-your-server:8080
You should see a “It works page”
Step 2 - km200.php Gateway File
Now place the km200.php file from https://forum.fhem.de/index.php/topic,25540.msg185342.html#msg185342 to
/var/www/html
Inside the file modify the following
// IP Adresse oder DNS-Hostname des KM200
define( "km200_gateway_host", '192.168.0.xxx', true );
// Gerätepasswort. Achtung: Ohne Bindestriche und in ASCII!
define( "km200_gateway_password", 'xxxxxxx', true );
// Eigenes Passwort wie in der App vergeben
define( "km200_private_password", 'xxxx', true );
Save the file and open the file in a webbrowser
http://IP-of-your-server:8080/km200.php
You should see something like
/system/brand;Buderus;/gateway/DateTime;2016-08-04T13:07:25;/gateway/versionFirmware;01.09.04;/gateway/instAccess;off;/heatingCircuits/hc1/operationMode;auto;/heatingCircuits/hc1/roomtemperature;23;/heatingCircuits/hc1/status;ACTIVE;/solarCircuits/sc1/status;INACTIVE;/solarCircuits/sc1/solarYield;0;/solarCircuits/sc1/collectorTemperature;0;/solarCircuits/sc1/pumpModulation;0;/heatSources/actualPower;0;/heatSources/actualCHPower;0;/heatSources/actualDHWPower;0;/heatSources/flameStatus;off;/heatSources/CHpumpModulation;0;/heatSources/gasAirPressure;0;/heatSources/systemPressure;1.2;/heatSources/returnTemperature;29.8;/system/healthStatus;ok;/system/sensors/temperatures/outdoor_t1;21.5;/system/sensors/temperatures/supply_t1;29;/system/sensors/temperatures/hotWater_t1;-3276.8;/system/sensors/temperatures/hotWater_t2;53.2;/system/sensors/temperatures/return;29.8;/system/appliance/numberOfStarts;50186;
These are the readings from your Buderus km200 gateway. If you are missing something, please check the km200.php file. Here you can add/remove readings (most of them are already there, but not active)
Some readings are explained here (german only)
https://knx-user-forum.de/forum/supportforen/eibpc/823726-buderus-km200-kommunikationsmodul-an-eibpc?p=827783#post827783
Step 3 - Data to Pimatic
Now we have to get this data to pimatic. You could write a commandSensor and get the the results out of the curl string. But the problem is, that every run of the km200.php queries the km200 gateway and some users in the FHEM forum reported, that the gateway could crash and have to be rebooted (power off/on). So i decided to use a script which fetches the data with km200 and and writes the data to pimatic.
First write down all readings you want to see in Pimatic.
After that create a user variable in pimatic for every reading.
Put this file to your pimatic server vor example in (/home/pi) and save it as “fetchkm200.sh”
`#!/bin/bash
//Writing data from km200.php to $parse (Modify IP/Port/php file location if nessesary)
parse=$(curl --silent http://127.0.0.1:8080/km200.php)
////COPY AND PAST THIS PART FOR EVERY Reading////
// Parse the Reading to a variable. Modify only the name of the reading between "(?<=" and ;) (in this case /heatSources/systemPressure)
systempressure=$(grep -oP '(?<=/heatSources/systemPressure;).*?(?=;)' <<< $parse)
// Write the parsed data to Pimatic Variable.
// Things to modify:
// Parsing Variable (see 2 lines above "systempressure") inside the --data row
// User / Password for Pimatic (in the --user row)
// Pimatic variable (http line, last part "heizung_systempressure")
curl --silent \
-X PATCH \
--header "Content-Type:application/json" \
--data '{"type": "value", "valueOrExpression": '$systempressure'}' \
--user "user:password" \
http://127.0.0.1/api/variables/heizung_systempressure
This script does the following:
Writes the output from km200.php to the $parse variable
After that we have to extract the readings out of the km200.php readings. Every reading is written to its own variable and then send to pimatic
Copy and Past the last part for every Reading you like to have
Finaly we have to add the script to our crontab. This will let run the script every 10 minutes
crontab -e
# m h dom mon dow command
*/10 * * * * /home/pi/fetchkm200.sh