TČ od Ac-Heating a HomeAssistant

Zkoumal jsem jak dostat hodnoty z TČ od AC-Heating a možnosti jsou dvě:

  1. přes protokol ModBusTCP
  2. čtením hodnot z http://<tc_ip>/MAIN1.XML a http://<tc_ip>/STAVJED1.XML

Podpora AC-Heating zmínila pouze možnost č. 1. a poslala mi dokument s popisem ModbusTCP pro
xCC2. S ModBus nemám žádnou zkušenost ale hlavně tento přístup nemá metriku která mě zajímá a to aktuální spotřebu TČ.
By default se tato metrika nezobrazuje ani v UI a je potřeba, aby to podpora povolila na TČ. Pak se v UI (http://<tc_ip>/stavjed.xml?tab=1) začne zobrazovat i pár dalších metrik. Navíc jde o spotřebu na všech fázích (mé TČ je 3f), dle podpory to TČ neumí, ale to nevadí.

Bod 2. je hack ale, funguje a dostaneme z něj vše co je dostupné v UI a možná i víc.

Já jsem si vystačil jen s daty z http://<tc_ip>/STAVJED1.XML a zde je popis jak je dostat ho HA:

  • Requesty na lokální adresu TČ vyžadují přítomnost cookie SoftPLC=11046282', které funguje jako lame autentifikace. Cookie se vytvoří po přihlášení do UI a nastaví se mu expirace. Pokud tedy vytvoříme cookie bez expirace, jsme v pohodě:

curl --location 'http://10.0.0.15/STAVJED1.XML' --header 'Cookie: SoftPLC=11046282'

10.0.0.15 je lokální IP adresa TČ; doporučuju nastavit pevnou IP (na TČ) a ne DHCP

Detaily cookie neznám, ale není třeba, neboť takto to funguje už víc jak týden.

  • v HA se mi nedařilo vytvořit REST senzor tak dokázal zpracovat XML, tak jsem napsal jednoduchý Python skript, který načte data, upravý a a vrátí jako JSON:
import requests, json, xml.etree.ElementTree as ET

url = "http://10.0.0.15/STAVJED1.XML"
cookies = {"SoftPLC": "18241524"}

conv_dict = {
    "SVENKU" : "outside-temperature",
    "SNAZEV1": "type",
    "SNAZEV2" : "name",
    "SCHYBA" : "has-error",
    "SZAPNUTO" : "is-turned-on",
    "TCSTAV0-FANL" : "fan-lower-rpm",
    "TCSTAV0-TCJ" : "condensate-temperature",
    "TCSTAV0-TS" : "suction-temperature",
    "TCSTAV0-TD" : "displacement-temperature",
    "TCSTAV0-TE" : "evaporator-temperature",
    "TCSTAV0-PROUD" : "current",
    "TCSTAV0-PRIKON" : "power-consumption",
    "TCSTAV0-VYKON" : "power-output",
    "TCMOTOHODINY0" : "running-hours",
}

response = requests.get(url, cookies=cookies)
if response.status_code == 200:
    xml_data = response.content
    root = ET.fromstring(xml_data)
    inputs = root.findall('.//INPUT')

    data_dict = {}
    for elem in inputs:
        if elem.attrib['P'] in conv_dict:
            data_dict[conv_dict[elem.attrib['P']]] = elem.attrib['VALUE']

    print(json.dumps(data_dict))
else:
    print(f"Failed to retrieve data from {url}. Error code: {response.status_code}")

zde je pak senzor (definice v configuration.yaml):

command_line:
  - sensor:
      name: AC Heating XCC2
      unique_id: sensor.ac_heating_xcc2
      command: "python3 /config/scripts/get_ac-heating_xcc2.py"
      value_template: "{{ value_json.type }}"
      json_attributes:
        - outside-temperature
        - name
        - has-error
        - is-turned-on
        - fan-lower-rpm
        - condensate-temperature
        - suction-temperature
        - displacement-temperature
        - evaporator-temperature
        - current
        - power-consumption
        - power-output
        - running-hours

V entities pak máme všechny sensory co jsem si nakonfigurovali ve skriptu:

@skorunka pěkná práce! Ten proud/power je jen za tu jednotku TC, je to tak? Spotřebu topných tyčí v bojleru to neměří?

ACZdravím, ano, je to celé TČ, všechny tři fáze dohromady. Metriky pro externi tyce jsem nenasel. Je ale mozne, ze budou zapoctene v te metrice TC. Zkusim napsat dotaz na podporu AC-H.

@skorunka díky za perfektní čistou implementaci takového hacku :slight_smile:
Zřejmě mám jinou revizi XCC jednotky, takže bylo potřeba adaptovat názvy proměnných při čtení XML.

Ale jak jsi docílil toho že máš senzor pro každý atribut toho command_line sensoru?
Nenapadá mě jiný způsob než pro každý vytvářet samostatný template jako tento:

template:
  - sensor:
      unique_id: sensor.ac_heating_xcc_heatpump-power-percentage
      name: "Heatpump Power"
      state: "{{ state_attr('sensor.ac_heating_xcc', 'heatpump-power-percentage') | default('unknown') }}"
      unit_of_measurement: "%"

Ale pak mi nesedí typ integrace, u tebe vidím Sensor, já mám Template

@ondraondra Zdravim, templaty jsem nevytvarel Sensory se sam objevili, melo by to byt diky te definici command_line.

Taky se mi vytvoril jen jeden sensor s temi prekladanymi atributy, coz odpovida te definici. value_template obsahuje natvrdo typ cerpadla. Rekl bych ze screeny neodpovidaji uvedenemu scriptu a konfiguraci sensoru.
@skorunka jakou verzi HA pouzivas?
Diky

Ahoj, je mozne pokud mate jiny typ cerpadla, tak TC posila jine klice a je treba upravit mapovaci tabulku. Ja mam TC Convert AW12/R32.

Zdravím, je to OT, ale:
Jste spokojeni s TC od AC Heating?
Řešil jste i integraci ovládání do HA? Teplotní setpoint, ovládání ventilu, TUV atd…

Jsem ve fázi poptávek a tohle je pro mě docela klíčové…

Dobrý den, s TČ jsem spokojený. Bohužel žádná oficiální integrace s HA neexistuje. Jediné co lze, tak je “vykrást” hodnoty z interního UI TČ.

@skorunka @waclaw66 Tak jsem bastlil a bastlil, az jsem integraci nabastlil. Zatim to je velmi ranna faze, funguje to tak, ze to scrapuje stranky tak, jak je zde popisovano, akorat jsem to (za pomoci jeste nejakeho skriptu ktery nekde nekdo napsal) dotahl tak daleko, ze si to uchovava cookie a pamatuje si to prihlaseni, takze je to o neco robustnejsi, sviznejsi atd. Pokud nebude fungovat, dejte vedet, rad oddebuguju a vyladim. Zatim to nacita anglicke nazvy promennych, a muzete dokonce entity menit, takze muzete treba menit pozadovanou teplotu TUV na zaklade teploty venku. Instaluje se to pres HACS a ‘custom repository’

Dobrý den,

Tč lze integrovat do HA skrze protokol Modbus TCP. Lze ovládat setpointy okruhů, TUV atd.

Spotřeba vyčtená skrze “webové rozhraní” nezahrnuje spotřebu elektrických tyčí ani příslušenství (oběhová čerpadla, ventily atd), jedná se pouze o spotřebu venkovní jednotky (kompresor + ventilátory).

Příkon venkovní jednotky bude doplněn na modbusTCP v další verzi sw xCC. Doporučuji na něho přejít. Nejsem si teď jistý, ale je pravděpodobné, že po restartu Tč (výpadek napájení) přestane takto vytvořené coockie fungovat a bude nutné vytvořit nové.

Rád zodpovím další případné dotazy.

Zdravím, máte k tomu nějaké examples pro HA? Děkuji.

Dobrý den,

bohužel aktuálně žádný příklad pro HA nemáme. V budoucnu jej plánujeme vytvořit. Aktuálně Vám mohu poradit jak ovládat jednotlivé funkce. Přímo s HA zkušenosti nemam, ale v podstatě pokud se připojíte na IP adresu TČ přes zmíněný modbus, můžete začít vyčítat jednotlivé registry dle potřeby.

Nenašel jsem zde možnost přiložit soubor. Pokud mi napíšete email, mohu Vám zaslat aktuální mapu modbus registrů. V případě, že by jste potřebvoal poradit jak dosáhnout konkrétního úkolu (něco vypnout/zapnout) dejtě vědět. Poradím Vám konkrétní registry.

Případně mě kontaktujte na emailu mduschek (zavináč) ac-heating.cz

Dobrý den,

řešil jsem též integraci mého TČ AC Heating s regulací XCC do HA, po neúspěšných pokusech přes webové rozhraní jsem kontaktoval technickou podporu kde mi poslali popis registů, následně mi aktualizovali FW v PLC (také jse dostával nesmyslné hodnoty z registů) a teď mám funkční integraci v HA přes Modbus TCP.

MN