Reduce the soze of the examples

This commit is contained in:
Fabian Affolter 2016-03-26 10:59:33 +01:00
parent 6c7ab2edfa
commit 0c43a92040

View File

@ -9,7 +9,7 @@ sharing: true
footer: true footer: true
--- ---
So you've been using Home Assistant (HA, hass, or any number of other abbreviations) for a while now and your [configuration.yaml file brings people to tears](https://home-assistant.io/cookbook/configuration_yaml_from_bassclarinetl2/) or you simply want to start off with the distributed approach, here's how to "split the configuration.yaml" into more manageable (read: husmanly readable) pieces. So you've been using Home Assistant for a while now and your [configuration.yaml file brings people to tears](https://home-assistant.io/cookbook/configuration_yaml_from_bassclarinetl2/) or you simply want to start off with the distributed approach, here's how to "split the configuration.yaml" into more manageable (read: humanly readable) pieces.
First off, several community members have sanitized (read: without api keys/passwords etc) versions of their configurations available for viewing: First off, several community members have sanitized (read: without api keys/passwords etc) versions of their configurations available for viewing:
@ -18,7 +18,7 @@ First off, several community members have sanitized (read: without api keys/pass
As commenting code doesn't always happen, please read on for the details. As commenting code doesn't always happen, please read on for the details.
Now despite the logical assumption that the configuration.yaml will be replaced by this process it will in fact remain all be it in a much less cluttered form. Now despite the logical assumption that the `configuration.yaml` will be replaced by this process it will in fact remain all be it in a much less cluttered form.
In this lighter version we will still need what could be called the core snippet: In this lighter version we will still need what could be called the core snippet:
@ -36,25 +36,18 @@ homeassistant:
customize: !include customize.yaml customize: !include customize.yaml
``` ```
Note that each line after `homeassistant:` is indented two (2) spaces. Since the configuration files in Home Assistant are based on the YAML "language", indentation and spacing are important. Also note that seemingly strange entry under `customize:`. Note that each line after `homeassistant:` is indented two (2) spaces. Since the configuration files in Home Assistant are based on the YAML language, indentation and spacing are important. Also note that seemingly strange entry under `customize:`.
`!include filename.yaml` is the statement that tells Home Assistant to insert the contents of `filename.yaml` at that point. This is how we are going to break a monolithic and hard to read file (when it gets big) into more manageable chunks. `!include filename.yaml` is the statement that tells Home Assistant to insert the contents of `filename.yaml` at that point. This is how we are going to break a monolithic and hard to read file (when it gets big) into more manageable chunks.
Now before we start splitting out the different components, let's look at the other components (in our example) that will stay in the base file: Now before we start splitting out the different components, let's look at the other components (in our example) that will stay in the base file:
```yaml ```yaml
#discovery:
sun:
#updater:
history: history:
#conversation:
frontend: frontend:
logbook: logbook:
http: http:
api_password: ImNotTelling! api_password: ImNotTelling!
server_port: 8123
ssl_certificate: /etc/letsencrypt/live/example.com/fullchain.pem
ssl_key: /etc/letsencrypt/live/example.com/privkey.pem
ifttt: ifttt:
key: [nope] key: [nope]
@ -74,47 +67,35 @@ zwave:
mqtt: mqtt:
broker: 127.0.0.1 broker: 127.0.0.1
port: 8883
username: user
password: password
``` ```
As with the core snippet, indentation makes a difference. The component headers (`mqtt:`) should be fully left aligned (aka no indent), and the parameters (`port:`) should be indented two (2) spaces. As with the core snippet, indentation makes a difference. The component headers (`mqtt:`) should be fully left aligned (aka no indent), and the parameters (`port:`) should be indented two (2) spaces.
While some of these components can technically be moved to a separate file they are so small or "one off's" where splitting them off is superfluous. Also, you'll notice the # symbol (hash/pound). This represents a "comment" as far as the commands are interpreted. Put another way, any line prefixed with a `#` will be ignored. This makes breaking up files for human readability really convenient , not to mention turning off features while leaving the entry intact. (Look at the `zigbee:` entry above and the sensors entry further down) While some of these components can technically be moved to a separate file they are so small or "one off's" where splitting them off is superfluous. Also, you'll notice the # symbol (hash/pound). This represents a "comment" as far as the commands are interpreted. Put another way, any line prefixed with a `#` will be ignored. This makes breaking up files for human readability really convenient, not to mention turning off features while leaving the entry intact. (Look at the `zigbee:` entry above and the b entry further down)
Now, lets assume that a blank file has been created in the hass configuration directory for each of the following: Now, lets assume that a blank file has been created in the hass configuration directory for each of the following:
```text ```text
groups.yaml
zones.yaml
automation.yaml automation.yaml
notifications.yaml zones.yaml
sensors.yaml sensors.yaml
switches.yaml switches.yaml
scripts.yaml
media_player.yaml
device_tracker.yaml device_tracker.yaml
customize.yaml customize.yaml
``` ```
`automation.yaml` will hold all the automation component details `automation.yaml` will hold all the automation component details. `zones.yaml` will hold the zone component details and so forth. These files can be called anything but giving them names that match their function will make things easier to keep track of.
`zones.yaml` will hold the zone component details and so forth. These files can be called anything but giving them names that match their function will make things easier to keep track of.
Inside the base configuration file add the following entries: Inside the base configuration file add the following entries:
```yaml ```yaml
group: !include groups.yaml
zone: !include zones.yaml
automation: !include automation.yaml automation: !include automation.yaml
notifications: !include notifications.yaml zone: !include zones.yaml
sensor: !include sensors.yaml sensor: !include sensors.yaml
switch: !include switches.yaml switch: !include switches.yaml
scripts: !include: scripts.yaml
media_player: !include media_player.yaml
device_tracker: !include device_tracker.yaml device_tracker: !include device_tracker.yaml
``` ```
Note that there can only be one `!include:` for each component so chaining them isn't going to work. If that sounds like greek, don't worry about it. Note that there can only be one `!include:` for each component so chaining them isn't going to work. If that sounds like greek, don't worry about it.
Alright, so we've got the single components and the include statements in the base file, what goes in those extra files? Alright, so we've got the single components and the include statements in the base file, what goes in those extra files?
@ -131,26 +112,21 @@ Let's look at the `device_tracker.yaml` file from our example:
consider_home: 120 consider_home: 120
``` ```
This small example illustrates how the "split" files work. In this case, we start with a "comment block" identifying the file followed by two (2) device tracker entries (owntracks and nmap). These files follow "style 2" that is to say a fully left aligned leading entry (`- platform: owntracks`) followed by the parameter entries indented two (2) spaces. This small example illustrates how the "split" files work. In this case, we start with a "comment block" identifying the file followed by two (2) device tracker entries (`owntracks` and `nmap`). These files follow ["style 2"](/getting-started/devices/#style-2-list-each-device-separately) that is to say a fully left aligned leading entry (`- platform: owntracks`) followed by the parameter entries indented two (2) spaces.
This (large) sensor configuration gives us another example: This (large) sensor configuration gives us another example:
```yaml ```yaml
### sensors.yaml ### sensors.yaml
###
###
###
############################################################## ##############################################################
### METEOBRIDGE #### ### METEOBRIDGE ####
### http://meteobridge.com/wiki/index.php/Add-On_Services ####
### Live Data as Plain text ####
############################################################## ##############################################################
- platform: tcp - platform: tcp
name: 'Outdoor Temp (Meteobridge)' name: 'Outdoor Temp (Meteobridge)'
host: 192.168.2.82 host: 192.168.2.82
timeout: 6 timeout: 6
payload: "Content-type: text/xml; charset=UTF-8\n\n" payload: "Content-type: text/xml; charset=UTF-8\n\n"
value_template: "{{value.split (' ')[2]}}" value_template: "{{value.split (' ')[2]}}"
unit: C unit: C
- platform: tcp - platform: tcp
@ -169,102 +145,6 @@ This (large) sensor configuration gives us another example:
payload: "Content-type: text/xml; charset=UTF-8\n\n" payload: "Content-type: text/xml; charset=UTF-8\n\n"
value_template: "{{value.split (' ')[4] }}" value_template: "{{value.split (' ')[4] }}"
unit: C unit: C
- platform: tcp
name: 'Wind Direction (Meteobridge)'
host: 192.168.2.82
port: 5556
timeout: 6
payload: "Content-type: text/xml; charset=UTF-8\n\n"
value_template: "{{value.split (' ')[7]}}"
unit: Degrees
- platform: tcp
name: 'Wind Gust (Meteohub)'
host: 192.168.2.82
port: 5556
timeout: 6
payload: "Content-type: text/xml; charset=UTF-8\n\n"
value_template: "{{value.split (' ')[8]}}"
unit: m/s
- platform: tcp
name: 'Wind Speed (Meteobridge)'
host: 192.168.2.82
port: 5556
timeout: 6
payload: "Content-type: text/xml; charset=UTF-8\n\n"
value_template: "{{value.split (' ')[9]}}"
unit: m/s
- platform: tcp
name: 'Wind Chill (Meteobridge)'
host: 192.168.2.82
port: 5556
timeout: 6
payload: "Content-type: text/xml; charset=UTF-8\n\n"
value_template: "{{value.split (' ')[10]}}"
unit: C
- platform: tcp
name: 'Precip Rate (Meteobridge)'
host: 192.168.2.82
port: 5556
timeout: 6
payload: "Content-type: text/xml; charset=UTF-8\n\n"
value_template: "{{value.split (' ')[13]}}"
unit: mm/hr
- platform: tcp
name: 'Precip Total (Meteobridge)'
host: 192.168.2.82
port: 5556
timeout: 6
payload: "Content-type: text/xml; charaset=UTF-8\n\n"
value_template: "{{value.split (' ')[14]}}"
unit: mm
- platform: tcp
name: 'Precip Change (Meteobridge)'
host: 192.168.2.82
port: 5556
timeout: 6
payload: "Content-type: text/xml; charaset=UTF-8\n\n"
value_template: "{{value.split (' ')[15]}}"
unit: mm
- platform: tcp
name: 'Indoor Temp (Meteobridge)'
host: 192.168.2.82
port: 5556
timeout: 6
payload: "Content-type: text/xml; charaset=UTF-8\n\n"
value_template: "{{value.split (' ')[18]}}"
unit: C
- platform: tcp
name: 'Indoor Humidity (Meteobridge)'
host: 192.168.2.82
port: 5556
timeout: 6
payload: "Content-type: text/xml; charaset=UTF-8\n\n"
value_template: "{{value.split (' ')[19]}}"
unit: percent
- platform: tcp
name: 'Indoor Dewpoint (Meteobridge)'
host: 192.168.2.82
port: 5556
timeout: 6
payload: "Content-type: text/xml; charaset=UTF-8\n\n"
value_template: "{{value.split (' ')[20]}}"
unit: C
- platform: tcp
name: 'Barometric Pressure (Meteobridge)'
host: 192.168.2.82
port: 5556
timeout: 6
payload: "Content-type: text/xml; charaset=UTF-8\n\n"
value_template: "{{value.split (' ')[21]}}"
unit: mb
- platform: tcp
name: 'Sea Level Pressure (Meteobridge)'
host: 192.168.2.82
port: 5556
timeout: 6
payload: "Content-type: text/xml; charaset=UTF-8\n\n"
value_template: "{{value.split (' ')[22]}}"
unit: mb
################################### ###################################
#### STEAM FRIENDS #### #### STEAM FRIENDS ####
################################## ##################################
@ -300,5 +180,5 @@ You'll notice that this example includes a secondary parameter section (under th
That about wraps it up. That about wraps it up.
If you have issues checkout `home-assistant.log` in the configuration directory as well as your indentations. If all else fails, head over to the gitter.im chat and ask away. If you have issues checkout `home-assistant.log` in the configuration directory as well as your indentations. If all else fails, head over to the [Gitter Chatroom](https://gitter.im/balloob/home-assistant) and ask away.