Sur cette page
Votre Home Assistant connaît déjà la météo, les lumières et le jour des poubelles. Ce tutoriel lui apprend le programme du cinéma du quartier : un capteur qui garde les séances du jour, une carte du tableau de bord qui liste celles qui restent avec leurs liens de réservation, et une notification à 17 h quand il y a quelque chose ce soir. Tout est du YAML collé dans Home Assistant ; pas d’intégration personnalisée, pas de HACS, pas de module complémentaire.
Aujourd’hui au Champo
Affreux, sales et méchants
15:40 VOST · 19:55 VOST
Safe
15:45 VOST
LA MAISON AU PIED DU ROC
20:00 VOSTCe qu’il vous faut
- Home Assistant 2024.10 ou plus récent, avec accès à
configuration.yaml(module File editor ou Studio Code Server, ou SSH). Ce tutoriel a tourné sur Home Assistant 2026.11. - Une clé API Cinéma : créez un compte gratuit, confirmez votre adresse e-mail, puis créez une clé depuis le tableau de bord. Le forfait gratuit donne 100 requêtes par semaine ; cette installation en consomme environ 42.
- Le
slugdu cinéma. Cherchez-le par son nom :
curl "https://api.api-cinema.com/v1/cinemas?q=champo" -H "Authorization: Bearer ac_live_…"La réponse donne "slug": "le-champo-paris-5e-arrondissement". N’importe quel cinéma de l’API marche : France, États-Unis, Australie.
La clé dans secrets.yaml
Home Assistant garde les mots de passe hors de la configuration, dans secrets.yaml, à côté de configuration.yaml. Ajoutez une ligne, avec le mot Bearer, une espace, puis votre clé :
api_cinema_auth: Bearer ac_live_…Le capteur
Deux blocs vont dans configuration.yaml. Le premier est un rest_command : une requête HTTP nommée que Home Assistant sait lancer, ici les séances d’un cinéma pour aujourd’hui, avec le film de chaque séance (include=movie). Le second est un capteur template qui lance cette requête au démarrage de Home Assistant puis toutes les quatre heures, et garde une liste courte des séances du jour : heure, film, version, lien de réservation.
rest_command:
cinema_seances:
url: 'https://api.api-cinema.com/v1/cinemas/le-champo-paris-5e-arrondissement/showtimes?date={{ now().date() }}&include=movie&limit=1000'
headers:
Authorization: !secret api_cinema_auth
timeout: 20
template:
- triggers:
- trigger: homeassistant
event: start
- trigger: time_pattern
hours: /4
minutes: 1
actions:
- action: rest_command.cinema_seances
response_variable: reponse
continue_on_error: true
sensor:
- name: Cinéma aujourd’hui
unique_id: cinema_aujourdhui
icon: mdi:filmstrip
unit_of_measurement: séances
state: >
{% if reponse is defined and reponse.status == 200 %}
{{ reponse.content.data | count }}
{% else %}
{{ this.state }}
{% endif %}
attributes:
seances: >
{% if reponse is defined and reponse.status == 200 %}
{% set ns = namespace(liste=[]) %}
{% for s in reponse.content.data %}
{% set ns.liste = ns.liste + [{
'heure': s.startsAt[11:16],
'film': s.movie.title,
'version': s.version if s.format == '2D' else s.version ~ ' ' ~ s.format,
'url': s.bookingUrl
}] %}
{% endfor %}
{{ ns.liste }}
{% else %}
{{ this.attributes.seances | default([]) }}
{% endif %}Remplacez le slug de l’URL par celui de votre cinéma. Si votre configuration.yaml a déjà une clé template:, ajoutez l’élément - triggers: sous celle qui existe au lieu d’écrire un second template:.
Quelques détails qui comptent :
date={{ now().date() }}demande toute la journée, à l’heure locale du cinéma. Le déclencheur passe à 00:01, 04:01, 08:01… : la liste bascule sur le nouveau jour juste après minuit.- Le capteur ne se vide jamais. Quand la requête échoue (pas de réseau, mauvaise clé,
429quand le quota de la semaine est épuisé), l’action n’arrête pas le template (continue_on_error) et l’état comme la liste gardent leurs dernières valeurs (this.state,this.attributes). Home Assistant écrit l’erreur dans son journal. startsAtest l’heure affichée au cinéma :startsAt[11:16]donne l’heure du billet (19:55), sans conversion de fuseau.
Vérifiez la configuration (Outils de développement › YAML › Vérifier la configuration), puis redémarrez Home Assistant. Dans Outils de développement › États, sensor.cinema_aujourdhui affiche le nombre de séances du jour, et son attribut seances la liste :
seances:
- heure: "15:40"
film: Affreux, sales et méchants
version: VOST
url: https://www.cinema-lechampo.com/film.html#/media/574?showId=34629
- heure: "15:45"
film: Safe
...La carte du tableau de bord
Modifiez un tableau de bord, Ajouter une carte › Markdown, passez dans l’éditeur de code et collez ceci. Le template regroupe par film les séances qui restent, met en tête le film dont la séance est la plus proche, et fait de chaque heure un lien vers la page de réservation du cinéma :
type: markdown
title: Aujourd’hui au Champo
content: |
{% set restantes = state_attr('sensor.cinema_aujourdhui', 'seances') | default([], true)
| selectattr('heure', '>=', now().strftime('%H:%M')) | list %}
{% for film, seances in restantes | groupby('film') | sort(attribute='list.0.heure') %}
**{{ film }}**
{% for s in seances %}{{ '[' ~ s.heure ~ '](' ~ s.url ~ ')' if s.url else s.heure }} {{ s.version }}{{ ' · ' if not loop.last }}{% endfor %}
{% else %}
Plus rien aujourd’hui.
{% endfor %}La carte se recalcule seule chaque minute, parce que le template utilise now() : une séance disparaît dès qu’elle a commencé, sans nouvelle requête à l’API. Gardez content: | avec la barre verticale : avec >, YAML replie les lignes et les films se suivent sur une seule.
Une notification quand il y a une séance ce soir
Paramètres › Automatisations › Créer une automatisation › Créer une nouvelle automatisation, puis ⋮ › Modifier en YAML, et collez :
alias: Ce soir au cinéma
triggers:
- trigger: time
at: '17:00:00'
variables:
soiree: >
{{ state_attr('sensor.cinema_aujourdhui', 'seances') | default([], true)
| selectattr('heure', '>=', '18:00') | list }}
conditions:
- condition: template
value_template: '{{ soiree | count > 0 }}'
actions:
- action: persistent_notification.create
data:
title: Ce soir au Champo
message: |
{% for film, seances in soiree | groupby('film') | sort(attribute='list.0.heure') -%}
- {{ film }} : {{ seances | map(attribute='heure') | join(', ') }}
{% endfor %}À 17 h, si au moins une séance commence à 18 h ou plus tard, une notification apparaît dans Home Assistant :
Ce soir au Champo
- Affreux, sales et méchants : 19:55
- LA MAISON AU PIED DU ROC : 20:00
- Rendez-vous avec la peur : 22:05Pas de séance ce soir, pas de notification. Pour la recevoir sur le téléphone, remplacez l’action par celle de l’application Companion, notify.mobile_app_<votre_telephone>, avec les mêmes title et message. L’automatisation lit le capteur et n’envoie aucune requête elle-même ; ⋮ › Exécuter les actions la teste à toute heure.
Quota
Le capteur envoie une requête au démarrage de Home Assistant et une toutes les quatre heures : six par jour, environ 42 par semaine, quel que soit le nombre de cartes et d’automatisations qui le lisent. Le forfait gratuit le couvre, redémarrages compris. Un hours: /2 double la note ; restez au-dessus de deux heures avec le forfait gratuit.
Variantes
- Plusieurs cinémas. Copiez le
rest_commandet l’élément- triggers:sous un autre nom (cinema_seances_2,Cinéma aujourd’hui 2), et pointez une deuxième carte sursensor.cinema_aujourdhui_2. Chaque cinéma ajoute 42 requêtes par semaine. - Tous les cinémas d’une ville. Prenez
https://api.api-cinema.com/v1/showtimes?city=Lyon&date={{ now().date() }}&include=movie,cinema&limit=1000, ajoutez'cinema': s.cinema.nameà chaque élément de la liste, et affichez-le dans la carte à côté de l’heure. Lyon compte environ 400 séances par jour : voyez le point suivant. - La VO seulement. Ajoutez
&version=VOST(ouVO) à l’URL ; ou gardez l’URL et filtrez dans la carte avec| selectattr('version', 'search', 'VO'). - Un multiplexe. Un cinéma à 150 séances par jour donne une liste plus grosse que les 16 Ko que Home Assistant garde dans son historique : il écrit un avertissement et enregistre l’état sans la liste, et la carte continue de marcher. Pour le faire taire, excluez le capteur de l’enregistreur (
recorder: exclude: entities: [sensor.cinema_aujourdhui]).
Tous les paramètres et champs sont dans la documentation. Pour le même programme en mail quotidien, voyez la newsletter n8n ; pour demander « qu’est-ce qui passe ce soir ? » à un assistant, le serveur MCP répond depuis Claude ou Cursor.