Integrasjon av HeatIt Z-TRM3 i HA via fimp-mqtt og mosquitto

Jeg har gjennom masse knoting fått opp en slags integrasjon av Heatit Z-TRM3 z-wave termostater til home assistant via fimp-mqtt koblet opp mot HA sin mosquitto. Om noen er interessert, og ikke vil finne opp hjulet igjen, kan jeg investere tiden i å skrive det ned :slight_smile:

Har begynt å eksperimentere med dette nå, og ser at det blir litt knoting, ja. Alt du evt. har anledning til å dele av informasjon her ville blitt høyt verdsatt :slight_smile:

Sorry for veeldig sent svar - jeg hadde ikke epostnotification…
Om du har fått enablet futurehome fimp og koblet HA rett på den - eller via morquitto bridge, så er det jeg synes var vanskeligst ha template config…
Her er min HA 2023.2.2 config:

mqtt:
  climate:
    - name: "Stue" #13 er stue 12 er spisestue
      temperature_state_topic: "pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:thermostat/ad:13_1"
      temperature_state_template: "{{value_json.val['temp']}}"
      current_temperature_topic: "pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:sensor_temp/ad:13_4"
      current_temperature_template: "{{ value_json.val }}"
      # Received message on pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:sensor_temp/ad:13_4: b'{"ctime":"2022-01-14T20:00:55+0100","props":{"unit":"C"},"serv":"sensor_temp","tags":[],"type":"evt.sensor.report","val":21.7999992370605,"val_t":"float"}'
      mode_state_topic: "pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:thermostat/ad:13_1"
      mode_state_template: >
        {% if value_json is defined and value_json.type == "evt.setpoint.report" %}
          {{ value_json.val["type"] }}
        {% else %}
          "off"
        {% endif %}
      temperature_command_topic: "pt:j1/mt:cmd/rt:dev/rn:zw/ad:1/sv:thermostat/ad:13_1"
      temperature_command_template: >-
        {% set json =
        {"corid":"",
        "ctime":now().strftime("%Y-%m-%dT%H:%M:%S%z"),
        "props":{},
        "src":"HA",
        "serv":"thermostat",
        "tags":[],
        "type":"cmd.setpoint.set",
        "uid":"",
        "val":
          {"temp":value|string,
          "type":"heat",
          "unit":"C"},
        "val_t":"str_map",
        "ver":"1"} %}
        {{ json | tojson }}
      temperature_unit: "C"
      modes: ["heat","off","cool"]
      temp_step: 0.5
    - name: "Spisestue" #13 er stue 12 er spisestue
      temperature_state_topic: "pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:thermostat/ad:12_1"
      temperature_state_template: "{{value_json.val['temp']}}"
      current_temperature_topic: "pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:sensor_temp/ad:12_4"
      current_temperature_template: "{{ value_json.val }}"
      mode_state_topic: "pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:thermostat/ad:12_1"
      mode_state_template: >
       {% if value_json is defined and value_json.type =="evt.setpoint.report" %}
         {{ value_json.val["type"]  }}
       {% else %}
         "off"
       {% endif %}
      temperature_command_topic: "pt:j1/mt:cmd/rt:dev/rn:zw/ad:1/sv:thermostat/ad:12_1"
      temperature_command_template: >-
       {% set json =
       {"corid":"",
       "ctime":now().strftime("%Y-%m-%dT%H:%M:%S%z"),
       "props":{},
       "src":"HA",
       "serv":"thermostat",
       "tags":[],
       "type":"cmd.setpoint.set",
       "uid":"",
       "val":
         {"temp":value|string,
         "type":"heat",
         "unit":"C"},
       "val_t":"str_map",
       "ver":"1"} %}
       {{ json | tojson }}
      temperature_unit: "C"
      modes: ["heat","off","cool"]
      temp_step: 0.5
  sensor:
    - name: "Stue gulvvarme W"
      state_topic: "pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:meter_elec/ad:13_1"
      unit_of_measurement: "W"
      unique_id: "stue_gulvvarme_w"
      device_class: energy
      value_template: >
        {% if value_json is defined and value_json.props["unit"] =="W" %}
          {{ value_json.val | round(4) }}
        {% else %}
          {{ states('sensor.stue_gulvvarme_w') }}
        {% endif %}
    - name: "Stue gulvvarme kWh"
      state_topic: "pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:meter_elec/ad:13_1"
      unit_of_measurement: "kWh"
      device_class: energy
      unique_id: "stue_gulvvarme_kwh"
      value_template: >
        {% if value_json is defined and value_json.props["unit"] =="kWh" %}
          {{ value_json.val | round(4) }}
        {% else %}
          {{ states('sensor.stue_gulvvarme_kwh') }}
        {% endif %}
    - name: "Stue temperatur"
      unit_of_measurement: "C"
      unique_id: "stue_temperatur"
      state_topic: "pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:sensor_temp/ad:13_2"
      value_template: "{{ value_json.val  | round(4) }}"
    - name: "Spisestue gulvvarme W"
      state_topic: "pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:meter_elec/ad:12_1"
      unit_of_measurement: "W"
      device_class: energy
      unique_id: "spisestue_gulvvarme_w"
      value_template: >
        {% if value_json is defined and value_json.props["unit"] =="W" %}
          {{ value_json.val | round(4) }}
        {% else %}
          {{ states('sensor.spisestue_gulvvarme_w') }}
        {% endif %}
    - name: "Spisestue gulvvarme kWh"
      state_topic: "pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:meter_elec/ad:12_1"
      unit_of_measurement: "kWh"
      device_class: energy
      unique_id: "spisestue_gulvvarme_kwh"
      value_template: >
        {% if value_json is defined and value_json.props["unit"] =="kWh" %}
          {{ value_json.val | round(4) }}
        {% else %}
          {{ states('sensor.spisestue_gulvvarme_kwh') }}
        {% endif %}
    - name: "Spisestue temperatur"
      unit_of_measurement: "C"
      unique_id: "spisestue_temperatur"
      state_topic: "pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:sensor_temp/ad:12_2"
      value_template: "{{ value_json.val | round(4) }}"

