Anyone interested in building this for a fee? Just send me a message with your price. I’m not familiar with Python, if Home Assistant was build in PHP I could do it…
It needs a temperature sensor which reads every x seconds the http://ip-address/data.json
file which look like this:
{"nodenr": 229,
"ch_temp_lsb": 88,
"ch_temp_msb": 16,
"tap_temp_lsb": 168,
"tap_temp_msb": 14,
"ch_pressure_lsb": 175,
"ch_pressure_msb": 0,
"room_temp_1_lsb": 223,
"room_temp_1_msb": 8,
"room_temp_set_1_lsb": 252,
"room_temp_set_1_msb": 8,
"room_temp_2_lsb": 255,
"room_temp_2_msb": 127,
"room_temp_set_2_lsb": 255,
"room_temp_set_2_msb": 127,
"displ_code": 126,
"IO": 0,
"serial_year": 16,
"serial_month": 5,
"serial_line": 16,
"serial_sn1": 0,
"serial_sn2": 93,
"serial_sn3": 83 ,
"room_set_ovr_1_msb": 8,
"room_set_ovr_1_lsb": 252,
"room_set_ovr_2_msb": 0,
"room_set_ovr_2_lsb": 0,
"rf_message_rssi": 34,
"rfstatus_cntr": 0}
We grab the room_temp_1_lsb
(223) and room_temp_1_msb
(8) and do the calculation to get the current room temp:
(223 + (8 * 256)) / 100 = 22.71 celsius
From that json file we can also get the setpoint on the thermostat in the room the same way from room_temp_set_1
.
To change the temperature we just have to call http://ip-address/data.json?heater=0&setpoint=SETPOINT&thermostat=0
where we need to replace SETPOINT
with 0
for 5 degrees celsius, 5
for 5.5, etc. So when we like to set the temperature to 14 degrees celsius we’ve to set it to 90
, 20 degrees to 150
and so on.
That’s just for me, maybe other people want more features. In that case look at the Domoticz implementation as posted earlier.
Extra code references here: https://github.com/search?q=incomfort and the Javascript from the incomfort Internet Gateway on http://ip-address/roomthermostat.htm?heater=0
:
function updateStatus(data) {
var jsondata = JSON.parse(data);
var room_temp1 = (jsondata.room_temp_1_lsb + jsondata.room_temp_1_msb*256) / 100;
var room_set1 = (jsondata.room_temp_set_1_lsb + jsondata.room_temp_set_1_msb*256) / 100;
var room_set_ovr1 = (jsondata.room_set_ovr_1_lsb + jsondata.room_set_ovr_1_msb*256) / 100;
var room_temp2 = (jsondata.room_temp_2_lsb + jsondata.room_temp_2_msb*256) / 100;
var room_set2 = (jsondata.room_temp_set_2_lsb + jsondata.room_temp_set_2_msb*256) / 100;
var room_set_ovr2 = (jsondata.room_set_ovr_2_lsb + jsondata.room_set_ovr_2_msb*256) / 100;
if (room_temp1 != 327.67){
document.getElementById('room_temp1').innerHTML = room_temp1;
}
if (room_set1 != 327.67){
document.getElementById('room_set1').innerHTML = room_set1;
}
if (room_set_ovr1 != 327.67){
document.getElementById('room_set_ovr1').innerHTML = room_set_ovr1;
}
if (room_temp2 != 327.67){
document.getElementById('room_temp2').innerHTML = room_temp2;
}
if (room_set2 != 327.67){
document.getElementById('room_set2').innerHTML = room_set2;
}
if (room_set_ovr2 != 327.67){
document.getElementById('room_set_ovr2').innerHTML = room_set_ovr2;
}
}
function updateStatusSetpoint(data) {
var jsondata_therm = JSON.parse(data);
var room_set_ovr_1 = (jsondata_therm.room_set_ovr_1_lsb + jsondata_therm.room_set_ovr_1_msb*256) / 100;
var room_set_ovr_2 = (jsondata_therm.room_set_ovr_2_lsb + jsondata_therm.room_set_ovr_2_msb*256) / 100;
document.getElementById('setpointstatus').innerHTML = "Roomtemperature 1 set to " + room_set_ovr_1 +"°C<br>Roomtemperature 2 set to " + room_set_ovr_2 + "°C<br>(It may take a while for the roomthermostat to respond)";
document.getElementById('room_set_ovr1').innerHTML = room_set_ovr_1;
document.getElementById('room_set_ovr2').innerHTML = room_set_ovr_2;
}
function update_setpoint(thermostat){
var d = document.getElementById("setpoint").value;
newAJAXCommand('data.json?heater=0&setpoint='+d+'&thermostat='+thermostat ,updateStatusSetpoint , false);
}
setTimeout("newAJAXCommand('data.json?heater=0', updateStatus, true)",500);