Compare commits

...
10 Commits
Author SHA1 Message Date
semantic-release 8dff505bb4 chore(release): v1.0.15
Update Version / Update Version (push) Successful in 5s
2026-07-10 06:49:05 +00:00
sirmrak 342a98327d fix: lux_cooldown_active
Update Version / Update Version (push) Successful in 7s
2026-07-10 09:48:56 +03:00
sirmrak d10e83c750 Добавить LICENSE
Update Version / Update Version (push) Successful in 5s
2026-07-09 22:28:37 +03:00
semantic-release 0deb61f920 chore(release): v1.0.14
Update Version / Update Version (push) Successful in 5s
2026-07-09 19:22:51 +00:00
sirmrak 563095cbcf fix: Удалены переводы атрибутов из custom_components/motion_light/translations
Update Version / Update Version (push) Successful in 6s
2026-07-09 22:22:43 +03:00
sirmrak 952feac482 fixЖ перевод атрибутов удален
Update Version / Update Version (push) Successful in 5s
2026-07-09 22:20:23 +03:00
sirmrak 7c229b37f2 Обновить custom_components/motion_light/translations/ru.json
Update Version / Update Version (push) Successful in 5s
2026-07-09 22:11:42 +03:00
sirmrak 19546a12e6 Обновить custom_components/motion_light/translations/en.json
Update Version / Update Version (push) Successful in 5s
2026-07-09 22:09:15 +03:00
sirmrak 7b9b1030f2 Обновить custom_components/motion_light/translations/en.json
Update Version / Update Version (push) Successful in 5s
2026-07-09 22:08:45 +03:00
sirmrak 13df970b21 Обновить custom_components/motion_light/manifest.json
Update Version / Update Version (push) Successful in 5s
2026-07-09 22:05:41 +03:00
7 changed files with 222 additions and 201 deletions
+16
View File
@@ -2,6 +2,22 @@
<!-- version list --> <!-- version list -->
## v1.0.15 (2026-07-10)
### Bug Fixes
- Lux_cooldown_active
([`342a983`](https://192.168.200.208:3000/sirmrak/motion_light/commit/342a98327d2297977323e12f84e0dc9bc8b3a49d))
## v1.0.14 (2026-07-09)
### Bug Fixes
- Удалены переводы атрибутов из custom_components/motion_light/translations
([`563095c`](https://192.168.200.208:3000/sirmrak/motion_light/commit/563095cbcf77d22d02a7176faf5aec6837d18b37))
## v1.0.13 (2026-07-09) ## v1.0.13 (2026-07-09)
### Bug Fixes ### Bug Fixes
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2026 sirmrak
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+1 -1
View File
@@ -1,4 +1,4 @@
"""The Motion Light integration.""" """The Motion Light integration. Без превода атрибутов для локализации"""
import logging import logging
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
+18 -2
View File
@@ -619,6 +619,20 @@ class MotionLightCoordinator(DataUpdateCoordinator):
"state": self._state, "state": self._state,
"attributes": self.attributes, "attributes": self.attributes,
}) })
def _cancel_lux_cooldown(self):
"""Cancel lux cooldown when light is turned on."""
if self._lux_cooldown_active:
self.logger.debug("Cancelling lux cooldown")
self._lux_cooldown_active = False
if self._lux_cooldown_timer:
self._lux_cooldown_timer()
self._lux_cooldown_timer = None
self.async_set_updated_data({
"state": self._state,
"attributes": self.attributes,
})
@callback @callback
def _check_lux_periodically(self, _=None): def _check_lux_periodically(self, _=None):
"""Check lux periodically.""" """Check lux periodically."""
@@ -655,7 +669,8 @@ class MotionLightCoordinator(DataUpdateCoordinator):
if not self._is_any_sensor_active(): if not self._is_any_sensor_active():
self.logger.debug("No sensors active, not turning on") self.logger.debug("No sensors active, not turning on")
return return
self._cancel_lux_cooldown()
triggered_by = self._attributes.get("triggered_by") triggered_by = self._attributes.get("triggered_by")
await self._turn_on_switches() await self._turn_on_switches()
await self._update_state(STATE_ON, triggered_by=triggered_by) await self._update_state(STATE_ON, triggered_by=triggered_by)
@@ -670,7 +685,7 @@ class MotionLightCoordinator(DataUpdateCoordinator):
await self._update_state(STATE_IDLE) await self._update_state(STATE_IDLE)
self._start_lux_check_timer() self._start_lux_check_timer()
return return
self._cancel_lux_cooldown()
triggered_by = self._attributes.get("triggered_by") triggered_by = self._attributes.get("triggered_by")
await self._turn_on_switches() await self._turn_on_switches()
await self._update_state(STATE_ON, triggered_by=triggered_by) await self._update_state(STATE_ON, triggered_by=triggered_by)
@@ -735,6 +750,7 @@ class MotionLightCoordinator(DataUpdateCoordinator):
async def _enter_manual_on(self): async def _enter_manual_on(self):
"""Enter manual_on state.""" """Enter manual_on state."""
self._cancel_lux_cooldown()
await self._update_state(STATE_MANUAL_ON) await self._update_state(STATE_MANUAL_ON)
if self.manual_idle_timeout > 0: if self.manual_idle_timeout > 0:
self._reset_manual_idle_timer() self._reset_manual_idle_timer()
+10 -10
View File
@@ -1,12 +1,12 @@
{ {
"domain": "motion_light", "domain": "motion_light",
"name": "Motion Light", "name": "Motion Light",
"version": "1.0.13", "codeowners": ["@sirmrak"],
"documentation": "https://github.com/sirmrak/motion_light", "config_flow": true,
"issue_tracker": "https://github.com/sirmrak/motion_light/issues", "dependencies": [],
"dependencies": [], "documentation": "https://github.com/sirmrak/motion_light",
"codeowners": ["@sirmrak"], "iot_class": "local_push",
"requirements": [], "issue_tracker": "https://github.com/sirmrak/motion_light/issues",
"iot_class": "local_push", "requirements": [],
"config_flow": true "version": "1.0.15"
} }
@@ -1,101 +1,85 @@
{ {
"config": { "config": {
"step": { "step": {
"user": { "user": {
"title": "Motion Light", "title": "Motion Light",
"description": "Motion-based lighting control setup", "description": "Motion-based lighting control setup",
"data": { "data": {
"name": "Name", "name": "Name",
"main_sensors": "Main triggers", "main_sensors": "Main triggers",
"extend_sensors": "Extend sensors (optional)", "extend_sensors": "Extend sensors (optional)",
"switch_entities": "Controlled switches", "switch_entities": "Controlled switches",
"lux_sensor": "Illuminance sensor (optional)", "lux_sensor": "Illuminance sensor (optional)",
"force_stop_sensor": "Force stop sensor (optional)", "force_stop_sensor": "Force stop sensor (optional)",
"force_stop_state": "Force stop sensor state", "force_stop_state": "Force stop sensor state",
"log_level": "Log level" "log_level": "Log level"
}
}
} }
}
}
},
"options": {
"step": {
"init": {
"title": "Motion Light Options",
"description": "Change integration parameters",
"data": {
"main_sensors": "Main triggers",
"extend_sensors": "Extend sensors (optional)",
"switch_entities": "Controlled switches",
"lux_sensor": "Illuminance sensor (optional)",
"force_stop_sensor": "Force stop sensor (optional)",
"force_stop_state": "Force stop sensor state",
"log_level": "Log level"
}
}
}
},
"entity": {
"switch": {
"motion_light_enabled": {
"name": "Control"
},
"motion_light_priority_manual": {
"name": "Manual priority"
}
}, },
"sensor": { "options": {
"motion_light_status": { "step": {
"name": "Status", "init": {
"state": { "title": "Motion Light Options",
"idle": "Idle", "description": "Change integration parameters",
"detecting": "Detecting", "data": {
"on": "On", "main_sensors": "Main triggers",
"delaying": "Delaying", "extend_sensors": "Extend sensors (optional)",
"active": "Extended", "switch_entities": "Controlled switches",
"off": "Off", "lux_sensor": "Illuminance sensor (optional)",
"manual_on": "Manual on", "force_stop_sensor": "Force stop sensor (optional)",
"manual_off_cooldown": "Manual off cooldown", "force_stop_state": "Force stop sensor state",
"force_stopped": "Force stopped", "log_level": "Log level"
"error": "Error", }
"disabled": "Disabled" }
}
},
"entity": {
"switch": {
"motion_light_enabled": {
"name": "Control"
},
"motion_light_priority_manual": {
"name": "Manual priority"
}
}, },
"attributes": { "sensor": {
"switch_entities": "Controlled switches", "motion_light_status": {
"main_sensors": "Main triggers", "name": "Status",
"extend_sensors": "Extend sensors", "state": {
"lux_sensor": "Illuminance sensor", "idle": "Idle",
"force_stop_sensor": "Force stop sensor", "detecting": "Detecting",
"force_stop_state": "Force stop state", "on": "On",
"force_stop_active": "Force stop active", "delaying": "Delaying",
"active_main_sensors": "Active main triggers", "active": "Extended",
"active_extend_sensors": "Active extend sensors", "off": "Off",
"lux_value": "Current illuminance", "manual_on": "Manual on",
"lux_cooldown_active": "Lux cooldown active", "manual_off_cooldown": "Manual off cooldown",
"lux_check_active": "Lux check active", "force_stopped": "Force stopped",
"triggered_by": "Triggered by", "error": "Error",
"last_motion_time": "Last motion time" "disabled": "Disabled"
}
}
},
"number": {
"motion_light_motion_filter": {
"name": "Motion filter"
},
"motion_light_off_delay": {
"name": "Off delay"
},
"motion_light_lux_threshold": {
"name": "Lux threshold"
},
"motion_light_lux_cooldown": {
"name": "Lux cooldown"
},
"motion_light_manual_idle_timeout": {
"name": "'Forgot to turn off' timer"
},
"motion_light_manual_off_cooldown": {
"name": "Manual off cooldown"
}
} }
}
},
"number": {
"motion_light_motion_filter": {
"name": "Motion filter"
},
"motion_light_off_delay": {
"name": "Off delay"
},
"motion_light_lux_threshold": {
"name": "Lux threshold"
},
"motion_light_lux_cooldown": {
"name": "Lux cooldown"
},
"motion_light_manual_idle_timeout": {
"name": "'Forgot to turn off' timer"
},
"motion_light_manual_off_cooldown": {
"name": "Manual off cooldown"
}
} }
}
} }
@@ -1,101 +1,85 @@
{ {
"config": { "config": {
"step": { "step": {
"user": { "user": {
"title": "Motion Light", "title": "Motion Light",
"description": "Настройка управления освещением по движению", "description": "Настройка управления освещением по движению",
"data": { "data": {
"name": "Название", "name": "Название",
"main_sensors": "Главные триггеры", "main_sensors": "Главные триггеры",
"extend_sensors": "Датчики продления (опционально)", "extend_sensors": "Датчики продления (опционально)",
"switch_entities": "Управляемые выключатели", "switch_entities": "Управляемые выключатели",
"lux_sensor": "Датчик освещённости (опционально)", "lux_sensor": "Датчик освещённости (опционально)",
"force_stop_sensor": "Датчик принудительной остановки (опционально)", "force_stop_sensor": "Датчик принудительной остановки (опционально)",
"force_stop_state": "Состояние датчика принудительной остановки", "force_stop_state": "Состояние датчика принудительной остановки",
"log_level": "Уровень логирования" "log_level": "Уровень логирования"
}
}
} }
}
}
},
"options": {
"step": {
"init": {
"title": "Настройки Motion Light",
"description": "Изменение параметров интеграции",
"data": {
"main_sensors": "Главные триггеры",
"extend_sensors": "Датчики продления (опционально)",
"switch_entities": "Управляемые выключатели",
"lux_sensor": "Датчик освещённости (опционально)",
"force_stop_sensor": "Датчик принудительной остановки (опционально)",
"force_stop_state": "Состояние датчика принудительной остановки",
"log_level": "Уровень логирования"
}
}
}
},
"entity": {
"switch": {
"motion_light_enabled": {
"name": "Управление"
},
"motion_light_priority_manual": {
"name": "Приоритет ручного"
}
}, },
"sensor": { "options": {
"motion_light_status": { "step": {
"name": "Статус", "init": {
"state": { "title": "Настройки Motion Light",
"idle": "Ожидание", "description": "Изменение параметров интеграции",
"detecting": "Обнаружение", "data": {
"on": "Включено", "main_sensors": "Главные триггеры",
"delaying": "Задержка выключения", "extend_sensors": "Датчики продления (опционально)",
"active": "Продлено", "switch_entities": "Управляемые выключатели",
"off": "Выключено", "lux_sensor": "Датчик освещённости (опционально)",
"manual_on": "Ручное включение", "force_stop_sensor": "Датчик принудительной остановки (опционально)",
"manual_off_cooldown": "Пауза после ручного выкл.", "force_stop_state": "Состояние датчика принудительной остановки",
"force_stopped": "Принудительная остановка", "log_level": "Уровень логирования"
"error": "Ошибка", }
"disabled": "Отключено" }
}
},
"entity": {
"switch": {
"motion_light_enabled": {
"name": "Управление"
},
"motion_light_priority_manual": {
"name": "Приоритет ручного"
}
}, },
"attributes": { "sensor": {
"switch_entities": "Управляемые выключатели", "motion_light_status": {
"main_sensors": "Главные триггеры", "name": "Статус",
"extend_sensors": "Датчики продления", "state": {
"lux_sensor": "Датчик освещённости", "idle": "Ожидание",
"force_stop_sensor": "Датчик принудительной остановки", "detecting": "Обнаружение",
"force_stop_state": "Состояние принудительной остановки", "on": "Включено",
"force_stop_active": "Принудительная остановка активна", "delaying": "Задержка выключения",
"active_main_sensors": "Активные главные триггеры", "active": "Продлено",
"active_extend_sensors": "Активные датчики продления", "off": "Выключено",
"lux_value": "Текущая освещённость", "manual_on": "Ручное включение",
"lux_cooldown_active": "Cooldown люкса активен", "manual_off_cooldown": "Пауза после ручного выкл.",
"lux_check_active": "Проверка люкса активна", "force_stopped": "Принудительная остановка",
"triggered_by": "Активировано", "error": "Ошибка",
"last_motion_time": "Последнее движение" "disabled": "Отключено"
}
}
},
"number": {
"motion_light_motion_filter": {
"name": "Фильтр движения"
},
"motion_light_off_delay": {
"name": "Задержка выключения"
},
"motion_light_lux_threshold": {
"name": "Порог освещённости"
},
"motion_light_lux_cooldown": {
"name": "Cooldown люкса"
},
"motion_light_manual_idle_timeout": {
"name": "Таймер 'забыл выключить'"
},
"motion_light_manual_off_cooldown": {
"name": "Cooldown ручного выкл."
}
} }
}
},
"number": {
"motion_light_motion_filter": {
"name": "Фильтр движения"
},
"motion_light_off_delay": {
"name": "Задержка выключения"
},
"motion_light_lux_threshold": {
"name": "Порог освещённости"
},
"motion_light_lux_cooldown": {
"name": "Cooldown люкса"
},
"motion_light_manual_idle_timeout": {
"name": "Таймер 'забыл выключить'"
},
"motion_light_manual_off_cooldown": {
"name": "Cooldown ручного выкл."
}
} }
}
} }