Jeg brukte MQTT explorer og futurehome appen for å finne ut av IDene (at 13 var stue hos meg og 12 var spisestue) da forstår man fort configen over.

MTP mosquitto har jeg både HA og mosquitto i docker (litt info her: Configuring the Mosquitto MQTT Docker container for use with Home Assistant – Home Automation Guy , jeg har samme minus portainer delen) - satt fimp api bruker og passord… så er min mosquitto conf:

persistence true
persistence_location /mosquitto/data/

log_dest stdout
log_dest file /mosquitto/log/mosquitto.log
log_type warning
log_timestamp true
connection_messages true

listener 1883

## Authentication ##
allow_anonymous false
password_file /mosquitto/config/password.txt

connection fimp
address IP_TIL_HUB:1884
remote_username FIMPBRUKER
remote_password FIMPPASSORD
topic # out 0
topic # in 0

try_private false

“topic …” delen er det som kopierer all info fra futurehome hubben til mosquitto - så legger du bare inn MQTT integration i HA (se link over) - og legger en tilpasset (til ditt oppsett) versjon av onfigen i forrige post inn i configuration.yaml til homeassistant - da vil du få noen climate entites.

Her er “my take” på dette. :slightly_smiling_face:

climate:
 - name: "Bad"
   temperature_state_topic: "pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:thermostat/ad:6_1"
   temperature_state_template: >
    {% if value_json is defined and value_json.type == "evt.setpoint.report" %}
      {{ value_json.val["temp"] }}
    {% endif %}
   
   current_temperature_topic: "pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:sensor_temp/ad:6_4"
   current_temperature_template: "{{ value_json.val }}"
   
   mode_state_topic: "pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:thermostat/ad:6_1"
   mode_state_template: >
    {% if value_json is defined and value_json.type == "evt.mode.report" %}
      {{ value_json.val }}
    {% endif %}
    
   action_topic: "pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:meter_elec/ad:6_1"
   action_template: >
    {% if value_json is defined and value_json.props["unit"] =="W" and value_json.val >= 10 %}
      heating
    {% elif value_json is defined and value_json.props["unit"] =="W" and value_json.val < 10 %}
      idle
    {% endif %}
    
   temperature_command_topic: "pt:j1/mt:cmd/rt:dev/rn:zw/ad:1/sv:thermostat/ad:6_0"
   temperature_command_template: >-
    {% set json =
    {"corid":"",
    "props":{},
    "src":"HA",
    "serv":"thermostat",
    "tags":[],
    "type":"cmd.setpoint.set",
    "uid":"",
    "val":
      {"temp":value|string,
      "type":"heat",
      "unit":"C"},
    "val_t":"str_map",
    "ver":"1"} %}
    {{ json | tojson }}
    
   mode_command_topic: "pt:j1/mt:cmd/rt:dev/rn:zw/ad:1/sv:thermostat/ad:6_0"
   mode_command_template: >-
    {% set json =
    {"corid":"",
    "ctime":now().strftime("%Y-%m-%dT%H:%M:%S%z"),
    "props":{},
    "src":"HA",
    "serv":"thermostat",
    "tags":[],
    "type":"cmd.mode.set",
    "uid":"",
    "val": value|string,
    "val_t":"string"
    } %}
    {{ json | tojson }}
    
   temperature_unit: "C"
   modes: ["heat","off"]
   temp_step: 0.5
   max_temp: 30
   min_temp: 15

