Установка Zigbee2mqtt на Raspberry OS. Наиболее полное руководство на русском

Ну предположим стиком вы обзавелись, подключили его в USB порт нашей малинки и началось самое интересное … для работы его необходимо установить opensource пакет Zigbee2MQTT. Качаем отсюда zip архив. Выполняем ряд команд на вашей системе с Linux следующей последовательности … (будем ставить его в папку /opt/zigbee2mqtt)

cd /opt
sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
sudo chown -R pi:pi /opt/zigbee2mqtt
cd /zigbee2mqtt
npm install

На этом установка пакета завершена. Сделаем его сервисом и дадим загружаться автоматом

sudo nano /etc/systemd/system/zigbee2mqtt.service

вставляем в файл содержимое и сохраняем

[Unit]
Description=zigbee2mqtt
After=network.target

[Service]
ExecStart=/usr/bin/npm start
WorkingDirectory=/opt/zigbee2mqtt
StandardOutput=inherit
StandardError=inherit
Restart=always
User=pi

[Install]
WantedBy=multi-user.target
sudo systemctl start zigbee2mqtt
sudo systemctl enable zigbee2mqtt.service

Самый важный компонент это логирование с помощью которого мы сможем смотреть все статусы работы наших устройств в домашей Zigbee сети

sudo journalctl -u zigbee2mqtt.service -f

на этом установка завершена. Сервис ранее запущен. Далее настраиваем …

настраиваем наш стик CC2531/CC2538 который прошит координатором. Вставляем его в наш Raspberry Pi и смотрим его наличие в системе (у меня это стик на чипе CC2538)

ls -l /dev/serial/by-id

total 0
lrwxrwxrwx 1 root root 13 Dec 16 21:38 usb-Texas_Instruments_CC2538_USB_CDC-if00 -> ../../ttyACM0

настраиваем конфигурационный файл Zigbee2mqtt. Редактируем файл настроек /opt/zigbee2mqtt/data/configuration.yaml

homeassistant: true
permit_join: true
mqtt:
  base_topic: zigbee2mqtt
  server: 'mqtt://localhost'
  user: zigbee
  password: password123456
serial:
  port: /dev/ttyACM0
queue:
  delay: 5
advanced:
  network_key:
    - 235
    - 214
    - 41
    - 96
    - 88
    - 138
    - 149
    - 10
    - 92
    - 225
    - 245
    - 94
    - 141
    - 240
    - 190
    - 182
zigbee_shepherd_devices: true

у вас он может быть немного другой. network_key не трогаем (это в качестве примера на моем стике)

user: zigbee password: password123456 это данные для подключения к нашему MQTT брокеру (логины и пароль ваши вставляйте). В данном примере MQTT установлен на хосте там же где и сам Zigbee стик. и рестартим наш сервис

sudo systemctl restart zigbee2mqtt

На этом все. Старайтесь меньше рестартить сервис mosquitto, так при этом может падать сам zigbee2mqtt сервис. Он в прямой зависимости.

ОБНОВЛЕНИЕ zigbee2mqtt в дальнейшем

не забываем что zigbee2mqtt работает под дефолтным пользователем pi

sudo su - pi
cd /opt/zigbee2mqtt
./update

все остальное сделает скрипт сам. Он создаст резерную папку с вашими данными в /opt/zigbee2mqtt/data (*.backup) и восстановит их, когда обновит систему. Рекомендую вам резервировать всю папку /opt/zigbee2mqtt для последующей миграцией на стики (например с CC2531 на CC2538, или миграции с Raspberry Pi3 на Raspberry Pi4).

также рекомендую создать дополнительный сенсор, который будет уведомлять вас через HomeAssistant о новой версии. Например он выглядит вот так :

- platform: command_line
  name: Zigbee2mqtt Latest Version
  command: curl -s https://github.com/Koenkk/zigbee2mqtt/releases/latest | cut -d'"' -f2 | rev | cut -d'/' -f1 | rev
  scan_interval: 600

