Возвращаюсь к проекту с самопальным умным домом. Предыдущие серии
- Прошивка Zigbee-сниффера
- Установка Ubuntu Server 20.04 на Banana PI M5
- Установка Mosquitto MQTT Broker
Теперь ставим то, что свяжет наши датчики с шиной MQTT. Процесс установки и настройки оказался самым безпроблемным на данный момент. Просто надо всё сделать по инструкции с сайта. Поэтому тут краткий перевод с моим конфигом.
Что мне не нравится в Zigbee2MQTT, так это необходимость ставить NodeJS. Ресурсы одноплатников ограничены, а тут и дисковое пространство от души отъедается, и дополнительная нагрузка на процессор из-за прослойки фреймворка. Но, это некий стандарт де-факто, поэтому я не стал изобратать велосипед.
Ставим nodejs:
pi@ubuntu:~$ sudo apt-get install -y nodejs npm git make g++ gcc
Надо проверить, что node имеет одну из версий v10.X, v12.X, v14.X, v15.X or V16.X:
pi@ubuntu:~$node --version # Should output
Версия npm должна быть одна 6.X или 7.X:
pi@ubuntu:~$npm --version # Should output 6.X or 7.X
Если версии старые, нужно их удалить, а поставить свежие из другого репозитория:
pi@ubuntu:~$ sudo apt-get purge nodejs
pi@ubuntu:~$ curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
pi@ubuntu:~$ sudo apt-get install -y nodejs npm
pi@ubuntu:~$ nodejs -v
pi@ubuntu:~$ npm --version
Если npm не последней версии, обновить его можно так:
pi@ubuntu:~$ npm install -g npm@latest
Клонируем репозиторий и перекладываем скаченное в /opt/zigbee2mqtt
pi@ubuntu:~$ git clone https://github.com/Koenkk/zigbee2mqtt.git
pi@ubuntu:~$ sudo mv zigbee2mqtt /opt/zigbee2mqtt
Устанавливаем зависимости из под пользователя pi (без sudo):
pi@ubuntu:~$ cd /opt/zigbee2mqtt
pi@ubuntu:~$ npm ci
Вывод будет следующим:
node-pre-gyp info ok
added 826 packages in 34.378s
Надо отредактировать файл настроек. Тут самое главное следить за отступами. YAML-файлы жутко капризные. Но вначале находим
файл устройства нашего донгла Zigbee. Обычно, это ttyACM0
pi@ubuntu:~$ ls /dev/ |grep ttyACM
Открываем файл настроек /opt/zigbee2mqtt/data/configuration.yaml в любимом редакторе vim:
pi@ubuntu:~$ sudo vim /opt/zigbee2mqtt/data/configuration.yaml
Мой файл выглядит так:
homeassistant: true permit_join: true mqtt: base_topic: zigbee2mqtt server: mqtt://localhost:1883 keepalive: 60 reject_unauthorized: false version: 4 serial: port: /dev/ttyACM0 frontend: port: 8080 host: 0.0.0.0 advanced: network_key: GENERATEПараметр network_key: GENERATE позволит сгенерировать сетевой ключ для общения с датчиками. После запуска службы вместо GENERATE будет вектор ключа.
После этого проверяем, что приложение работает:
pi@ubuntu:~$ cd /opt/zigbee2mqtt pi@ubuntu:~$ npm start Zigbee2MQTT:info 2019-11-09T13:04:01: Logging to directory: '/opt/zigbee2mqtt/data/log/2019-11-09.14-04-01' Zigbee2MQTT:info 2019-11-09T13:04:01: Starting Zigbee2MQTT version 1.6.0 (commit #720e393) Zigbee2MQTT:info 2019-11-09T13:04:01: Starting zigbee-herdsman... Zigbee2MQTT:info 2019-11-09T13:04:03: zigbee-herdsman started Zigbee2MQTT:info 2019-11-09T13:04:03: Coordinator firmware version: '{"type":"zStack30x","meta":{"transportrev":2,"product":2,"majorrel":2,"minorrel":7,"maintrel":2,"revision":20190425}}' Zigbee2MQTT:info 2019-11-09T13:04:03: Currently 0 devices are joined: Zigbee2MQTT:warn 2019-11-09T13:04:03: `permit_join` set to `true` in configuration.yaml. Zigbee2MQTT:warn 2019-11-09T13:04:03: Allowing new devices to join. Zigbee2MQTT:warn 2019-11-09T13:04:03: Set `permit_join` to `false` once you joined all devices. Zigbee2MQTT:info 2019-11-09T13:04:03: Zigbee: allowing new devices to join. Zigbee2MQTT:info 2019-11-09T13:04:03: Connecting to MQTT server at mqtt://localhost Zigbee2MQTT:info 2019-11-09T13:04:03: Connected to MQTT server
Останавливаем с помощью CTRL+C
Если появляются ошибки доступа к Zigbee-устройству, то надо проверить, состоит ли ваш пользователь в группе dialout
pi@ubuntu:~$ id -Gn
pi adm cdrom sudo dip plugdev lpadmin sambashare
Если в списке такой группы нет, то надо пользователя в эту группу добавить
pi@ubuntu:~$ sudo adduser pi dialout
Следующий шаг - настроить запуск в качестве демона. Для этого создаем и редактируем /etc/systemd/system/zigbee2mqtt.service pi@ubuntu:~$ sudo vim /etc/systemd/system/zigbee2mqtt.service
Содержание файла:
[Unit] Description=zigbee2mqtt After=network.target [Service] ExecStart=/usr/bin/npm start WorkingDirectory=/opt/zigbee2mqtt StandardOutput=null StandardError=inherit Restart=always User=pi [Install] WantedBy=multi-user.target
Запускаем демон и проверяем его статус (выход из статуса - клавиша Q):
pi@ubuntu:~$ sudo systemctl start zigbee2mqtt sudo systemctl enable zigbee2mqtt.service pi@ubuntu:~$ sudo systemctl status zigbee2mqtt ● zigbee2mqtt.service - zigbee2mqtt Loaded: loaded (/etc/systemd/system/zigbee2mqtt.service; enabled; vendor p> Active: active (running) since Sat 2022-02-05 01:25:41 UTC; 1 months 7 day> Main PID: 16653 (npm) Tasks: 23 (limit: 3839) Memory: 101.7M CGroup: /system.slice/zigbee2mqtt.service ├─16653 npm ├─16664 sh -c node index.js └─16665 node index.js Feb 05 01:25:41 ubuntu systemd[1]: Started zigbee2mqtt. lines 1-12/12 (END)
Как обновить до последней версии. Копируем настройки, скачиваем новую копию репозитория:
pi@ubuntu:~$ cd /opt/zigbee2mqtt/ pi@ubuntu:/opt/zigbee2mqtt$ sudo systemctl stop zigbee2mqtt pi@ubuntu:/opt/zigbee2mqtt$ cp -R data data-backup pi@ubuntu:/opt/zigbee2mqtt$ git checkout HEAD -- npm-shrinkwrap.json pi@ubuntu:/opt/zigbee2mqtt$ git pull remote: Enumerating objects: 348, done. remote: Counting objects: 100% (304/304), done. remote: Compressing objects: 100% (105/105), done. remote: Total 348 (delta 256), reused 211 (delta 199), pack-reused 44 Receiving objects: 100% (348/348), 2.75 MiB | 6.70 MiB/s, done. Resolving deltas: 100% (256/256), completed with 32 local objects. From https://github.com/Koenkk/zigbee2mqtt 6ea61bae..7a2ddf24 master -> origin/master 8357da27..83f82503 dev -> origin/dev * [new tag] 1.24.0 -> 1.24.0 Updating 6ea61bae..7a2ddf24 Fast-forward lib/controller.ts | 1 + lib/eventBus.ts | 7 + lib/extension/availability.ts | 9 +- lib/extension/bridge.ts | 4 +- lib/extension/homeassistant.ts | 26 +- lib/model/device.ts | 6 +- lib/model/group.ts | 2 +- lib/mqtt.ts | 13 +- lib/types/types.d.ts | 3 + lib/util/settings.schema.json | 7 + lib/util/settings.ts | 3 +- lib/util/utils.ts | 6 +- npm-shrinkwrap.json | 4269 +++++++++++++++++--------------- package.json | 41 +- scripts/generateNewSupportedDevices.js | 1 + test/availability.test.js | 21 + test/bridge.test.js | 22 +- test/homeassistant.test.js | 94 +- test/receive.test.js | 36 - test/stub/data.js | 3 +- 20 files changed, 2433 insertions(+), 2141 deletions(-)
Запускаем установщик:
pi@ubuntu:~$ npm ci
В конце длинного вывода видим что-то вроде:
added 978 packages in 102.92s
Возвращаем файлы настройки обратно и удаляем каталог с копией
pi@ubuntu:~$ cp -R data-backup/* data
pi@ubuntu:~$ rm -rf data-backup
Запускаем демон
pi@ubuntu:/opt/zigbee2mqtt$ sudo systemctl start zigbee2mqtt pi@ubuntu:/opt/zigbee2mqtt$ sudo systemctl status zigbee2mqtt ● zigbee2mqtt.service - zigbee2mqtt Loaded: loaded (/etc/systemd/system/zigbee2mqtt.service; enabled; vendor p> Active: active (running) since Mon 2022-03-14 22:22:27 UTC; 45s ago Main PID: 72582 (npm) Tasks: 39 (limit: 3839) Memory: 287.5M CGroup: /system.slice/zigbee2mqtt.service ├─72582 npm ├─72599 sh -c node index.js ├─72600 node index.js ├─72611 /bin/sh -c npm run build ├─72612 npm ├─72623 sh -c tsc && node index.js writehash └─72624 node /opt/zigbee2mqtt/node_modules/.bin/tsc Mar 14 22:22:27 ubuntu systemd[1]: Started zigbee2mqtt.
На этом с Zigbee2MQTT всё. Осталось поставить и настроить Home Assistant.
Дополнение:
Если вы проводите опыты на виртуальной машине, то нужно наше Zigbee-устройство прокинуть в эту виртуальную машину. Для этого надо выяснить адрес устройства (на хосте). Например, на моей машине (не Banana PI):
evgeniy@micro-gen10plus:~$ lsusb Bus 001 Device 002: ID 03f0:2927 HP, Inc Virtual NIC Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 002 Device 005: ID 0424:2660 Microchip Technology, Inc. (formerly SMSC) Hub Bus 002 Device 004: ID 258a:002a SINO WEALTH Gaming KB Bus 002 Device 003: ID 0bda:b812 Realtek Semiconductor Corp. RTL88x2bu [AC1200 Techkey] Bus 002 Device 002: ID 0451:16a8 Texas Instruments, Inc. CC2531 ZigBee Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Нужная нам строка "Bus 002 Device 002: ID 0451:16a8 Texas Instruments, Inc. CC2531 ZigBee". Идентификаторы можно представить еще в таком виде:
evgeniy@micro-gen10plus:~$ lsusb -s 2:2 -v | grep "id" Couldn't open device, some information will be missing idVendor 0x0451 Texas Instruments, Inc. idProduct 0x16a8 CC2531 ZigBeeгде 2:2 - номер шины (Bus) и устройства (Device) в выводе предыдущей команды
Создаем XML-файл, например, в пользовательской директории.
evim ~/zigbee.xml
с таким содержимым:
После этого командой добавляем подготовленный XML-код в файл настройки виртуальной машины. Имя машины в моем примере -
virsh attach-device U1804-HA-vm1 ~/zigbee.xml --persistent
Комментариев нет:
Отправить комментарий