Udskift Zigbee2mqtt Assistant med Home Assistant

Zigbee2mqtt Assistant er et super godt produkt at starte ud med, fordi det giver et visuelt nemt overblik over hele dit Zigbee-netværk, men på sigt, når du har fået noget erfaring med hvordan Zigbee virker, anbefaler jeg at skifte det ud med et simpelt hjemmebygget interface i din Home Assistant – så du også lærer at forstå nogle af de ting der sker bagved de nemme “klik på knapper” i Assistenten.

Ydermere, kan vi også bygge nogle fede funktioner ind, som bl.a. at du får en notifikation når nye enheder joiner dit netværk, når batterierne er ved at være slappe, eller når noget går galt.. (bevares, alt det kan man også, selvom Assistenten er installeret, men det er nu sjovere at bygge det hele selv, fra bunden, ikke?) 🤓

Vores mål med denne guide, er at bygge et interface i vores Home Assistant, som gør det muligt at styre og administrere vores Zigbee2mqtt service direkte fra vores Home Assistant dashboard med et lille Lovelace panel.

Målet er at vi kan se vores aktuelle version af Zigbee2mqtt samt vores gateway, status for hele bridgen og firmware på vores coordinator. Vi skal også kunne skifte Log-niveau, så hvis noget driller, kan vi nemt skifte til “debug”-log.

Og sidst men måske vigtigst af alt skal også kunne åbne op for “joins” så vi kan parre nye enheder ind i vores Zigbee netværk samt omdøbe– og slette enheder.

Alt sammen direkte fra et kort i din Home Assistant. Lad os komme i gang 🙂

🗑 Deaktiver din Assistant

Ja, den har været en god hjælpende hånd, men nu er det tid til at sige farvel. Den er skrevet i .net (bvadr) og har nogle gange sit eget liv. Jeg har bl.a. oplevet, at den crashede mit Zigbee-netværk et par gange, ups! – men alt i alt en god hjælpende hånd, som vi vinker farvel til, i vores nye eventyr til at blive Zigbee-eksperter 🤓

Hop under din Supervisor i menuen til venstre, og stop og deaktiver din Zigbee2mqtt Assistant. Du kan evt. vente med at afinstallere den, til det nye setup spiller 🙂

🎸 Så er det YAML-tid

Måske har du allerede arbejdet lidt med YAML? I denne guide vil jeg vise hvordan vi kan bruge de nye “pakke”-features i Home Assistant, der gør det muligt at lave en færdig pakke med kode, som vi kan inkluderer i vores configuration.yaml fil. På den måde, kan vi nemmere opdele vores kode i selvstændige filer, så alt ikke roder rundt i én stor lang uoverskuelig fil.

Jeg bruger “File Editor” add-on til at redigere mine filer, som du kan se på skærmbilledet herover, uanset om du bruger File editor, mounter et SAMBA-share og retter herfra eller arbejder med ex. VS Code – så er det de samme steps vi skal igennem – nemlig at tilføje en linje til vores configuration.yaml fil, samt oprette en ny fil der hedder “zigbee2mqtt.yaml” hvor hele vores pakke bliver lavet.

📂 Installer File editor

Installer ‘File editor’ til Home Assistant via Supervisor -> Add-on store -> File editor

Har du ikke allerede har installeret en måde at arbejde med dine config-filer på, kan jeg anbefale det simple File editor plugin, som du kan se på skærmbilledet herover. Det kan nemt installeres fra Supervisor -> Add-on Store -> File editor

Når den er installeret, kan du nemt sætte det lille add-on til at starte ved boot, automatisk opdatere samt vise et lille ikon i din sidebar hvor du nemt kan starte dit add-on fra.

🧘🏻‍♂️ Opsæt din nye pakke i YAML

Nu hvor vi har installere File editor add-on (eller et andet add-on der gør det muligt at rette dine config-filer) kan vi starte ud med at opsætte vores nye pakke. Allerførst opretter vi en ny mappe i vores “config”-mappe, det gøres nemt i vores nye File editor add-on:

Opret en ny undermappe med navnet “packages”

Herinde i denne nye mappe, opretter vi en ny fil med navnet “zigbee2mqtt.yaml”:

Opret en ny fil i vores “packages” mappe med navnet zigbee2mqtt.yaml

Og nu kan vi indsætte alt vores kode, inde i vores nye pakke:

# Input select for Zigbee2mqtt debug level input_select: zigbee2mqtt_log_level: name: Zigbee2mqtt Log Level options: - debug - info - warn - error initial: info icon: mdi:format-list-bulleted # Input text to input Zigbee2mqtt friendly_name for scripts input_text: zigbee2mqtt_old_name: name: Zigbee2mqtt Old Name mode: text zigbee2mqtt_new_name: name: Zigbee2mqtt New Name mode: text zigbee2mqtt_remove: name: Zigbee2mqtt Remove mode: text # Scripts for renaming & removing devices script: zigbee2mqtt_rename: alias: Zigbee2mqtt Rename sequence: service: mqtt.publish data_template: topic: zigbee2mqtt/bridge/config/rename payload_template: >- { "old": "{{ states.input_text.zigbee2mqtt_old_name.state | string }}", "new": "{{ states.input_text.zigbee2mqtt_new_name.state | string }}" } zigbee2mqtt_remove: alias: Zigbee2mqtt Remove sequence: service: mqtt.publish data_template: topic: zigbee2mqtt/bridge/config/remove payload_template: "{{ states.input_text.zigbee2mqtt_remove.state | string }}" # Timer for joining time remaining (120 sec = 2 min) timer: zigbee_permit_join: name: Time remaining duration: 120 sensor: # Sensor for monitoring the bridge state - platform: mqtt name: Zigbee2mqtt Bridge state state_topic: "zigbee2mqtt/bridge/state" icon: mdi:router-wireless # Sensor for Showing the Zigbee2mqtt Version - platform: mqtt name: Zigbee2mqtt Version state_topic: "zigbee2mqtt/bridge/config" value_template: "{{ value_json.version }}" icon: mdi:zigbee # Sensor for Showing the Coordinator Version - platform: mqtt name: Coordinator Version state_topic: "zigbee2mqtt/bridge/config" value_template: "{{ value_json.coordinator }}" icon: mdi:chip # Switch for enabling joining switch: - platform: mqtt name: "Zigbee2mqtt Main join" state_topic: "zigbee2mqtt/bridge/config/permit_join" command_topic: "zigbee2mqtt/bridge/config/permit_join" payload_on: "true" payload_off: "false" automation: # Automation for sending MQTT message on input select change - alias: Zigbee2mqtt Log Level initial_state: "on" trigger: platform: state entity_id: input_select.zigbee2mqtt_log_level action: - service: mqtt.publish data: payload_template: "{{ states('input_select.zigbee2mqtt_log_level') }}" topic: zigbee2mqtt/bridge/config/log_level # Automation to start timer when enable join is turned on - id: zigbee_join_enabled alias: Zigbee Join Enabled trigger: platform: state entity_id: switch.zigbee2mqtt_main_join to: "on" action: service: timer.start entity_id: timer.zigbee_permit_join # Automation to stop timer when switch turned off and turn off switch when timer finished - id: zigbee_join_disabled alias: Zigbee Join Disabled trigger: - platform: event event_type: timer.finished event_data: entity_id: timer.zigbee_permit_join - platform: state entity_id: switch.zigbee2mqtt_main_join to: "off" action: - service: timer.cancel data: entity_id: timer.zigbee_permit_join - service: switch.turn_off entity_id: switch.zigbee2mqtt_main_join - id: "zigbee2mqtt_create_notification_on_successfull_interview" alias: Zigbee Device Joined Notification trigger: platform: mqtt topic: 'zigbee2mqtt/bridge/log' condition: condition: template value_template: '{{trigger.payload_json.type == "pairing" and trigger.payload_json.message == "interview_successful"}}' action: - service: persistent_notification.create data_template: title: Device joined the zigbee2mqtt network message: "Name: {{trigger.payload_json.meta.friendly_name}}, Vendor: {{trigger.payload_json.meta.vendor}}, Description: {{trigger.payload_json.meta.description}}"

🧘🏻‍♀️ Rediger din configuration.yaml

Nu er der kun tilbage at inkludere vores nye pakke i vores hoved-konfiguration. Det gør vi ved at redigere vores “configuration.yaml” fil i File editor, og indsætte vores nye package under homeassistant:

homeassistant: packages: pack_1: !include packages/zigbee2mqtt.yaml

👋🏻 Reboot din HA

Så er der blot tilbage at genstarte dine Home Assistant for at indlæse de nye ændringer

🥰 Opsæt dit lovelace-kort

Som altid, hop ind i “Konfigurer brugerflade” og opret et nyt kort vha. (+) knappen i bunden. Herfra kan du vælge “Manuelt” kort i bunden.

Opret nyt kort

Indsæt nu følgende YAML-kode i dit manuelle kort, for at oprette dit nye kort:

entities: - entity: sensor.zigbee2mqtt_bridge_state - entity: sensor.zigbee2mqtt_version - entity: sensor.coordinator_version - entity: input_select.zigbee2mqtt_log_level - type: divider - entity: switch.zigbee2mqtt_main_join - entity: timer.zigbee_permit_join - type: divider - entity: input_text.zigbee2mqtt_old_name - entity: input_text.zigbee2mqtt_new_name - entity: script.zigbee2mqtt_rename - type: divider - entity: input_text.zigbee2mqtt_remove - entity: script.zigbee2mqtt_remove show_header_toggle: false title: Zigbee2mqtt type: entities

📛 Sådan omdøber du dine devices

Fra vores nye kort, indtaster du ID’et og dermed også navnet på den enhed du vil omdøbe, og efterfølgende det nye navn. Du ændre værdien i felterne ved at trykke på label-teksten, ex “Zigbee2mqtt Old Name” / “Zigbee2mqtt New Name” – du kan ikke skrive direkte i feltet. Herefter trykker du UDLØS: Når du trykker på knappen SKER DER IKKE NOGET – så lad være med at trykke flere gange.

Efter du har trykker på UDLØB knappen, hop ind i din log for Zigbee2mqtt og bekræfte at din RENAME-handling er gået igennem 😎

Andre tips

Sådan opdaterer du firmware (OTA)

Start med at lytte på din enhed, for at se om der er en update

Lyt til emne: zigbee2mqtt/Plug - Labelprinter (erstat “Plug – Labelprinter” med navnet på din enhed)

Send en OTA-update kommando afsted til din mqtt broker:

zigbee2mqtt/bridge/ota_update/update

Husk at angive navnet på den enhed du vil opdatere i “Payload”-feltet, som vist her:

Følg med i zigbee2mqtt loggen:

Det tager 10-20 minutter at opdatere et IKEA produkt:

Update – Done!