diff --git a/custom_components/mega/binary_sensor.py b/custom_components/mega/binary_sensor.py index b4559ba..5999261 100644 --- a/custom_components/mega/binary_sensor.py +++ b/custom_components/mega/binary_sensor.py @@ -65,6 +65,11 @@ class MegaBinarySensor(BinarySensorEntity, MegaPushEntity): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._is_on = None + self._attrs = None + + @property + def state_attributes(self): + return self._attrs @property def is_on(self) -> bool: @@ -77,9 +82,11 @@ class MegaBinarySensor(BinarySensorEntity, MegaPushEntity): payload = payload.copy() payload.pop(CONF_PORT) data.update(payload) - self.hass.bus.async_fire( - EVENT_BINARY_SENSOR, - data, - ) + if not self.is_first_update: + self.hass.bus.async_fire( + EVENT_BINARY_SENSOR, + data, + ) val = payload.get("value") - self._is_on = val == 'ON' \ No newline at end of file + self._is_on = val == 'ON' + self._attrs = data diff --git a/custom_components/mega/entities.py b/custom_components/mega/entities.py index e5c79f7..020c0ac 100644 --- a/custom_components/mega/entities.py +++ b/custom_components/mega/entities.py @@ -93,11 +93,13 @@ class MegaPushEntity(BaseMegaEntity): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.mega.subscribe(self.port, callback=self.__update) + self.is_first_update = True def __update(self, value: dict): self._update(value) self.async_write_ha_state() self.lg.debug(f'state after update %s', self.state) + self.is_first_update = False return def _update(self, payload: dict): diff --git a/readme.md b/readme.md index d9ab9fb..36ebe86 100644 --- a/readme.md +++ b/readme.md @@ -56,14 +56,51 @@ mega: skip: true 33: # для датчиков можно кастомизировать только имя и unit_of_measurement + # для температуры и влажность unit определяется автоматически, для остальных юнита нет name: какой-то датчик unit_of_measurement: hum: "%" # если датчиков несколько, то можно указывать юниты по их ключам + temp: "°C" 14: name: какой-то датчик - hum: "%" # если датчик один, то просто строчкой + unit_of_measurement: "°C" # если датчик один, то просто строчкой ``` +## События +`binary_sensor` срабатывает когда цифровой выход принимает значение 'ON', вместе с этим +он сохраняет полученные параметры от меги в аттрибутах. Атрибутами можно пользоваться так: +```yaml +- alias: some double click + trigger: + - platform: state + entity_id: binary_sensor.mega_1 + attribute: cnt + to: 2 + action: + - service: light.toggle + entity_id: light.some_light +``` +Однако, особенность state-триггера в атоматизациях HA в том, что он срабатывает только когда state меняется. Это может +мешать, тк если вы повторно совершите двойной клик, стейт уже не поменяется, поэтому рекомендуется +пользоваться event-триггером. + +При каждом срабатывании `binary_sensor` так же сообщает о событии типа `mega.sensor`. +События можно использовать в автоматизациях, например так: +```yaml +- alias: some double click + trigger: + - platform: event + event_type: mega.sensor + event_data: + entity_id: binary_sensor.mega_1 + cnt: 2 + action: + - service: light.toggle + entity_id: light.some_light +``` +Чтобы понять, какие события происходят, лучше всего воспользоваться панелью разработчика и подписаться +на вкладке события на событие `mega.sensor`, понажимать кнопки. + ## Сервисы Все сервисы доступны в меню разработчика с описанием и примерами использования ```yaml