Keynote de clôture du DevFest Toulouse, 13 novembre 2025, par Erwan Rougeux, Mathieu Passenaud, Logan Weber et Sylvain Wallez. Illustration : deux des orateurs en dessin animé, place du Capitole, entourés de sangliers.
Quatre maisons, une même box domotique, beaucoup trop d'idées.
Le couteau suisse de la domotique
Installations actives de Home Assistant (statistiques publiques, opt-in) : plus de 536 000.
Quand les nerds se lâchent…
Humidité de la salle de bains vs moyenne de la maison, et état de la VMC.
Un module relais logé dans la boîte d'encastrement, derrière l'interrupteur.
alias: SdB bas - Ventilation
triggers:
- trigger: template
value_template: >-
{{ states('sensor.sdbbas_humidity') | float >
states('sensor.humidite_moyenne') | float * 1.07 }}
for: "00:01:00"
conditions:
- condition: time
before: "23:45:00"
- condition: time
after: "08:00:00"
actions:
- action: light.turn_on
target:
entity_id: light.sdbbas_vmc
- wait_template: >-
{{ states('sensor.sdbbas_humidity') | float <
states('sensor.humidite_moyenne') | float * 1.05 }}
- action: light.turn_off
target:
entity_id: light.sdbbas_vmc
« On ne pourrait pas avoir une veilleuse ? »


…mais sont-elles toutes rentrées ?
alias: garden_chicken_coop_evening_closing
description: >-
Close chicken coop door
When outside luminosity is below 1 lux since 5 minutes
And when the sun has been down for 30 minutes
mode: single
trigger:
- platform: numeric_state
entity_id: sensor.garden_weather_station_luminosity
below: 1
for: "00:05:00"
- platform: sun
event: sunset
offset: "00:30:00"
condition:
- condition: state
entity_id: cover.garden_chicken_coop_door
state: 'open'
action:
- service: cover.close_cover
entity_id: cover.garden_chicken_coop_door
Je m'en vais, ça aspire
▶ Vidéo « appart aspirateur » sur YouTube (s'ouvre dans un nouvel onglet)
Fonction de la consommation
ET
du prix de l'électricité
| Puissance souscrite (kVA) | Abonnement annuel TTC (€) | Bleu HC | Bleu HP | Blanc HC | Blanc HP | Rouge HC | Rouge HP |
|---|---|---|---|---|---|---|---|
| pour 1 kWh (€ TTC) | |||||||
| 9 | 112,33 | 0,0763 | 0,0907 | 0,1074 | 0,1272 | 0,1971 | 0,5119 |
| 12 | 209,48 | 0,0763 | 0,0907 | 0,1074 | 0,1272 | 0,1971 | 0,5119 |
| 15 | 215,46 | 0,0763 | 0,0907 | 0,1074 | 0,1272 | 0,1971 | 0,5119 |
| 18 | 221,44 | 0,0763 | 0,0907 | 0,1074 | 0,1272 | 0,1971 | 0,5119 |
| 30 | 471,00 | 0,0763 | 0,0907 | 0,1074 | 0,1272 | 0,1971 | 0,5119 |
| 36 | 584,19 | 0,0763 | 0,0907 | 0,1074 | 0,1272 | 0,1971 | 0,5119 |
Les jours rouges en heures pleines, le kWh coûte plus de six fois le prix d'un jour bleu en heures creuses.
| Puissance souscrite (kVA) | Abonnement mensuel (€/mois) | Bleu HC | Bleu HP | Blanc HC | Blanc HP | Rouge HC | Rouge HP |
|---|---|---|---|---|---|---|---|
| prix du kWh (c€ TTC/kWh) | |||||||
| 6 | 15,50 | 12,32 | 14,94 | 13,91 | 17,30 | 14,60 | 64,68 |
| 9 | 19,49 | 12,32 | 14,94 | 13,91 | 17,30 | 14,60 | 64,68 |
| 12 | 23,38 | 12,32 | 14,94 | 13,91 | 17,30 | 14,60 | 64,68 |
| 15 | 27,01 | 12,32 | 14,94 | 13,91 | 17,30 | 14,60 | 64,68 |
| 18 | 30,79 | 12,32 | 14,94 | 13,91 | 17,30 | 14,60 | 64,68 |
| 30 | 46,31 | 12,32 | 14,94 | 13,91 | 17,30 | 14,60 | 64,68 |
| 36 | 54,43 | 12,32 | 14,94 | 13,91 | 17,30 | 14,60 | 64,68 |
Avec cette grille, une heure creuse de jour rouge coûte moins cher qu'une heure pleine de jour bleu.
Un compteur d'eau à impulsions sur l'arrivée du ballon, lu par un ESP32 sous ESPHome.
alias: garden_intercom_greeting_message
description: >-
Greeting opener
When an intercom badge is used
trigger:
- platform: state
id: logan
entity_id: binary_sensor.garden_intercom_unlock_logan_badge
to: 'on'
action:
- service: shell_command.garden_intercom_send_tts
data_template:
message: "Bienvenue {{ trigger.id }}!"
- if:
- condition: template
value_template: "{{ is_state('binary_sensor.garden_mailbox_letters', 'on')
or states('counter.garden_mailbox_packages') | int > 0 }}"
then:
- service: shell_command.garden_intercom_send_tts
data:
message: >- # « Il y a du courrier et 2 colis »
…
alias: garden_intercom_halloween_animation
description: >-
Play halloween fear sound
And switch on lights
When someone is detected in house parking zone for intercom
trigger:
- platform: mqtt
topic: frigate/events
payload: garden_intercom
value_template: "{{ value_json['after']['camera'] }}"
condition:
- "{{ trigger.payload_json['after']['label'] == 'person' }}"
# And enter in house_parking or house zone
- "{{ trigger.payload_json['after']['entered_zones']
| select('in', ['house', 'house_parking']) | list | length > 0 }}"
action:
- service: shell_command.garden_intercom_send_media
data:
file: "{{ ['zombie', 'horrible-laugh'] | random }}.mp3"
- service: light.turn_on
data:
effect: Alarm
target:
entity_id: light.yeelight_2
# + son aléatoire sur le Google Home du garage, 20 s, extinction
# send_intercom_media.sh : un MP3 de Home Assistant → haut-parleur de l'interphone
curl -sSf "$HA_URL/media/media/${file}" \
| ffmpeg -i - -c:a pcm_alaw -ac 1 -ar 8000 -f alaw -filter:a "volume=3.5" pipe:1 \
| curl "http://$INTERCOM/cgi-bin/audio.cgi?action=postAudio&channel=1" \
--header 'Content-Type: Audio/G.711A' --data-binary @-
Il sait quand je dois me relaxer devant la télé
C'est l'usage qui va nous le dire !
C'est l'usage qui va nous le dire !
Just connect the bin to the network!!!
Optimisons le PQ
Lequel a le meilleur rapport
efficacité / coût : 1, 2, 3 feuilles ?
On ne juge pas une civilisation à sa technologie, mais à son papier toilette.clin d'œil à Demolition Man (1993)
Rouleaux par jour (moyenne). La feuille unique, plus épaisse, dure nettement plus longtemps.
moondream.ai : un petit modèle de vision, prompt « boar pig ».
Votre avis sur OpenFeedback :
openfeedback.io/devfest-toulouse-2025