четверг, 13 февраля 2025 г.

Установка комплекта Node-Red+ MQTT+Zigbee2mqtt на планшет на базе Android для управления "умным домом"

Для реализации данного решения потребуется:
планшет (можно использовать и любой более/менее современный телефон, но размер экрана слишком мал для удобного управления) на котором можно получить разблокированный загрузчик и в дальнейшем, root права;
zigbee2mqtt контроллер;
OTG кабель;

Предполагается что Вы знаете, что такое IP адрес, командная строка и немного знакомы с unix системами.

Вы все делаете на свой страх и риск. Любые данные, находящиееся на планшете перед началом действий, могут и будут потеряны.

Мой выбор пал на Aquarius NS220  - 10", 2/16ГБ, Type-C. Брал на Авито.

Довел до стостояния root прав (на каждом конкретном уст-ве это достигается разными способами, поэтому нет смысла это описывать).

Все действия выполняются именно в такой последовательности, поскольку некоторые вещи зависят от наличия других вещей.

 

1.Termux
Берется на f-droid. Далее все делается в
Termux.
Запустить Termux, выполнить:
termux-change-repo
apt update
apt upgrade
pkg install root-repo tsu mc openssh coreutils nodejs
git

2.Настроить ssh:
ssh-keygen -t rsa -b 2048
cd .ssh
cat id_rsa.pub > authorized_keys
cp id_rsa /storage/self/primary/Download/
cd ~/

Забрать с планшета файл
id_rsa на свой комп, запустить puttygen.exe (из пакета PuTTY)
Импортировать id_rsa в puttygen.exe, при этом будет показан пользователь
для которого созданы ключи ssh, его и нужно использовать при логине с ключом (
или whoami для определения пользователя Андроида).
Нажать кнопку "Save private key" и записать файл с произвольным именем в защищенное место.
Запустить putty.exe, указать адрес, который получил планшет в сети, порт 8022, слева на дереве опций в разделе "Data"->"Auto-login username" прописать ранее определенное имя пользователя, в разделе "SSH"->"Auth"->"Private key file for authontication" указать полный путь к файлу с приватным ключом, который записали ранее.
Выбрать раздел "Windows"->"Translation"->"Remoute character set" и указать KOI8-R.
Выбрать раздел "Session"->"Saved session" и указать осмысленное имя подключения к планшету, нажать кнопку "Save".
В дальнейшем для подключения к планшету запустить
putty.exe, для подключения два раза кликнуть на имени ранее созданного подключения.
Чтобы не иметься с vi, nano и подобными "правильными" редакторами
используем mc (благо Termux позволяет) - работа с файлами, редактор текстовых файлов, выставление прав на файлы и.д. и т.п.

Далее все действия производятся через ssh подключение с компа. Все команды копируются на компе в буфер обмена, в putty вставляеются Shift+ПКМ, копируются -
Shift+ЛКМ
 

2.NodeRed
npm i -g --unsafe-perm node-red
node-red

При первом запуске будет создан каталог .node-red в котором содержаться конфиги.

С компа - http://адрес_планшета:1880

Если веб-морда доступна, то движемся дальше, если нет, смотрим вывод инфы при старте.
Останавливаем - Ctrl+C
Для недопущения посторонних к управлению NodeRed рекомендуется выставить авторизацию для доступа к настройкам и панели управления:
mcedit ~/.node-red/settings.js
(или идем в каталог .node-red и F4 на файле settings.js)
доступ к настройкам:
adminAuth
доступ к управлению: httpNodeAuth

Запуск как сервис:
node-red &
Остановка:
killall
node-red


3.MQTT
Функционал MQTT реализуется нодой в N
odeRed. Название ноды: node-red-contrib-aedes
Создать в NodeRed подключение "MQTT брокер"  используя ноду "aedes broker".
После деплоя должен поднятся порт 1883, убедится, что порт поднялся:
sudo netstat -ant

 

4.Zigbee2mqtt
Ноды, реализующий функционал zigbee2mqtt шлюза на
NodeRed не обнаружил.
zigbee2mqtt реализован отдельной прогой, являющейся по сути стандартом. Поскольку она также, как и NodeRed, реализована на nodejs, особых проблем не возникло.
Необходимо убедится, что
Zigbee контроллер распознается в Termux. Подключить контроллер OTG кабелем к планшету и посмотреть, что появилось:
sudo ls /dev|grep tty

среди всего прочего должно быть что-то такое: ttyACM0
таким образом название контроллера, в данном случае, будет: /dev/
ttyACM0
Установка Zigbee2mqtt шлюза:
npm install -g pnpm
git clone --depth 1 https://github.com/Koenkk/zigbee2mqtt.git zigbee2mqtt
cd zigbee2mqtt
pnpm install --no-frozen-lockfile
pnpm run build
cd ..
cp
zigbee2mqtt/data/configuration.example.yaml zigbee2mqtt/data/configuration.yaml
chmod 644
zigbee2mqtt/data/configuration.yaml

в configuration.yaml раскоментировать и установить параметры (
у меня - adapter: zstack):
mcedit zigbee2mqtt/data/configuration.yaml
frontend:
    enabled: true
    port: 8080
serial:
  port: /dev/ttyACM0
  adapter: zstack

Запуск:
su -c `which node` zigbee2mqtt/index.js &
Остановка:
sudo killall -9 su


С компа - http://адрес_планшета:8080
Для обнаружения zigbee уст-в  веб-морде нажать кнопку "Разрешить обнаружение".


Если доступа нет - логи лежат в zigbee2mqtt/data/log/

Zigbee2mqtt должен запускаться через su, т.к. требуется повышение привилегий для доступа к /dev/ttyACM0. Для редактирования конфига и просмотра логов также потребуются права root, поэтому и mc нужно запускать как
sudo mc
Будет хорошо запустить два подключения к планшету, в одном запусить mc от пользователя, в другом от root. В первом делать все настройки, во втором только то, что связано с
Zigbee2mqtt.

5.Завершение
После выполнения всего вышеперечисленного на планшете в среде
Termux будут выполнятся NodeRed+MQTT broker, Zigbee2mqtt+zigbee2mqtt контроллер. И браузер, в котором открыть адрес панели управления NodeRed http://127.0.0.1:1880/ui

Для запуска приложений при загрузке планшета или через виджеты возможно использовать следующие варианты:
Termux:Boot или Termux:Widget.

Комментариев нет: