From ef3152a08613a5dac285a9186e6e756201efd5fd Mon Sep 17 00:00:00 2001 From: Andrey Date: Sun, 31 Jan 2021 11:41:27 +0300 Subject: [PATCH] add adc port and template rendering values --- custom_components/mega/__init__.py | 4 +++- custom_components/mega/const.py | 1 + custom_components/mega/hub.py | 5 ++++- custom_components/mega/sensor.py | 7 ++++++- readme.md | 3 +++ 5 files changed, 17 insertions(+), 3 deletions(-) diff --git a/custom_components/mega/__init__.py b/custom_components/mega/__init__.py index 4dff83f..39ae410 100644 --- a/custom_components/mega/__init__.py +++ b/custom_components/mega/__init__.py @@ -16,7 +16,8 @@ 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_ALLOW_HOSTS + CONF_MQTT_INPUTS, CONF_HTTP, CONF_RESPONSE_TEMPLATE, CONF_ACTION, CONF_GET_VALUE, CONF_ALLOW_HOSTS, \ + CONF_CONV_TEMPLATE from .hub import MegaD from .config_flow import ConfigFlow from .http import MegaView @@ -45,6 +46,7 @@ CONFIG_SCHEMA = vol.Schema( 'сообщение из меги '): cv.template, vol.Optional(CONF_ACTION): cv.script_action, vol.Optional(CONF_GET_VALUE, default=True): bool, + vol.Optional(CONF_CONV_TEMPLATE): cv.template } } } diff --git a/custom_components/mega/const.py b/custom_components/mega/const.py index f284702..b1eab6e 100644 --- a/custom_components/mega/const.py +++ b/custom_components/mega/const.py @@ -24,6 +24,7 @@ CONF_ACTION = 'action' CONF_UPDATE_ALL = 'update_all' CONF_GET_VALUE = 'get_value' CONF_ALLOW_HOSTS = 'allow_hosts' +CONF_CONV_TEMPLATE = 'conv_template' PLATFORMS = [ "light", "switch", diff --git a/custom_components/mega/hub.py b/custom_components/mega/hub.py index a089115..7511283 100644 --- a/custom_components/mega/hub.py +++ b/custom_components/mega/hub.py @@ -376,6 +376,9 @@ class MegaD: m = m.find(selected=True)['value'] self._scanned[port] = (pty, m) return pty, m + elif pty == '2': + self._scanned[port] = (pty, '0') + return pty, '0' async def scan_ports(self, nports=37): for x in range(0, nports+1): @@ -391,7 +394,7 @@ class MegaD: ret['binary_sensor'][port].append({}) elif pty == "1" and (m in ['0', '1', '3'] or m is None): ret['light'][port].append({'dimmer': m == '1'}) - elif pty == '3': + elif pty in ('3', '2'): try: http_cmd = 'get' values = await self.get_port(port, force_http=True) diff --git a/custom_components/mega/sensor.py b/custom_components/mega/sensor.py index 5f9ae05..3a1e5fd 100644 --- a/custom_components/mega/sensor.py +++ b/custom_components/mega/sensor.py @@ -16,8 +16,9 @@ from homeassistant.const import ( CONF_TYPE, CONF_UNIT_OF_MEASUREMENT, ) from homeassistant.core import HomeAssistant +from homeassistant.helpers.template import Template from .entities import MegaPushEntity -from .const import CONF_KEY, TEMP, HUM, W1, W1BUS +from .const import CONF_KEY, TEMP, HUM, W1, W1BUS, CONF_CONV_TEMPLATE from .hub import MegaD import re @@ -164,6 +165,10 @@ class Mega1WSensor(MegaPushEntity): ret = str(ret) except: ret = None + tmpl: Template = self.customize.get(CONF_CONV_TEMPLATE) + if tmpl is not None and self.hass is not None: + tmpl.hass = self.hass + ret = tmpl.async_render({'value': ret}) return ret @property diff --git a/readme.md b/readme.md index 06eea34..72266c2 100644 --- a/readme.md +++ b/readme.md @@ -53,6 +53,9 @@ mega: unit_of_measurement: hum: "%" # если датчиков несколько, то можно указывать юниты по их ключам temp: "°C" + # можно так же указать шаблон для конвертации значения, может быть полезно для ацп-входа + # текущее значение порта передается в шаблон в переменной "value" + conv_template: "{{(value|float)/100}}" 14: name: какой-то датчик unit_of_measurement: "°C" # если датчик один, то просто строчкой