mirror of
https://github.com/andvikt/mega_hacs.git
synced 2025-12-12 01:24:29 +05:00
Compare commits
12 Commits
v1.0.10b18
...
v1.1.1b0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2c2b3aab74 | ||
|
|
a77794dff7 | ||
|
|
ebb513b83d | ||
|
|
f5519a595d | ||
|
|
ee26759003 | ||
|
|
8869ad9cee | ||
|
|
27f1e05a3a | ||
|
|
7fdc2fc9ff | ||
|
|
28bf4393f0 | ||
|
|
5ecb246eff | ||
|
|
3ee464a896 | ||
|
|
6368fd7cfc |
@@ -1,5 +1,5 @@
|
||||
[bumpversion]
|
||||
current_version = 1.0.10b18
|
||||
current_version = 1.1.1b0
|
||||
parse = (?P<major>\d+)(\.(?P<minor>\d+))(\.(?P<patch>\d+))(?P<release>[bf]*)(?P<build>\d*)
|
||||
commit = True
|
||||
tag = True
|
||||
|
||||
@@ -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): {
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -130,7 +130,6 @@ class BaseMegaEntity(CoordinatorEntity, RestoreEntity):
|
||||
if self.hass is None or self.entity_id is None:
|
||||
return {}
|
||||
if self._customize is None:
|
||||
|
||||
c_entity_id = self.hass.data.get(DOMAIN, {}).get(CONF_CUSTOM).get('entities', {}).get(self.entity_id, {})
|
||||
self.lg.debug(
|
||||
'customize %s with %s', self.entity_id, c_entity_id
|
||||
@@ -431,6 +430,8 @@ class MegaOutPort(MegaPushEntity):
|
||||
))
|
||||
|
||||
def _calc_brightness(self, brightness):
|
||||
if brightness is None:
|
||||
brightness = 0
|
||||
pct = brightness / 255
|
||||
pct = max((0, pct))
|
||||
pct = min((pct, 1))
|
||||
@@ -440,6 +441,8 @@ class MegaOutPort(MegaPushEntity):
|
||||
return brightness
|
||||
|
||||
def _cal_reverse_brightness(self, brightness):
|
||||
if brightness is None:
|
||||
brightness = 0
|
||||
l, h = self.range
|
||||
d = h - l
|
||||
pct = (brightness - l) / d
|
||||
|
||||
@@ -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': [
|
||||
|
||||
@@ -15,5 +15,5 @@
|
||||
"@andvikt"
|
||||
],
|
||||
"issue_tracker": "https://github.com/andvikt/mega_hacs/issues",
|
||||
"version": "v1.0.10b18"
|
||||
"version": "v1.1.1b0"
|
||||
}
|
||||
@@ -324,7 +324,10 @@ class Mega1WSensor(FilterBadValues):
|
||||
n = super().name
|
||||
c = self.customize.get(CONF_NAME, {})
|
||||
if isinstance(c, dict):
|
||||
c = c.get(self.key)
|
||||
try:
|
||||
c = c.get(self.key)
|
||||
except:
|
||||
pass
|
||||
return c or n
|
||||
|
||||
|
||||
|
||||
22
docs/yaml.md
22
docs/yaml.md
@@ -1,6 +1,25 @@
|
||||
С помощью yaml-конфигурации можно кастомизировать ваши устройства.
|
||||
|
||||
## Основное
|
||||
|
||||
!!! note "Альтернативная адресация"
|
||||
Начиная с v1.1.0 большинство параметров объектов можно записывать в более простой и понятной форме:
|
||||
```yaml
|
||||
mega: # название интеграции
|
||||
entities:
|
||||
sensor.some_sensor: #entity_id как в интерфейсе HA
|
||||
filter_low: 20
|
||||
filter_high: 40
|
||||
```
|
||||
Рекомендуется пользоваться именно этим способом, тк он более логичный и простой.
|
||||
|
||||
Некоторые параметры по своей логике (влияют на entity_id) не могут быть записаны таким образом, среди них:
|
||||
- domain
|
||||
- skip
|
||||
- name
|
||||
|
||||
Остальные параметры можно записывать используя новый entities
|
||||
|
||||
Конфиг записывается стандартным образом в файл `configuration.yaml`, начинаем с
|
||||
указания названия интеграции:
|
||||
```yaml hl_lines="1"
|
||||
@@ -64,6 +83,9 @@ mega:
|
||||
диммера набирает от 0 до 100%
|
||||
- **range** (list[int, int], [0, 255]), *начиная с версии 1.1.0*: границы диммирования в абсолютных единицах 0..255. При диммировании 1%
|
||||
будет равен левой границе, 100% - правой.
|
||||
```yaml
|
||||
range: [20, 200]
|
||||
```
|
||||
[Подробнее про плавное диммирование](smooth.md)
|
||||
### MegaD-16R-XT, MegaD-16PWM
|
||||
Порты расширителей MegaD-16R-XT, MegaD-16PWM конфигурируются аналогично обычным реле и диммерам, но адресация порта
|
||||
|
||||
@@ -22,7 +22,7 @@ nav:
|
||||
- Конфигурация:
|
||||
- В интерфейсе: settings.md
|
||||
- Настройка обратной связи: http.md
|
||||
- YAML-конфиг: yaml.md
|
||||
- Кастомизация: yaml.md
|
||||
- i2c: i2c.md
|
||||
- Плавные переходы: smooth.md
|
||||
- Автоматизация:
|
||||
|
||||
Reference in New Issue
Block a user