Skip to content

HomeAssistant

Ben Campbell edited this page Jul 21, 2024 · 34 revisions

HCPY acts as an MQTT bridge between HomeConnect devices. HomeAssistant can integrate this by creating entities using the package yaml configuration (wrap all sensors under an mqtt: top-level subject. This can be loaded by the main HA configuration.yaml with the following entry:

package: !include dishwasher.yaml
package: !include hood.yaml

There is no need to reboot HA after modifying these files. They can be reloaded on the fly within the developer tools menu.

Alternatively include the following directly in mqtt.yaml and include with:

mqtt: !include mqtt.yaml

Example Entities

The following examples could be used as a basis for the entities in HomeAssistant. Further template sensors may need to be created to retrieve state_attr attributes.

Extractor Fan

Neff N90 D96IKW1SOB/04
fan:
  - name: "Hood"
    unique_id: "hood_fan_SERIAL"
    state_topic: "homeconnect/hood/state"
    state_value_template: "{{ value_json.PowerState }}"
    command_topic: "homeconnect/hood/set"
    command_template: "{{ iif(value == 'On', '{\"uid\":539,\"value\":2}', '{\"uid\":539,\"value\":1}') }}"
    json_attributes_topic: "homeconnect/hood/state"
    availability:
      - topic:  "homeconnect/LWT"
      - topic:  "homeconnect/hood/LWT"
    availability_mode: all
    payload_on: "On"
    payload_off: "Off"
    device:
      identifiers: "extractor_fan_hood_SERIAL"
      name: "Hood"
      manufacturer: "Neff"
      model: "N90"
      serial_number: "SERIAL"
light:
  - name: "Hood Work Light"
    schema: template
    state_topic: "homeconnect/hood/state"
    state_template: "{{ iif(value_json.Lighting, 'on', 'off') }}"
    availability:
      - topic:  "homeconnect/LWT"
      - topic:  "homeconnect/hood/LWT"
    availability_mode: all
    brightness_template: >
  brightness_template: >
      {% if value_json.AmbientLightEnabled and value_json.AmbientLightColor == "CustomColor" %}
        255
      {% elif value_json.AmbientLightEnabled %}
        {{ value_json.AmbientLightBrightness | float(0) | multiply(2.55) | round(0) }}
      {% else %}
        0
      {% endif %}
    command_topic: "homeconnect/hood/set"
    command_on_template: >
        {%- if brightness is defined -%}
          {"uid":53254,"value":{{ [10,brightness | float | multiply(0.39215686) | round(0)]|max }} }
        {%- else -%}
          {"uid":53253,"value":true}
        {%- endif -%}
    command_off_template: '{"uid":53253,"value":false}'
    device:
      identifiers: "extractor_fan_hood_SERIAL"
  - name: "Hood Ambient Light"
    schema: template
    state_topic: "homeconnect/hood/state"
    state_template: "{{ iif(value_json.AmbientLightEnabled, 'on', 'off') }}"
    availability:
      - topic:  "homeconnect/LWT"
    brightness_template: "{{ value_json.AmbientLightBrightness | float(0) | multiply(2.55) | round(0) }}"
    command_topic: "homeconnect/hood/set"
    command_on_template: >
        {%- if brightness is defined -%}
          [{"uid":588,"value":{{ [10,brightness | float | multiply(0.39215686) | round(0)]|max }} }]
        {%- elif red is defined -%}
         [{"uid":589,"value":1},{"uid":590,"value":"{{ '#%02x%02x%02x' % (red,green,blue) }}"}]
        {%- else -%}
          [{"uid":587,"value":true}]
        {%- endif -%}
    command_off_template: '{"uid":587,"value":false}'
    # There are multiple preset colours indicated by Color2
    red_template: >
      {%- if value_json.AmbientLightColor == "CustomColor" -%}
        {{ value_json.AmbientLightCustomColor.strip('#')[:2] | int(base=16) }}
      {%- else -%}
        0
      {%- endif -%}
    green_template: >
      {%- if value_json.AmbientLightColor == "CustomColor" -%}
        {{ value_json.AmbientLightCustomColor.strip('#')[2:4] | int(base=16) }}
      {%- else -%}
        0
      {%- endif -%}
    blue_template: >
      {%- if value_json.AmbientLightColor == "CustomColor" -%}
        {{ value_json.AmbientLightCustomColor.strip('#')[4:6] | int(base=16) }}
      {%- else -%}
        0
      {%- endif -%}
    device:
      identifiers: "extractor_fan_hood_SERIAL"

Freezer

Neff N50 GU7212FE0G/01
binary_sensor:
  - name: "Door"
    unique_id: "freezer_door_SERIAL"
    state_topic: "homeconnect/freezer/state"
    value_template: "{{ value_json.Freezer }}"
    payload_on: "Open"
    payload_off: "Closed"
    device_class: door
    json_attributes_topic: "homeconnect/freezer/state"
    device:
      identifiers: "freezer_SERIAL"
      name: "Freezer"
      manufacturer: "Neff"
      model: "N50 GU7212FE0G/01"
      serial_number: "SERIAL"
    availability:
      - topic:  "homeconnect/LWT"
      - topic:  "homeconnect/freezer/LWT"
    availability_mode: all
switch:
  - name: "Eco Mode"
    unique_id: "freezer_eco_mode_SERIAL"
    state_topic: "homeconnect/freezer/state"
    state_off: false
    state_on: true
    payload_on: '[{"uid":8224,"value":true}]'
    payload_off: '[{"uid":8224,"value":false}]'
    command_topic: "homeconnect/freezer/set"
    value_template: "{{ value_json.EcoMode }}"
    availability:
      - topic:  "homeconnect/LWT"
      - topic:  "homeconnect/freezer/LWT"
    availability_mode: all
    device:
      identifiers: "freezer_SERIAL"
  - name: "Super Mode"
    unique_id: "freezer_super_mode_SERIAL"
    state_topic: "homeconnect/freezer/state"
    state_off: false
    state_on: true
    payload_on: '[{"uid":8208,"value":true}]'
    payload_off: '[{"uid":8208,"value":false}]'
    command_topic: "homeconnect/freezer/set"
    value_template: "{{ value_json.SuperMode }}"
    availability:
      - topic:  "homeconnect/LWT"
      - topic:  "homeconnect/freezer/LWT"
    availability_mode: all
    device:
      identifiers: "freezer_SERIAL"
number:
  - name: "Set Point Temperature"
    unique_id: "freezer_set_point_temperature_SERIAL"
    state_topic: "homeconnect/freezer/state"
    value_template: "{{ value_json.SetpointTemperature }}"
    command_topic: "homeconnect/freezer/set"
    command_template: "[{\"uid\":8198,\"value\": {{ value }} }]"
    min: -26
    max: -16
    icon: mdi:snowflake-thermometer
    unit_of_measurement: "°C"
    availability:
      - topic:  "homeconnect/LWT"
      - topic:  "homeconnect/freezer/LWT"
    availability_mode: all
    device:
      identifiers: "freezer_SERIAL"

Refrigerator

Neff N90 KI8815OD0/01
binary_sensor:
  - name: "Fridge Door"
    state_topic: "homeconnect/refrigerator/state"
    value_template: "{{ value_json.DoorState }}" # Also Refrigerator
    payload_on: "Open"
    payload_off: "Closed"
    device_class: door
    json_attributes_topic: "homeconnect/refrigerator/state"
    availability:
      - topic:  "homeconnect/LWT"
      - topic:  "homeconnect/freezer/LWT"
    availability_mode: all
    device:
      identifiers: "fridge_SERIAL"
      name: "Refrigerator"
      manufacturer: "Neff"
      model: "N90 KI8815OD0/01"
      serial_number: "SERIAL"
number:
  - name: "Set Point Temperature"
    unique_id: "fridge_set_point_temperature"
    state_topic: "homeconnect/refrigerator/state"
    value_template: "{{ value_json.SetpointTemperature }}"
    command_topic: "homeconnect/refrigerator/set"
    command_template: "[{\"uid\":8199,\"value\": {{ value }} }]"
    min: 3
    max: 8
    icon: mdi:snowflake-thermometer
    unit_of_measurement: "°C"
    availability:
      - topic:  "homeconnect/LWT"
      - topic:  "homeconnect/freezer/LWT"
    availability_mode: all
    device:
      identifiers: "fridge_SERIAL"
switch:
  - name: "Super Mode"
    unique_id: "fridge_super_mode"
    state_topic: "homeconnect/refrigerator/state"
    state_off: false
    state_on: true
    payload_on: '[{"uid":8209,"value":true}]'
    payload_off: '[{"uid":8209,"value":false}]'
    command_topic: "homeconnect/refrigerator/set"
    value_template: "{{ value_json.SuperMode }}"
    availability:
      - topic:  "homeconnect/LWT"
      - topic:  "homeconnect/freezer/LWT"
    availability_mode: all
    device:
      identifiers: "fridge_SERIAL"

Dishwasher

Neff N90 S189YCX02E/38

Also works with:

  • Bosch SMV88UX36E
  • Bosch SMU4ECI15S
switch:
  - name: "Power State"
    unique_id: "dishwasher_powerstate_SERIAL"
    icon: mdi:dishwasher
    state_topic: "homeconnect/dishwasher/state"
    value_template: "{{ value_json.PowerState|default('unavailable') }}"
    availability:
      - topic:  "homeconnect/LWT"
      - topic:  "homeconnect/dishwasher/LWT"
    availability_mode: all
    state_off: "Off"
    state_on: "On"
    payload_on: '[{"uid":539,"value":2}]'
    payload_off: '[{"uid":539,"value":1}]'
    command_topic: "homeconnect/dishwasher/set"
    json_attributes_topic: "homeconnect/dishwasher/state"
    device:
      identifiers: "dishwasher_SERIAL"
      name: "Dishwasher"
      manufacturer: "Neff"
      model: "N90 S189YCX02E/38"
      serial_number: "SERIAL"

# This is set 4103 on Neff N90 S189YCX02E/38
  - name: "EcoDry"
    unique_id: "dishwasher_ecodry"
    icon: mdi:office-building-cog
    state_topic: "homeconnect/dishwasher/state"
    state_off: false
    state_on: true
    payload_on: '[{"uid":5134,"value":true}]'
    payload_off: '[{"uid":5134,"value":false}]'
    command_topic: "homeconnect/dishwasher/set"
    value_template: "{{ value_json.EcoDry|default('unavailable') }}"
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

  - name: "SilenceOnDemand"
    unique_id: "dishwasher_silenceondemand"
    icon: mdi:office-building-cog
    state_topic: "homeconnect/dishwasher/state"
    state_off: false
    state_on: true
    payload_on: '[{"uid":5136,"value":true}]'
    payload_off: '[{"uid":5136,"value":false}]'
    command_topic: "homeconnect/dishwasher/set"
    value_template: "{{ value_json.SilenceOnDemand|default('unavailable') }}"
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

  - name: "VarioSpeedPlus" # Aka ExtraSpeed
    unique_id: "dishwasher_variospeedplus"
    icon: mdi:office-building-cog
    state_topic: "homeconnect/dishwasher/state"
    state_off: false
    state_on: true
    payload_on: '[{"uid":5127,"value":true}]'
    payload_off: '[{"uid":5127,"value":false}]'
    command_topic: "homeconnect/dishwasher/set"
    value_template: "{{ value_json.VarioSpeedPlus|default('unavailable') }}"
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

  - name: "ExtraDry"
    unique_id: "dishwasher_extradry"
    icon: mdi:office-building-cog
    entity_category: config
    state_topic: "homeconnect/dishwasher/state"
    state_off: false
    state_on: true
    payload_on: '[{"uid":4356,"value":true}]'
    payload_off: '[{"uid":4356,"value":false}]'
    command_topic: "homeconnect/dishwasher/set"
    value_template: "{{ value_json.ExtraDry|default('unavailable') }}"
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

button:
  - name: "Stop"
    unique_id: "dishwasher_extradry"
    icon: mdi:stop
    command_topic: "homeconnect/dishwasher/set"
    command_template: '[{"uid": 512,"value": true}]'
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/dishwasher/state"
        value_template: "{{ 'offline' if value_json.OperationState == 'Ready' else 'online' }}"

number:
  - name: "SilenceOnDemandDefaultTime"
    unique_id: "dishwasher_silenceondemanddefaulttime"
    icon: mdi:timer-play-outline
    entity_category: config
    retain: true
    state_topic: "homeconnect/dishwasher/state"
    value_template: "{{ value_json.SilenceOnDemandDefaultTime|default('unavailable') / 60 }}"
    command_topic: "homeconnect/dishwasher/set"
    command_template: '[{"uid":4382,"value": {{ value * 60 }} }]'
    min: 1
    max: 30
    step: 1
    mode: box
    unit_of_measurement: "min"
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

select:
  - name: "EcoAsDefault"
    unique_id: "dishwasher_ecoasdefault"
    icon: mdi:cog
    entity_category: config
    retain: true
    command_topic: "homeconnect/dishwasher/set"
    command_template: >
      {% if value == "LastProgram" %}
        [{"uid":4363,"value":0}]
      {% elif value == "EcoAsDefault" %}
        [{"uid":4363,"value":1}]
      {% endif %}
    state_topic: "homeconnect/dishwasher/state"
    value_template: "{{ value_json.EcoAsDefault|default('unavailable') }}"
    options:
      - "LastProgram"
      - "EcoAsDefault"
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

  - name: "DryingAssistantAllPrograms"
    unique_id: "dishwasher_dryingassistantallprograms"
    icon: mdi:cog
    entity_category: config
    retain: true
    command_topic: "homeconnect/dishwasher/set"
    command_template: >
      {% if value == "Off" %}
        [{"uid":4381,"value":0}]
      {% elif value == "AllPrograms" %}
        [{"uid":4381,"value":1}]
      {% elif value == "EcoAsDefault" %}
        [{"uid":4381,"value":2}]
      {% endif %}
    state_topic: "homeconnect/dishwasher/state"
    value_template: "{{ value_json.DryingAssistantAllPrograms|default('unavailable') }}"
    options:
      - "Off"
      - "AllPrograms"
      - "EcoAsDefault"
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

  - name: "RinseAid"
    unique_id: "dishwasher_rinseaid"
    icon: mdi:cog
    entity_category: config
    retain: true
    command_topic: "homeconnect/dishwasher/set"
    command_template: >
      {% if value == "Off" %}
        [{"uid":4354,"value":0}]
      {% elif value == "R01" %}
        [{"uid":4354,"value":1}]
      {% elif value == "R02" %}
        [{"uid":4354,"value":2}]
      {% elif value == "R03" %}
        [{"uid":4354,"value":3}]
      {% elif value == "R04" %}
        [{"uid":4354,"value":4}]
      {% elif value == "R05" %}
        [{"uid":4354,"value":5}]
      {% elif value == "R06" %}
        [{"uid":4354,"value":6}]
      {% endif %}
    state_topic: "homeconnect/dishwasher/state"
    value_template: "{{ value_json.RinseAid|default('unavailable') }}"
    options:
      - "Off"
      - "R01"
      - "R02"
      - "R03"
      - "R04"
      - "R05"
      - "R06"
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

  - name: "SensitivityTurbidity"
    unique_id: "dishwasher_sensitivityturbidity"
    icon: mdi:cog
    entity_category: config
    retain: true
    command_topic: "homeconnect/dishwasher/set"
    command_template: >
      {% if value == "Standard" %}
        [{"uid":4355,"value":0}]
      {% elif value == "Sensitive" %}
        [{"uid":4355,"value":1}]
      {% elif value == "VerySensitive" %}
        [{"uid":4355,"value":2}]
      {% endif %}
    state_topic: "homeconnect/dishwasher/state"
    value_template: "{{ value_json.SensitivityTurbidity|default('unavailable') }}"
    options:
      - "Standard"
      - "Sensitive"
      - "VerySensitive"
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

  - name: "WaterHardness"
    unique_id: "dishwasher_waterhardness"
    icon: mdi:cog
    entity_category: config
    retain: true
    command_topic: "homeconnect/dishwasher/set"
    command_template: >
      {% if value == "H00" %}
        [{"uid":4367,"value":0}]
      {% elif value == "H01" %}
        [{"uid":4367,"value":1}]
      {% elif value == "H02" %}
        [{"uid":4367,"value":2}]
      {% elif value == "H03" %}
        [{"uid":4367,"value":3}]
      {% elif value == "H04" %}
        [{"uid":4367,"value":4}]
      {% elif value == "H05" %}
        [{"uid":4367,"value":5}]
      {% elif value == "H06" %}
        [{"uid":4367,"value":6}]
      {% elif value == "H07" %}
        [{"uid":4367,"value":7}]
      {% endif %}
    state_topic: "homeconnect/dishwasher/state"
    value_template: "{{ value_json.WaterHardness|default('unavailable') }}"
    options:
      - "H00"
      - "H01"
      - "H02"
      - "H03"
      - "H04"
      - "H05"
      - "H06"
      - "H07"
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

binary_sensor:
  - name: "Dishwasher Door"
    unique_id: "dishwasher_door"
    state_topic: "homeconnect/dishwasher/state"
    value_template: "{{ value_json.DoorState }}"
    availability:
      - topic:  "homeconnect/LWT"
      - topic:  "homeconnect/dishwasher/LWT"
    availability_mode: all
    payload_on: "Open"
    payload_off: "Closed"
    device_class: door
    device:
      identifiers: "dishwasher_SERIAL"

  - name: "Remote Control Start Allowed"
    unique_id: "dishwasher_remote_control_start_allowed"
    state_topic: "homeconnect/dishwasher/state"
    value_template: "{{ value_json.RemoteControlStartAllowed|default('unavailable') }}"
    payload_on: true
    payload_off: false
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

  - name: "RemoteControlActive"
    unique_id: "dishwasher_remotecontrolactive"
    icon: mdi:gauge-full
    state_topic: "homeconnect/dishwasher/state"
    value_template: "{{ value_json.RemoteControlActive|default('unavailable') }}"
    payload_on: true
    payload_off: false
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

  - name: "PowerState"
    unique_id: "dishwasher_powerstate"
    icon: mdi:dishwasher
    state_topic: "homeconnect/dishwasher/state"
    value_template: "{{ value_json.PowerState|default('unavailable') }}"
    payload_on: "On"
    payload_off: "Off"
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

  - name: "SpeedOnDemand"
    unique_id: "dishwasher_speedondemand"
    icon: mdi:gauge-full
    state_topic: "homeconnect/dishwasher/state"
    value_template: "{{ value_json.SpeedOnDemand|default('unavailable') }}"
    payload_on: true
    payload_off: false
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

  - name: "SilenceOnDemand"
    unique_id: "dishwasher_silenceondemand"
    icon: mdi:office-building-cog
    state_topic: "homeconnect/dishwasher/state"
    value_template: "{{ value_json.SilenceOnDemand|default('unavailable') }}"
    payload_on: true
    payload_off: false
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

  - name: "EcoDryActive"
    unique_id: "dishwasher_ecodryactive"
    icon: mdi:office-building-cog
    state_topic: "homeconnect/dishwasher/state"
    value_template: "{{ value_json.EcoDryActive|default('unavailable') }}"
    payload_on: true
    payload_off: false
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

sensor:
  - name: "Active Program"
    unique_id: "dishwasher_active_program"
    icon: mdi:dishwasher
    state_topic: "homeconnect/dishwasher/state"
    value_template: >
      {% set program = '{ "8195":"Auto2", "8196":"Eco50", "8197":"Glas40", "8192":"Intensiv70", "8213":"Kurz60", "8215":"MachineCare", "8202":"NightWash", "8200":"PreRinse", "8199":"Quick45"}'|from_json %}
      {{ program[value_json.ActiveProgram|string]|default("None") }}
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

  - name: "Selected Program"
    unique_id: "dishwasher_selected_program"
    icon: mdi:dishwasher
    state_topic: "homeconnect/dishwasher/state"
    value_template: >
      {% set program = '{ "8195":"Auto2", "8196":"Eco50", "8197":"Glas40", "8192":"Intensiv70", "8213":"Kurz60", "8215":"MachineCare", "8202":"NightWash", "8200":"PreRinse", "8199":"Quick45"}'|from_json %}
      {{ program[value_json.SelectedProgram|string]|default("None") }}
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

  - name: "Program Phase"
    unique_id: "dishwasher_program_phase"
    icon: mdi:gauge-full
    state_topic: "homeconnect/dishwasher/state"
    value_template: "{{ value_json.ProgramPhase|default('unavailable') }}"
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

  - name: "Operation State"
    unique_id: "dishwasher_operation_state"
    icon: mdi:gauge-full
    state_topic: "homeconnect/dishwasher/state"
    value_template: "{{ value_json.OperationState|default('unavailable') }}"
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

  - name: "Program Progress"
    unique_id: "dishwasher_program_progress"
    icon: mdi:percent
    unit_of_measurement: "%"
    state_topic: "homeconnect/dishwasher/state"
    value_template: "{{ value_json.ProgramProgress|default('unavailable') }}"
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

  - name: "Remaining Program Time"
    unique_id: "dishwasher_remainingprogramtime"
    icon: mdi:progress-clock
    unit_of_measurement: s
    device_class: duration
    state_topic: "homeconnect/dishwasher/state"
    value_template: "{{ value_json.RemainingProgramTime|default('unavailable') }}"
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

  - name: "Start In Relative"
    unique_id: "dishwasher_start_in_relative"
    icon: mdi:timer-play-outline
    unit_of_measurement: s
    device_class: duration
    state_topic: "homeconnect/dishwasher/state"
    value_template: "{{ value_json.StartInRelative|default('unavailable') }}"
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

  - name: "SilenceOnDemandRemainingTime"
    unique_id: "dishwasher_silenceondemandremainingtime"
    icon: mdi:timer-play-outline
    unit_of_measurement: s
    device_class: duration
    state_topic: "homeconnect/dishwasher/state"
    value_template: "{{ value_json.SilenceOnDemandRemainingTime|default('unavailable') }}"
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

  - name: "EnergyForecast"
    unique_id: "dishwasher_energyforecast"
    icon: mdi:percent
    unit_of_measurement: "%"
    state_topic: "homeconnect/dishwasher/state"
    value_template: "{{ value_json.EnergyForecast|default('unavailable') }}"
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

  - name: "WaterForecast"
    unique_id: "dishwasher_waterforecast"
    icon: mdi:percent
    unit_of_measurement: "%"
    state_topic: "homeconnect/dishwasher/state"
    value_template: "{{ value_json.WaterForecast|default('unavailable') }}"
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all
Model dependent options
switch:  
  - name: "HalfLoad"
    unique_id: "dishwasher_halfload"
    icon: mdi:office-building-cog
    state_topic: "homeconnect/dishwasher/state"
    state_off: false
    state_on: true
    payload_on: '[{"uid":5124,"value":true}]'
    payload_off: '[{"uid":5124,"value":false}]'
    command_topic: "homeconnect/dishwasher/set"
    value_template: "{{ value_json.HalfLoad|default('unavailable') }}"
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

  - name: "ChildLock"
    unique_id: "dishwasher_childlock"
    icon: mdi:tune
    state_topic: "homeconnect/dishwasher/state"
    state_off: false
    state_on: true
    payload_on: '[{"uid":524,"value":true}]'
    payload_off: '[{"uid":524,"value":false}]'
    command_topic: "homeconnect/dishwasher/set"
    value_template: "{{ value_json.ChildLock|default('unavailable') }}"
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

  - name: "EcoDry"
    unique_id: "dishwasher_ecodry"
    icon: mdi:office-building-cog
    state_topic: "homeconnect/dishwasher/state"
    value_template: "{{ value_json.EcoDry|default('unavailable') }}"
    payload_on: true
    payload_off: false
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

binary_sensor:
  - name: "HalfLoad"
    unique_id: "dishwasher_halfload"
    icon: mdi:office-building-cog
    state_topic: "homeconnect/dishwasher/state"
    value_template: "{{ value_json.HalfLoad|default('unavailable') }}"
    payload_on: true
    payload_off: false
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

  - name: "ChildLock"
    unique_id: "dishwasher_childlock"
    icon: mdi:tune
    state_topic: "homeconnect/dishwasher/state"
    value_template: "{{ value_json.ChildLock|default('unavailable') }}"
    payload_on: true
    payload_off: false
    device:
      identifiers: "dishwasher_SERIAL"
    availability:
      - topic: "homeconnect/LWT"
      - topic: "homeconnect/dishwasher/LWT"
    availability_mode: all

Coffee Machine

sensor:
- unique_id: "coffee_machine"
  name: "Coffee Machine"
  state_topic: "homeconnect/coffeemaker/state"
  value_template: "{{ value_json.PowerState }}"
  json_attributes_topic: "homeconnect/coffeemaker/state"
  json_attributes_template: "{{ value_json | tojson }}"
  availability:
    - topic:  "homeconnect/LWT"
    - topic:  "homeconnect/coffeemaker/LWT"
  availability_mode: all

Cook Processor

Bosch Cookit MCC9555DWC
switch:
- name: "Power State"
  unique_id: "cookprocessor_power_state_SERIAL"
  icon: mdi:pot-mix
  state_topic: "homeconnect/cookprocessor/state"
  state_off: "Standby"
  state_on: "On"
  payload_on: '[{"uid":539,"value":2}]'
  payload_off: '[{"uid":539,"value":3}]'
  command_topic: "homeconnect/cookprocessor/set"
  value_template: "{{ value_json.PowerState|default('unavailable') }}"
  device:
    identifiers: "BOSCH-MCC9555DWC-SERIAL"
    name: "Bosch Cookit"
    manufacturer: "BOSCH"
    model: "MCC9555DWC/01"
    serial_number: "SERIAL"
  availability:
    - topic: "homeconnect/LWT"
    - topic: "homeconnect/cookprocessor/LWT"
  availability_mode: all

sensor:
- name: "Operation State"
  unique_id: "cookprocessor_operation_state_SERIAL"
  icon: mdi:gauge-full
  state_topic: "homeconnect/cookprocessor/state"
  value_template: "{{ value_json.OperationState|default('unavailable') }}"
  device:
    identifiers: "BOSCH-MCC9555DWC-SERIAL"
  availability:
    - topic: "homeconnect/LWT"
    - topic: "homeconnect/cookprocessor/LWT"
  availability_mode: all
- name: "Active Program"
  unique_id: "cookprocessor_active_program_SERIAL"
  icon: mdi:pot-mix
  state_topic: "homeconnect/cookprocessor/state"
  value_template: >
    {% set program = '{ "40":"AutomaticProgram", "24":"GuidedProgram", "24577":"ManualProgram", "24578":"Turbo"}'|from_json %}
    {{ program[value_json.ActiveProgram|string]|default("None") }}
  device:
    identifiers: "BOSCH-MCC9555DWC-SERIAL"
  availability:
    - topic: "homeconnect/LWT"
    - topic: "homeconnect/cookprocessor/LWT"
  availability_mode: all

- name: "Selected Program"
  unique_id: "cookprocessor_selected_program_SERIAL"
  icon: mdi:pot-mix
  state_topic: "homeconnect/cookprocessor/state"
  value_template: >
    {% set program = '{ "40":"AutomaticProgram", "24":"GuidedProgram", "24577":"ManualProgram", "24578":"Turbo"}'|from_json %}
    {{ program[value_json.ActiveProgram|string]|default("None") }}
  device:
    identifiers: "BOSCH-MCC9555DWC-SERIAL"
  availability:
    - topic: "homeconnect/LWT"
    - topic: "homeconnect/cookprocessor/LWT"
  availability_mode: all

- name: "Current Step Remaining Time"
  unique_id: "cookprocessor_current_step_remaining_time_SERIAL"
  icon: mdi:progress-clock
  unit_of_measurement: s
  device_class: duration
  state_topic: "homeconnect/cookprocessor/state"
  value_template: "{{ value_json.CurrentStepRemainingTime|default('unavailable') }}"
  device:
    identifiers: "BOSCH-MCC9555DWC-SERIAL"
  availability:
    - topic: "homeconnect/LWT"
    - topic: "homeconnect/cookprocessor/LWT"
  availability_mode: all

- name: "Current Step Progress"
  unique_id: "cookprocessor_current_step_progress_SERIAL"
  icon: mdi:percent
  unit_of_measurement: "%"
  state_topic: "homeconnect/cookprocessor/state"
  value_template: "{{ value_json.CurrentStepProgress|default('unavailable') }}"
  device:
    identifiers: "BOSCH-MCC9555DWC-SERIAL"
  availability:
    - topic: "homeconnect/LWT"
    - topic: "homeconnect/cookprocessor/LWT"
  availability_mode: all

- name: "Total Number Of Steps"
  unique_id: "cookprocessor_total_number_of_steps_SERIAL"
  icon: mdi:playlist-edit
  unit_of_measurement: "steps"
  state_topic: "homeconnect/cookprocessor/state"
  value_template: "{{ value_json.TotalNumberOfSteps|default('unavailable') }}"
  device:
    identifiers: "BOSCH-MCC9555DWC-SERIAL"
  availability:
    - topic: "homeconnect/LWT"
    - topic: "homeconnect/cookprocessor/LWT"
  availability_mode: all

- name: "Current Step Number"
  unique_id: "cookprocessor_current_step_number_SERIAL"
  icon: mdi:playlist-check
  unit_of_measurement: "steps"
  state_topic: "homeconnect/cookprocessor/state"
  value_template: "{{ value_json.CurrentStepNumber|default('unavailable') }}"
  device:
    identifiers: "BOSCH-MCC9555DWC-SERIAL"
  availability:
    - topic: "homeconnect/LWT"
    - topic: "homeconnect/cookprocessor/LWT"
  availability_mode: all

- name: "Program Progress"
  unique_id: "cookprocessor_program_progress_SERIAL"
  icon: mdi:percent
  unit_of_measurement: "%"
  state_topic: "homeconnect/cookprocessor/state"
  value_template: "{{ value_json.ProgramProgress|default('unavailable') }}"
  device:
    identifiers: "BOSCH-MCC9555DWC-SERIAL"
  availability:
    - topic: "homeconnect/LWT"
    - topic: "homeconnect/cookprocessor/LWT"
  availability_mode: all

- name: "Heatup Progress"
  unique_id: "cookprocessor_heatup_progress_SERIAL"
  icon: mdi:thermometer
  unit_of_measurement: "%"
  state_topic: "homeconnect/cookprocessor/state"
  value_template: "{{ value_json.HeatupProgress|default('unavailable') }}"
  device:
    identifiers: "BOSCH-MCC9555DWC-SERIAL"
  availability:
    - topic: "homeconnect/LWT"
    - topic: "homeconnect/cookprocessor/LWT"
  availability_mode: all

Performing Actions

Set

HCPY listens on the prefix/device_name/set topic e.g. homeconnect/coffeemaker/set to apply state changes.

In the devices.json file you can find items that contain readWrite or writeOnly, some of them contain values so you know what to provide:

"539": {
	"name": "BSH.Common.Setting.PowerState",
	"access": "readWrite",
	"available": "true",
	"refCID": "03",
	"refDID": "80",
	"values": {
		"2": "On",
		"3": "Standby"
	}
},

To change the PowerState we need to send a UID of 539 with a value of 2 to turn on the device:

{"uid":539,"value":2}

Within HomeAssistant this can be performed with the following Action in a script or automation:

service: mqtt.publish
metadata: {}
data:
  topic: homeconnect/coffeemaker/set
  payload: '[{"uid":539,"value":2}]'

Multiple values can be set in the array to configure multiple items at the same time.

Active Program

Devices that run programs will listen on prefix/device_name/activeProgram.

The Eco program on a Dishwasher is id 8196, and the StartInRelative option is 558 - this allows us to create a delayed start in 600 seconds in the following example script:

alias: Start Dishwasher Eco Program
sequence:
  - service: mqtt.publish
    metadata: {}
    data:
      topic: homeconnect/dishwasher/activeProgram
      payload: '[{"program":8196,"options":[{"uid":558,"value":600}]}]'
mode: single
icon: mdi:dishwasher

The options array is optional, programs can be triggered with no additional options.

AbortProgram

alias: AbortProgram
sequence:
  - service: mqtt.publish
    metadata: {}
    data:
      topic: homeconnect/dishwasher/set
      payload: '[{"uid": 512,"value": true}]'
mode: single
icon: mdi:dishwasher

Selected Program

Devices that run programs may also listen on prefix/device_name/selectedProgram. This allows a program to be selected but not started, and requires a second call to start the program, or a manual start on the device itself.

alias: Select Dishwasher Eco Program
sequence:
  - service: mqtt.publish
    metadata: {}
    data:
      topic: homeconnect/dishwasher/selectedProgram
      payload: '[{"program":8196}]'
mode: single
icon: mdi:dishwasher

The options array is optional, programs can be triggered with no additional options.