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.