Integracja kotła KOSPEL EKCO.M3 i modułu CM.I z Home Assistant
Zakładam, że jeżeli tu trafiłeś, to sam kocioł masz już podłączony i działający, tak samo jak moduł CM.I
Moduł CM.I, może pracować zarówno w trybie chmurowym jak i lokalnym, przy czym, jeżeli masz podłączony moduł do chmury Kospel, to w Twojej sieci jest on również widoczny pod lokalnym adresem IP.
Aby zacząć integrację, musimy odszukać IP modułu CM.I. Po wejściu na jego adres, JavaScript zaszyty w kodzie strony odpyta podłączone urządzenie i doklei do adresu odpowiedni numer. Dla mojego kotła M3 numer ten to 65.
Zatem wchodząc np na: http://10.1.78.230 wylądujemy na http://10.1.78.230/65.
Jest to ważne, ponieważ numer ten jest używany w API modułu.
Adres API to http://10.1.78.230/api/dev/65/0b2f/30 gdzie możemy podejrzeć JSON z numerami rejestrów płytki sterującej wewnątrz kotła oraz ich wartościami.
Jeżeli mamy właściwy adres i potwierdzone działające API, możemy użyć je w Home Assistant za pomocą platformy REST w sekcji sensor
sensor:
- platform: rest
name: CMI
resource: http://10.1.78.230/api/dev/65/0b2f/30
json_attributes:
- regs
value_template: "OK"
Następnie za pomocą platformy template możemy poprzeliczać wartości rejestrów:
- platform: template
sensors:
temp_wlot:
friendly_name: "Temperatura wlotowa"
value_template: "{% set value = state_attr('sensor.cmi', 'regs')['0b48'] %}{% set str= value[2:4] + value[0:2] %}{% set resultInt = str | int(base=16) %}{% if resultInt | bitwise_and(0x8000) > 0 %}{% set resultInt = resultInt - 0x10000 %}{% endif %}{{resultInt | float / 10}}"
device_class: temperature
unit_of_measurement: "°C"
temp_wylot:
friendly_name: "Temperatura wylotowa"
value_template: "{% set value = state_attr('sensor.cmi', 'regs')['0b49'] %}{% set str= value[2:4] + value[0:2] %}{% set resultInt = str | int(base=16) %}{% if resultInt | bitwise_and(0x8000) > 0 %}{% set resultInt = resultInt - 0x10000 %}{% endif %}{{resultInt | float / 10}}"
device_class: temperature
unit_of_measurement: "°C"
nastawa_czynnika:
friendly_name: "Temperatura czynnika"
value_template: "{% set value = state_attr('sensor.cmi', 'regs')['0b44'] %}{% set str= value[2:4] + value[0:2] %}{% set resultInt = str | int(base=16) %}{% if resultInt | bitwise_and(0x8000) > 0 %}{% set resultInt = resultInt - 0x10000 %}{% endif %}{{resultInt | float / 10}}"
device_class: temperature
unit_of_measurement: "°C"
temp_pok:
friendly_name: "Temperatura w pokoju"
value_template: "{% set value = state_attr('sensor.cmi', 'regs')['0b4b'] %}{% set str= value[2:4] + value[0:2] %}{% set resultInt = str | int(base=16) %}{% if resultInt | bitwise_and(0x8000) > 0 %}{% set resultInt = resultInt - 0x10000 %}{% endif %}{{resultInt | float / 10}}"
device_class: temperature
unit_of_measurement: "°C"
temp_zewn:
friendly_name: "Temperatura zewnętrzna"
value_template: "{% set value = state_attr('sensor.cmi', 'regs')['0b4c'] %}{% set str= value[2:4] + value[0:2] %}{% set resultInt = str | int(base=16) %}{% if resultInt | bitwise_and(0x8000) > 0 %}{% set resultInt = resultInt - 0x10000 %}{% endif %}{{resultInt | float / 10}}"
device_class: temperature
unit_of_measurement: "°C"
moc:
friendly_name: "Moc"
value_template: "{% set value = state_attr('sensor.cmi', 'regs')['0b46'] %}{% set str= value[2:4] + value[0:2] %}{% set resultInt = str | int(base=16) %}{% if resultInt | bitwise_and(0x8000) > 0 %}{% set resultInt = resultInt - 0x10000 %}{% endif %}{{resultInt | float / 10}}"
device_class: power
unit_of_measurement: "kW"
cisnienie:
friendly_name: "Ciśnienie"
value_template: "{% set value = state_attr('sensor.cmi', 'regs')['0b4e'] %}{% set str= value[2:4] + value[0:2] %}{% set resultInt = str | int(base=16) %}{% if resultInt | bitwise_and(0x8000) > 0 %}{% set resultInt = resultInt - 0x10000 %}{% endif %}{{resultInt | float / 100}}"
device_class: pressure
unit_of_measurement: "bar"
przeplyw:
friendly_name: "Przepływ wody"
value_template: "{% set value = state_attr('sensor.cmi', 'regs')['0b4f'] %}{% set str= value[2:4] + value[0:2] %}{% set resultInt = str | int(base=16) %}{% if resultInt | bitwise_and(0x8000) > 0 %}{% set resultInt = resultInt - 0x10000 %}{% endif %}{{resultInt | float / 10}}"
device_class: gas
unit_of_measurement: "L"
Jeżeli wszystko się waliduje, to możemy już zdefinowanych nowych sensorów użyć w Home Assistant to pokazywania aktualnych wartości.
Warto dodatkowo zintegrować smart termostaty - polecam takie od Tuya, lub dowolny wariant TS0601 - dla potrzeb HA i integracji sterującej mają najwięcej możliwości.
Do sterowania temperaturą w pokojach polecam nie polegać na wewnętrznych pomiarach w termostatach ponieważ są one mocno niedokładne oraz ciężko je skonfigurować w Home Assistant. Natomiast rewelacyjną alternatywą, która robi wszystko to co sam termostat, ale dodatkowo korzysta z zewnętrznych czujników pokojowych temperatury i wilgotności, czujników temp. zewnętrznej (np. ten od Kospela), oraz integracji pogodowych czy czujników otwarcia okien - Better Thermostat: https://github.com/KartoffelToby/better_thermostat, wraz z dodatkową karta dla UI: https://github.com/KartoffelToby/better-thermostat-ui-card
Integracja jest na razie w wersji beta w repozytorium HACS, ale u mnie sprawdza sie rewelacyjnie.
Polecane komponenty zewnętrzne:
Jeżeli będzie zainteresowanie, mogę napisać w kolejnych postach jak skonfigurować termostaty oraz Better Thermostat, tak aby znacząco oszczędzić energię używaną do ogrzania domu przez kocioł elektryczny.