I was inspired to finally start cleaning up my Home Assistant config file last night after watching Dr Zzzs and Franck talking about how YAML works. It's interesting to note that YAML is used outside of Home Assistant, something I was not always aware of and there are various way to write the same thing in YAML. Getting a good understanding on how the language work helps a lot when working with your config. Very, very simply put yaml, has either a list or a dictionary.
#List with 2 item - From my automations for example - id: '1552475178483' alias: (Gate) Check Gate is Closed trigger: platform: time at: '22:55:00' action: service: switch.turn_off data: entity_id: switch.gate_open - id: '1552488155107' alias: Number Plate Reader trigger: - event_data: entity_id: image_processing.openalpr_gate plate: XXXXXX event_type: image_processing.found_plate platform: event action: - data: entity_id: cover.gate service: cover.open_cover
#Dictionary with 2 item - your main config is a dictionary doorbird: devices: - host: 192.168.1.XXX username: !secret door_bird_user password: !secret door_bird_password token: !secret door_bird_token name: Door Bell events: - doorbell_1 - motion_detected_gate input_datetime: only_time: name: Bedroom Lights On has_date: false has_time: true
It would be best to see the fully explanation here:
The main take away I found useful to know is that in your configuration.yaml file you can load an integration twice. The example was given for automations:
automation: !include automations.yaml automation whateveryouwant: !include_dir_list automations
You may have a file that contains a lot of automations in one file including the ones generated in the GUI and on the second line you can also load your automations created in the text editor from a directory /config/automations each file in that directory will be one automation. This can be helpful to slowly sort all your files out instead of doing one big change over and having lots of errors.
To breakup your config you can use the following directory types:
#Will return the content of a directory as a list with each file #content being an entry in the list. The list entries are ordered #based on the alphanumeric ordering of the names of the files typeone: !include_dir_list typeone #Will return the content of a directory as a list by merging all #files (which should contain a list) into 1 big list typetwo: !include_dir_merge_list typetwo #Will return the content of a directory as a dictionary which #maps filename => content of file. typethree: !include_dir_named typethree #Will return the content of a directory as a dictionary by #loading each file and merging it into 1 big dictionary typefour: !include_dir_merge_named typefour
So I went ahead and started sorting my config out with this information and everything is still working, which is great. Even though I removed script: !include scripts.yaml from config, and replaced it with script: !include_dir_names scripts for some reason home assistant GUI would place the new script in the file scripts.yaml and if you don't have a scripts.yaml file you can't edit script at all in the GUI.
Anyway I will continue and let you know how operation config cleanup goes.