Просмотрено
Category: Home Assistant

Моя реализация обхода блокировки hub.docker.com

Моя реализация обхода блокировки hub.docker.com

Обход блокировки hub.docker.org

Так как hub.docker.com стал не доступен для России, то у меня соответственно появились проблемы с обновление Home Assistant.

Заблокированный hub.docker.com

Уже написано куча статей как можно решить эту проблему: использовать VPN, использовать зеркала, AlexxIT предложил простой вариант обхода для Home Assistant через аддон AdGuard. Я же просто хочу показать как я реализовал обход блокировки hub.docker.org

Дано:
Частный VPN сервер в амстердаме.
Роутер Keenetic Giga

Что делаю:

1. Поднимаю VPN интерфейс

    VPN интерфейс

    2. На 2ip.ru смотрю ip для hub.docker.org. Это будут 54.156.140.159, 44.221.37.199, 52.44.227.212.

    Ищу ip адреса для hub.docker.org

    3. Создаю в роутере маршруты для этих ip.

    • Тип маршрута -> Маршрут до узла
    • Описание -> Любое. Я указал hub.docker.org
    • Адрес узла назначения -> IP адрес полученный в предыдущем шаге.
    • Адрес шлюза -> Оставляем поле пустым.
    • Интерфейс -> Выбираем интерфейс поднятого VPN.
    • Добавлять автоматически -> Отмечаем
    • Эксклюзивный маршрут -> Отмечаем
    Настраиваю маршруты для hub.docker.org

    4. Проверяю сайт hub.docker.org. Он открывается, а вот контейнеры в Home Assistant не обновляются. Проверил на десктопе запулить контейнер — тоже нет.

    hub.docker.org открылся

    5. Ищу куда обращается Docker через Wireshark. Контейнеры он тянет с registry-1.docker.io. IP адреса: 54.236.113.205, 54.227.20.253, 54.198.86.24.

    Ищу ip адреса для registry-1.docker.io через wireshark

    6. Добавляю маршруты в роутере для registry-1.docker.io.

    Список всех маршрутов

    После всех манипуляций у меня стал нормально обновляться Home Assistant и открываться hub.docker.org, а значит обход блокировки hub.docker.org работает. На этом все, спасибо за внимание! 🙂

    Гибернация компьютера в Home Assistant

    Гибернация компьютера в Home Assistant

    Гибернация компьютера в Home Assistant

    Поскольку я часто использую гибернацией, я решил сделать гибернацию своего ПК через Home Assistant.

    Если с выключением компьютера через RPC Shutdown всё понятно, то с переходом в режим гибернации возник вопрос, так как RPC Shutdown не может отправить ПК в этот режим.

    Я начал искать варианты и наткнулся на программу под названием Airytec Switch Off. Эта программа позволяет автоматически или удаленно выключать компьютер с любого компьютера или мобильного телефона. Что для меня важно, так это то, что она имеет веб-интерфейс с ссылками на команды, из которых я и получил URL которые я использовал в Home Assistant.

    Теперь я расскажу, как я реализовал это у себя. Для начала, нужно скачать и установить саму программу. После установки и запуска, в трее появится иконка. Чтобы получить доступ к настройкам программы, нужно кликнуть правой клавишей мыши по иконке и выбрать пункт Options.

    Выбираем пункт Options

    Далее переходим во вкладку Remote и ставим галочку Enable web interface. После кликаем по View web interface.

    Включаем web интерфейс

    Мы попадаем в веб-интерфейс программы, откуда и будем извлекать адрес ссылки для удаленного выключения/перезагрузки/сна/гибернации.

    Web интерфейс Airytec Switch Off.

    Чтобы получить адрес ссылки для выключения/перезагрузки/сна/гибернации, щелкните правой кнопкой мыши по ссылке и выберите Копировать адрес ссылки. В моем случае, если я хочу перейти в режим гибернации, ссылка будет выглядеть так:

    http://localhost:700/?action=System.Hibernate

    Чтобы использовать этот адрес, необходимо заменить localhost на локальный IP-адрес вашего компьютера. В моем случае это будет так:

    http://192.168.30.68:700/?action=System.Hibernate

    Обратите внимание, что эти адреса могут отличаться в зависимости от вашей конфигурации и настроек системы.

    В Home Assistant необходимо создать команды Shell. Я сделал это сразу для всех вариантов.

    shell_command:
      shutdown_mypc: "curl -k http://192.168.30.68:700/?action=System.Shutdown"
      restart_mypc: "curl -k http://192.168.30.68:700/?action=System.Restart"
      sleep_mypc: "curl -k http://192.168.30.68:700/?action=System.Sleep"
      hibernate_mypc: "curl -k http://192.168.30.68:700/?action=System.Hibernate"

    Для включения или гибернации своего ПК я использую переключатель. Вот пример моего переключателя:

    switch:
      - platform: wake_on_lan
        name: "Мой ПК"
        mac: XX:XX:XX:XX:XX:XX
        turn_off:
          service: shell_command.hibernate_mypc
          
    

    На этом все. Надеюсь, моя статья кому-то поможет.

    Скрипты для кофеварки Redmond(RedSolution) SkyCoffee M1509S/M1519S в Home Assistant

    Скрипты для кофеварки Redmond(RedSolution) SkyCoffee M1509S/M1519S в Home Assistant

    Скрипты для кофеварки Redmond(RedSolution) SkyCoffee M1509S/M1519S в Home Assistant

    Просили показать как у меня реализована дозирование кофе в кофеварке Redmond M1509S/M1519S. В двух словах:

    В роли шлюза использую ESP32 с прошивкой https://github.com/alutov/ESP32-R4sGate-for-Redmond.

    Устройства прилетают в Home Assistant через MQTT.

    Кофеварка в MQTT

    Скрипты:

    01_coffee:
      alias: Кофеварка - Одна чашка кофе
      sequence:
        - service: switch.turn_off
          data:
            entity_id: switch.r4s01_coffee_strength
        - delay: 0:00:02
        - service: switch.turn_on
          data:
            entity_id: switch.r4s01_coffee_switch
        - delay: 0:02:00
        - service: switch.turn_off
          data:
            entity_id: switch.r4s01_coffee_switch
        - delay: 0:0:10
        - service: media_player.play_media
          entity_id: media_player.yandex_station_m00scgg00cx7cg
          data:
            media_content_id: Ваш кофе готов
            media_content_type: text
    
    02_coffee:
      alias: Кофеварка - Две чашки кофе
      sequence:
        - service: switch.turn_off
          data:
            entity_id: switch.r4s01_coffee_strength
        - delay: 0:00:02
        - service: switch.turn_on
          data:
            entity_id: switch.r4s01_coffee_switch
        - delay: 0:04:00
        - service: switch.turn_off
          data:
            entity_id: switch.r4s01_coffee_switch
        - delay: 0:0:10
        - service: media_player.play_media
          entity_id: media_player.yandex_station_m00scgg00cx7cg
          data:
            media_content_id: Ваш кофе готов
            media_content_type: text
    03_coffee:
      alias: Кофеварка - Три чашки кофе
      sequence:
        - service: switch.turn_off
          data:
            entity_id: switch.r4s01_coffee_strength
        - delay: 0:00:02
        - service: switch.turn_on
          data:
            entity_id: switch.r4s01_coffee_switch
        - delay: 0:06:00
        - service: switch.turn_off
          data:
            entity_id: switch.r4s01_coffee_switch
        - delay: 0:0:10
        - service: media_player.play_media
          entity_id: media_player.yandex_station_m00scgg00cx7cg
          data:
            media_content_id: Ваш кофе готов
            media_content_type: text
    
    01_coffee_strength:
      alias: Кофеварка - Одна чашка крепкого кофе
      sequence:
        - service: switch.turn_on
          data:
            entity_id: switch.r4s01_coffee_strength
        - delay: 0:00:02
        - service: switch.turn_on
          data:
            entity_id: switch.r4s01_coffee_switch
        - delay: 0:02:30
        - service: switch.turn_off
          data:
            entity_id: switch.r4s01_coffee_switch
        - delay: 0:00:02
        - service: switch.turn_off
          data:
            entity_id: switch.r4s01_coffee_strength
        - delay: 0:0:10
        - service: media_player.play_media
          entity_id: media_player.yandex_station_m00scgg00cx7cg
          data:
            media_content_id: Ваш кофе готов
            media_content_type: text
    
    02_coffee_strength:
      alias: Кофеварка - Две чашки крепкого кофе
      sequence:
        - service: switch.turn_on
          data:
            entity_id: switch.r4s01_coffee_strength
        - delay: 0:00:02
        - service: switch.turn_on
          data:
            entity_id: switch.r4s01_coffee_switch
        - delay: 0:05:00
        - service: switch.turn_off
          data:
            entity_id: switch.r4s01_coffee_switch
        - delay: 0:00:02
        - service: switch.turn_off
          data:
            entity_id: switch.r4s01_coffee_strength
        - delay: 0:0:10
        - service: media_player.play_media
          entity_id: media_player.yandex_station_m00scgg00cx7cg
          data:
            media_content_id: Ваш кофе готов
            media_content_type: text
    
    03_coffee_strength:
      alias: Кофеварка - Три чашки крепкого кофе
      sequence:
        - service: switch.turn_on
          data:
            entity_id: switch.r4s01_coffee_strength
        - delay: 0:00:02
        - service: switch.turn_on
          data:
            entity_id: switch.r4s01_coffee_switch
        - delay: 0:07:30
        - service: switch.turn_off
          data:
            entity_id: switch.r4s01_coffee_switch
        - delay: 0:00:02
        - service: switch.turn_off
          data:
            entity_id: switch.r4s01_coffee_strength
        - delay: 0:0:10
        - service: media_player.play_media
          entity_id: media_player.yandex_station_m00scgg00cx7cg
          data:
            media_content_id: Ваш кофе готов
            media_content_type: text
    
    00_coffee_stop:
      alias: Кофеварка - Стоп
      sequence:
        - service: script.turn_off
          target:
            entity_id:
              - script.01_coffee_strength
              - script.02_coffee_strength
              - script.03_coffee_strength
              - script.01_coffee
              - script.02_coffee
              - script.03_coffee
        - delay: 0:00:01
        - service: switch.turn_off
          target:
            entity_id: switch.r4s01_coffee_switch
        - delay: 0:00:01
        - service: switch.turn_off
          target:
            entity_id: switch.r4s01_coffee_strength
    
    
    

    Активирую скрипты через команды колонке. Использую компонент https://github.com/dext0r/ha-yandex-station-intents.

    Intents:

    yandex_station_intents:
      intents:
        Сделай кофе: Заказ принят, делаю чашечку кофе #1
        Сделай чашку кофе: Заказ принят, делаю чашечку кофе #2
        Сделай две чашки кофе: Заказ принят, делаю две чашки кофе #3
        Сделай три чашки кофе: Заказ принят, делаю три чашки кофе #4
        Сделай чашку крепкого кофе: Заказ принят, делаю чашечку крепкого кофе #5
        Сделай две чашки крепкого кофе: Заказ принят, делаю две чашки крепкого кофе #6
        Сделай три чашки крепкого кофе: Заказ принят, делаю три чашки крепкого кофе #7
        Сделай крепкий кофе: Заказ принят, делаю чашечку крепкого кофе #8
        Отмени кофе: Отменяю заказ #9

    Автоматизации:

    - alias: Кофеварка - Одна чашка кофе
      trigger:
        platform: event
        event_type: yandex_intent
        event_data:
          text: Сделай кофе
      action:
        - service: script.01_coffee
    
    - alias: Кофеварка - Одна чашка кофе2
      trigger:
        platform: event
        event_type: yandex_intent
        event_data:
          text: Сделай чашку кофе
      action:
        - service: script.01_coffee
    
    - alias: Кофеварка - Две чашки кофе
      trigger:
        platform: event
        event_type: yandex_intent
        event_data:
          text: Сделай две чашки кофе
      action:
        - service: script.02_coffee
    
    - alias: Кофеварка - Три чашки кофе
      trigger:
        platform: event
        event_type: yandex_intent
        event_data:
          text: Сделай три чашки кофе
      action:
        - service: script.03_coffee
    
    - alias: Кофеварка - Одна чашка крепкого кофе
      trigger:
        platform: event
        event_type: yandex_intent
        event_data:
          text: Сделай крепкий кофе
      action:
        - service: script.01_coffee_strength
    
    - alias: Кофеварка - Одна чашка крепкого кофе2
      trigger:
        platform: event
        event_type: yandex_intent
        event_data:
          text: Сделай чашку крепкого кофе
      action:
        - service: script.01_coffee_strength
    
    - alias: Кофеварка - Две чашки крепкого кофе
      trigger:
        platform: event
        event_type: yandex_intent
        event_data:
          text: Сделай две чашки крепкого кофе
      action:
        - service: script.02_coffee_strength
    
    - alias: Кофеварка - Три чашки крепкого кофе
      trigger:
        platform: event
        event_type: yandex_intent
        event_data:
          text: Сделай три чашки крепкого кофе
      action:
        - service: script.03_coffee_strength
    
    - alias: Кофеварка - Стоп
      trigger:
        platform: event
        event_type: yandex_intent
        event_data:
          text: Отмени кофе
      action:
        - service: script.00_coffee_stop
    
    Интеграция ИБП CyberPower в Home Assistant

    Интеграция ИБП CyberPower в Home Assistant

    В данной статье я расскажу как добавить мониторинг ИБП в Home Assistant на примере CyberPower Value500EI.

    У данной модели есть USB разъем для мониторинга состояния ИБП. Для мониторинга у CyberPower есть своя утилита под названием PowerPanel. Скачать ее можно с сайта производителя. У меня на домашнем сервере стоит Ubuntu 20.04, по этому я скачал PowerPanel for Linux 64bit (deb).

    Подключаем ИБП через USB и устанавливаем PowerPanel:

     dpkg -i CyberPower_PPL_Linux+64bit+\(deb\)_v1.4.1.deb
    

    После установки проверяем командой:

    pwrstat -status

    В ответ, если все нормально, должны увидеть примерно следующее:

        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 брокер:

    docker pull dwinks/pwrstat_docker
    docker volume create pwrstat_data
    docker run -d -p 5003:5003 --name=pwrstat --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v pwrstat_data:/data dwinks/pwrstat_docker

    После запуска контейнера смотрим его ID из списка:

    docker ps -a
    
    Список запущенных контейнеров

    Переходим в консоль контейнера:

    docker exec -it a86d79a48027 bash

    В контейнере нам нужно для удобства установить nano и отредактировать конфиг. Для это выполняем:

    apt update
    apt install nano -y
    nano /pwrstat.yaml

    В конфиге указываем IP адрес и порт MQTT брокера, частота обновления, имя и пароль MQTT.

    pwrstat_api: # optional
      log_level: WARNING # optional
    mqtt:
      broker: "192.168.0.24"
      port: 1883
      client_id: "pwrstat_mqtt"
      topic: "sensors/basement/power/ups"
      refresh: 5
      qos: 0
      retained: true
      username: "*****" # optional
      password: "*****" # optional, required if username specified
    rest:
      port: 5003
      bind_address: "0.0.0.0"
    prometheus:
      port: 9222
      bind_address: "0.0.0.0"
      labels:
        rack: "0"
    
    

    Перезапускаем контейнер:

    docker restart pwrstat

    Проверяем работоспособность по ссылкам: http://192.168.0.24:5003/health и http://192.168.0.24:5003/mqtthealth. Не забудьте поменять IP на свой. Если все нормально, то мы увидим:

    {"code":"SUCCESS","message":"OK"}

    Отлично! Данные отправляются в MQTT. Теперь необходимо достать их в Home Assistant. Для этого создаем сенсоры:

    mqtt:
      sensor:
        # UPS Sensors
        - name: "UPS Model Name"
          icon: mdi:rename-box
          state_topic: "sensors/basement/power/ups"
          value_template: "{{ value_json['Model Name'] }}"
    
        - name: "UPS Rating Voltage"
          icon: mdi:flash-triangle
          state_topic: "sensors/basement/power/ups"
          value_template: "{{ value_json['Rating Voltage'] }}"
    
        - name: "UPS Rating Power"
          icon: mdi:lightning-bolt
          state_topic: "sensors/basement/power/ups"
          value_template: "{{ value_json['Rating Power'] }}"
    
        - name: "UPS State"
          icon: mdi:transmission-tower
          state_topic: "sensors/basement/power/ups"
          value_template: "{{ value_json['State'] }}"
    
        - name: "UPS Power Supply by"
          icon: mdi:power-socket-eu
          state_topic: "sensors/basement/power/ups"
          value_template: "{{ value_json['Power Supply by'] }}"
    
        - name: "UPS Utility Voltage"
          icon: mdi:flash-triangle-outline
          state_topic: "sensors/basement/power/ups"
          value_template: "{{ value_json['Utility Voltage'] }}"
    
        - name: "UPS Output Voltage"
          icon: mdi:flash-triangle-outline
          state_topic: "sensors/basement/power/ups"
          value_template: "{{ value_json['Output Voltage'] }}"
    
        - name: "UPS Battery Capacity"
          icon: mdi:car-battery
          state_topic: "sensors/basement/power/ups"
          value_template: "{{ value_json['Battery Capacity'] }}"
    
        - name: "UPS Remaining Runtime"
          icon: mdi:timer-sand
          state_topic: "sensors/basement/power/ups"
          value_template: "{{ value_json['Remaining Runtime'] }}"
    
        - name: "UPS Load"
          icon: mdi:lightning-bolt
          state_topic: "sensors/basement/power/ups"
          value_template: "{{ value_json['Load'] }}"
    
        - name: "UPS Line Interaction"
          state_topic: "sensors/basement/power/ups"
          value_template: "{{ value_json['Line Interaction'] }}"
    
        - name: "UPS Test Result"
          state_topic: "sensors/basement/power/ups"
          value_template: "{{ value_json['Test Result'] }}"
    
        - name: "UPS Last Power Event"
          state_topic: "sensors/basement/power/ups"
          value_template: "{{ value_json['Last Power Event'] }}"
    

    У меня это выглядит вот так:

    Список датчиков UPS

    Так же я настроил уведомления в Telegramm при отключении и включении электричества.

    - alias: "Уведомления - Питание от ИБП"
      mode: single
      trigger:
        - platform: template
          value_template: "{{ states('sensor.ups_state') == 'Power Failure' }}"
      action:
        - service: notify.me
          data:
            message: "Внимание! Проблемы с питанием, переход на питание от аккумулятора."
    
    - alias: "Уведомления - Питание от сети"
      mode: single
      trigger:
        - platform: template
          value_template: "{{ states('sensor.ups_state') == 'Normal' }}"
      action:
        - service: notify.me
          data:
            message: "Питание восстановлено"

    На этом настройка завершена! Спасибо за внимание 🙂

    Датчик протечки или система Анти-кот в Home Assistant

    Датчик протечки или система Анти-кот в Home Assistant

    Кот повадился гадить на входной коврик, да так метко, что иногда не замечаешь, вся лужа под ковриком! Что бы не портился ламинат от влаги, пришлось быстро собрать на коленке систему анти-кот которая будет оповещать о совершенном котом преступлении. Для этого понадобилось:

    • Макетная плата
    • NodeMCU или Wemos
    • Резистор 10кОм
    • Пару проводов
    • Пару полосок фольги
    • Припой
    • Паяльник
    • Блок питания MicroUSB 5V

    Схема выглядит так

    Схема системы анти-кот

    Конфиг ESPHome для прошивки:

    esphome:
      name: leak-detector
      platform: ESP8266
      board: nodemcuv2
    
    # Enable logging
    logger:
    
    # Enable Home Assistant API
    api:
    
    ota:
      password: ""
    
    wifi:
      ssid: ""
      password: ""
    
      # Enable fallback hotspot (captive portal) in case wifi connection fails
      ap:
        ssid: "Leak-Detector Fallback Hotspot"
        password: ""
    
    captive_portal:
    
    sensor:
      - platform: wifi_signal
        name: "Leak Sensor WiFi Signal"
        update_interval: 15s
        filters:
          - sliding_window_moving_average:
              window_size: 15
              send_every: 15
              send_first_at: 15
        icon: mdi:wifi
        
      - platform: adc
        pin: A0
        icon: mdi:lightning-bolt
        name: "Leak Voltage"
        update_interval: 1s
        filters:
          - multiply: 3.3
        
      - platform: adc
        pin: A0
        icon: mdi:water-alert
        name: "Sink Leak"
        id: sink_leak
        update_interval: 1s
        filters:
          - multiply: 3.3
        internal: true
              
    binary_sensor:
      - platform: template
        name: "Leak Status"
        lambda: |-
             float analog = id(sink_leak).state;
             return analog < 2.5; 

    В роле контактов я использую полоски фольги с приклеенными к ним малярным скотчем проводами:

    Контакты из фольги

    В Home Assistant это выглядит так:

    Анти-кот в Home Assistant

    Система относительно простая, но рабочая. Из минусов — необходимо подводить питание. Если нету рядом розетки, то это немного проблематично. Можно также использовать и как датчик протечки воды.

    Подвох с интеграцией Xiaomi Mi LED Desk Lamp в Home Assistant

    Подвох с интеграцией Xiaomi Mi LED Desk Lamp в Home Assistant

    Xiaomi Mi LED Desk Lamp(MJTD01YL)

    Купили пару настольных ламп от Xiaomi заранее посмотрев список поддерживающихся устройств.

    Модель в списке поддерживающихся
    Модель в списке поддерживающихся

    Но тут я столкнулся с проблемой — отсутствует пункт включения локального управления лампой! Соответственно добавить лампу через интеграцию Yeelight не получится.

    Отсутствует пункт включения управления по LAN

    После гугления проблемы оказалось, что после очередного обновления приложения Yeelight зачем-то убрали этот пункт. Решение — откатить приложение Yeelight и включить локальное управление, а затем можно обновиться до последней версии.

    В старой версии приложения есть пункт включения LAN режима

    После включения режима лампа без проблем добавляется в Home Assistant через стандартную интеграцию.

    Лампа в Home Assistant

    Альтернативная интеграции потолочной лампы Yeelight в Home Assistant

    Альтернативная интеграции потолочной лампы Yeelight в Home Assistant

    Yeelight — Каталог товаров — Яндекс.Маркет

    Так как меня изрядно задолбало видеть «unavailable» и идти перещелкивать автомат на свет, то я начал искать выход из положения. Нашел интеграцию через MIIO https://github.com/al-one/hass-miio-yeelink.
    Интеграция ставится либо вручную в папку custom_components, либо через HACS.

    Для добавления понадобиться токен устройства, который можно посмотреть через шлюз, либо через модифицированный Mi Home от vevs.

    После добавления появится 1 объект(по крайней мере для моей модели ceiling20) light без ночного режима и RGB подсветки. Для добавления ночника необходимо создать кнопку и написать автоматизацию.

    configuration.yaml:

    input_boolean:
      yeelink_nightlight:
        name: nightlight
        icon: mdi:lightbulb

    automations.yaml:

    - 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. Самое главное, что теперь моя лампа не отваливается несколько раз в сутки, и не приходится бегать дергать автомат, что бы можно было включать с Яндекс.Станции.

    Интеграция GyverLamp в Home Assistant

    Интеграция GyverLamp в Home Assistant

    Лампа Гайвера декоративный светильник | Festima.Ru - Мониторинг объявлений

    Шьем свою ESP прошивкой с MQTT отсюда. В Home Assistant в configuration.yaml добавляем:

    input_number:
      gl_brightness:
        name: Brightness
        initial: 10
        min: 1
        max: 255
        step: 1
        icon: mdi:brightness-6
      gl_speed:
        name: Speed
        initial: 30
        min: 0
        max: 255
        step: 1
        icon: mdi:speedometer
    
      gl_scale:
        name: Scale
        initial: 30
        min: 1
        max: 100
        step: 1
        icon: mdi:ruler
        
    input_select:
      gl_effect:
        name: Effects
        options:
          - "Конфетти"
          - "Огонь"
          - "Радуга верт."
          - "Радуга гориз."
          - "Смена цвета"
          - "Безумие 3D"
          - "Облака 3D"
          - "Лава 3D"
          - "Плазма 3D"
          - "Радуга 3D"
          - "Павлин 3D"
          - "Зебра 3D"
          - "Лес 3D"
          - "Океан 3D"
          - "Цвет"
          - "Снегопад"
          - "Матрица"
          - "Светлячки"
          - "Аквариум"
          - "Звездопад"
          - "Пейнтбол"
          - "Спираль"
          - "Теплый свет"
          - "Маятник"
          - "Мерцание"
          - "Полицейская сирена"
          - "Дрейф"
          - "Стая"
          - "Мотыльки в банке"
          - "Демо"
        initial: "Демо"
        icon: mdi:panda

    В automations.yaml:

    - alias: Gyver Speed
      trigger:
        platform: state
        entity_id: input_number.gl_speed
        
      action:
        - service: mqtt.publish
          data_template:
            topic: homeassistant/light/ESP-dec1cf/effect/speed/set
            payload_template: "{{ trigger.to_state.state | int }}"
        
    - alias: Gyver Scale
      trigger:
        platform: state
        entity_id: input_number.gl_scale
        
      action:
        - service: mqtt.publish
          data_template:
            topic: homeassistant/light/ESP-dec1cf/effect/scale/set
            payload_template: "{{ trigger.to_state.state | int }}"
            
    - alias: Gyver Brightness
      trigger:
        platform: state
        entity_id: input_number.gl_brightness
        
      action:
        - service: mqtt.publish
          data_template:
            topic: homeassistant/light/ESP-dec1cf/brightness/set
            payload_template: "{{ trigger.to_state.state | int }}"
            
    - alias: Gyver Effect
      trigger:
        - platform: state
          entity_id: input_select.gl_effect
      action:
        - service: mqtt.publish
          data_template:
            topic: homeassistant/light/ESP-dec1cf/effect/set
            retain: true
            payload: "{{ states('input_select.gl_effect') }}"

    Радуемся: