Home Assistant Directory Structuur

De directory structuur van Home Assistant nader bekeken om inzicht te krijgen in de verwijzingen naar (sub)folders en met name configuratiebestanden. Uitgangspunt hierbij is de Home Assistant OS versie.

De hoofd-directory van Home Assistant is /homeassistant en hierin staat wellicht het meest belangrijke bestand: configuration.yaml en hierin staat in ieder geval de basis voor Home Assistant:

# Loads default set of integrations. Do not remove.
default_config:

gevolgd door optionele instellingen die na een aanpassing ingelezen kunnen worden met de service homeassistant.reload_core_config zonder Home Assistant te hoeven herstarten.

een voorbeeld voor een basis-instelling zou het volgende kunnen zijn:

homeassistant:
  name: Home
  latitude: 32.87336
  longitude: 117.22743
  elevation: 0
  unit_system: metric
  currency: EUR
  country: NL
  time_zone: "Europe/Amsterdam"

Vervolgens worden in configuration.yaml de verwijzingen gemaakt naar de Home Assistant domain-instellingen, zoals:

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

waarbij !include een verwijzing is naar een bestand dat hiervoor ingelezen moet worden. Met andere woorden, er zijn dus tevens de volgende yaml-bestanden aanwezig:

/homeassistant/automations.yaml
/homeassistant/scripts.yaml
/homeassistant/scenes.yaml

en hierin staan de de specifieke instellingen voor de betreffende domains.

Verder staan specifieke domain-instellingen in configuration.yaml zoals bijvoorbeeld:

# Alarmpanel settings
alarm_control_panel:
  - platform: manual
    name: Home Alarm
    code_arm_required: false
    code: !secret alarmcode
    armed_away:
      arming_time: 30
      delay_time: 20
      trigger_time: 4

# Load frontend themes from the themes folder
frontend:
  themes: !include_dir_merge_named themes

en allerlei andere instellingen die je als gebruiker hebt toegevoegd.

Aparte bestanden

Om geen onoverzichtelijk bestand te krijgen in alleen maar configuration.yaml kunnen de diverse onderdelen in aparte bestanden worden geplaatst en ge-include worden in configuration.yaml. Bijvoorbeeld:

bestand frontend.yaml:

---
# Use this file to maintain frontend
#
themes: !include_dir_merge_named /config/themes

bestand homeassistant.yaml:

---
# Use this file to maintain core settings
#
name: Home
latitude: !secret latitude
longitude: !secret longitude
elevation: 0
unit_system: metric
currency: EUR
country: NL
time_zone: "Europe/Amsterdam"

bestand templates.yaml:

---
# Use this file to maintain templates
#
sensor:
  - name: "light on count"
    state: >
      {{ states.light | selectattr('state', 'eq', 'on') | list | count }}

bestand mqtt.yaml:

---
# Use this file to maintain mqtt entities
#
sensor:
  - name: "zon"
    unique_id: "zon"
    state_topic: "ha_sun"

Die includen we vervolgens in configuration.yaml die er dan zo uit gaat zien:

---
## Home Assistant Core settings ##
default_config:
homeassistant: !include homeassistant.yaml
frontend: !include frontend.yaml

## Additional settings ## 
template: !include templates.yaml
automation: !include automations.yaml
group: !include groups.yaml
script: !include scripts.yaml
light: !include lights.yaml
sensor: !include sensors.yaml
switch: !include switches.yaml
mqtt: !include mqtt.yaml

De volgende stap is om dan ook alle instellingen voor de entiteiten in yaml-bestanden te plaatsen, dus voor de sensors, lights, input_booleans, switches, sensors, etc…

Alle yaml-bestanden staan dan in de directory /homeassistant en wellicht is dat niet de meest ideale plek als het op overzicht aan komt.

Directories

We kunnen directories aanmaken met daarin de yaml-bestanden en dan die directories includen in de configuration.yaml. Deze directory-structuur plaatsen we dan ook weer in twee sub-directories, één voor de core-settings, genaamd ‘core‘ en één voor de overige instellingen, genaamd ‘additional‘, beide sub-directories komen in de directory ‘settings

Bijvoorbeeld de volgende structuur waarbij meerdere yaml-bestanden in een directory (kunnen) staan:

settings
├── core
│   ├── homeassistant.yaml
│   ├── frontend.yaml
├── additional
│   ├── automations
│   │   └── rssfeed.yaml
│   ├── groups
│   │   └── persons.yaml
│   │   └── iphones.yaml
│   ├── lights
│   │   └── inside.yaml
│   │   └── outside.yaml
│   ├── mqtt
│   │   └── sensors.yaml
│   ├── scripts
│   │   └── scripts.yaml
│   ├── sensors
│   │   └── templates.yaml
│   ├── switches
│   │   └── basement.yaml
│   │   └── groundfloor.yaml
│   │   └── secondfloor.yaml
│   │   └── thirdfloor.yaml
│   └── templates
│       └── sensors.yaml

en dan de directories dus includen in configuration.yaml:

---
## Home Assistant Core settings ##
default_config:
homeassistant: !include settings/core/homeassistant.yaml
frontend: !include settings/core/frontend.yaml
automation ui: !include automations.yaml

## Additional settings named ##
template: !include_dir_merge_named settings/additional/templates
group: !include_dir_merge_named settings/additional/groups
script: !include_dir_merge_named settings/additional/scripts
switch: !include_dir_merge_named settings/additional/switches
mqtt: !include_dir_merge_named settings/additional/mqtt

## Additional settings list ##
automation manual: !include_dir_merge_list settings/additional/automations
sensor: !include_dir_merge_list settings/additional/sensors

Voor de automatiseringen geldt een uitzondering:
– Automatiseringen gemaakt via de web-pagina van HA worden in automations.yaml bewaard zoals aangegeven in ‘automation ui
– Automatiseringen die via YAML bestanden worden aangemaakt staan in de directory aangegeven via ‘automation manual

Zoals je ziet zijn er hier drie ‘includes’ gebruikt, !include, !include_dir_merge_named en !include_dir_merge_list.

!include – is dus het includen van een enkel bestand,
!include_dir_merge_named – is het includen van van bestanden in een directory die samengevoegd kunnen worden
!include_dir_merge_list – is het includen van bestanden in een directory die samengevoegd kunnen worden EN waarin een list is opgenomen. Een list-item wordt altijd vooraf gegaan door een ‘-‘ teken.

Een voorbeeld van een bestand met daarin een list-item (-) is sensors.yaml:

- platform: template
  sensors:
    favorite_playlist_of_nearest_person:
      value_template: >
        {% if is_state_attr("proximity.home", "nearest", "Nico") -%}
          413ool2QBpl7TWp3TkQiNq
        {%- else -%}
          41oalksdhfhurjvlllQNbx
        {%- endif %}

Het resultaat is een strak overzicht, vooral in de File Editor add-on: