Kategorier
Home Assistant

configuration.yaml i flere filer

Jeg fandt ret hurtigt ud af, at når jeg sad og tilføjede flere og flere konfigurationer, automations og andet at configuration.yaml filen kunne blive ret lang og meget uoverskuelig.

Jeg læste derfor om at splitte configuration.yaml op i flere filer (officiel dokumentation her), hvilket virker både logisk og nemt. Inden valgte jeg dog at fastsætte mig for hvordan jeg ville gøre det, f.eks. ved brug af mapper, men også anvendelsen af disse.

Jeg delte min anvendelse op i følgende typer:

  • Filmerge
    … som udføres via !include_dir_merge_list, da denne vil finde alle filer i mappen og merge dem samme til en stor liste.
    Dvs. jeg i en mappe blot kan ligge x antal filer og så finder Home Assistant selv filerne og merger dem sammen uden jeg skal redigere i configuration.yaml
  • Filhenvisning
    … hvor jeg benytter mappen til blot at indeholde nogle filer, som jeg henviser direkte til fra min configuration.yaml.
    Det dækker f.eks. over mange af mine integrationer, som IHC, homekit osv.
TypeNavnAnvendelse
Mappeautomations/Filmerge
Mappegroups/Filmerge
Mappeintegrations/Filhenvisning
Mappelights/Filmerge
Mappescenes/Filmerge
Mappescripts/Filmerge
Mappesensors/Filmerge
Mappesetup/Filhenvisning
Mappeswitches/Filmerge
Mappevariables/Filhenvisning

Herefter oprettede jeg mapperne via Visual Studio Code (som jeg har kørende som add-on), tog indholdet fra min eksisterende filer og placerede i de forskellige mapper.

Nedenfor kan du se nogle udvalgte eksempler på hvordan mine filer ser ud efterfølgende:

###################################
## Home Assistant Core
###################################
homeassistant: !include setup/homeassistant.yaml
http: !include setup/http.yaml
config:
system_health:
updater:
ssdp:
zeroconf:
frontend:
recorder: !include setup/recorder.yaml
history: !include setup/history.yaml
logbook: !include setup/logbook.yaml
map:
mobile_app:
person: !include setup/person.yaml
sun:
tts: !include setup/tts.yaml


###################################
## Variables
###################################
input_boolean: !include variables/input_boolean.yaml
input_datetime: !include variables/input_datetime.yaml
input_number: !include variables/input_number.yaml


###################################
## Components
###################################
ihc: !include integrations/ihc.yaml
vacuum: !include integrations/vacuum.yaml
notify: !include integrations/notify.yaml
homekit: !include integrations/homekit.yaml
# hue: !include integrations/hue.yaml
tplink: !include integrations/tplink.yaml
garbage_collection: !include integrations/garbage_collection.yaml
alarm_control_panel: !include integrations/alarm_control_panel.yaml
unifi: !include integrations/unifi.yaml


###################################
## Includes
###################################
sensor: !include_dir_merge_list sensors/
group: !include_dir_merge_list groups/
automation: !include_dir_merge_list automations/
script: !include_dir_merge_list scripts/
scene: !include_dir_merge_list  scenes/
switch: !include_dir_merge_list switches/
light: !include_dir_merge_list lights/
# zone: !include_dir_merge_list zones/
###################################
## ENTRANCE LIGHTS
###################################


###################################
## Switches
###################################
- platform: switch
  name: 'entrance_light'
  entity_id: switch.entrance_light

- platform: switch
  name: 'entrance_floor_star'
  entity_id: switch.entrance_floor_star
###################################
## LIVINGROOM LIGHTS
###################################


###################################
## Switches
###################################
- platform: switch
  name: 'livingroom_ph_lamp'
  entity_id: switch.tplink_ph_lampstick
  
- platform: switch
  name: 'livingroom_floor_lamp'
  entity_id: switch.tplink_floorlamp
###################################
## TP-LINK INTEGRATION
###################################
discovery: false
switch:
  - host: !secret tplink_host_livingroom_phlampstick
  - host: !secret tplink_host_livingroom_floorlamp
  - host: !secret tplink_host_garage_rackcabinet

Ovenstående viser eksempler på to filer, der bliver merged samme til én liste (lights/entrance.yaml og lights/livingroom.yaml) for Home Assistant, men der er også et eksempel, hvor jeg henviser direkte en fil (integrations/tplink.yaml).

Måden man skal se opdelingen på, og om man skal køre merge eller ej, skyldes om mappens filer passer til samme integration eller om mappen indeholder filer til forskellige integrationer. F.eks. i min integrations/ mappe er en række filer til forskellige integration, såsom IHC, homekit, vacuum osv. I min automations/ mappe er i stedet filer, der alle hører til automation-integrationen.

Dertil skal man huske, at man i de enkelte filer i mapperne, ikke skal starte med at definere integrationen. Den er allerede defineret i configuration.yaml, hvor man f.eks. skriver:

ihc: !include integrations/ihc.yaml
automation: !include_dir_merge_list automations/

Det jeg efterfølgende har gjort i f.eks. automations/ mappen er, at jeg har oprettet filer, der indikere hvilket rum den givne fil relatere sig til. Det betyder at alle automations relateret til vores bryggers er samlet i en fil, mens alle til vores entré er samlet i en anden. Det gør det derfor meget overskueligt, at finde frem til det YAML kode, der relatere sig til det rum, som man vil ændre på/arbejde med.

Jeg fortrød, at jeg ikke startede med ovenstående straks, da jeg gik igang med Home Assistant. Det tog alligevel lige lidt tid, at få splittet det hele op i filer og mapper, og det gjorde det markant mere overskueligt for mig efterfølgende.

God fornøjelse!

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *

This site uses Akismet to reduce spam. Learn how your comment data is processed.