mirror of
https://github.com/andvikt/mega_hacs.git
synced 2025-12-12 01:24:29 +05:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
687e80f729 | ||
|
|
7d777c9e82 | ||
|
|
c9f0e85f6a | ||
|
|
e75f8b91ef | ||
|
|
bf15d4f3f9 | ||
|
|
124ef36564 |
@@ -1,5 +1,15 @@
|
|||||||
from itertools import permutations
|
order ='brg'
|
||||||
|
rgb = 'rgb'
|
||||||
|
|
||||||
RGB_COMBINATIONS = [''.join(x) for x in permutations('rgb')]
|
map_to_order = [rgb.index(x) for x in order]
|
||||||
|
map_from_order = [order.index(x) for x in rgb]
|
||||||
|
|
||||||
print(RGB_COMBINATIONS)
|
|
||||||
|
_rgb = [
|
||||||
|
rgb[x] for x in map_to_order
|
||||||
|
]
|
||||||
|
_order = [
|
||||||
|
_rgb[x] for x in map_from_order
|
||||||
|
]
|
||||||
|
|
||||||
|
print(_rgb, _order)
|
||||||
@@ -77,4 +77,5 @@ REMOVE_CONFIG = [
|
|||||||
'sensor',
|
'sensor',
|
||||||
'smooth',
|
'smooth',
|
||||||
]
|
]
|
||||||
RGB_COMBINATIONS = [''.join(x) for x in permutations('rgb')]
|
RGB_COMBINATIONS = [''.join(x) for x in permutations('rgb')]
|
||||||
|
RGB = 'rgb'
|
||||||
|
|||||||
@@ -91,6 +91,8 @@ class MegaD:
|
|||||||
**kwargs,
|
**kwargs,
|
||||||
):
|
):
|
||||||
"""Initialize."""
|
"""Initialize."""
|
||||||
|
if DOMAIN not in hass.data:
|
||||||
|
hass.data[DOMAIN] = {}
|
||||||
if config is not None:
|
if config is not None:
|
||||||
lg.debug(f'load config: %s', config.data)
|
lg.debug(f'load config: %s', config.data)
|
||||||
self.config = config
|
self.config = config
|
||||||
@@ -673,7 +675,7 @@ class MegaD:
|
|||||||
cmd = dict(
|
cmd = dict(
|
||||||
pt=config[0][0],
|
pt=config[0][0],
|
||||||
chip=chip,
|
chip=chip,
|
||||||
ws=''.join([hex(x).split('x')[1].ljust(2, '0').upper() for x in _next_val])
|
ws=''.join([hex(x).split('x')[1].rjust(2, '0').upper() for x in _next_val])
|
||||||
)
|
)
|
||||||
await self.request(**cmd)
|
await self.request(**cmd)
|
||||||
|
|
||||||
|
|||||||
@@ -33,9 +33,9 @@ from .const import (
|
|||||||
CONF_SWITCH,
|
CONF_SWITCH,
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
CONF_CUSTOM,
|
CONF_CUSTOM,
|
||||||
CONF_SKIP, CONF_LED, CONF_WS28XX, CONF_PORTS, CONF_WHITE_SEP, CONF_SMOOTH, CONF_ORDER, CONF_CHIP,
|
CONF_SKIP, CONF_LED, CONF_WS28XX, CONF_PORTS, CONF_WHITE_SEP, CONF_SMOOTH, CONF_ORDER, CONF_CHIP, RGB,
|
||||||
)
|
)
|
||||||
from .tools import int_ignore
|
from .tools import int_ignore, map_reorder_rgb
|
||||||
|
|
||||||
lg = logging.getLogger(__name__)
|
lg = logging.getLogger(__name__)
|
||||||
SCAN_INTERVAL = timedelta(seconds=5)
|
SCAN_INTERVAL = timedelta(seconds=5)
|
||||||
@@ -119,14 +119,8 @@ class MegaRGBW(LightEntity, BaseMegaEntity):
|
|||||||
self._task: asyncio.Task = None
|
self._task: asyncio.Task = None
|
||||||
self._restore = None
|
self._restore = None
|
||||||
self.smooth: timedelta = self.customize[CONF_SMOOTH]
|
self.smooth: timedelta = self.customize[CONF_SMOOTH]
|
||||||
self._color_map = self.customize.get(CONF_ORDER, 'rgb')
|
self._color_order = self.customize.get(CONF_ORDER, 'rgb')
|
||||||
self._last_called: float = 0
|
self._last_called: float = 0
|
||||||
if self._color_map == 'rgb':
|
|
||||||
self._color_map = None
|
|
||||||
else:
|
|
||||||
self._color_map = {
|
|
||||||
x: i for i, x in enumerate(self._color_map)
|
|
||||||
}
|
|
||||||
self._max_values = None
|
self._max_values = None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@@ -189,11 +183,9 @@ class MegaRGBW(LightEntity, BaseMegaEntity):
|
|||||||
rgb = [
|
rgb = [
|
||||||
round(x * self.max_values[i]) for i, x in enumerate(rgb)
|
round(x * self.max_values[i]) for i, x in enumerate(rgb)
|
||||||
]
|
]
|
||||||
if self.is_ws and self._color_map is not None:
|
if self.is_ws:
|
||||||
# восстанавливаем мэпинг
|
# восстанавливаем мэпинг
|
||||||
rgb = [
|
rgb = map_reorder_rgb(rgb, RGB, self._color_order)
|
||||||
rgb[self._color_map[x]] for x in 'rgb'
|
|
||||||
]
|
|
||||||
return rgb
|
return rgb
|
||||||
|
|
||||||
async def async_turn_on(self, **kwargs):
|
async def async_turn_on(self, **kwargs):
|
||||||
@@ -267,7 +259,10 @@ class MegaRGBW(LightEntity, BaseMegaEntity):
|
|||||||
else:
|
else:
|
||||||
w = None
|
w = None
|
||||||
rgb = rgbw
|
rgb = rgbw
|
||||||
|
if self.is_ws:
|
||||||
|
rgb = map_reorder_rgb(
|
||||||
|
rgb, self._color_order, RGB
|
||||||
|
)
|
||||||
h, s, v = colorsys.rgb_to_hsv(*[x/self.max_values[i] for i, x in enumerate(rgb)])
|
h, s, v = colorsys.rgb_to_hsv(*[x/self.max_values[i] for i, x in enumerate(rgb)])
|
||||||
h *= 360
|
h *= 360
|
||||||
s *= 100
|
s *= 100
|
||||||
|
|||||||
@@ -15,5 +15,5 @@
|
|||||||
"@andvikt"
|
"@andvikt"
|
||||||
],
|
],
|
||||||
"issue_tracker": "https://github.com/andvikt/mega_hacs/issues",
|
"issue_tracker": "https://github.com/andvikt/mega_hacs/issues",
|
||||||
"version": "v1.0.0b1"
|
"version": "v1.0.1"
|
||||||
}
|
}
|
||||||
@@ -146,7 +146,7 @@ class MegaI2C(MegaPushEntity):
|
|||||||
ret = tmpl.async_render({'value': ret})
|
ret = tmpl.async_render({'value': ret})
|
||||||
except:
|
except:
|
||||||
ret = ret
|
ret = ret
|
||||||
return ret
|
return str(ret)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def device_class(self):
|
def device_class(self):
|
||||||
@@ -241,7 +241,8 @@ class Mega1WSensor(MegaPushEntity):
|
|||||||
tmpl.hass = self.hass
|
tmpl.hass = self.hass
|
||||||
ret = tmpl.async_render({'value': ret})
|
ret = tmpl.async_render({'value': ret})
|
||||||
except:
|
except:
|
||||||
return ret
|
pass
|
||||||
|
return str(ret)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def name(self):
|
def name(self):
|
||||||
@@ -255,4 +256,4 @@ class Mega1WSensor(MegaPushEntity):
|
|||||||
_constructors = {
|
_constructors = {
|
||||||
'sensor': Mega1WSensor,
|
'sensor': Mega1WSensor,
|
||||||
'i2c': MegaI2C,
|
'i2c': MegaI2C,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -117,3 +117,8 @@ class PriorityLock(asyncio.Lock):
|
|||||||
fut.set_result(True)
|
fut.set_result(True)
|
||||||
|
|
||||||
|
|
||||||
|
def map_reorder_rgb(rgb: list, from_: str, to_: str):
|
||||||
|
if from_ == to_:
|
||||||
|
return rgb
|
||||||
|
mapping = [from_.index(x) for x in to_]
|
||||||
|
return [rgb[x] for x in mapping]
|
||||||
|
|||||||
@@ -25,8 +25,7 @@
|
|||||||
- Плавное диммирование для любых диммируемых объектов (в том числе с аппаратной поддержкой и без),
|
- Плавное диммирование для любых диммируемых объектов (в том числе с аппаратной поддержкой и без),
|
||||||
[подробнее про smooth](https://github.com/andvikt/mega_hacs/wiki/smooth)
|
[подробнее про smooth](https://github.com/andvikt/mega_hacs/wiki/smooth)
|
||||||
- Возможность работы с несколькими megad
|
- Возможность работы с несколькими megad
|
||||||
- Обратная связь по [http](https://github.com/andvikt/mega_hacs/wiki/http)
|
- Обратная связь по [http](https://github.com/andvikt/mega_hacs/wiki/http)
|
||||||
будет выключена в версиях >= 1.0.0, тк в нем нет необходимости)
|
|
||||||
- Автоматическое восстановление состояний выходов после перезагрузки контроллера
|
- Автоматическое восстановление состояний выходов после перезагрузки контроллера
|
||||||
- Автоматическое добавление/изменение объектов после перезагрузки контроллера
|
- Автоматическое добавление/изменение объектов после перезагрузки контроллера
|
||||||
- [События](https://github.com/andvikt/mega_hacs/wiki/События) на двойные/долгие нажатия
|
- [События](https://github.com/andvikt/mega_hacs/wiki/События) на двойные/долгие нажатия
|
||||||
|
|||||||
Reference in New Issue
Block a user