Mise en conformité a2m (type homeassistant-integration) et compatibilité Home Assistant 2026
- Carte servie et chargée par l'intégration (plus de copie dans www/ ni de ressource Lovelace) - Température de couleur en kelvins (ATTR_COLOR_TEMP supprimé de HA 2026.1), anciens préréglages convertis - get_presets déclarée avec réponse - manifest (URLs, dépendances), hacs.json, icône, .a2m/type_attributes.toml, scripts/package.py - README et CHANGELOG FR/EN, LICENSE MIT, CLAUDE.md et skill de publication - Fichiers de Home Assistant de dev retirés du suivi, .gitignore revu Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
e625f8098e
commit
2a8ba5105a
31 files changed
+410
-2792
No files matched your search
@@ -0,0 +1,12 @@
|
||||
# type_attributes de la prochaine release (type homeassistant-integration) : lus par « a2m release », validés par le
|
||||
# schéma schemas/types/homeassistant-integration.schema.json d'apc-spec, recopiés dans publication.json.
|
||||
# Tenir d'accord avec custom_components/light_preset_manager/manifest.json (domain, iot_class) et hacs.json (homeassistant).
|
||||
|
||||
# domain : texte, obligatoire (= domain du manifest)
|
||||
domain = "light_preset_manager"
|
||||
# ha_version_min : version AAAA.M.P, obligatoire (= homeassistant de hacs.json)
|
||||
ha_version_min = "2024.7.0"
|
||||
# ha_version_max : version AAAA.M.P, facultatif (dernière version de Home Assistant compatible)
|
||||
# ha_version_max = ""
|
||||
# iot_class : texte, facultatif (= iot_class du manifest)
|
||||
iot_class = "local_push"
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
name: publier-homeassistant-integration
|
||||
description: Marche à suivre pour publier une release de ce projet (Intégration personnalisée Home Assistant) avec a2m — version du manifest, notes de version, type_attributes, zip de l'intégration, contrôle, release stable ou dev, déploiement. À utiliser dès qu'il s'agit de publier, corriger ou retirer une version.
|
||||
---
|
||||
|
||||
# Publier une release de Light Preset Manager
|
||||
|
||||
Type `homeassistant-integration` du contrat apc-spec ; règles dans `CLAUDE.md`. Rien n'est publié sans l'accord de l'utilisateur.
|
||||
|
||||
1. **État** : `a2m status` — arbre git propre, branche `main` à jour avec Gitea, projet conforme.
|
||||
2. **Version** : `version` de `custom_components/light_preset_manager/manifest.json` = version X.Y.Z de la release (stable ; pour
|
||||
`--dev`, la prochaine stable visée) ; idem dans `frontend/package.json`.
|
||||
3. **Notes de version** : section `[Unreleased]` de `CHANGELOG.md` (anglais) et `[Non publié]` de `CHANGELOG.fr.md`
|
||||
(français), remplies et cohérentes ; commitées.
|
||||
4. **`type_attributes`** : mettre à jour `.a2m/type_attributes.toml` avec les valeurs de **cette** release (commité
|
||||
avec le projet, validé par le schéma du type, recopié dans `publication.json`) :
|
||||
- `domain` (texte, obligatoire) : `light_preset_manager`, le `domain` du manifest
|
||||
- `ha_version_min` (version AAAA.M.P, obligatoire) : = `homeassistant` de `hacs.json`
|
||||
- `ha_version_max` (version AAAA.M.P, facultatif) : dernière version de Home Assistant compatible
|
||||
- `iot_class` (texte, facultatif) : = `iot_class` du manifest
|
||||
5. **Fichiers** : `npm run build` dans `frontend/` (carte à jour, commitée), puis `python scripts/package.py`
|
||||
→ `dist/light_preset_manager-X.Y.Z.zip` (rôle `download`), déclaré à la release :
|
||||
`--asset "file=dist/light_preset_manager-X.Y.Z.zip;role=download"` (option répétable, une par fichier ; archive des sources
|
||||
éventuelle : `role=source`).
|
||||
6. **Contrôle** : `a2m validate`, puis `a2m release --dry-run --asset "file=dist/light_preset_manager-X.Y.Z.zip;role=download"` ;
|
||||
relire `dist/publication.json`. Si possible, tester le zip dans le Home Assistant de dev.
|
||||
7. **Publication**, avec l'accord de l'utilisateur : `a2m release --asset "file=dist/light_preset_manager-X.Y.Z.zip;role=download"` (stable) ou `--dev` (pré-release `dev`),
|
||||
puis `a2m deploy` (préproduction par défaut ; production : `--target prod`).
|
||||
8. **Après** : une version publiée ne se modifie plus. Corriger ses notes ou sa visibilité : `a2m release edit
|
||||
<version>` ; la retirer : `a2m release withdraw <version>` ; corriger le code : nouvelle version.
|
||||
+12
-27
@@ -1,38 +1,23 @@
|
||||
# Python
|
||||
# Construction
|
||||
dist/
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
.ruff_cache/
|
||||
.pytest_cache/
|
||||
*.egg-info/
|
||||
dist/
|
||||
build/
|
||||
.eggs/
|
||||
.mypy_cache/
|
||||
|
||||
# Environnements
|
||||
.venv/
|
||||
venv/
|
||||
|
||||
# Node
|
||||
node_modules/
|
||||
custom_components/light_preset_manager/frontend/*.js.map
|
||||
|
||||
# IDE
|
||||
# Home Assistant de développement : seule la configuration est versionnée
|
||||
ha-dev-config/*
|
||||
!ha-dev-config/configuration.yaml
|
||||
!ha-dev-config/scenes.yaml
|
||||
|
||||
# Éditeurs et système
|
||||
.idea/
|
||||
*.swp
|
||||
*.swo
|
||||
|
||||
# OS
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Home Assistant Dev
|
||||
ha-dev-config/.storage/
|
||||
ha-dev-config/home-assistant.log
|
||||
ha-dev-config/home-assistant_v2.db
|
||||
ha-dev-config/tts/
|
||||
ha-dev-config/.cloud/
|
||||
ha-dev-config/deps/
|
||||
|
||||
# Secrets
|
||||
secrets.yaml
|
||||
# Frontend build output
|
||||
frontend/dist/*
|
||||
!frontend/dist/.gitkeep
|
||||
@@ -0,0 +1,5 @@
|
||||
target-version = "py313"
|
||||
line-length = 120
|
||||
|
||||
[lint]
|
||||
select = ["E", "F", "I", "UP", "B"]
|
||||
@@ -0,0 +1,23 @@
|
||||
# Journal des modifications
|
||||
|
||||
Format : [Keep a Changelog](https://keepachangelog.com/fr/1.1.0/) ; versions : [SemVer](https://semver.org/lang/fr/).
|
||||
La section « Non publié » est reprise par `a2m release` sous le numéro de la nouvelle version
|
||||
(version anglaise : [CHANGELOG.md](CHANGELOG.md)).
|
||||
|
||||
## [Non publié]
|
||||
|
||||
### Ajouté
|
||||
|
||||
- Carte Lovelace `custom:light-preset-manager` : pilotage d'un groupe de lumières (allumage, luminosité, température
|
||||
de couleur) et jusqu'à quatre préréglages, enregistrés, rappelés et renommés depuis la carte ; éditeur visuel ;
|
||||
anglais et français.
|
||||
- Lumières individuelles des groupes gérées dans les préréglages.
|
||||
- Actions `save_preset`, `recall_preset`, `rename_preset`, `get_presets` ; préréglages conservés par Home Assistant.
|
||||
- La carte est servie et chargée par l'intégration : aucune ressource Lovelace à ajouter.
|
||||
- Blueprint pour la télécommande IKEA STYRBAR.
|
||||
|
||||
### Corrigé
|
||||
|
||||
- Compatibilité avec Home Assistant 2026.1 et suivants : température de couleur envoyée en kelvins (préréglages
|
||||
enregistrés en mireds convertis).
|
||||
- L'action `get_presets` renvoie sa réponse.
|
||||
@@ -0,0 +1,22 @@
|
||||
# Changelog
|
||||
|
||||
Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versions: [SemVer](https://semver.org/).
|
||||
The "Unreleased" section is taken by `a2m release` under the number of the new version
|
||||
(French version: [CHANGELOG.fr.md](CHANGELOG.fr.md)).
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Added
|
||||
|
||||
- Lovelace card `custom:light-preset-manager`: control of a group of lights (on/off, brightness, colour temperature)
|
||||
and up to four presets, saved, recalled and renamed from the card; visual editor; English and French.
|
||||
- Individual lights of groups managed in presets.
|
||||
- Actions `save_preset`, `recall_preset`, `rename_preset`, `get_presets`; presets stored by Home Assistant.
|
||||
- The card is served and loaded by the integration: no Lovelace resource to add.
|
||||
- Blueprint for the IKEA STYRBAR remote.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Compatibility with Home Assistant 2026.1 and later: colour temperature sent in kelvins (presets saved in
|
||||
mireds are converted).
|
||||
- The `get_presets` action returns its response.
|
||||
@@ -0,0 +1,66 @@
|
||||
# Light Preset Manager
|
||||
|
||||
Projet `light_preset_manager` publié par la chaîne d'outils **a2m** (repo `ange/apc-toolchain`) sur Gitea et sur
|
||||
a2msystemes.org, selon le **contrat de publication apc-spec** (repo `ange/apc-spec`, fichier `CONTRAT.md` ; termes :
|
||||
`GLOSSAIRE.md`). Ce fichier en résume ce qui concerne ce projet ; **en cas de doute, le contrat fait foi**.
|
||||
Pour publier une release : skill `publier-homeassistant-integration` (`.claude/skills/`).
|
||||
|
||||
## Ce que le contrat exige de ce type
|
||||
|
||||
- Type : `homeassistant-integration` — Intégration personnalisée Home Assistant / Home Assistant custom integration.
|
||||
- Logiciel hôte : Home Assistant (`homeassistant`).
|
||||
- `type_attributes` (schéma `schemas/types/homeassistant-integration.schema.json`) : `domain`, `ha_version_min`,
|
||||
`ha_version_max` (facultatif), `iot_class` (facultatif) ; valeurs écrites à la main dans `.a2m/type_attributes.toml`
|
||||
avant chaque release.
|
||||
- Pièces jointes obligatoires à chaque release : rôle `download` = `dist/light_preset_manager-X.Y.Z.zip`, contenu de
|
||||
`custom_components/light_preset_manager/` (construit par `python scripts/package.py`).
|
||||
- Constructeur dans a2m : non — le zip est fourni à la main : `a2m release --asset "file=dist/light_preset_manager-X.Y.Z.zip;role=download"`.
|
||||
|
||||
Profil complet : `vocabulaire/types.yml` d'apc-spec (entrée `homeassistant-integration`).
|
||||
|
||||
## Valeurs à tenir d'accord
|
||||
|
||||
| Valeur | Où |
|
||||
|---|---|
|
||||
| Version X.Y.Z | `version` de `custom_components/light_preset_manager/manifest.json` = version de la release (nom du zip) ; `version` de `frontend/package.json` |
|
||||
| `domain` | dossier `custom_components/light_preset_manager/`, `domain` du manifest, `DOMAIN` de `const.py`, `.a2m/type_attributes.toml` |
|
||||
| `ha_version_min` | `homeassistant` de `hacs.json`, `.a2m/type_attributes.toml`, README |
|
||||
| `iot_class` | `iot_class` du manifest, `.a2m/type_attributes.toml` |
|
||||
|
||||
## Structure
|
||||
|
||||
- `custom_components/light_preset_manager/` : l'intégration (seul contenu du zip publié) — `manifest.json`,
|
||||
`__init__.py` (activée par la ligne `light_preset_manager:` de `configuration.yaml`, pas de config flow ; services,
|
||||
commande WebSocket, stockage des préréglages ; sert et charge la carte), `const.py`, `services.yaml`,
|
||||
`brand/icon.png` (icône provisoire, exigée par HACS), `frontend/light-preset-manager.js` (carte construite,
|
||||
commitée).
|
||||
- `frontend/` : sources de la carte Lovelace `custom:light-preset-manager` (TypeScript, lit, esbuild ; traductions
|
||||
dans `src/locales/`) ; `npm run build` (esbuild puis `scripts/copy.js`) avant chaque commit qui les modifie et avant
|
||||
une release ; `npm run watch` en développement.
|
||||
- `docker-compose.yml` + `ha-dev-config/` (`configuration.yaml`, `scenes.yaml`) : Home Assistant de développement
|
||||
(le reste n'est pas versionné) ; tâches dans `.vscode/tasks.json`.
|
||||
- `Blueprints/` : blueprints d'automatisation fournis avec le projet (hors zip).
|
||||
- `hacs.json` : pour HACS, qui n'installe que depuis GitHub (utile seulement avec un miroir GitHub du repo).
|
||||
|
||||
## Règles
|
||||
|
||||
- `.a2m/project.toml` (données du projet : titre, résumé, tags, visibilité, statut…) est écrit par a2m :
|
||||
`a2m project update`, `a2m tags set`, `a2m project status`. Ne pas le modifier à la main.
|
||||
- Versions [SemVer](https://semver.org/) `X.Y.Z` ; tag git `vX.Y.Z` créé par `a2m release`, jamais à la main.
|
||||
Une version publiée est **immuable** (ses fichiers ne changent plus).
|
||||
- Notes de version : section `[Unreleased]` de `CHANGELOG.md` (anglais) et `[Non publié]` de `CHANGELOG.fr.md`
|
||||
(français), reprises par `a2m release`.
|
||||
- README en deux langues : `README.md` (anglais) et `README.fr.md` (français).
|
||||
- Rien n'est publié sans commande explicite. Arbre git propre et branche `main` à jour avant une release.
|
||||
- Aucun secret dans le repo (`secrets.yaml` et `ha-dev-config/` ignorés).
|
||||
|
||||
## Circuit
|
||||
|
||||
```
|
||||
a2m status # état du projet, conformité
|
||||
a2m validate # contrat + .a2m/type_attributes.toml (schéma du type)
|
||||
python scripts/package.py # dist/light_preset_manager-X.Y.Z.zip
|
||||
a2m release --dry-run --asset "file=dist/light_preset_manager-X.Y.Z.zip;role=download"
|
||||
a2m release --asset "file=dist/light_preset_manager-X.Y.Z.zip;role=download" # stable ; --dev : canal dev
|
||||
a2m deploy # le site prend la release en compte (préprod par défaut)
|
||||
```
|
||||
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) Ange-Marie MAURIN
|
||||
|
||||
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.
|
||||
@@ -0,0 +1,56 @@
|
||||
# Light Preset Manager
|
||||
|
||||
*[English version](README.md)*
|
||||
|
||||
Intégration personnalisée Home Assistant avec sa carte Lovelace : piloter un groupe de lumières (allumage,
|
||||
luminosité, température de couleur) et enregistrer jusqu'à quatre préréglages de leurs états, rappelés d'un geste.
|
||||
Home Assistant 2024.7.0 ou plus récent.
|
||||
|
||||
## Installation
|
||||
|
||||
1. Télécharger `light_preset_manager-X.Y.Z.zip` depuis la fiche du projet sur
|
||||
[a2msystemes.org](https://a2msystemes.org/projets/light_preset_manager).
|
||||
2. Le décompresser dans `config/custom_components/light_preset_manager/` de votre installation Home Assistant.
|
||||
3. Ajouter cette ligne à `configuration.yaml`, puis redémarrer Home Assistant :
|
||||
```yaml
|
||||
light_preset_manager:
|
||||
```
|
||||
|
||||
La carte est chargée automatiquement par l'intégration (aucune ressource Lovelace à ajouter).
|
||||
|
||||
## Carte
|
||||
|
||||
```yaml
|
||||
type: custom:light-preset-manager
|
||||
card_id: salon # obligatoire : identifiant unique, les préréglages sont enregistrés sous ce nom
|
||||
group: light.salon # obligatoire : groupe ou lumière pilotée par les boutons principaux
|
||||
title: Salon # facultatif
|
||||
lights: # facultatif : lumières enregistrées dans les préréglages
|
||||
- light.lampe_1
|
||||
- light.lampe_2
|
||||
presets: 4 # facultatif : nombre de préréglages (1 à 4)
|
||||
```
|
||||
|
||||
La carte a aussi un éditeur visuel.
|
||||
|
||||
## Actions
|
||||
|
||||
`light_preset_manager.save_preset`, `recall_preset`, `rename_preset`, `get_presets` (voir *Outils de développement >
|
||||
Actions*).
|
||||
|
||||
## Blueprint
|
||||
|
||||
`Blueprints/Stybarr-groups.yaml` : piloter un groupe de lumières avec une télécommande IKEA STYRBAR.
|
||||
|
||||
## Développement
|
||||
|
||||
- Home Assistant dans Docker : `docker compose up -d` (tâche VS Code *Dev: Start All*), puis http://localhost:8123.
|
||||
L'intégration est montée depuis `custom_components/` ; redémarrer Home Assistant après une modification Python.
|
||||
- Carte : `npm install` puis `npm run watch` dans `frontend/` ; le fichier construit va dans
|
||||
`custom_components/light_preset_manager/frontend/` (commité).
|
||||
- Fichier de release : `python scripts/package.py` → `dist/light_preset_manager-X.Y.Z.zip` (version lue dans
|
||||
`manifest.json`).
|
||||
|
||||
## Licence
|
||||
|
||||
MIT, voir le fichier LICENSE.
|
||||
@@ -0,0 +1,53 @@
|
||||
# Light Preset Manager
|
||||
|
||||
*[Version française](README.fr.md)*
|
||||
|
||||
Home Assistant custom integration with its Lovelace card: control a group of lights (on/off, brightness, colour
|
||||
temperature) and save up to four presets of their states, recalled with one tap. Home Assistant 2024.7.0 or later.
|
||||
|
||||
## Installation
|
||||
|
||||
1. Download `light_preset_manager-X.Y.Z.zip` from the project page on
|
||||
[a2msystemes.org](https://a2msystemes.org/projets/light_preset_manager).
|
||||
2. Unzip it into `config/custom_components/light_preset_manager/` of your Home Assistant installation.
|
||||
3. Add this line to `configuration.yaml`, then restart Home Assistant:
|
||||
```yaml
|
||||
light_preset_manager:
|
||||
```
|
||||
|
||||
The card is loaded automatically by the integration (no Lovelace resource to add).
|
||||
|
||||
## Card
|
||||
|
||||
```yaml
|
||||
type: custom:light-preset-manager
|
||||
card_id: living_room # required: unique identifier, presets are stored under it
|
||||
group: light.living_room # required: group or light controlled by the main buttons
|
||||
title: Living room # optional
|
||||
lights: # optional: individual lights saved in presets
|
||||
- light.lamp_1
|
||||
- light.lamp_2
|
||||
presets: 4 # optional: number of presets (1 to 4)
|
||||
```
|
||||
|
||||
The card also has a visual editor.
|
||||
|
||||
## Actions
|
||||
|
||||
`light_preset_manager.save_preset`, `recall_preset`, `rename_preset`, `get_presets` (see *Developer tools > Actions*).
|
||||
|
||||
## Blueprint
|
||||
|
||||
`Blueprints/Stybarr-groups.yaml`: control a group of lights with an IKEA STYRBAR remote.
|
||||
|
||||
## Development
|
||||
|
||||
- Home Assistant in Docker: `docker compose up -d` (VS Code task *Dev: Start All*), then http://localhost:8123.
|
||||
The integration is mounted from `custom_components/`; restart Home Assistant after a Python change.
|
||||
- Card: `npm install` then `npm run watch` in `frontend/`; the built file goes to
|
||||
`custom_components/light_preset_manager/frontend/` (committed).
|
||||
- Release file: `python scripts/package.py` → `dist/light_preset_manager-X.Y.Z.zip` (version from `manifest.json`).
|
||||
|
||||
## License
|
||||
|
||||
MIT, see the LICENSE file.
|
||||
@@ -3,18 +3,22 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.core import HomeAssistant, ServiceCall, callback
|
||||
from homeassistant.components.frontend import add_extra_js_url
|
||||
from homeassistant.components.http import StaticPathConfig
|
||||
from homeassistant.core import HomeAssistant, ServiceCall, SupportsResponse, callback
|
||||
from homeassistant.loader import async_get_integration
|
||||
from homeassistant.helpers import config_validation as cv
|
||||
from homeassistant.helpers.storage import Store
|
||||
from homeassistant.helpers.typing import ConfigType
|
||||
from homeassistant.components import websocket_api
|
||||
from homeassistant.components.light import (
|
||||
ATTR_BRIGHTNESS,
|
||||
ATTR_COLOR_TEMP,
|
||||
ATTR_COLOR_TEMP_KELVIN,
|
||||
ATTR_RGB_COLOR,
|
||||
ATTR_XY_COLOR,
|
||||
ATTR_HS_COLOR,
|
||||
@@ -28,6 +32,8 @@ from homeassistant.const import (
|
||||
|
||||
from .const import (
|
||||
DOMAIN,
|
||||
CARD_NAME,
|
||||
CARD_URL,
|
||||
STORAGE_KEY,
|
||||
STORAGE_VERSION,
|
||||
SERVICE_SAVE_PRESET,
|
||||
@@ -44,6 +50,9 @@ from .const import (
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
# Mireds key of presets saved before 0.6.0 (no longer accepted by light.turn_on)
|
||||
LEGACY_COLOR_TEMP = "color_temp"
|
||||
|
||||
# Config schema
|
||||
CONFIG_SCHEMA = vol.Schema(
|
||||
{DOMAIN: vol.Schema({})},
|
||||
@@ -102,6 +111,14 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
||||
# Register WebSocket commands
|
||||
websocket_api.async_register_command(hass, websocket_get_presets)
|
||||
|
||||
# Serve the Lovelace card and load it in the frontend (version in the URL: no stale cache)
|
||||
integration = await async_get_integration(hass, DOMAIN)
|
||||
card = Path(__file__).parent / "frontend" / f"{CARD_NAME}.js"
|
||||
await hass.http.async_register_static_paths(
|
||||
[StaticPathConfig(CARD_URL, str(card), True)]
|
||||
)
|
||||
add_extra_js_url(hass, f"{CARD_URL}?v={integration.version}")
|
||||
|
||||
async def async_save_preset(call: ServiceCall) -> None:
|
||||
"""Save current light states to a preset."""
|
||||
card_id = call.data[ATTR_CARD_ID]
|
||||
@@ -166,8 +183,15 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
||||
|
||||
# Color descriptors are mutually exclusive - pick one based on priority
|
||||
# Priority: color_temp > rgb_color > hs_color > xy_color
|
||||
if ATTR_COLOR_TEMP in light_state:
|
||||
service_data[ATTR_COLOR_TEMP] = light_state[ATTR_COLOR_TEMP]
|
||||
if ATTR_COLOR_TEMP_KELVIN in light_state:
|
||||
service_data[ATTR_COLOR_TEMP_KELVIN] = light_state[
|
||||
ATTR_COLOR_TEMP_KELVIN
|
||||
]
|
||||
elif LEGACY_COLOR_TEMP in light_state:
|
||||
# Presets saved before 0.6.0: mireds
|
||||
service_data[ATTR_COLOR_TEMP_KELVIN] = round(
|
||||
1_000_000 / light_state[LEGACY_COLOR_TEMP]
|
||||
)
|
||||
elif ATTR_RGB_COLOR in light_state:
|
||||
service_data[ATTR_RGB_COLOR] = light_state[ATTR_RGB_COLOR]
|
||||
elif ATTR_HS_COLOR in light_state:
|
||||
@@ -237,7 +261,11 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
||||
DOMAIN, SERVICE_RENAME_PRESET, async_rename_preset, schema=RENAME_PRESET_SCHEMA
|
||||
)
|
||||
hass.services.async_register(
|
||||
DOMAIN, SERVICE_GET_PRESETS, handle_get_presets, schema=GET_PRESETS_SCHEMA
|
||||
DOMAIN,
|
||||
SERVICE_GET_PRESETS,
|
||||
handle_get_presets,
|
||||
schema=GET_PRESETS_SCHEMA,
|
||||
supports_response=SupportsResponse.ONLY,
|
||||
)
|
||||
|
||||
_LOGGER.info("Light Preset Manager initialized")
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 769 B |
@@ -1,7 +1,10 @@
|
||||
"""Constants for Light Preset Manager."""
|
||||
|
||||
DOMAIN = "light_preset_manager"
|
||||
VERSION = "0.6.0"
|
||||
|
||||
# Lovelace card: built by frontend/ (npm run build), served by the integration
|
||||
CARD_NAME = "light-preset-manager"
|
||||
CARD_URL = f"/{DOMAIN}/{CARD_NAME}.js"
|
||||
|
||||
# Storage
|
||||
STORAGE_KEY = f"{DOMAIN}.presets"
|
||||
|
||||
@@ -1213,6 +1213,8 @@ var getEntityName = (entity, customName) => {
|
||||
if (customName) return customName;
|
||||
return entity?.attributes.friendly_name || entity?.entity_id || "Unknown";
|
||||
};
|
||||
var kelvinToMireds = (kelvin) => Math.round(1e6 / kelvin);
|
||||
var miredsToKelvin = (mireds) => Math.round(1e6 / mireds);
|
||||
var supportsColorTemp = (entity) => {
|
||||
const modes = entity?.attributes.supported_color_modes || [];
|
||||
return modes.includes("color_temp");
|
||||
@@ -1223,9 +1225,9 @@ function captureLightState(entity) {
|
||||
state: entity.state === "on" ? "on" : "off"
|
||||
};
|
||||
if (entity.state === "on") {
|
||||
const { brightness, color_temp, rgb_color, xy_color, hs_color } = entity.attributes;
|
||||
const { brightness, color_temp_kelvin, rgb_color, xy_color, hs_color } = entity.attributes;
|
||||
if (brightness !== void 0) state.brightness = brightness;
|
||||
if (color_temp !== void 0) state.color_temp = color_temp;
|
||||
if (color_temp_kelvin != null) state.color_temp_kelvin = color_temp_kelvin;
|
||||
if (rgb_color !== void 0) state.rgb_color = rgb_color;
|
||||
if (xy_color !== void 0) state.xy_color = xy_color;
|
||||
if (hs_color !== void 0) state.hs_color = hs_color;
|
||||
@@ -1243,8 +1245,9 @@ function getLightsFromGroup(groupEntity, configLights) {
|
||||
}
|
||||
function getCurrentTempZone(entity, temperatures) {
|
||||
if (!entity || entity.state !== "on") return null;
|
||||
const colorTemp = entity.attributes.color_temp;
|
||||
if (colorTemp === void 0) return null;
|
||||
const kelvin = entity.attributes.color_temp_kelvin;
|
||||
if (kelvin == null) return null;
|
||||
const colorTemp = kelvinToMireds(kelvin);
|
||||
const warmNeutralMid = (temperatures.warm + temperatures.neutral) / 2;
|
||||
const neutralColdMid = (temperatures.neutral + temperatures.cold) / 2;
|
||||
if (colorTemp >= warmNeutralMid) return "warm";
|
||||
@@ -2014,7 +2017,7 @@ var LightPresetManager = class extends i4 {
|
||||
if (!this.hass || !this._config) return;
|
||||
this.hass.callService("light", "turn_on", {
|
||||
entity_id: this._config.group,
|
||||
color_temp: this._config.temperatures[temp]
|
||||
color_temp_kelvin: miredsToKelvin(this._config.temperatures[temp])
|
||||
});
|
||||
}
|
||||
// ---------------------------------------------------------------------------
|
||||
@@ -2041,7 +2044,7 @@ var LightPresetManager = class extends i4 {
|
||||
if (!this.hass || !this._config) return;
|
||||
this.hass.callService("light", "turn_on", {
|
||||
entity_id: entityId,
|
||||
color_temp: this._config.temperatures[temp]
|
||||
color_temp_kelvin: miredsToKelvin(this._config.temperatures[temp])
|
||||
});
|
||||
}
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"domain": "light_preset_manager",
|
||||
"name": "Light Preset Manager",
|
||||
"version": "0.6.0",
|
||||
"documentation": "https://github.com/your-repo/light-preset-manager",
|
||||
"issue_tracker": "https://github.com/your-repo/light-preset-manager/issues",
|
||||
"dependencies": [],
|
||||
"codeowners": ["@your-username"],
|
||||
"requirements": [],
|
||||
"codeowners": ["@ange"],
|
||||
"dependencies": ["frontend", "http"],
|
||||
"documentation": "https://a2msystemes.org/projets/light_preset_manager",
|
||||
"integration_type": "service",
|
||||
"iot_class": "local_push",
|
||||
"integration_type": "service"
|
||||
}
|
||||
"issue_tracker": "https://a2msystemes-git.duckdns.org/ange/HA-Light_preset_manager/issues",
|
||||
"requirements": [],
|
||||
"version": "0.6.0"
|
||||
}
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "light-preset-manager-card",
|
||||
"version": "1.0.0",
|
||||
"version": "0.6.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "light-preset-manager-card",
|
||||
"version": "1.0.0",
|
||||
"version": "0.6.0",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"lit": "^3.3.2"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "light-preset-manager-card",
|
||||
"version": "1.0.0",
|
||||
"version": "0.6.0",
|
||||
"description": "Light control panel with savable presets for Home Assistant",
|
||||
"main": "dist/light-preset-manager.js",
|
||||
"scripts": {
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
// =============================================================================
|
||||
// Copies the built JS file to all required locations:
|
||||
// 1. custom_components/.../frontend/ → For HACS distribution
|
||||
// 2. ha-dev-config/www/ → For local development testing
|
||||
// (served by the integration itself, also in the dev Home Assistant: no copy to www/)
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
@@ -15,8 +15,6 @@ const SOURCE = path.resolve(__dirname, '../dist/light-preset-manager.js');
|
||||
const TARGETS = [
|
||||
// Production location (HACS will use this)
|
||||
path.resolve(__dirname, '../../custom_components/light_preset_manager/frontend/light-preset-manager.js'),
|
||||
// Development location (served at /local/ by HA)
|
||||
path.resolve(__dirname, '../../ha-dev-config/www/light-preset-manager.js'),
|
||||
];
|
||||
|
||||
// Ensure each target directory exists, then copy
|
||||
|
||||
@@ -15,7 +15,6 @@ const path = require('path');
|
||||
const SOURCE = path.resolve(__dirname, '../dist/light-preset-manager.js');
|
||||
const TARGETS = [
|
||||
path.resolve(__dirname, '../../custom_components/light_preset_manager/frontend/light-preset-manager.js'),
|
||||
path.resolve(__dirname, '../../ha-dev-config/www/light-preset-manager.js'),
|
||||
];
|
||||
|
||||
// Helper: copy built file to all targets
|
||||
|
||||
@@ -23,6 +23,7 @@ import {
|
||||
supportsColorTemp,
|
||||
getCurrentTempZone,
|
||||
captureLightState,
|
||||
miredsToKelvin,
|
||||
} from "./utils";
|
||||
import { detectLocale, getTranslations } from "./locales";
|
||||
|
||||
@@ -395,7 +396,7 @@ export class LightPresetManager extends LitElement {
|
||||
if (!this.hass || !this._config) return;
|
||||
this.hass.callService("light", "turn_on", {
|
||||
entity_id: this._config.group,
|
||||
color_temp: this._config.temperatures[temp],
|
||||
color_temp_kelvin: miredsToKelvin(this._config.temperatures[temp]),
|
||||
});
|
||||
}
|
||||
|
||||
@@ -426,7 +427,7 @@ export class LightPresetManager extends LitElement {
|
||||
if (!this.hass || !this._config) return;
|
||||
this.hass.callService("light", "turn_on", {
|
||||
entity_id: entityId,
|
||||
color_temp: this._config.temperatures[temp],
|
||||
color_temp_kelvin: miredsToKelvin(this._config.temperatures[temp]),
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -99,7 +99,8 @@ export interface LightState {
|
||||
entity_id: string;
|
||||
state: "on" | "off";
|
||||
brightness?: number;
|
||||
color_temp?: number;
|
||||
color_temp_kelvin?: number;
|
||||
color_temp?: number; // mireds, presets saved before 0.6.0
|
||||
rgb_color?: [number, number, number];
|
||||
xy_color?: [number, number];
|
||||
hs_color?: [number, number];
|
||||
|
||||
@@ -128,10 +128,10 @@ export function captureLightState(entity: HassEntity): LightState {
|
||||
};
|
||||
|
||||
if (entity.state === "on") {
|
||||
const { brightness, color_temp, rgb_color, xy_color, hs_color } =
|
||||
const { brightness, color_temp_kelvin, rgb_color, xy_color, hs_color } =
|
||||
entity.attributes;
|
||||
if (brightness !== undefined) state.brightness = brightness;
|
||||
if (color_temp !== undefined) state.color_temp = color_temp;
|
||||
if (color_temp_kelvin != null) state.color_temp_kelvin = color_temp_kelvin;
|
||||
if (rgb_color !== undefined) state.rgb_color = rgb_color;
|
||||
if (xy_color !== undefined) state.xy_color = xy_color;
|
||||
if (hs_color !== undefined) state.hs_color = hs_color;
|
||||
@@ -168,8 +168,10 @@ export function getCurrentTempZone(
|
||||
): TemperatureType | null {
|
||||
if (!entity || entity.state !== "on") return null;
|
||||
|
||||
const colorTemp = entity.attributes.color_temp;
|
||||
if (colorTemp === undefined) return null;
|
||||
// Zones are configured in mireds; lights report kelvins
|
||||
const kelvin = entity.attributes.color_temp_kelvin;
|
||||
if (kelvin == null) return null;
|
||||
const colorTemp = kelvinToMireds(kelvin);
|
||||
|
||||
// Calculate midpoints between zones
|
||||
const warmNeutralMid = (temperatures.warm + temperatures.neutral) / 2;
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
2025.12.5
|
||||
@@ -1 +0,0 @@
|
||||
{"pid": 68, "version": 1, "ha_version": "2025.12.5", "start_ts": 1767291664.449257}
|
||||
@@ -1,58 +0,0 @@
|
||||
blueprint:
|
||||
name: Motion-activated Light
|
||||
description: Turn on a light when motion is detected.
|
||||
domain: automation
|
||||
source_url: https://github.com/home-assistant/core/blob/dev/homeassistant/components/automation/blueprints/motion_light.yaml
|
||||
author: Home Assistant
|
||||
input:
|
||||
motion_entity:
|
||||
name: Motion Sensor
|
||||
selector:
|
||||
entity:
|
||||
filter:
|
||||
- device_class: occupancy
|
||||
domain: binary_sensor
|
||||
- device_class: motion
|
||||
domain: binary_sensor
|
||||
light_target:
|
||||
name: Light
|
||||
selector:
|
||||
target:
|
||||
entity:
|
||||
domain: light
|
||||
no_motion_wait:
|
||||
name: Wait time
|
||||
description: Time to leave the light on after last motion is detected.
|
||||
default: 120
|
||||
selector:
|
||||
number:
|
||||
min: 0
|
||||
max: 3600
|
||||
unit_of_measurement: seconds
|
||||
|
||||
# If motion is detected within the delay,
|
||||
# we restart the script.
|
||||
mode: restart
|
||||
max_exceeded: silent
|
||||
|
||||
triggers:
|
||||
trigger: state
|
||||
entity_id: !input motion_entity
|
||||
from: "off"
|
||||
to: "on"
|
||||
|
||||
actions:
|
||||
- alias: "Turn on the light"
|
||||
action: light.turn_on
|
||||
target: !input light_target
|
||||
- alias: "Wait until there is no motion from device"
|
||||
wait_for_trigger:
|
||||
trigger: state
|
||||
entity_id: !input motion_entity
|
||||
from: "on"
|
||||
to: "off"
|
||||
- alias: "Wait the number of seconds that has been set"
|
||||
delay: !input no_motion_wait
|
||||
- alias: "Turn off the light"
|
||||
action: light.turn_off
|
||||
target: !input light_target
|
||||
@@ -1,50 +0,0 @@
|
||||
blueprint:
|
||||
name: Zone Notification
|
||||
description: Send a notification to a device when a person leaves a specific zone.
|
||||
domain: automation
|
||||
source_url: https://github.com/home-assistant/core/blob/dev/homeassistant/components/automation/blueprints/notify_leaving_zone.yaml
|
||||
author: Home Assistant
|
||||
input:
|
||||
person_entity:
|
||||
name: Person
|
||||
selector:
|
||||
entity:
|
||||
filter:
|
||||
domain: person
|
||||
zone_entity:
|
||||
name: Zone
|
||||
selector:
|
||||
entity:
|
||||
filter:
|
||||
domain: zone
|
||||
notify_device:
|
||||
name: Device to notify
|
||||
description: Device needs to run the official Home Assistant app to receive notifications.
|
||||
selector:
|
||||
device:
|
||||
filter:
|
||||
integration: mobile_app
|
||||
|
||||
triggers:
|
||||
trigger: state
|
||||
entity_id: !input person_entity
|
||||
|
||||
variables:
|
||||
zone_entity: !input zone_entity
|
||||
# This is the state of the person when it's in this zone.
|
||||
zone_state: "{{ states[zone_entity].name }}"
|
||||
person_entity: !input person_entity
|
||||
person_name: "{{ states[person_entity].name }}"
|
||||
|
||||
conditions:
|
||||
condition: template
|
||||
# The first case handles leaving the Home zone which has a special state when zoning called 'home'.
|
||||
# The second case handles leaving all other zones.
|
||||
value_template: "{{ zone_entity == 'zone.home' and trigger.from_state.state == 'home' and trigger.to_state.state != 'home' or trigger.from_state.state == zone_state and trigger.to_state.state != zone_state }}"
|
||||
|
||||
actions:
|
||||
- alias: "Notify that a person has left the zone"
|
||||
domain: mobile_app
|
||||
type: notify
|
||||
device_id: !input notify_device
|
||||
message: "{{ person_name }} has left {{ zone_state }}"
|
||||
@@ -1,86 +0,0 @@
|
||||
blueprint:
|
||||
name: Confirmable Notification
|
||||
description: >-
|
||||
A script that sends an actionable notification with a confirmation before
|
||||
running the specified action.
|
||||
domain: script
|
||||
source_url: https://github.com/home-assistant/core/blob/master/homeassistant/components/script/blueprints/confirmable_notification.yaml
|
||||
author: Home Assistant
|
||||
input:
|
||||
notify_device:
|
||||
name: Device to notify
|
||||
description: Device needs to run the official Home Assistant app to receive notifications.
|
||||
selector:
|
||||
device:
|
||||
filter:
|
||||
integration: mobile_app
|
||||
title:
|
||||
name: "Title"
|
||||
description: "The title of the button shown in the notification."
|
||||
default: ""
|
||||
selector:
|
||||
text:
|
||||
message:
|
||||
name: "Message"
|
||||
description: "The message body"
|
||||
selector:
|
||||
text:
|
||||
confirm_text:
|
||||
name: "Confirmation Text"
|
||||
description: "Text to show on the confirmation button"
|
||||
default: "Confirm"
|
||||
selector:
|
||||
text:
|
||||
confirm_action:
|
||||
name: "Confirmation Action"
|
||||
description: "Action to run when notification is confirmed"
|
||||
default: []
|
||||
selector:
|
||||
action:
|
||||
dismiss_text:
|
||||
name: "Dismiss Text"
|
||||
description: "Text to show on the dismiss button"
|
||||
default: "Dismiss"
|
||||
selector:
|
||||
text:
|
||||
dismiss_action:
|
||||
name: "Dismiss Action"
|
||||
description: "Action to run when notification is dismissed"
|
||||
default: []
|
||||
selector:
|
||||
action:
|
||||
|
||||
mode: restart
|
||||
|
||||
sequence:
|
||||
- alias: "Set up variables"
|
||||
variables:
|
||||
action_confirm: "{{ 'CONFIRM_' ~ context.id }}"
|
||||
action_dismiss: "{{ 'DISMISS_' ~ context.id }}"
|
||||
- alias: "Send notification"
|
||||
domain: mobile_app
|
||||
type: notify
|
||||
device_id: !input notify_device
|
||||
title: !input title
|
||||
message: !input message
|
||||
data:
|
||||
actions:
|
||||
- action: "{{ action_confirm }}"
|
||||
title: !input confirm_text
|
||||
- action: "{{ action_dismiss }}"
|
||||
title: !input dismiss_text
|
||||
- alias: "Awaiting response"
|
||||
wait_for_trigger:
|
||||
- trigger: event
|
||||
event_type: mobile_app_notification_action
|
||||
event_data:
|
||||
action: "{{ action_confirm }}"
|
||||
- trigger: event
|
||||
event_type: mobile_app_notification_action
|
||||
event_data:
|
||||
action: "{{ action_dismiss }}"
|
||||
- choose:
|
||||
- conditions: "{{ wait.trigger.event.data.action == action_confirm }}"
|
||||
sequence: !input confirm_action
|
||||
- conditions: "{{ wait.trigger.event.data.action == action_dismiss }}"
|
||||
sequence: !input dismiss_action
|
||||
@@ -1,178 +0,0 @@
|
||||
2026-01-01 19:15:41.401 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration light_preset_manager which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
|
||||
2026-01-01 19:15:41.405 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration light_preset_manager which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
|
||||
2026-01-01 19:15:41.915 INFO (MainThread) [homeassistant.setup] Setting up system_log
|
||||
2026-01-01 19:15:41.915 INFO (MainThread) [homeassistant.setup] Setting up http
|
||||
2026-01-01 19:15:41.939 INFO (MainThread) [homeassistant.setup] Setup of domain logger took 0.02 seconds
|
||||
2026-01-01 19:15:41.940 INFO (MainThread) [homeassistant.setup] Setup of domain system_log took 0.02 seconds
|
||||
2026-01-01 19:15:41.940 INFO (MainThread) [homeassistant.setup] Setup of domain http took 0.02 seconds
|
||||
2026-01-01 19:15:41.940 INFO (MainThread) [homeassistant.setup] Setting up websocket_api
|
||||
2026-01-01 19:15:41.940 INFO (MainThread) [homeassistant.setup] Setup of domain websocket_api took 0.00 seconds
|
||||
2026-01-01 19:15:41.944 INFO (MainThread) [homeassistant.setup] Setting up network
|
||||
2026-01-01 19:15:41.945 INFO (MainThread) [homeassistant.setup] Setup of domain network took 0.00 seconds
|
||||
2026-01-01 19:15:41.945 INFO (MainThread) [homeassistant.bootstrap] Setting up stage labs: {'labs'}; already set up: {}
|
||||
Dependencies: {}; already set up: {}
|
||||
2026-01-01 19:15:41.946 INFO (MainThread) [homeassistant.setup] Setting up labs
|
||||
2026-01-01 19:15:41.946 INFO (MainThread) [homeassistant.setup] Setup of domain labs took 0.00 seconds
|
||||
2026-01-01 19:15:41.946 INFO (MainThread) [homeassistant.bootstrap] Setting up stage frontend: {'frontend'}; already set up: {}
|
||||
Dependencies: {'api', 'file_upload', 'auth', 'search', 'onboarding', 'device_automation', 'config', 'diagnostics', 'lovelace', 'repairs'}; already set up: {'websocket_api', 'http', 'system_log'}
|
||||
2026-01-01 19:15:41.946 INFO (MainThread) [homeassistant.setup] Setting up api
|
||||
2026-01-01 19:15:41.946 INFO (MainThread) [homeassistant.setup] Setup of domain api took 0.00 seconds
|
||||
2026-01-01 19:15:41.947 INFO (MainThread) [homeassistant.setup] Setting up file_upload
|
||||
2026-01-01 19:15:41.947 INFO (MainThread) [homeassistant.setup] Setup of domain file_upload took 0.00 seconds
|
||||
2026-01-01 19:15:41.947 INFO (MainThread) [homeassistant.setup] Setting up auth
|
||||
2026-01-01 19:15:41.947 INFO (MainThread) [homeassistant.setup] Setup of domain auth took 0.00 seconds
|
||||
2026-01-01 19:15:41.947 INFO (MainThread) [homeassistant.setup] Setting up search
|
||||
2026-01-01 19:15:41.947 INFO (MainThread) [homeassistant.setup] Setup of domain search took 0.00 seconds
|
||||
2026-01-01 19:15:41.947 INFO (MainThread) [homeassistant.setup] Setting up onboarding
|
||||
2026-01-01 19:15:41.947 INFO (MainThread) [homeassistant.setup] Setting up device_automation
|
||||
2026-01-01 19:15:41.948 INFO (MainThread) [homeassistant.setup] Setup of domain device_automation took 0.00 seconds
|
||||
2026-01-01 19:15:41.948 INFO (MainThread) [homeassistant.setup] Setting up config
|
||||
2026-01-01 19:15:41.949 INFO (MainThread) [homeassistant.setup] Setup of domain config took 0.00 seconds
|
||||
2026-01-01 19:15:41.949 INFO (MainThread) [homeassistant.setup] Setting up diagnostics
|
||||
2026-01-01 19:15:41.950 INFO (MainThread) [homeassistant.setup] Setup of domain diagnostics took 0.00 seconds
|
||||
2026-01-01 19:15:41.950 INFO (MainThread) [homeassistant.setup] Setting up repairs
|
||||
2026-01-01 19:15:41.950 INFO (MainThread) [homeassistant.setup] Setup of domain repairs took 0.00 seconds
|
||||
2026-01-01 19:15:41.955 INFO (MainThread) [homeassistant.setup] Setup of domain onboarding took 0.01 seconds
|
||||
2026-01-01 19:15:41.955 INFO (MainThread) [homeassistant.setup] Setting up lovelace
|
||||
2026-01-01 19:15:41.956 INFO (MainThread) [homeassistant.setup] Setup of domain lovelace took 0.00 seconds
|
||||
2026-01-01 19:15:41.960 INFO (MainThread) [homeassistant.setup] Setting up frontend
|
||||
2026-01-01 19:15:41.966 INFO (MainThread) [homeassistant.setup] Setup of domain frontend took 0.01 seconds
|
||||
2026-01-01 19:15:41.966 INFO (MainThread) [homeassistant.bootstrap] Nothing to set up in stage recorder: {'recorder'}
|
||||
2026-01-01 19:15:41.966 INFO (MainThread) [homeassistant.bootstrap] Nothing to set up in stage debugger: {'debugpy'}
|
||||
2026-01-01 19:15:41.966 INFO (MainThread) [homeassistant.bootstrap] Nothing to set up in stage zeroconf: {'zeroconf'}
|
||||
2026-01-01 19:15:41.966 INFO (MainThread) [homeassistant.bootstrap] Nothing to set up in stage 1: {'dhcp', 'ssdp', 'bluetooth', 'hassio', 'usb', 'cloud', 'mqtt_eventstream'}
|
||||
2026-01-01 19:15:41.966 INFO (MainThread) [homeassistant.bootstrap] Setting up stage 2: {'input_boolean', 'input_datetime', 'automation', 'input_select', 'application_credentials', 'timer', 'script', 'backup', 'system_health', 'hardware', 'input_button', 'input_number', 'scene', 'tag', 'mqtt', 'shopping_list', 'counter', 'person', 'analytics', 'input_text', 'google_translate', 'schedule', 'zone', 'radio_browser', 'light_preset_manager'}; already set up: {'logger', 'api', 'homeassistant', 'http', 'config', 'network', 'labs', 'frontend'}
|
||||
Dependencies: {'image_upload', 'trace', 'blueprint'}; already set up: {'api', 'file_upload', 'auth', 'http', 'device_automation', 'websocket_api'}
|
||||
2026-01-01 19:15:41.966 INFO (MainThread) [homeassistant.setup] Setting up scene
|
||||
2026-01-01 19:15:41.966 INFO (MainThread) [homeassistant.components.scene] Setting up homeassistant.scene
|
||||
2026-01-01 19:15:41.967 INFO (MainThread) [homeassistant.components.scene] Setting up homeassistant.scene
|
||||
2026-01-01 19:15:41.967 INFO (MainThread) [homeassistant.components.scene] Setting up homeassistant.scene
|
||||
2026-01-01 19:15:41.967 INFO (MainThread) [homeassistant.setup] Setup of domain scene took 0.00 seconds
|
||||
2026-01-01 19:15:41.968 INFO (MainThread) [homeassistant.setup] Setting up blueprint
|
||||
2026-01-01 19:15:41.968 INFO (MainThread) [homeassistant.setup] Setup of domain blueprint took 0.00 seconds
|
||||
2026-01-01 19:15:41.968 INFO (MainThread) [homeassistant.setup] Setting up trace
|
||||
2026-01-01 19:15:41.968 INFO (MainThread) [homeassistant.setup] Setup of domain trace took 0.00 seconds
|
||||
2026-01-01 19:15:41.968 INFO (MainThread) [homeassistant.setup] Setting up automation
|
||||
2026-01-01 19:15:41.968 INFO (MainThread) [homeassistant.setup] Setup of domain automation took 0.00 seconds
|
||||
2026-01-01 19:15:41.969 INFO (MainThread) [homeassistant.setup] Setting up zone
|
||||
2026-01-01 19:15:41.969 INFO (MainThread) [homeassistant.setup] Setup of domain zone took 0.00 seconds
|
||||
2026-01-01 19:15:41.969 INFO (MainThread) [homeassistant.setup] Setting up script
|
||||
2026-01-01 19:15:41.970 INFO (MainThread) [homeassistant.setup] Setup of domain script took 0.00 seconds
|
||||
2026-01-01 19:15:41.970 INFO (MainThread) [homeassistant.setup] Setting up system_health
|
||||
2026-01-01 19:15:41.970 INFO (MainThread) [homeassistant.setup] Setup of domain system_health took 0.00 seconds
|
||||
2026-01-01 19:15:41.970 INFO (MainThread) [homeassistant.setup] Setting up input_number
|
||||
2026-01-01 19:15:41.971 INFO (MainThread) [homeassistant.setup] Setup of domain input_number took 0.00 seconds
|
||||
2026-01-01 19:15:41.973 INFO (MainThread) [homeassistant.setup] Setting up input_boolean
|
||||
2026-01-01 19:15:41.973 INFO (MainThread) [homeassistant.setup] Setup of domain input_boolean took 0.00 seconds
|
||||
2026-01-01 19:15:41.975 INFO (MainThread) [homeassistant.components.http] Now listening on port 8123
|
||||
2026-01-01 19:15:41.976 INFO (MainThread) [homeassistant.setup] Setup of domain http took 0.01 seconds
|
||||
2026-01-01 19:15:41.978 INFO (MainThread) [homeassistant.setup] Setting up input_datetime
|
||||
2026-01-01 19:15:41.979 INFO (MainThread) [homeassistant.setup] Setup of domain input_datetime took 0.00 seconds
|
||||
2026-01-01 19:15:41.981 INFO (MainThread) [homeassistant.setup] Setting up tag
|
||||
2026-01-01 19:15:41.982 INFO (MainThread) [homeassistant.setup] Setup of domain tag took 0.00 seconds
|
||||
2026-01-01 19:15:41.985 INFO (MainThread) [homeassistant.setup] Setting up image_upload
|
||||
2026-01-01 19:15:41.986 INFO (MainThread) [homeassistant.setup] Setup of domain image_upload took 0.00 seconds
|
||||
2026-01-01 19:15:41.986 INFO (MainThread) [homeassistant.setup] Setting up person
|
||||
2026-01-01 19:15:41.986 INFO (MainThread) [homeassistant.setup] Setup of domain person took 0.00 seconds
|
||||
2026-01-01 19:15:41.989 INFO (MainThread) [homeassistant.setup] Setting up input_select
|
||||
2026-01-01 19:15:41.990 INFO (MainThread) [homeassistant.setup] Setup of domain input_select took 0.00 seconds
|
||||
2026-01-01 19:15:41.992 INFO (MainThread) [homeassistant.setup] Setting up application_credentials
|
||||
2026-01-01 19:15:41.992 INFO (MainThread) [homeassistant.setup] Setup of domain application_credentials took 0.00 seconds
|
||||
2026-01-01 19:15:42.000 INFO (MainThread) [homeassistant.setup] Setting up shopping_list
|
||||
2026-01-01 19:15:42.000 INFO (MainThread) [homeassistant.setup] Setup of domain shopping_list took 0.00 seconds
|
||||
2026-01-01 19:15:42.002 INFO (MainThread) [homeassistant.setup] Setting up counter
|
||||
2026-01-01 19:15:42.003 INFO (MainThread) [homeassistant.setup] Setup of domain counter took 0.00 seconds
|
||||
2026-01-01 19:15:42.005 INFO (MainThread) [homeassistant.setup] Setting up timer
|
||||
2026-01-01 19:15:42.005 INFO (MainThread) [homeassistant.setup] Setup of domain timer took 0.00 seconds
|
||||
2026-01-01 19:15:42.011 INFO (MainThread) [homeassistant.setup] Setting up input_text
|
||||
2026-01-01 19:15:42.011 INFO (MainThread) [homeassistant.setup] Setup of domain input_text took 0.00 seconds
|
||||
2026-01-01 19:15:42.013 INFO (MainThread) [homeassistant.setup] Setting up backup
|
||||
2026-01-01 19:15:42.016 INFO (MainThread) [homeassistant.setup] Setting up schedule
|
||||
2026-01-01 19:15:42.016 INFO (MainThread) [homeassistant.setup] Setup of domain schedule took 0.00 seconds
|
||||
2026-01-01 19:15:42.017 INFO (MainThread) [homeassistant.setup] Setup of domain backup took 0.00 seconds
|
||||
2026-01-01 19:15:42.018 INFO (MainThread) [homeassistant.setup] Setting up input_button
|
||||
2026-01-01 19:15:42.018 INFO (MainThread) [homeassistant.setup] Setup of domain input_button took 0.00 seconds
|
||||
2026-01-01 19:15:42.046 WARNING (ImportExecutor_0) [homeassistant.components.light] The deprecated constant ATTR_COLOR_TEMP was used from light_preset_manager. It will be removed in HA Core 2026.1. Use kelvin equivalent (ATTR_COLOR_TEMP_KELVIN) instead, please report it to the author of the 'light_preset_manager' custom integration
|
||||
2026-01-01 19:15:42.047 WARNING (ImportExecutor_0) [homeassistant.components.light] The deprecated constant ATTR_COLOR_TEMP was used from light_preset_manager. It will be removed in HA Core 2026.1. Use kelvin equivalent (ATTR_COLOR_TEMP_KELVIN) instead, please report it to the author of the 'light_preset_manager' custom integration
|
||||
2026-01-01 19:15:42.060 INFO (MainThread) [homeassistant.setup] Setting up light_preset_manager
|
||||
2026-01-01 19:15:42.071 INFO (MainThread) [custom_components.light_preset_manager] Light Preset Manager initialized
|
||||
2026-01-01 19:15:42.071 INFO (MainThread) [homeassistant.setup] Setup of domain light_preset_manager took 0.01 seconds
|
||||
2026-01-01 19:15:42.081 INFO (MainThread) [homeassistant.setup] Setting up mqtt
|
||||
2026-01-01 19:15:42.081 INFO (MainThread) [homeassistant.setup] Setup of domain mqtt took 0.00 seconds
|
||||
2026-01-01 19:15:42.085 INFO (MainThread) [homeassistant.setup] Setting up todo
|
||||
2026-01-01 19:15:42.086 INFO (MainThread) [homeassistant.setup] Setup of domain todo took 0.00 seconds
|
||||
2026-01-01 19:15:42.087 INFO (MainThread) [homeassistant.components.todo] Setting up shopping_list.todo
|
||||
2026-01-01 19:15:42.108 INFO (MainThread) [homeassistant.setup] Setting up google_translate
|
||||
2026-01-01 19:15:42.108 INFO (MainThread) [homeassistant.setup] Setup of domain google_translate took 0.00 seconds
|
||||
2026-01-01 19:15:42.112 INFO (MainThread) [homeassistant.setup] Setting up hardware
|
||||
2026-01-01 19:15:42.124 INFO (MainThread) [homeassistant.setup] Setup of domain hardware took 0.01 seconds
|
||||
2026-01-01 19:15:42.176 INFO (MainThread) [homeassistant.setup] Setting up radio_browser
|
||||
2026-01-01 19:15:42.176 INFO (MainThread) [homeassistant.setup] Setup of domain radio_browser took 0.00 seconds
|
||||
2026-01-01 19:15:42.185 INFO (MainThread) [homeassistant.setup] Setting up analytics
|
||||
2026-01-01 19:15:42.185 INFO (MainThread) [homeassistant.setup] Setup of domain analytics took 0.00 seconds
|
||||
2026-01-01 19:15:42.188 INFO (MainThread) [homeassistant.setup] Setting up event
|
||||
2026-01-01 19:15:42.188 INFO (MainThread) [homeassistant.setup] Setup of domain event took 0.00 seconds
|
||||
2026-01-01 19:15:42.188 INFO (MainThread) [homeassistant.setup] Setting up sensor
|
||||
2026-01-01 19:15:42.188 INFO (MainThread) [homeassistant.setup] Setup of domain sensor took 0.00 seconds
|
||||
2026-01-01 19:15:42.189 INFO (MainThread) [homeassistant.components.event] Setting up backup.event
|
||||
2026-01-01 19:15:42.190 INFO (MainThread) [homeassistant.components.sensor] Setting up backup.sensor
|
||||
2026-01-01 19:15:42.230 INFO (MainThread) [homeassistant.setup] Setting up ffmpeg
|
||||
2026-01-01 19:15:42.232 INFO (MainThread) [homeassistant.setup] Setup of domain ffmpeg took 0.00 seconds
|
||||
2026-01-01 19:15:42.232 INFO (MainThread) [homeassistant.setup] Setting up tts
|
||||
2026-01-01 19:15:42.241 INFO (MainThread) [homeassistant.setup] Setup of domain tts took 0.01 seconds
|
||||
2026-01-01 19:15:42.247 INFO (MainThread) [homeassistant.components.tts] Setting up google_translate.tts
|
||||
2026-01-01 19:15:43.097 INFO (MainThread) [homeassistant.setup] Setting up button
|
||||
2026-01-01 19:15:43.097 INFO (MainThread) [homeassistant.setup] Setup of domain button took 0.00 seconds
|
||||
2026-01-01 19:15:43.097 INFO (MainThread) [homeassistant.setup] Setting up select
|
||||
2026-01-01 19:15:43.098 INFO (MainThread) [homeassistant.setup] Setup of domain select took 0.00 seconds
|
||||
2026-01-01 19:15:43.098 INFO (MainThread) [homeassistant.setup] Setting up binary_sensor
|
||||
2026-01-01 19:15:43.098 INFO (MainThread) [homeassistant.setup] Setup of domain binary_sensor took 0.00 seconds
|
||||
2026-01-01 19:15:43.098 INFO (MainThread) [homeassistant.setup] Setting up switch
|
||||
2026-01-01 19:15:43.098 INFO (MainThread) [homeassistant.setup] Setup of domain switch took 0.00 seconds
|
||||
2026-01-01 19:15:43.099 INFO (MainThread) [homeassistant.setup] Setting up update
|
||||
2026-01-01 19:15:43.099 INFO (MainThread) [homeassistant.setup] Setup of domain update took 0.00 seconds
|
||||
2026-01-01 19:15:43.099 INFO (MainThread) [homeassistant.setup] Setting up light
|
||||
2026-01-01 19:15:43.100 INFO (MainThread) [homeassistant.setup] Setup of domain light took 0.00 seconds
|
||||
2026-01-01 19:15:43.102 INFO (MainThread) [homeassistant.components.scene] Setting up mqtt.scene
|
||||
2026-01-01 19:15:43.102 INFO (MainThread) [homeassistant.components.button] Setting up mqtt.button
|
||||
2026-01-01 19:15:43.102 INFO (MainThread) [homeassistant.components.select] Setting up mqtt.select
|
||||
2026-01-01 19:15:43.103 INFO (MainThread) [homeassistant.components.binary_sensor] Setting up mqtt.binary_sensor
|
||||
2026-01-01 19:15:43.103 INFO (MainThread) [homeassistant.components.switch] Setting up mqtt.switch
|
||||
2026-01-01 19:15:43.103 INFO (MainThread) [homeassistant.components.update] Setting up mqtt.update
|
||||
2026-01-01 19:15:43.103 INFO (MainThread) [homeassistant.components.sensor] Setting up mqtt.sensor
|
||||
2026-01-01 19:15:43.103 INFO (MainThread) [homeassistant.components.light] Setting up mqtt.light
|
||||
2026-01-01 19:15:43.106 INFO (MainThread) [homeassistant.bootstrap] Home Assistant initialized in 1.72s
|
||||
2026-01-01 19:15:43.106 INFO (MainThread) [homeassistant.core] Starting Home Assistant 2025.12.5
|
||||
2026-01-01 19:15:43.726 WARNING (MainThread) [homeassistant.components.mqtt.entity] The configuration for entity button.warmachine_papa_asleep_screens_2 uses the deprecated option `object_id` to set the default entity id. Replace the `"object_id": "WARMACHINE-PAPA_asleep_screens"` option with `"default_entity_id": "button.WARMACHINE-PAPA_asleep_screens"` in your published discovery configuration to fix this issue, or contact the maintainer of the integration that published this config to fix this. This will stop working in Home Assistant Core 2026.4
|
||||
2026-01-01 19:15:43.727 WARNING (MainThread) [homeassistant.components.mqtt.entity] The configuration for entity button.warmachine_papa_awake_screens_2 uses the deprecated option `object_id` to set the default entity id. Replace the `"object_id": "WARMACHINE-PAPA_awake_screens"` option with `"default_entity_id": "button.WARMACHINE-PAPA_awake_screens"` in your published discovery configuration to fix this issue, or contact the maintainer of the integration that published this config to fix this. This will stop working in Home Assistant Core 2026.4
|
||||
2026-01-01 19:15:43.727 WARNING (MainThread) [homeassistant.components.mqtt.entity] The configuration for entity button.warmachine_papa_veille_prolonge_2 uses the deprecated option `object_id` to set the default entity id. Replace the `"object_id": "WARMACHINE-PAPA_veille_prolonge"` option with `"default_entity_id": "button.WARMACHINE-PAPA_veille_prolonge"` in your published discovery configuration to fix this issue, or contact the maintainer of the integration that published this config to fix this. This will stop working in Home Assistant Core 2026.4
|
||||
2026-01-01 19:15:43.728 WARNING (MainThread) [homeassistant.components.mqtt.entity] The configuration for entity button.warmachine_papa_play_pause_2 uses the deprecated option `object_id` to set the default entity id. Replace the `"object_id": "WARMACHINE-PAPA_play_pause"` option with `"default_entity_id": "button.WARMACHINE-PAPA_play_pause"` in your published discovery configuration to fix this issue, or contact the maintainer of the integration that published this config to fix this. This will stop working in Home Assistant Core 2026.4
|
||||
2026-01-01 19:15:43.728 WARNING (MainThread) [homeassistant.components.mqtt.entity] The configuration for entity button.warmachine_papa_volume_up_2 uses the deprecated option `object_id` to set the default entity id. Replace the `"object_id": "WARMACHINE-PAPA_volume_up"` option with `"default_entity_id": "button.WARMACHINE-PAPA_volume_up"` in your published discovery configuration to fix this issue, or contact the maintainer of the integration that published this config to fix this. This will stop working in Home Assistant Core 2026.4
|
||||
2026-01-01 19:15:43.729 WARNING (MainThread) [homeassistant.components.mqtt.entity] The configuration for entity button.warmachine_papa_volume_down_2 uses the deprecated option `object_id` to set the default entity id. Replace the `"object_id": "WARMACHINE-PAPA_volume_down"` option with `"default_entity_id": "button.WARMACHINE-PAPA_volume_down"` in your published discovery configuration to fix this issue, or contact the maintainer of the integration that published this config to fix this. This will stop working in Home Assistant Core 2026.4
|
||||
2026-01-01 19:15:43.729 WARNING (MainThread) [homeassistant.components.mqtt.entity] The configuration for entity button.warmachine_papa_touche_right_2 uses the deprecated option `object_id` to set the default entity id. Replace the `"object_id": "WARMACHINE-PAPA_touche_right"` option with `"default_entity_id": "button.WARMACHINE-PAPA_touche_right"` in your published discovery configuration to fix this issue, or contact the maintainer of the integration that published this config to fix this. This will stop working in Home Assistant Core 2026.4
|
||||
2026-01-01 19:15:43.729 WARNING (MainThread) [homeassistant.components.mqtt.entity] The configuration for entity button.warmachine_papa_touche_left_2 uses the deprecated option `object_id` to set the default entity id. Replace the `"object_id": "WARMACHINE-PAPA_touche_left"` option with `"default_entity_id": "button.WARMACHINE-PAPA_touche_left"` in your published discovery configuration to fix this issue, or contact the maintainer of the integration that published this config to fix this. This will stop working in Home Assistant Core 2026.4
|
||||
2026-01-01 19:15:43.730 WARNING (MainThread) [homeassistant.components.mqtt.entity] The configuration for entity button.warmachine_papa_touche_up_2 uses the deprecated option `object_id` to set the default entity id. Replace the `"object_id": "WARMACHINE-PAPA_touche_up"` option with `"default_entity_id": "button.WARMACHINE-PAPA_touche_up"` in your published discovery configuration to fix this issue, or contact the maintainer of the integration that published this config to fix this. This will stop working in Home Assistant Core 2026.4
|
||||
2026-01-01 19:15:43.730 WARNING (MainThread) [homeassistant.components.mqtt.entity] The configuration for entity button.warmachine_papa_touche_down_2 uses the deprecated option `object_id` to set the default entity id. Replace the `"object_id": "WARMACHINE-PAPA_touche_down"` option with `"default_entity_id": "button.WARMACHINE-PAPA_touche_down"` in your published discovery configuration to fix this issue, or contact the maintainer of the integration that published this config to fix this. This will stop working in Home Assistant Core 2026.4
|
||||
2026-01-01 19:15:43.731 WARNING (MainThread) [homeassistant.components.mqtt.entity] The configuration for entity button.warmachine_papa_alt_tab_2 uses the deprecated option `object_id` to set the default entity id. Replace the `"object_id": "WARMACHINE-PAPA_alt_tab"` option with `"default_entity_id": "button.WARMACHINE-PAPA_alt_tab"` in your published discovery configuration to fix this issue, or contact the maintainer of the integration that published this config to fix this. This will stop working in Home Assistant Core 2026.4
|
||||
2026-01-01 19:15:43.731 WARNING (MainThread) [homeassistant.components.mqtt.entity] The configuration for entity button.warmachine_papa_mute_2 uses the deprecated option `object_id` to set the default entity id. Replace the `"object_id": "WARMACHINE-PAPA_mute"` option with `"default_entity_id": "button.WARMACHINE-PAPA_mute"` in your published discovery configuration to fix this issue, or contact the maintainer of the integration that published this config to fix this. This will stop working in Home Assistant Core 2026.4
|
||||
2026-01-01 19:15:43.732 WARNING (MainThread) [homeassistant.components.mqtt.entity] The configuration for entity button.warmachine_papa_veille_2 uses the deprecated option `object_id` to set the default entity id. Replace the `"object_id": "WARMACHINE-PAPA_veille"` option with `"default_entity_id": "button.WARMACHINE-PAPA_veille"` in your published discovery configuration to fix this issue, or contact the maintainer of the integration that published this config to fix this. This will stop working in Home Assistant Core 2026.4
|
||||
2026-01-01 19:15:44.041 WARNING (MainThread) [homeassistant.components.mqtt.entity] The configuration for entity sensor.warmachine_papa_chargecpu_2 uses the deprecated option `object_id` to set the default entity id. Replace the `"object_id": "WARMACHINE-PAPA_chargecpu"` option with `"default_entity_id": "sensor.WARMACHINE-PAPA_chargecpu"` in your published discovery configuration to fix this issue, or contact the maintainer of the integration that published this config to fix this. This will stop working in Home Assistant Core 2026.4
|
||||
2026-01-01 19:15:44.042 WARNING (MainThread) [homeassistant.components.mqtt.entity] The configuration for entity sensor.warmachine_papa_chargegpu_2 uses the deprecated option `object_id` to set the default entity id. Replace the `"object_id": "WARMACHINE-PAPA_chargegpu"` option with `"default_entity_id": "sensor.WARMACHINE-PAPA_chargegpu"` in your published discovery configuration to fix this issue, or contact the maintainer of the integration that published this config to fix this. This will stop working in Home Assistant Core 2026.4
|
||||
2026-01-01 19:15:44.042 WARNING (MainThread) [homeassistant.components.mqtt.entity] The configuration for entity sensor.warmachine_papa_temp_gpu_2 uses the deprecated option `object_id` to set the default entity id. Replace the `"object_id": "WARMACHINE-PAPA_temp_gpu"` option with `"default_entity_id": "sensor.WARMACHINE-PAPA_temp_gpu"` in your published discovery configuration to fix this issue, or contact the maintainer of the integration that published this config to fix this. This will stop working in Home Assistant Core 2026.4
|
||||
2026-01-01 19:15:44.043 WARNING (MainThread) [homeassistant.components.mqtt.entity] The configuration for entity sensor.warmachine_papa_screen_state_2 uses the deprecated option `object_id` to set the default entity id. Replace the `"object_id": "WARMACHINE-PAPA_screen_state"` option with `"default_entity_id": "sensor.WARMACHINE-PAPA_screen_state"` in your published discovery configuration to fix this issue, or contact the maintainer of the integration that published this config to fix this. This will stop working in Home Assistant Core 2026.4
|
||||
2026-01-01 19:15:44.043 WARNING (MainThread) [homeassistant.components.mqtt.entity] The configuration for entity sensor.warmachine_papa_batterie_charge_status_2 uses the deprecated option `object_id` to set the default entity id. Replace the `"object_id": "WARMACHINE-PAPA_batterie_charge_status"` option with `"default_entity_id": "sensor.WARMACHINE-PAPA_batterie_charge_status"` in your published discovery configuration to fix this issue, or contact the maintainer of the integration that published this config to fix this. This will stop working in Home Assistant Core 2026.4
|
||||
2026-01-01 19:15:44.044 WARNING (MainThread) [homeassistant.components.mqtt.entity] The configuration for entity sensor.warmachine_papa_batterie_full_charge_lifetime_2 uses the deprecated option `object_id` to set the default entity id. Replace the `"object_id": "WARMACHINE-PAPA_batterie_full_charge_lifetime"` option with `"default_entity_id": "sensor.WARMACHINE-PAPA_batterie_full_charge_lifetime"` in your published discovery configuration to fix this issue, or contact the maintainer of the integration that published this config to fix this. This will stop working in Home Assistant Core 2026.4
|
||||
2026-01-01 19:15:44.045 WARNING (MainThread) [homeassistant.components.mqtt.entity] The configuration for entity sensor.warmachine_papa_batterie_charge_remaining_percentage_2 uses the deprecated option `object_id` to set the default entity id. Replace the `"object_id": "WARMACHINE-PAPA_batterie_charge_remaining_percentage"` option with `"default_entity_id": "sensor.WARMACHINE-PAPA_batterie_charge_remaining_percentage"` in your published discovery configuration to fix this issue, or contact the maintainer of the integration that published this config to fix this. This will stop working in Home Assistant Core 2026.4
|
||||
2026-01-01 19:15:44.045 WARNING (MainThread) [homeassistant.components.mqtt.entity] The configuration for entity sensor.warmachine_papa_batterie_charge_remaining_2 uses the deprecated option `object_id` to set the default entity id. Replace the `"object_id": "WARMACHINE-PAPA_batterie_charge_remaining"` option with `"default_entity_id": "sensor.WARMACHINE-PAPA_batterie_charge_remaining"` in your published discovery configuration to fix this issue, or contact the maintainer of the integration that published this config to fix this. This will stop working in Home Assistant Core 2026.4
|
||||
2026-01-01 19:15:44.046 WARNING (MainThread) [homeassistant.components.mqtt.entity] The configuration for entity sensor.warmachine_papa_batterie_powerline_status_2 uses the deprecated option `object_id` to set the default entity id. Replace the `"object_id": "WARMACHINE-PAPA_batterie_powerline_status"` option with `"default_entity_id": "sensor.WARMACHINE-PAPA_batterie_powerline_status"` in your published discovery configuration to fix this issue, or contact the maintainer of the integration that published this config to fix this. This will stop working in Home Assistant Core 2026.4
|
||||
2026-01-01 19:15:44.305 INFO (MainThread) [homeassistant.components.websocket_api.http.connection] [139775576393504] Received unknown command: recorder/info
|
||||
2026-01-01 19:15:49.602 INFO (MainThread) [homeassistant.components.mqtt.client] MQTT client initialized, birth message sent
|
||||
2026-01-01 19:16:30.483 INFO (MainThread) [homeassistant.components.websocket_api.http.connection] [139775576396064] Received unknown command: recorder/info
|
||||
2026-01-01 19:16:35.482 WARNING (MainThread) [homeassistant.components.light] Got `color_temp` argument in `turn_on` service, which is deprecated and will break in Home Assistant 2026.1, please use `color_temp_kelvin` argument
|
||||
2026-01-01 19:16:38.333 DEBUG (MainThread) [custom_components.light_preset_manager] Saved preset 1 for card bureau_lightcard
|
||||
2026-01-01 19:16:41.652 WARNING (MainThread) [homeassistant.components.light] Got `color_temp` argument in `turn_on` service, which is deprecated and will break in Home Assistant 2026.1, please use `color_temp_kelvin` argument
|
||||
2026-01-01 19:16:44.815 DEBUG (MainThread) [custom_components.light_preset_manager] Saved preset 2 for card bureau_lightcard
|
||||
2026-01-01 19:16:48.408 WARNING (MainThread) [homeassistant.components.light] Got `color_temp` argument in `turn_on` service, which is deprecated and will break in Home Assistant 2026.1, please use `color_temp_kelvin` argument
|
||||
2026-01-01 19:16:51.549 DEBUG (MainThread) [custom_components.light_preset_manager] Saved preset 3 for card bureau_lightcard
|
||||
2026-01-01 19:16:53.097 WARNING (MainThread) [homeassistant.components.light] Got `color_temp` argument in `turn_on` service, which is deprecated and will break in Home Assistant 2026.1, please use `color_temp_kelvin` argument
|
||||
2026-01-01 19:16:55.879 DEBUG (MainThread) [custom_components.light_preset_manager] Saved preset 4 for card bureau_lightcard
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "Light Preset Manager",
|
||||
"homeassistant": "2024.7.0"
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
"""Construit dist/light_preset_manager-X.Y.Z.zip : le contenu de custom_components/light_preset_manager/ (pièce jointe de rôle download).
|
||||
|
||||
La version est celle de manifest.json. Le zip se décompresse dans config/custom_components/light_preset_manager/.
|
||||
Usage : python scripts/package.py
|
||||
"""
|
||||
|
||||
import json
|
||||
import sys
|
||||
import zipfile
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path(__file__).resolve().parent.parent
|
||||
SOURCE = ROOT / "custom_components" / "light_preset_manager"
|
||||
EXCLUDED = {"__pycache__", ".pytest_cache"}
|
||||
|
||||
|
||||
def main() -> int:
|
||||
manifest = json.loads((SOURCE / "manifest.json").read_text(encoding="utf-8"))
|
||||
if manifest["domain"] != SOURCE.name:
|
||||
print(f"manifest.json : domain « {manifest['domain']} » différent du dossier « {SOURCE.name} »")
|
||||
return 1
|
||||
card = SOURCE / "frontend" / "light-preset-manager.js"
|
||||
if not card.is_file():
|
||||
print(f"{card.relative_to(ROOT)} absent : lancer « npm run build » dans frontend/")
|
||||
return 1
|
||||
target = ROOT / "dist" / f"{SOURCE.name}-{manifest['version']}.zip"
|
||||
target.parent.mkdir(exist_ok=True)
|
||||
with zipfile.ZipFile(target, "w", zipfile.ZIP_DEFLATED) as archive:
|
||||
for path in sorted(SOURCE.rglob("*")):
|
||||
if path.is_file() and not EXCLUDED & set(path.relative_to(SOURCE).parts) and path.suffix not in {".pyc", ".map"}:
|
||||
archive.write(path, path.relative_to(SOURCE).as_posix())
|
||||
print(target.relative_to(ROOT).as_posix())
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Reference in new issue
Block a user