mirror of
https://github.com/andvikt/mega_hacs.git
synced 2025-12-11 00:54:28 +05:00
add server response in mqtt mode
This commit is contained in:
@@ -17,7 +17,7 @@ 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_ALLOW_HOSTS, \
|
||||
CONF_CONV_TEMPLATE, CONF_ALL
|
||||
CONF_CONV_TEMPLATE, CONF_ALL, CONF_FORCE_D
|
||||
from .hub import MegaD
|
||||
from .config_flow import ConfigFlow
|
||||
from .http import MegaView
|
||||
@@ -28,6 +28,7 @@ CONFIG_SCHEMA = vol.Schema(
|
||||
{
|
||||
DOMAIN: {
|
||||
vol.Optional(CONF_ALLOW_HOSTS): [str],
|
||||
vol.Optional(CONF_FORCE_D, description='Принудительно слать d после срабатывания входа', default=False): bool,
|
||||
vol.Required(str, description='id меги из веб-интерфейса'): {
|
||||
vol.Optional(int, description='номер порта'): {
|
||||
vol.Optional(CONF_SKIP, description='исключить порт из сканирования', default=False): bool,
|
||||
@@ -44,7 +45,7 @@ CONFIG_SCHEMA = vol.Schema(
|
||||
CONF_RESPONSE_TEMPLATE,
|
||||
description='шаблон ответа когда на этот порт приходит'
|
||||
'сообщение из меги '): cv.template,
|
||||
vol.Optional(CONF_ACTION): cv.script_action,
|
||||
vol.Optional(CONF_ACTION): cv.script_action, # пока не реализовано
|
||||
vol.Optional(CONF_GET_VALUE, default=True): bool,
|
||||
vol.Optional(CONF_CONV_TEMPLATE): cv.template
|
||||
}
|
||||
|
||||
@@ -16,7 +16,8 @@ from homeassistant.const import (
|
||||
CONF_ENTITY_ID,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant
|
||||
from .const import EVENT_BINARY_SENSOR, DOMAIN, CONF_CUSTOM, CONF_SKIP, CONF_INVERT
|
||||
from homeassistant.helpers.template import Template
|
||||
from .const import EVENT_BINARY_SENSOR, DOMAIN, CONF_CUSTOM, CONF_SKIP, CONF_INVERT, CONF_RESPONSE_TEMPLATE
|
||||
from .entities import MegaPushEntity
|
||||
from .hub import MegaD
|
||||
|
||||
@@ -89,4 +90,18 @@ class MegaBinarySensor(BinarySensorEntity, MegaPushEntity):
|
||||
|
||||
def _update(self, payload: dict):
|
||||
self.mega.values[self.port] = payload
|
||||
if not self.mega.mqtt_inputs:
|
||||
return
|
||||
|
||||
template: Template = self.customize.get(CONF_RESPONSE_TEMPLATE, None)
|
||||
if template is not None:
|
||||
template.hass = self.hass
|
||||
ret = template.async_render(payload)
|
||||
self.hass.async_create_task(
|
||||
self.mega.request(pt=self.port, cmd=ret)
|
||||
)
|
||||
elif self.mega.force_d:
|
||||
self.hass.async_create_task(
|
||||
self.mega.request(pt=self.port, cmd='d')
|
||||
)
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ CONF_GET_VALUE = 'get_value'
|
||||
CONF_ALLOW_HOSTS = 'allow_hosts'
|
||||
CONF_CONV_TEMPLATE = 'conv_template'
|
||||
CONF_POLL_OUTS = 'poll_outs'
|
||||
CONF_FORCE_D = 'force_d'
|
||||
PLATFORMS = [
|
||||
"light",
|
||||
"switch",
|
||||
|
||||
@@ -15,7 +15,8 @@ from homeassistant.const import (DEVICE_CLASS_TEMPERATURE, DEVICE_CLASS_HUMIDITY
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.entity import Entity
|
||||
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
|
||||
from .const import TEMP, HUM, PRESS, LUX, PATT_SPLIT, DOMAIN, CONF_HTTP, EVENT_BINARY_SENSOR, CONF_CUSTOM, CONF_SKIP
|
||||
from .const import TEMP, HUM, PRESS, LUX, PATT_SPLIT, DOMAIN, CONF_HTTP, EVENT_BINARY_SENSOR, CONF_CUSTOM, CONF_SKIP, \
|
||||
CONF_FORCE_D
|
||||
from .entities import set_events_off, BaseMegaEntity
|
||||
from .exceptions import CannotConnect
|
||||
from .tools import make_ints
|
||||
@@ -163,6 +164,10 @@ class MegaD:
|
||||
self._customize = c
|
||||
return self._customize
|
||||
|
||||
@property
|
||||
def force_d(self):
|
||||
return self.customize.get(CONF_FORCE_D, False)
|
||||
|
||||
@property
|
||||
def is_online(self):
|
||||
return (datetime.now() - self.last_update).total_seconds() < (self.poll_interval + 10)
|
||||
|
||||
@@ -15,5 +15,5 @@
|
||||
"@andvikt"
|
||||
],
|
||||
"issue_tracker": "https://github.com/andvikt/mega_hacs/issues",
|
||||
"version": "v0.3.13"
|
||||
"version": "v0.3.16"
|
||||
}
|
||||
12
readme.md
12
readme.md
@@ -113,6 +113,18 @@ mega:
|
||||
|
||||
```
|
||||
|
||||
Начиная с версии v0.3.16 ответ можно слать так же и в режиме MQTT. Аналогично, темплейт должен возвращать готовую команду
|
||||
такую же как требует команда cmd, так же можно использовать d, но d не отправляется по умолчанию, это сделано чтобы не
|
||||
сломать текущую логику у пользователей предыдущих версий. Чтобы включить для всех входов в режиме mqtt отправку команды
|
||||
d необходимо в конфиге прописать следующее:
|
||||
```yaml
|
||||
mega:
|
||||
mega1:
|
||||
force_d: true
|
||||
```
|
||||
**Внимание!** Нельзя использовать чекбокс напротив поля act если планируется использовать ответ сервера - у вас и
|
||||
сработает act и команда от сервера, а вслучае ответа d сработает act два раза.
|
||||
|
||||
## binary_sensor и события
|
||||
|
||||
Входы будут доступны как binary_sensor, а так же в виде событий `mega.sensor` и `mega.binary`.
|
||||
|
||||
Reference in New Issue
Block a user