Это статья 8 из цикла статей по установке и настройке Home Assistant.
- 1. Умный дом. Выбор.
- 2. Home Assistant. Выбор железа.
- 3. Установка Armbian на Orange Pi Zero Plus2
- 4. Home Assistant. Установка в docker на Orange Pi Zero +2 H5. И почему это плохо.
- 5. Home Assistant. Установка на Orange Pi Zero +2 H5
- 6. Home Assistant. Настройка VS Code. Темы. Первый сценарий.
- 7. Home Assistant. Подключение электрокарниза по радиоканалу.
- 8. Home Assistant. Подключение электрокарнизов по RS485
С материалом можно ознакомиться также посмотрев видео:
Сегодня мы подключим электрокарнизы к системе умного дома Home Assistant по проводам, используя интерфейс RS485. У такого подключения есть преимущество — можно не только отправлять команды, но и получать обратную связь. Система может опрашивать моторы и определять в каком состоянии они находятся.
Подключать будем электрокарниз для горизонтальных штор AM82TV/Smart и Механизм рулонной шторы Louvolite с электроприводом AT35EQ/X.
В качестве интерфейса к электрокарнизам будем использовать устройство Blinds-RS485 (USB).
Подключаемся к Orange Pi:
ssh homeassistant@192.168.10.20
IP адрес может быть другим.
Посмотрим на устройства, которые находятся у нас в каталоге /dev:
ls /dev/tty*
Теперь подключим устройство Blinds-RS485 к Orange Pi через один из портов USB и снова выполним команду:
ls /dev/tty*
Видим, что у нас появилось новое устройство ttyACM1:
Посмотрим настройки для ttyACM1 выполнив команду:
stty -F /dev/ttyACM1
Ответ:
speed 9600 baud; line = 0;
-brkint -imaxbel
Если вы получили сообщение “Permission denied” убедитесь, что пользователь homeassistant входит в группу dialout. Как исправить эту ошибку мы уже описывали.
Если ошибки нет, то мы уже готовы управлять нашими электрокарнизами из командной строки. Оба мотора предварительно были мной настроены. Им были присвоены адреса и заданы крайние положения. Как это делается можно посмотреть в видео. Напомню, что оба мотора находятся в группе 1. Тубулярному мотору (AT35EQ/X) присвоен адрес 2. Мотору для горизонтальных штор (AM82TV/Smart) присвоен адрес 3.
Проверяем, что всё работает:
echo «1 2 open» > /dev/ttyACM1
Эта команда “открыть” для тубулярного мотора.
Можно подождать пока мотор достигнет крайнего положения и остановится, а можно остановить его командой:
echo «1 2 stop» > /dev/ttyACM1
Чтобы моторами можно было управлять из Home Assistant добавим несколько строк в файл конфигурации configuration.yaml:
# Added for Blinds-RS485
cover:
- platform: command_line
covers:
at34eq:
command_open: echo "1 2 open" > /dev/ttyACM1
command_close: echo "1 2 close" > /dev/ttyACM1
command_stop: echo "1 2 stop" > /dev/ttyACM1
# command_state: bposition 1 2
am82tv:
command_open: echo "1 3 open" > /dev/ttyACM1
command_close: echo "1 3 close" > /dev/ttyACM1
command_stop: echo "1 3 stop" > /dev/ttyACM1
Для управления шторами используем компонент Command Line Cover.
Убедимся в том, что у нас нет ошибок в файле конфигурации. Открываем в браузере страницу с home assistant. Переходим на вкладку Панель разработчика -> Службы. Из выпадающего списка выбираем homeassistant.check_config и нажимаем кнопку Вызвать службу.
Если новых уведомлений не появилось, то всё в порядке и мы сделали всё правильно. Если появилось новое уведомление — читаем. Там будет подсказка как исправить ошибку.
Для того, чтобы изменения вступили в силу, нам нужно перезапустить сервер Home Assistant. Переходим в Настройки -> Сервер -> Управление сервером и перезапускаем.
После перезагрузки на вкладке Общие видим, что на панели управления появились наши элкетрокарнизы.
Убеждаемся в том, что всё работает.
Теперь мы можем управлять электрокарнизами. Можем открывать, закрывать и останавливать шторы и жалюзи. Но на панели управления Home Assistant пока мы не видим состояния наших штор. Открыты они или закрыты. Насколько закрыты. Нам нужно добавить сенсоры. По одному на каждый мотор. Сенсоры будут отображать состояние шторы.
Для сенсоров будем использовать компонент Command line Sensor. Чтобы им воспользоваться нам нужна утилита, которая будет обращаться к мотору, получать ответ, обрабатывать его и выдавать значения от 0 до 100. Я написал небольшой скрипт на python3, который это делает.
Нужно скопировать этот скрипт любым удобным способом в удобное место. Я сделаю это при помощи команды git clone.
В домашней папке пользователя homeassistant я создам папку bin и перейду в неё:
mkdir bin && cd bin
Затем копирую репозиторий в эту папку командой (обратите внимание на точку в команде):
git clone https://gitlab.com/breelek/bposition.git .
Вместе со скриптом при клонировании репозитория скопировалась папка .git. Нам она не нужна. Удалим:
rm -rf .git
Осталось только сделать скрипт исполняемым. Сделаем это командой:
chmod 755 bposition
Можно получить краткую справку о том как работает скрипт, выполнив команду:
./bposition --help
Ответ:
usage: bposition [-h] [-p [PORT]] group id
Blinds position checker.
positional arguments:
group Group ID.
id ID.
optional arguments:
-h, --help show this help message and exit
-p [PORT], --port [PORT]
Serial port name. Default=/dev/ttyACM0
Нам написали, что скрипу требуется два обязательных параметра: группа мотора и адрес мотора в группе. Кроме того, можно указать порт на котором находится blinds RS485. Если порт не указывать, будет использован порт по умолчанию — /dev/ttyACM0.
Проверяем, что всё работает:
./bposition 1 2 -p=/dev/ttyACM1
В ответ в консоли мы должны получить число от 0 до 100, которое показывает насколько в процентах закрыта штора. Если получили — всё в порядке. Двигаемся дальше.
Мы почти закончили. Добавим в configuration.yaml несколько строк для сенсоров:
sensor:
- platform: command_line
name: AM82TV
command: "/home/homeassistant/bin/bposition 1 3 -p=/dev/ttyACM1"
unit_of_measurement: "%"
scan_interval: 1
- platform: command_line
name: AT35EQ
command: "/home/homeassistant/bin/bposition 1 2 -p=/dev/ttyACM1"
unit_of_measurement: "%"
scan_interval: 1
Далее, точно так же, как мы делали до этого, проверяем корректность файла конфигурации и перезагружаем Home Assistant.
Ещё раз убеждаемся в том, что всё на месте и всё работает.