а выглядит просто

ИНТЕГРИРУЕМ zigbee2mqtt к HomeAssistant

Для этого нам потребуется создаеть несколько конфигурационных файлов в HA. Всю эту документацию можно взять отсюда https://www.zigbee2mqtt.io/integration/home_assistant.html

Здесь я добавлю еще немного своих полезностей.

/home/homeassistant/.homeassistant/sensors/zb2mqtt_st.yaml

.  # 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
 - platform: command_line name: Zigbee2mqtt Latest Version 
   command: curl -s https://github.com/Koenkk/zigbee2mqtt/releases/latest | cut -d'"' -f2 | rev | cut -d'/' -f1 | rev 
   scan_interval: 600

/home/homeassistant/.homeassistant/scripts/zb2mqtt_st.yaml

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 }}"

zigbee2mqtt_restart:
  alias: Zigbee2MQTT Restart
  sequence:
    - alias: Reboot Zigbee Service
      service: shell_command.zigbee2mqtt_reboot

/home/homeassistant/.homeassistant/php_scripts/zigbee2mqtt_restart.sh

#!/bin/bash
sudo systemctl restart zigbee2mqtt.service

/home/homeassistant/.homeassistant/devices/input_text.yaml

# Input text to input Zigbee2MQTT friendly_name for scripts
  zigbee2mqtt_old_name:
    name: Zigbee2MQTT Old Name
  zigbee2mqtt_new_name:
    name: Zigbee2MQTT New Name
  zigbee2mqtt_remove:
    name: Zigbee2MQTT Remove

/home/homeassistant/.homeassistant/devices/input_select.yaml

# Input select for Zigbee2MQTT debug level
zigbee2mqtt_log_level:
  name: Zigbee2MQTT Log Level
  options:
    - debug
    - info
    - warn
    - error
  initial: info
  icon: mdi:format-list-bulleted

/home/homeassistant/.homeassistant/automation/zb2mqtt_st.yaml

# Automation for sending MQTT message on input select change
#  - id: zigbee2mqtt_log_level
- 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
- 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}}"

/home/homeassistant/.homeassistant/ui-lovelace.yaml

  - type: vertical-stack
    cards:
      - type: markdown
        style: |
            ha-card {
              font-size: 26px;
            }          
        content: >
           **ZIGBEE Координатор CC2538**

      - type: entities
        show_header_toggle: false
        entities:
          - entity: sensor.zigbee2mqtt_bridge_state
          - entity: sensor.zigbee2mqtt_version
          - entity: sensor.zigbee2mqtt_latest_version
          - entity: sensor.coordinator_version
          - entity: input_select.zigbee2mqtt_log_level
          - type: divider
          - entity: switch.zigbee2mqtt_main_join
          - entity: timer.zigbee_permit_join
          - entity: script.zigbee2mqtt_restart
          - 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

/home/homeassistant/.homeassistant/configuration.yaml

  - 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"

Дерзайте.

5 2 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
6 комментариев
Популярные
Новые Старые
Межтекстовые Отзывы
Посмотреть все комментарии
123
123
07.01.2021 09:17

ls: cannot access ‘/dev/serial/by-id’: No such file or directory
Вот с такой ошибкой столкнулся при попытке проверить порт стика. С чем это может быть связано?

Алексей
Алексей
14.01.2021 17:46

Прям в самом начале, кмк, не хватает
cd /zigbee2mqtt
перед
npm install

Алексей
Алексей
15.01.2021 13:06
Ответить на  admin

Возможно с утра страницу держал и не обновил:) Ну хорошо, что теперь всё норм

Алексей
Алексей
14.01.2021 18:27

И вот это: nano /etc/systemd/system/zigbee2mqtt.service
Я бы поправил на: sudo nano /etc/systemd/system/zigbee2mqtt.service

6
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
()
x