Большинство провайдеров всегда выдают своим пользователям динамические IP-адреса. Иногда адреса бывают белыми, иногда серыми. Некоторые провайдеры выдают белые/серые адреса через раз.
В примере ниже показаны несколько полезных сенсоров:
- сенсор вашего публичного IP-адреса, обновляется раз в 2 минуты
- сенсор открытого порта, обновляется автоматизацией при изменении IP-адреса
- сенсоры скорости Интернета, обновляется раз в час
И несколько полезных скриптов:
- принудительное обновление всех сенсоров по кнопке
- перезагрузка главного роутера (для получения нового IP-адреса)
Для перезагрузки роутера используется мой кастомный компонент PythonScriptPro. Он позволяет добавлять в Home Assistant любую логику на языке Python. А также пользоваться любыми внешними библиотеками Python, в том числе устанавливать эти библиотеке в Docker контейнер, если вы пользуетесь Hass.io.
Например, можно посылать команды роутеру не по HTTP, как в моём примере, а по SSH (пример есть на GitHub компонента).
Конечно именно для вашего роутера команда будет совсем другой, не стоит бездумно копировать мой вариант.
PS. У меня в примере открытый порт обновляется раз в сутки или автоматизацией при смене IP-адреса. Просьба не злоупотреблять этим интервалом. А то сайт 2ip.ru обидится на нас всех и вообще заблокирует эту возможность.
PS. В примере показано принудительное обновление сенсоров. Таким подходом можно пользоваться с любыми объектами в Home Assistant, данные которых обновляются по времени.
binary_sensor: - platform: rest name: Open Port resource: 'https://2ip.ru/check-port/?port=80' headers: device_class: connectivity value_template: '{{ "Порт открыт" in value }}' scan_interval: '24:00:00' sensor: - platform: dnsip name: Public IP speedtestdotnet: scan_interval: '24:00:00' automation: - alias: Update open port trigger: platform: state entity_id: sensor.public_ip action: service: homeassistant.update_entity data: entity_id: sensor.public_ip # custom component: https://github.com/AlexxIT/PythonScriptsPro python_script: script: update_internet: alias: Update Internet Info sequence: - service: homeassistant.update_entity entity_id: - sensor.public_ip - binary_sensor.open_port - sensor.speedtest_download - sensor.speedtest_upload - sensor.speedtest_ping reboot_main_router: alias: Reboot main router sequence: - service: python_script.exec data: source: | import requests from requests.auth import HTTPDigestAuth requests.post( 'http://192.168.1.1/ci', auth=HTTPDigestAuth('admin', 'admin'), data='<request id="0"><command name="system reboot"/></request>', headers={'Content-Type': 'application/xml'} )
Отличная статья. Хоть большинство полезных фич у меня организовано силами скриптов в прошивке Padawan, но вот телеграмм уведомления о изменении IP, я себе наверное сделаю, да и перезагрузка по кнопке из HA не будет лишнее. Спасибо большое!!!
А такая структура не рабочая получается?
Или я что-то упускаю?
sensors.yaml
- platform: python_script
name: Telegram status
scan_interval: '00:05:00'
data:
token: !secret telegram_api
source: |
import requests
import json
token = data.get('token','')
r = requests.get('https://api.telegram.org/bot'+token+'/getMe')
if r.json()['ok'] is True:
self.state = "online"
else:
self.state = "offline"
В сенсоре нету data. Его данные можно вставить прям в код. Но secret не поддерживается
Через python файл можно. Поддерживается код во внешнем python-скрипте
Спасибо!
Ещё раз хочу сказать спасибо за этот компонент!
Перенёс в ХА скрипт для которого ранее был отдельный бот сделан.