Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
8f592ec
feat(card): rebuild the card as a labelled list with collapsible dura…
Gamso Sep 27, 2026
a2f0594
chore: add MIT LICENSE file
Gamso Oct 3, 2026
e71e222
build: drop unused custom-card-helpers and stop emitting sourcemaps
Gamso Oct 3, 2026
3da17f6
test: set up Vitest with happy-dom, ESLint and a typecheck script
Gamso Oct 3, 2026
dda7611
fix(editor): use thermostat_mode_entity and expose every option
Gamso Oct 3, 2026
78a8a5a
fix(i18n): fall back to English, then to a caller fallback, in localize
Gamso Oct 3, 2026
6812723
fix(card): handle missing, unknown and unavailable entities
Gamso Oct 3, 2026
ea0aebf
refactor: replace the 30 s re-render with a midnight timer, drop dead…
Gamso Oct 3, 2026
3282357
fix(card): format the next-mode time with the HA profile settings
Gamso Oct 3, 2026
54d47c5
fix(a11y): keyboard-operable dial, tappable badges, labelled controls
Gamso Oct 3, 2026
78ee6d5
fix(covers): drop the non-existent cover entity from the stub config
Gamso Oct 3, 2026
dbd3669
feat(covers): open or close the covers now from the schedule rows
Gamso Oct 3, 2026
8fc1a92
docs: fix the README example, document every option, align dev paths
Gamso Oct 3, 2026
0998845
ci: add a validate workflow (build, typecheck, lint, tests, dist, HACS)
Gamso Oct 3, 2026
c2a1dd0
chore(dist): rebuild bundle
Gamso Oct 3, 2026
f99e926
chore: add MIT LICENSE file
Oct 3, 2026
14284e1
Merge pull request #5 from Gamso/feat/card_list_layout
Gamso Oct 3, 2026
5a8c98d
Merge branch 'main' into fix/audit-2026-10
Gamso Oct 3, 2026
196d04f
fix(card): step a duration to the adjacent preset from any value
Gamso Oct 3, 2026
7dc05c3
fix(a11y): name the duration stepper buttons in the user's language
Gamso Oct 3, 2026
7c389e9
docs: describe the list layout and drop the dial from the docs
Gamso Oct 3, 2026
02c5301
chore(dist): rebuild bundle
Gamso Oct 3, 2026
64652fd
feat(card): pause the automation of chosen covers
Gamso Oct 8, 2026
6575e7c
feat(card): schedules panel with day mode tabs and the scheduler editor
Gamso Oct 11, 2026
1513212
chore(devcontainer): run Home Assistant as the main process, with tes…
Gamso Oct 11, 2026
9c9d30a
docs: document the schedules panel and refresh the screenshots
Gamso Oct 11, 2026
6904865
chore(release): bump version to 2.0.0 and rebuild bundle
Gamso Oct 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 8 additions & 9 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
FROM ghcr.io/home-assistant/home-assistant:latest
FROM ghcr.io/home-assistant/home-assistant:stable

# Install Node.js and npm
RUN apk add --no-cache nodejs npm
# Node.js to build the card, wget/unzip to fetch the scheduler component and card
RUN apk add --no-cache nodejs npm wget unzip

# Install additional tools if needed
# RUN apk add --no-cache bash
# Home Assistant is run by start.sh, not by the image's s6 init: it waits for
# the seeds of setup.sh (scheduler config entry, schedules, dashboard) to be in place.
ENTRYPOINT []
CMD ["bash", "/workspaces/homeshift_card/.devcontainer/start.sh"]

# The Home Assistant image already has an entrypoint that starts Home Assistant
# We'll let it run in the background

WORKDIR /workspaces/homershift_card
WORKDIR /workspaces/homeshift_card
136 changes: 35 additions & 101 deletions .devcontainer/README.md
Original file line number Diff line number Diff line change
@@ -1,124 +1,58 @@
# DevContainer Development Environment
# DevContainer Home Assistant

Ce projet inclut une configuration DevContainer pour développer et tester une carte Home Assistant dans un environnement isolé.
Home Assistant avec les entités HomeShift simulées, Scheduler, des thermostats simulés et des planifications d'exemple pour voir la carte en situation, panneau des plannings compris.

## Prérequis

- Visual Studio Code
- Visual Studio Code + extension Dev Containers
- Docker Desktop
- Extension VS Code: Dev Containers

## Démarrage rapide
## Démarrage

1. Ouvrir le dossier dans VS Code
2. F1 → "Dev Containers: Reopen in Container"
3. Attendre l’initialisation de Home Assistant (1–2 min la première fois)
4. Construire la
```bash
npm install
npm run build
```
5. Accéder à Home Assistant: http://localhost:8123
1. Ouvrir le dossier dans VS Code → F1 → **Dev Containers: Reopen in Container** (ou **Rebuild Container** après une modification du `Dockerfile` ou de `devcontainer.json`)
2. `setup.sh` (une fois) : `npm install` + build, scheduler-component v3.3.8, scheduler-card v4.0.19, planifications d'exemple, intégration Scheduler, ressources Lovelace, dashboard **HomeShift**.
3. Home Assistant est le processus principal du conteneur (`start.sh`) : il démarre dès la fin de `setup.sh`, puis à chaque démarrage du conteneur → http://localhost:8123 (1-2 min au premier lancement)
4. Au premier lancement, `onboard.py` termine l'onboarding tout seul : se connecter avec le compte de test **`admin` / `admin`**
5. Ouvrir le dashboard **HomeShift** dans la barre latérale

## Ressource de la carte
L'intégration Scheduler est préconfigurée : inutile de l'ajouter depuis l'UI.

La ressource est définie via YAML (`resource_mode: yaml` dans `configuration.yaml`) :
## Itérer sur la carte

- URL: `/local/homeshift_card/homeshift-card.js`
- Type: Module
`dist/` est monté sur `/config/www/homeshift_card` :

## Dashboard Lovelace
```bash
npm run watch
```

La configuration utilise un **dashboard YAML dédié** (`ui-lovelace.yaml`) tout en laissant le dashboard principal en mode `storage` :
puis Ctrl+F5 dans le navigateur.

| Dashboard | Mode | Accès | Editeur graphique |
| ---------------------- | ------------------------- | ---------------------------- | ----------------- |
| **Overview** (sidebar) | YAML — `ui-lovelace.yaml` | icône dans la barre latérale | ❌ |
| **Accueil** (défaut) | Storage | icône maison | ✅ |
## Données d'exemple

- La carte `homeshift-card` est définie dans `ui-lovelace.yaml` et apparaît automatiquement dans l'onglet **Overview**.
- Le dashboard **Accueil** reste entièrement éditable via l'interface graphique de HA.
| Entité | Rôle |
| ---------------------------------------------------------- | ---------------------------------------------------------------------- |
| `select.homeshift_day_mode` / `homeshift_thermostat_mode` | Modes du jour et du thermostat (template select sur `input_select`) |
| `number.homeshift_*`, `sensor.homeshift_*`, `button.*` | Les autres entités de l'intégration HomeShift, simulées |
| `input_boolean.homeshift_window_*_backing` | Fenêtres ouvertes : font apparaître l'alerte « Non fermés » |
| `climate.bureau` / `chambre` / `salon` | `generic_thermostat` sur radiateurs `input_boolean` |
| `input_number.temperature_*_backing` | Températures mesurées, réglables |
| `switch.salon_enable_auto_start_stop` | Template switch piloté par les planifications |
| `input_boolean.force_presence` | Entité propre au mode Travail |

> Toute modification de `ui-lovelace.yaml` est prise en compte en rafraîchissant le navigateur (F5).
`scheduler.storage` contient 13 planifications taguées `Maison`, `Télétravail`, `Travail` et `Absence`, les options du mode du jour : le panneau des plannings de la carte les affiche. Il n'est copié que s'il n'existe pas encore dans `config/.storage/`. Pour revenir aux exemples : supprimer `config/.storage/scheduler.storage` puis reconstruire le conteneur.

## Entités
Le dashboard **HomeShift** est éditable dans l'UI. Il est créé au premier setup à partir de `dashboard.yaml` : la carte, une section de simulation et une scheduler-card pour modifier les planifications. Les modifications faites dans l'UI sont conservées ; pour revenir au modèle, supprimer `config/.storage/lovelace.dashboard_homeshift` puis reconstruire le conteneur.

En production, les entités proviennent de l'intégration **HomeShift** (https://github.com/Gamso/homeshift):
## Repartir de zéro

- `select.homeshift_day_mode`: options configurables par l'utilisateur (défaut: Maison, Travail, Télétravail, Absence)
- `select.homeshift_thermostat_mode`: options configurables par l'utilisateur (défaut: Eteint, Chauffage, Climatisation, Ventilation)
- `number.override_duration`: durée (en minutes) avant que HomeShift reprenne les mises à jour automatiques
Tout l'état de Home Assistant (base, `.storage`, comptes, logs) vit dans `config/`, ignoré par git sauf `configuration.yaml`. Pour une instance neuve (compte `admin` / `admin` recréé) : supprimer tout `config/` sauf `configuration.yaml`, puis **Rebuild Container**.

> **Devcontainer** : en l'absence de l'intégration HomeShift, des entités `input_select` de substitution sont définies dans `configuration.yaml` :
>
> - `input_select.homeshift_day_mode` : Maison, Travail, Télétravail, Absence
> - `input_select.homeshift_thermostat_mode` : Eteint, Chauffage, Climatisation, Ventilation
## Fichiers

Des entités `input_boolean` sont incluses pour tester le scheduler:

- `input_boolean.test_switch`: Interrupteur de test
- `input_boolean.test_light`: Lumière de test

## Scheduler Integration

L'environnement de test inclut automatiquement:

- **scheduler-component** (v3.3.8): Composant permettant de créer des planifications
- **scheduler-card** (v4.0.11): Interface UI pour gérer les planifications

Ces composants sont automatiquement téléchargés et installés lors de la première initialisation du conteneur.

### ⚠️ IMPORTANT: Configuration Requise

**L'intégration Scheduler doit être ajoutée manuellement via l'interface Home Assistant:**

1. Attendre que Home Assistant soit complètement démarré (1-2 minutes)
2. Compléter l'onboarding (créer un compte admin/admin si nécessaire)
3. Aller dans **Paramètres** → **Appareils et Services**
4. Cliquer sur **+ Ajouter une intégration**
5. Rechercher **"Scheduler"** et cliquer pour l'ajouter
6. L'intégration sera alors configurée et fonctionnelle

### Utilisation du Scheduler

Une fois l'intégration ajoutée:

1. Accéder à l'onglet "Scheduler" dans le dashboard
2. Utiliser la carte scheduler-card pour créer des planifications
3. Sélectionner les entités `input_boolean.test_switch` ou `input_boolean.test_light` pour tester

### Dépannage

Si l'intégration "Scheduler" n'apparaît pas dans la liste:

**⚠️ Pour les utilisateurs ayant une installation précédente:**
Si vous avez utilisé une version antérieure du DevContainer, les fichiers peuvent avoir été installés incorrectement. Solution:

1. Fermer VS Code et arrêter le DevContainer
2. Supprimer le volume Docker associé au conteneur
3. Rouvrir dans le DevContainer (reconstruction complète)
4. Les fichiers seront installés correctement dans `/config/custom_components/scheduler/`

**Autres vérifications:**

- Vérifier que Home Assistant est complètement démarré (voir les logs)
- Vérifier que les fichiers sont dans `/config/custom_components/scheduler/` avec:
```bash
ls -la /config/custom_components/scheduler/
# Doit afficher: manifest.json, __init__.py, etc.
```
- Redémarrer Home Assistant: **Paramètres** → **Système** → **Redémarrer**
- Rafraîchir le navigateur (Ctrl+F5)
- Vider le cache du navigateur et recharger

**Si les fichiers sont au mauvais endroit:**
Si vous voyez des fichiers Python directement dans `/config/custom_components/` (au lieu de `/config/custom_components/scheduler/`), c'est une installation incorrecte. Le script de setup les nettoiera automatiquement lors du prochain redémarrage du conteneur.
- `config/configuration.yaml`, `dashboard.yaml`, `scheduler.storage` : versionnés
- le reste de `config/` : état local ignoré par git

## Debug

- Logs HA: `/config/home-assistant.log`
- Console navigateur: F12

## Arrêt

- Fermer VS Code ou F1 → "Dev Containers: Reopen Folder Locally"
- Logs HA : `tail -f /config/home-assistant.log`
- Redémarrer HA : depuis l'UI (Paramètres → Système → Redémarrer) ou `pkill -f "^python3 -m homeassistant"` ; `start.sh` le relance automatiquement
Loading
Loading