Kan sikkert finpusses litt mer, men nå funker’n i alle fall.

Hei :slight_smile:

Løst: Nå virker det. Brukerfeil. Jeg måtte trykke på “Heat” for å kunne sette temperatur.

Jeg har også forsøkt å få dette til å virke, men når jeg testet med begge deres kode fikk jeg feilmelding om at " This entity does not have a unique ID".

For å forsøke å løse dette la jeg til feltet unique_id: “fh_44_thermostat” under name. Da ble den lagt inn.

Problemet nå er at dashboardet kan vise temperatur, men jeg kan ikke sette temperatur. Noen som har noe forslag til hvordan løse det?

Hei, er det noen som kan hjelpe meg med å få til den samme MQTT integrasjonen fra Home Assistant for Heatit - Z-Water også?

Jeg har gulvvarme som styres av Heatit - Z-Wave. Jeg har satt opp noen kanaler fra Heatit - Z-Water sammen med en Aeotec sensor i samme rom i FH.

Heatit - Z-Wave er en av eller på bryter for vannbåren gulvvarme som styres av om ønsket temperatur er oppnådd ut fra temperaturen i rommet mål med Aeotec sensor.

Har forsøkt å titte litt i message stream på Thingsplex når jeg endrer gulvvarmen i appen. Men jeg klarer ikke helt å få dette over til noe fornuftig MQTT kode jeg kan legge inn i Home Assistant.

Jeg kan manuelt sette ny temperatur ved å gjenbruke denne koden

Men kan den strippes ned og kan den benyttes fra HA for å sette ønsket temperatur?

{
  "serv": "vinculum",
  "type": "evt.pd7.notify",
  "val_t": "object",
  "val": {
    "changes": {
      "heating": {
        "desired": 23,
        "target": 23
      }
    },
    "cmd": "set",
    "component": "room",
    "id": 1,
    "mode": "home",
    "param": {
      "alias": "Stue",
      "area": 2,
      "client": {
        "name": "Stue"
      },
      "id": 1,
      "outside": false,
      "param": {
        "heating": {
          "actuator": true,
          "desired": 23,
          "humidity": 21,
          "power": "off",
          "target": 23,
          "temperature": 24.1000003814697,
          "thermostat": false
        },
        "lighting": {
          "illuminance": 0
        },
        "security": {
          "mode": null,
          "presence": true
        },
        "sensors": [
          "temperature",
          "presence",
          "illuminance",
          "humidity"
        ],
        "shading": {},
        "triggers": {
          "magnetHeat": 19,
          "motionLight": {
            "all": {
              "devices": {},
              "enabled": false,
              "timeout": 300000
            },
            "sleep": {
              "devices": {},
              "enabled": false,
              "timeout": 300000
            }
          }
        }
      },
      "type": "living"
    }
  },
  "props": {},
  "tags": null,
  "src": "-",
  "ver": "1",
  "uid": "7db3cd56-77f6-4c36-b71d-b4e5b7add3c4",
  "topic": "pt:j1/mt:evt/rt:app/rn:vinculum/ad:1"
}

Dersom du setter ny set-temp direkte på enheten og ikke rom så får du en MQTT melding tilsvarende cmd.setpoint.set

Det hadde nok hjulpet, men er det mulig å bruke set-temp direkte på enheten når jeg ikke har noen termostat? Hvilken enhet skal jeg da bruke set-temp mot? Lager FH en “dummy” termostat for rommet jeg kan sende til når jeg har samlet en heater og en temp sensor i samme rom?

image

image

Det stemmer - dersom du har en enhet satt som heater og en temp sensor i samme rom, så “oppretter FH en ‘dummy’ termostat for rommet”. (Jeg tok utgangspunkt i tittelen på tråden når jeg svarte :crazy_face:)
Uansett så er meldingen du sendte i posten over fra eventet og ikke requesten til å endre set-temp på rommet. Da kan du se at det er desired som blir endret for det rommet.