From a77794dff7dc33274953ab3421a553885e66095f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80=D0=BE=D0=B2=20=D0=90?= =?UTF-8?q?=D0=BD=D0=B4=D1=80=D0=B5=D0=B9=20=D0=93=D0=B5=D1=80=D0=BC=D0=B0?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=B8=D1=87?= Date: Wed, 3 Nov 2021 10:24:21 +0300 Subject: [PATCH] fix sht31 updating issue fix filters positive float --- custom_components/mega/__init__.py | 9 +++++---- custom_components/mega/config_flow.py | 2 +- custom_components/mega/i2c.py | 19 +++++++++++++++---- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/custom_components/mega/__init__.py b/custom_components/mega/__init__.py index 071c060..9776d82 100644 --- a/custom_components/mega/__init__.py +++ b/custom_components/mega/__init__.py @@ -1,6 +1,7 @@ """The mega integration.""" import asyncio import logging +import typing from functools import partial import voluptuous as vol @@ -83,10 +84,10 @@ CUSTOMIZE_PORT = { vol.Optional(CONF_VALUE_TEMPLATE): cv.template, vol.Optional(CONF_FORCE_I2C_SCAN): bool, vol.Optional(CONF_HEX_TO_FLOAT): bool, - vol.Optional(CONF_FILTER_VALUES): [cv.positive_float], - vol.Optional(CONF_FILTER_SCALE): cv.positive_float, - vol.Optional(CONF_FILTER_LOW): cv.positive_float, - vol.Optional(CONF_FILTER_HIGH): cv.positive_float, + vol.Optional(CONF_FILTER_VALUES): [vol.Coerce(float)], + vol.Optional(CONF_FILTER_SCALE): vol.Coerce(float), + vol.Optional(CONF_FILTER_LOW): vol.Coerce(float), + vol.Optional(CONF_FILTER_HIGH): vol.Coerce(float), vol.Optional(CONF_SMOOTH): cv.time_period_seconds, # vol.Optional(CONF_RANGE): vol.ExactSequence([int, int]), TODO: сделать отбрасывание "плохих" значений vol.Optional(str): { diff --git a/custom_components/mega/config_flow.py b/custom_components/mega/config_flow.py index 969aff3..d9d8c3f 100644 --- a/custom_components/mega/config_flow.py +++ b/custom_components/mega/config_flow.py @@ -63,7 +63,7 @@ async def validate_input(hass: core.HomeAssistant, data): class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): """Handle a config flow for mega.""" - VERSION = 25 + VERSION = 26 CONNECTION_CLASS = config_entries.CONN_CLASS_ASSUMED async def async_step_user(self, user_input=None): diff --git a/custom_components/mega/i2c.py b/custom_components/mega/i2c.py index 46fea6c..9eeee5c 100644 --- a/custom_components/mega/i2c.py +++ b/custom_components/mega/i2c.py @@ -1,4 +1,5 @@ -from dataclasses import dataclass, field +import typing +from dataclasses import dataclass, field, astuple from urllib.parse import parse_qsl, urlparse from bs4 import BeautifulSoup from homeassistant.const import ( @@ -15,7 +16,15 @@ from homeassistant.const import ( ) from collections import namedtuple -DeviceType = namedtuple('DeviceType', 'device_class,unit_of_measurement,suffix') +# DeviceType = namedtuple('DeviceType', 'device_class,unit_of_measurement,suffix') + +@dataclass +class DeviceType: + + device_class: typing.Optional[str] = None + unit_of_measurement: typing.Optional[str] = None + suffix: typing.Optional[str] = None + delay: typing.Optional[float] = None def parse_scan_page(page: str): @@ -44,7 +53,9 @@ def parse_scan_page(page: str): req.append(params) continue elif isinstance(c, DeviceType): - c, m, suffix = c + c, m, suffix, delay = astuple(c) + if delay is not None: + params['delay'] = delay else: continue suffix = suffix or c @@ -83,7 +94,7 @@ i2c_classes = { DeviceType(DEVICE_CLASS_TEMPERATURE, TEMP_CELSIUS, None), ], 'sht31': [ - DeviceType(DEVICE_CLASS_HUMIDITY, PERCENTAGE, None), + DeviceType(DEVICE_CLASS_HUMIDITY, PERCENTAGE, None, delay=0.5), DeviceType(DEVICE_CLASS_TEMPERATURE, TEMP_CELSIUS, None), ], 'max44009': [