From 2d15b60929d5c3e458e17951d7ff7ee804c0d3f9 Mon Sep 17 00:00:00 2001 From: Andrey Date: Mon, 25 Jan 2021 12:54:15 +0300 Subject: [PATCH] add allowed hosts config --- custom_components/mega/__init__.py | 4 +++- custom_components/mega/const.py | 1 + readme.md | 38 +++++++++++++++++++++--------- 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/custom_components/mega/__init__.py b/custom_components/mega/__init__.py index d1d824d..d4d14e5 100644 --- a/custom_components/mega/__init__.py +++ b/custom_components/mega/__init__.py @@ -16,7 +16,7 @@ from homeassistant.helpers import config_validation as cv from homeassistant.components import mqtt from homeassistant.config_entries import ConfigEntry from .const import DOMAIN, CONF_INVERT, CONF_RELOAD, PLATFORMS, CONF_PORTS, CONF_CUSTOM, CONF_SKIP, CONF_PORT_TO_SCAN, \ - CONF_MQTT_INPUTS, CONF_HTTP, CONF_RESPONSE_TEMPLATE, CONF_ACTION, CONF_GET_VALUE + CONF_MQTT_INPUTS, CONF_HTTP, CONF_RESPONSE_TEMPLATE, CONF_ACTION, CONF_GET_VALUE, CONF_ALLOW_HOSTS from .hub import MegaD from .config_flow import ConfigFlow from .http import MegaView @@ -26,6 +26,7 @@ _LOGGER = logging.getLogger(__name__) CONFIG_SCHEMA = vol.Schema( { DOMAIN: { + vol.Optional(CONF_ALLOW_HOSTS): [str], vol.Required(str, description='id меги из веб-интерфейса'): { vol.Optional(int, description='номер порта'): { vol.Optional(CONF_SKIP, description='исключить порт из сканирования', default=False): bool, @@ -62,6 +63,7 @@ async def async_setup(hass: HomeAssistant, config: dict): """YAML-конфигурация содержит только кастомизации портов""" hass.data[DOMAIN] = {CONF_CUSTOM: config.get(DOMAIN, {})} hass.data[DOMAIN][CONF_HTTP] = view = MegaView(cfg=config.get(DOMAIN, {})) + view.allowed_hosts |= set(config.get(DOMAIN, {}).get(CONF_ALLOW_HOSTS, [])) hass.http.register_view(view) hass.services.async_register( DOMAIN, 'save', partial(_save_service, hass), schema=vol.Schema({ diff --git a/custom_components/mega/const.py b/custom_components/mega/const.py index 3b0a313..00b694a 100644 --- a/custom_components/mega/const.py +++ b/custom_components/mega/const.py @@ -23,6 +23,7 @@ CONF_RESPONSE_TEMPLATE = 'response_template' CONF_ACTION = 'action' CONF_UPDATE_ALL = 'update_all' CONF_GET_VALUE = 'get_value' +CONF_ALLOW_HOSTS = 'allow_hosts' PLATFORMS = [ "light", "switch", diff --git a/readme.md b/readme.md index f0461dd..3406c75 100644 --- a/readme.md +++ b/readme.md @@ -14,6 +14,18 @@ большого кол-ва команд (например в сценах). Каждая следующая команда отправляется только после получения ответа о выполнении предыдущей. +## Установка +Рекомендованный способ с поддержкой обновлений - [HACS](https://hacs.xyz/docs/installation/installation): + +HACS - Integrations - Explore, в поиске ищем MegaD. + +Альтернативный способ установки: +```shell +# из папки с конфигом +wget -q -O - https://raw.githubusercontent.com/andvikt/mega_hacs/master/install.sh | bash - +``` +Не забываем перезагрузить HA + ## Зависимости **Важно!!** Для максимальной совместимости необходимо настроить интеграцию [mqtt](https://www.home-assistant.io/integrations/mqtt/) в HomeAssistant, а так же обновить ваш контроллер до последней версии, тк были важные обновления в части mqtt @@ -73,19 +85,23 @@ mega: {% if m==2 %}1:0{% else %}d{% endif %} ``` - -## Установка -Рекомендованный способ с поддержкой обновлений - [HACS](https://hacs.xyz/docs/installation/installation): - -HACS - Integrations - Explore, в поиске ищем MegaD. - -Альтернативный способ установки: +## Отладка ответов +Для отладки ответов сервера можно самим имитировать запросы контроллера, если у вас есть доступ к консоли +HA: ```shell -# из папки с конфигом -wget -q -O - https://raw.githubusercontent.com/andvikt/mega_hacs/master/install.sh | bash - +curl -v -X GET 'http://localhost:8123/mega?pt=5&m=1' ``` -Не забываем перезагрузить HA - +Если доступа нет, нужно в файл конфигурации добавить ip компьюетра, с которого вы хотите делать запросы, например: +```yaml +mega: + allow_hosts: + - 192.168.1.1 +``` +И тогда можно с локальной машины делать запросы на ваш сервер HA: +```shell +curl -v -X GET 'http://192.168.88.1.4:8123/mega?pt=5&m=1' +``` +В ответ будет приходить либо `d`, либо скрипт, который вы настроили ## Настройка `Настройки` -> `Интеграции` -> `Добавить интеграцию` в поиске ищем mega