Bonjour,
Avec plusieurs têtes de radiateur pilotées (Fibaro FGT-001 et Danfoss 014G0013), cela devenait un enfer de gérer les périodes de chauffe (heat/off) et les températures associées à coup d’Automation et de trigger de type time.
Exemples : chaud tôt le matin dans les SDB mais plus tard le week-end, couper la chauffe en dehors, température dans le bureau, dans les chambres, en journée, la nuit, etc
Ma solution a été d’utiliser Schedy : Schedy - The Concept
Assez complexe de prime abord, pas d’interface de configuration mais ça vaut le coup de s’accrocher.
- Définition des plages de chauffe avec une syntaxe YAML bien lisible (start: « 07:00 », end: « 20:00 »)
- Templating pour partager du paramétrage
- Ré-évaluation des rules à chaque sauvegarde (rechargement automatiquement)
- Renvoi automatique de la commande au thermostat si le retour n’est pas arrivé ou correct
- Gestion des erreurs bien claire dans le logs
- Détection/correction les modifications manuelles (ex: les enfants qui jouent à appuyer sur les boutons)
- Surveillance de paramètre externe (ex: chez moi j’utilise un input_boolean.homeoffice)
- Installer AppDaemon et la package hass-apps
Supervisor > Addons store > appdaemon > install
system_packages: []
python_packages:
- hass-apps
init_commands: []
Save et Start l’add-on AppDaemon
Dans les logs, on peut le voir récupérer la package hass-apps.
- Déployer le fichier hass_apps_loader.py
Dans un terminal
cd /config/appdaemon/apps
wget https://raw.githubusercontent.com/efficiosoft/hass-apps/master/hass_apps_loader.py
- Faire sa configuration avec le module thermostat
Avec le File editor, créer un fichier /config/appdaemon/apps/schedy_heating.yaml
Une partie de ma configuration sera plus claire qu’une longue explication
schedy_heating:
module: hass_apps_loader
class: SchedyApp
actor_type: thermostat
actor_templates:
default:
send_retry_interval: 30
send_retries: 10
watched_entities:
- input_boolean.homeoffice
expression_environment: |
def homeoffice():
return is_on("input_boolean.homeoffice")
schedule_append:
- v: "off"
rooms:
bureau:
actors:
climate.danfoss_z_thermostat_014g0013_heating_1:
supports_hvac_modes: false
off_temp: 2
delta: 2
schedule:
- rules:
- weekdays: 1-5
rules:
- rules:
- x: "Next() if homeoffice() else Break()"
- { v: 22, start: "07:30", end: "08:30" }
- { v: 21.5, start: "08:30", end: "12:00" }
- { v: 21, start: "14:00", end: "18:00" }
- rules:
- x: "Next() if not homeoffice() else Break()"
- { v: 20, start: "07:00", end: "20:00" }
- weekdays: 6-7
rules:
- { v: 20, start: "08:30", end: "11:30" }
sdb_1er:
actors:
climate.fibaro_system_fgt001_heat_controller_mode:
schedule:
- { v: 22, start: "06:30", end: "08:00", weekdays: 1-5 }
- { v: 21, start: "17:30", end: "19:30", weekdays: 1-7 }
- { v: 22, start: "07:30", end: "09:00", weekdays: 6-7 }
sdb_rdc:
actors:
climate.fibaro_system_fgt001_heat_controller_mode_2:
schedule:
- { v: 22, start: "05:15", end: "05:40", weekdays: 1-7 }
- { v: 22, start: "06:45", end: "07:30", weekdays: 1-7 }
- { v: 21, start: "17:30", end: "19:30", weekdays: 1-7 }
Documentation : Schedy - Tutorial et Fichier exemple
- (optionnel) Solution de contournement pour le Fibaro FGT-001 qui ne donne pas de retour d’état après commande
Sans quoi, Schedy va répéter la commande dans l’attente du bonne prise en compte.
Créer une Automation :
- alias: FGT001 rafraichit la temperature de chauffe
description: ''
trigger:
- event_data:
domain: climate
service_data:
entity_id: climate.fibaro_system_fgt001_heat_controller_mode
event_type: call_service
platform: event
- event_data:
domain: climate
service_data:
entity_id: climate.fibaro_system_fgt001_heat_controller_mode_2
event_type: call_service
platform: event
condition: []
action:
- delay: '10'
- data_template:
entity_id: '{{ trigger.event.data.service_data.entity_id }}'
service: zwave.refresh_entity
Bonus: si ça intéresse quelqu’un, sur le même principe, Schedy pilote AdGuardHome pour filtrer mon accès Internet aux services de streaming et jeux en ligne selon des plages horaires. Il utilise l’Actor appelé generic2 (Generic Actor Version 2).