Так как hub.docker.com стал не доступен для России, то у меня соответственно появились проблемы с обновление Home Assistant.
Уже написано куча статей как можно решить эту проблему: использовать VPN, использовать зеркала, AlexxIT предложил простой вариант обхода для Home Assistant через аддон AdGuard. Я же просто хочу показать как я реализовал обход блокировки hub.docker.org
Дано: Частный VPN сервер в амстердаме. Роутер Keenetic Giga
Что делаю:
1. Поднимаю VPN интерфейс
2. На 2ip.ru смотрю ip для hub.docker.org. Это будут 54.156.140.159, 44.221.37.199, 52.44.227.212.
3. Создаю в роутере маршруты для этих ip.
Тип маршрута -> Маршрут до узла
Описание -> Любое. Я указал hub.docker.org
Адрес узла назначения -> IP адрес полученный в предыдущем шаге.
Адрес шлюза -> Оставляем поле пустым.
Интерфейс -> Выбираем интерфейс поднятого VPN.
Добавлять автоматически -> Отмечаем
Эксклюзивный маршрут -> Отмечаем
4. Проверяю сайт hub.docker.org. Он открывается, а вот контейнеры в Home Assistant не обновляются. Проверил на десктопе запулить контейнер — тоже нет.
5. Ищу куда обращается Docker через Wireshark. Контейнеры он тянет с registry-1.docker.io. IP адреса: 54.236.113.205, 54.227.20.253, 54.198.86.24.
6. Добавляю маршруты в роутере для registry-1.docker.io.
После всех манипуляций у меня стал нормально обновляться Home Assistant и открываться hub.docker.org, а значит обход блокировки hub.docker.org работает. На этом все, спасибо за внимание! 🙂
Поскольку я часто использую гибернацией, я решил сделать гибернацию своего ПК через Home Assistant.
Если с выключением компьютера через RPC Shutdown всё понятно, то с переходом в режим гибернации возник вопрос, так как RPC Shutdown не может отправить ПК в этот режим.
Я начал искать варианты и наткнулся на программу под названием Airytec Switch Off. Эта программа позволяет автоматически или удаленно выключать компьютер с любого компьютера или мобильного телефона. Что для меня важно, так это то, что она имеет веб-интерфейс с ссылками на команды, из которых я и получил URL которые я использовал в Home Assistant.
Теперь я расскажу, как я реализовал это у себя. Для начала, нужно скачать и установить саму программу. После установки и запуска, в трее появится иконка. Чтобы получить доступ к настройкам программы, нужно кликнуть правой клавишей мыши по иконке и выбрать пункт Options.
Далее переходим во вкладку Remote и ставим галочку Enable web interface. После кликаем по View web interface.
Мы попадаем в веб-интерфейс программы, откуда и будем извлекать адрес ссылки для удаленного выключения/перезагрузки/сна/гибернации.
Чтобы получить адрес ссылки для выключения/перезагрузки/сна/гибернации, щелкните правой кнопкой мыши по ссылке и выберите Копировать адрес ссылки. В моем случае, если я хочу перейти в режим гибернации, ссылка будет выглядеть так:
http://localhost:700/?action=System.Hibernate
Чтобы использовать этот адрес, необходимо заменить localhost на локальный IP-адрес вашего компьютера. В моем случае это будет так:
http://192.168.30.68:700/?action=System.Hibernate
Обратите внимание, что эти адреса могут отличаться в зависимости от вашей конфигурации и настроек системы.
В Home Assistant необходимо создать команды Shell. Я сделал это сразу для всех вариантов.
Внимание! Автор не несет ответственность за ваши неудачи, и не призывает к действию! Все что вы делаете — вы делаете на свой страх и риск!
Данный способ прошивки подсмотрен на 4pda, дополнен и немного изменен для лучшего понимания.
Немного о камере
Данная камера была приобретена на Avito за копейки. Хотелось избавиться от камер Xiaomi и приложения MiHome. Оригинальная прошивка поддерживает протокол Onvif и RTSP, что собственно мне и было нужно для добавления камер в видеорегистратор и Home Assistant. Так же у камеры на ножке есть магнит, который позволяет крепить камеру на металлических поверхностях, либо на металлическом пятаке, который идет в комплекте и прикручивается на пару саморезов. Еще один из плюсов — наличие Ethernet разъема на камере.
Прошивка камеры
Для прошивки нужно вскрыть камеру поддев чем-нибудь плоским черную часть камеры.
После того, как отковыряли лицевую часть камеры аккуратной отключаем микрофон и подцветку.
После этого ищем UART рядом с Ethernet разъемом. Нас интересуют только контакты Tx Rx и Gnd.
К UART можно под паяться или же использовать иголки как сделал я. Так же нужно воткнуть LAN кабель.
Теперь качаем TFTP сервер, архив с прошивкой и Pytty.
Распаковываем файлы прошивки в рядом с TFTP сервером.
Редактируем файл manuinfo.txt под себя
DEVICE_SERIAL_NUMBER: серийный номер вашей камеры (12 знаков) MAC_ADDRESS: мак-адрес сетевого интерфейса в формате 0123-4567-89AB ACTIVE_CODE: регистрационный код для облака EZ (25 знаков). Предлагаю использовать следующий формат: 0SSSSSSSSSSSSMMMMMMMMMMMM (S — серийный номер, M — мак адрес) REGION_CODE: код региона IN — голосовые сообщения на английском, NONE — голосовые сообщения на китайском, FF — без голосовых сообщений
Запускаем TFTP, открываем Pytty выбираем наш COM порт и скорость 115200.
Подаем питание на камеру и жмем в Pytty Ctrl + Enter либо Ctrl + B чтобы остановить загрузку.
После того, как остановили загрузку нужно указать IP адрес камеры и IP адрес TFTP сервера.
ipaddr — адрес камеры, serverip — адрес tftp сервера.
В данной статье я расскажу как добавить мониторинг ИБП в Home Assistant на примере CyberPower Value500EI.
У данной модели есть USB разъем для мониторинга состояния ИБП. Для мониторинга у CyberPower есть своя утилита под названием PowerPanel. Скачать ее можно с сайта производителя. У меня на домашнем сервере стоит Ubuntu 20.04, по этому я скачал PowerPanel for Linux 64bit (deb).
Подключаем ИБП через USB и устанавливаем PowerPanel:
В ответ, если все нормально, должны увидеть примерно следующее:
The UPS information shows as following:
Properties:
Model Name................... Value500EI
Firmware Number.............. BZAB100.B31
Rating Voltage............... 230 V
Rating Power................. 275 Watt(500 VA)
Current UPS status:
State........................ Normal
Power Supply by.............. Utility Power
Utility Voltage.............. 224 V
Output Voltage............... 226 V
Battery Capacity............. 100 %
Remaining Runtime............ 31 min.
Load......................... 49 Watt(18 %)
Line Interaction............. None
Test Result.................. Unknown
Last Power Event............. Blackout at 2022/09/13 23:53:27 for 7 sec.
В файле /etc/pwrstatd.conf настраиваем выключение компьютера через время после перехода на резервное питание или при разряде аккумулятора на определенный процент. Также можно настроить отправку E-Mail или выполнение произвольного скрипта. После изменения перезапускаем демона:
service pwrstatd restart
У меня настроено выключение сервера при разряде аккумулятора до 35%. Мой конфиг:
# pwrstatd configuration file
#
# You must restart pwrstatd after changing this file in order for changes to take effect.
# Ex:/etc/init.d/pwrstatd restart
#
# Action setting for event of Power Failure
#
# A delay time in seconds since event of Power Failure occur then to run shell
# script and shutdown system. Allowed range is 0 ~ 3600. Default is 60 sec.
powerfail-delay = 60
# Enable to run shell script when the event of Power Failure occur.
# The allowed options are yes and no. Default is yes.
powerfail-active = yes
# Assign a path of script file for event of Power Failure.
# The default is /etc/pwrstatd-powerfail.sh
powerfail-cmd-path = /etc/pwrstatd-powerfail.sh
# How much time in seconds to take script running for event of Power Failure.
# The allowed range is 0 ~ 3600. Default is 0 sec.
powerfail-duration = 0
# Allow Daemon to shutdown system for event of Power Failure.
# The allowed options are yes and no. Default is yes.
powerfail-shutdown = no
#
# Action setting for event of Battery Low
#
# A threshold of Battery Capacity, If the battery capacity is lower than this
# value and a event of Battery Low will be identified. The unit is percentage.
# The allowed range is 0 ~ 90. Default is 35 %.
lowbatt-threshold = 35
# A threshold of Remaining Runtime, If the Remaining Runtime is lower than this
# value and a event of Battery Low will be identified. The unit is second.
# The allowed range is 0 ~ 3600. Default is 300 sec.
# Note: When meet this condition the below 'shutdown-sustain' property
# will be ignored.
runtime-threshold = 300
# Enable to run shell script when the event of Battery Low occur.
# The allowed options are yes and no. Default is yes.
lowbatt-active = yes
# Assign a path of script file for event of Battery Low.
# The default is /etc/pwrstatd-lowbatt.sh
lowbatt-cmd-path = /etc/pwrstatd-lowbatt.sh
# How much time in seconds to take script running for event of Battery Low.
# The allowed range is 0 ~ 60. Default is 0 sec.
lowbatt-duration = 0
# Allow Daemon to shutdown system for event of Battery Low.
# The allowed options are yes and no. Default is yes.
lowbatt-shutdown = yes
# Turn UPS alarm on or off.
# The allowed options are yes and no. Default is yes.
enable-alarm = yes
# The necessary time in seconds for system shutdown.
# The UPS will turn power off when this time is expired.
# The allowed range is 0 ~ 3600. Default is 600 sec.(10 min.)
# If the computer shutdown is cause by low runtime condition, the UPS will
# turn power off when the time is expired that time is assigned on
# 'runtime-threshold' property and it is no longer to refer the
# 'shutdown-sustain' property.
shutdown-sustain = 600
# Daemon will turn UPS power off once it ask system shutdown cause by a power
# event. Allowed options are yes and no. Default is yes.
turn-ups-off = yes
# The period of polling UPS in seconds.
# The allowed range is 1 ~ 60. Default is 3 sec.
ups-polling-rate = 3
# the period of re-try to find available UPS in seconds since find nothing at
# last time. The allowed range is 1 ~ 300. Default is 10 sec.
ups-retry-rate = 10
# Prohibiting daemon to provide communication mechanism for client, such as
# pwrstat command. normally, it should be 'no'. It can be 'yes' if any security
# consideration. Allowed options are yes and no. Default is no.
prohibit-client-access = no
# The pwrstatd accepts four types of device node which includes the 'ttyS',
# 'ttyUSB', 'hiddev', and 'libusb' for communication with UPS. The pwrstatd
# defaults to enumerate all acceptable device nodes and pick up to use an
# available device node automatically. But this may cause a disturbance to the
# device node which is occupied by other software. Therefore, you can restrict
# this enumerate behave by using allowed-device-nodes option. You can assign
# the single device node path or multiple device node paths divided by a
# semicolon at this option. All groups of 'ttyS', 'ttyUSB', 'hiddev', or
# 'libusb' device node are enumerated without a suffix number assignment.
# Note, the 'libusb' does not support suffix number only.
#
# For example: restrict to use ttyS1, ttyS2 and hiddev1 device nodes at /dev
# path only.
# allowed-device-nodes = /dev/ttyS1;/dev/ttyS2;/dev/hiddev1
#
# For example: restrict to use ttyS and ttyUSB two groups of device node at
# /dev,/dev/usb, and /dev/usb/hid paths(includes ttyS0 to ttySN and ttyUSB0 to
# ttyUSBN, N is number).
# allowed-device-nodes = ttyS;ttyUSB
#
# For example: restrict to use hiddev group of device node at /dev,/dev/usb,
# and /dev/usb/hid paths(includes hiddev0 to hiddevN, N is number).
# allowed-device-nodes = hiddev
#
# For example: restrict to use libusb device.
# allowed-device-nodes = libusb
allowed-device-nodes =
# Daemon will hibernate system to instead of system shutdown when power
# event occur. Allowed options are yes and no. Default is no.
hibernate = no
# Enable cloud solution.
# The allowed options are yes and no. Default is no.
cloud-active = no
# Account for cloud server login.
cloud-account =
Далее в Docker необходимо установить контейнер, который будет парсить эту информацию и передавать в MQTT брокер:
Проверяем работоспособность по ссылкам: http://192.168.0.24:5003/health и http://192.168.0.24:5003/mqtthealth. Не забудьте поменять IP на свой. Если все нормально, то мы увидим:
{"code":"SUCCESS","message":"OK"}
Отлично! Данные отправляются в MQTT. Теперь необходимо достать их в Home Assistant. Для этого создаем сенсоры:
Сколько не искал как настроить ZM, чтобы он сам удалял старые записи, так и не смог найти. Пришлось сделать свой костыль на PHP. Скрипт писался исключительно для себя, и не претендует на правильность.
<?php
$servername = ""; // IP адрес MySQL сервера
$database = "zm"; // Имя БД
$username = ""; // Имя пользователя БД
$password = ""; // Пароль пользователя БД
$path = ""; // Путь к папке с записями
$interval = "7"; // Удалять записи старше N дней
// Создаем соединение
$mysqli = new mysqli($servername, $username, $password, $database);
// Получаем записи старше N дней
$result = $mysqli->query('SELECT * FROM `Events` WHERE StartDateTime < (NOW() - INTERVAL '.$interval.' DAY)');
$rows = $result->fetch_all(MYSQLI_ASSOC);
// Форматируем дату
$arrDates = array();
foreach($rows as $row) {
$date = explode(' ', $row['StartDateTime'])[0];
array_push($arrDates, $date);
}
// Удаляем дубликаты дат
$arrDates = array_unique($arrDates);
// Удаляем папки старше N дней
foreach($arrDates as $date) {
// Удаление для каждого монитора отдельно
exec('rm -R '.$path.'5/'.$date);
exec('rm -R '.$path.'6/'.$date);
}
// Удаляем записи старше N дней
$mysqli->query('DELETE FROM `Events` WHERE StartDateTime < (NOW() - INTERVAL '.$interval.' DAY)');
// Закрываем соединение
$mysqli->close();
Скрипт запускается командой php script.php из консоли и может быть добавлен в cron.
Датчик протечки или система Анти-кот в Home Assistant
Кот повадился гадить на входной коврик, да так метко, что иногда не замечаешь, вся лужа под ковриком! Что бы не портился ламинат от влаги, пришлось быстро собрать на коленке систему анти-кот которая будет оповещать о совершенном котом преступлении. Для этого понадобилось:
В роле контактов я использую полоски фольги с приклеенными к ним малярным скотчем проводами:
Контакты из фольги
В Home Assistant это выглядит так:
Анти-кот в Home Assistant
Система относительно простая, но рабочая. Из минусов — необходимо подводить питание. Если нету рядом розетки, то это немного проблематично. Можно также использовать и как датчик протечки воды.
Подвох с интеграцией Xiaomi Mi LED Desk Lamp в Home Assistant
Купили пару настольных ламп от Xiaomi заранее посмотрев список поддерживающихся устройств.
Модель в списке поддерживающихся
Но тут я столкнулся с проблемой — отсутствует пункт включения локального управления лампой! Соответственно добавить лампу через интеграцию Yeelight не получится.
Отсутствует пункт включения управления по LAN
После гугления проблемы оказалось, что после очередного обновления приложения Yeelight зачем-то убрали этот пункт. Решение — откатить приложение Yeelight и включить локальное управление, а затем можно обновиться до последней версии.
В старой версии приложения есть пункт включения LAN режима
После включения режима лампа без проблем добавляется в Home Assistant через стандартную интеграцию.
Так как меня изрядно задолбало видеть «unavailable» и идти перещелкивать автомат на свет, то я начал искать выход из положения. Нашел интеграцию через MIIO https://github.com/al-one/hass-miio-yeelink. Интеграция ставится либо вручную в папку custom_components, либо через HACS.
Для добавления понадобиться токен устройства, который можно посмотреть через шлюз, либо через модифицированный Mi Home от vevs.
После добавления появится 1 объект(по крайней мере для моей модели ceiling20) light без ночного режима и RGB подсветки. Для добавления ночника необходимо создать кнопку и написать автоматизацию.
- alias: Nightlight Off
trigger:
- platform: state
entity_id: input_boolean.yeelink_nightlight
to: "off"
action:
- service: miio_yeelink.send_command
data:
entity_id: light.xiaomi_yeelink
method: set_ps
params:
- nightlight
- 'off'
- alias: Nightlight On
trigger:
- platform: state
entity_id: input_boolean.yeelink_nightlight
to: "on"
action:
- service: miio_yeelink.send_command
data:
entity_id: light.xiaomi_yeelink
method: set_ps
params:
- nightlight
- 'on'
Получим результат:
Да, пока нету поддержки RGB подсветки, но думаю в будущем автор ее добавит. Мне же не особо важна подсветка, а в крайнем случае ей можно управлять через приложение Yeelight. Самое главное, что теперь моя лампа не отваливается несколько раз в сутки, и не приходится бегать дергать автомат, что бы можно было включать с Яндекс.Станции.