Configuración de Homeassistant en packages

INTRODUCCION

Vamos a configurar Homeassistant en packages; después de meses jugando con Homeassistant y de meter cada vez mas y mas cosas, te vas dando cuenta que para meter algo nuevo tienes que tocar varios archivos, ya que la instalación por defecto de Homeassistant te instala todos los tipos de elementos juntos en el mismo sitio y te “obliga” a que todos los sensors los dejes juntos, todos los automations los dejes en el mismo sitio, y así con todo.

Es así porque declaramos los sensores todos juntos en un único archivo, o en varios archivos declarando una carpeta.

Esto cuando empiezas te parece bien, ya que vas sin pensarlo a donde está cada cosa y realmente tienes pocos sensores; pero cuando tienes decenas de sensores, switch, automations, y binary, la cosa se complica ya que si quieres meter algo nuevo tienes que ir editando cada archivo manualmente e ir copiando de uno a otro las entities.

SISTEMA TRADICIONAL

De la manera tradicional (sin packages), lo que haces es repartir en diferentes sitios los elementos por su tipo, todos los sensores juntos, todos los automations juntos, etc.

Si por ejemplo quiero meter en mi instalación de Homeassistant un sensor de lluvia para el jardín, un sensor de temperatura, un par de light, varios automation para la luces, un script y varios binary_sensor y switch para enchufes; todo eso es del jardín y (en principio) todo va a estar junto en las mismas tarjetas, tendría que tocar muchos archivos y poner los sensores de lluvia junto a los sensores de los discos duros de un ordenador, lo que no tiene mucho sentido que esté así.

En esta imagen vemos una instalación típica de un Homeassistant en el que están todos los tipos de elementos juntos, los sensores dentro de una carpeta sensors, los bynary_sensors juntos en un archivo yaml, etc…

Y aquí podéis ver como está hecho el configuration.yaml:

homeassistant:
  name: Mi casa
  latitude: !secret latitude
  longitude: !secret longitude
  elevation: !secret elevation
  unit_system: metric
  time_zone: !secret timezone
  customize: !include customize.yaml
  customize_glob: !include customize_glob.yaml
frontend:
config:
http:
  api_password: !secret api_password
updater:
discovery:
conversation:
history:
logbook:
map:
sun:
tts:
  - platform: google
cloud:
group: !include groups.yaml
automation: !include automations.yaml
script: !include_dir_named scripts
switch: !include switch.yaml
binary_sensor: !include binary_sensors.yaml
sensor: !include_dir_merge_list sensors
panel_iframe: !include panels.yaml
camera: !include camaras.yaml
media_player:
  - platform: plex
notify:
  - name: pushbullet_notify
    platform: pushbullet
    api_key: !secret pushbullet_token
device_tracker:
  - platform: bluetooth_tracker
    new_device_defaults:
    track_new_devices: True
    hide_if_away: False
  - platform: ping
    hosts:
    hostone: 192.168.1.3
mqtt:
  broker: !secret mqtt_ip
  port: !secret mqtt_port
  client_id: casa
  username: !secret mqtt_username
  password: !secret mqtt_password
xiaomi_aqara:
  discovery_retry: 15
  gateways:
    - key: !secret gateway_key

PACKAGES

Con packages, lo que consigues es unificar en un solo archivo yaml todo lo relacionado con “algo”, por ejemplo, quiero meter en mi instalación de Homeassistant un sensor de lluvia para el jardín, un sensor de temperatura, un par de light, varios automation para la luces, un script y varios binary_sensor y switch para enchufes. Todo eso es del jardín y (en principio) todo va a estar junto en las mismas tarjetas, con lo que todo tiene sentido que esté junto en el mismo archivo yaml.

Volviendo al ejemplo del jardín, si quisiera poner todo lo que quiero tendría que editar cada archivo y meterlo dentro para que funcionase bien, lo que te obliga a ir copiando los sensores de uno a otro, y yo el mayor problema que veo es si quieres ampliarlo, con packages solo tienes que crear un archivo yaml con todo dentro, con lo que si deja de funcionar con borrar ese archivo quitarías ese error. Otro uso de la instalación con packages es sk ya tienes funcionando algo y quieres mejorarlo lo único que hay que hacer es duplicar el archivo yaml que quieras cambiándole el nombre y jugar con el, si deja de funcionar o no es lo que quieres con volver al archivo anterior todo lo dejas como estaba, de la manera tradicional tendrías que ir tocando varios archivos, lo que complica mucho hacerlo.

Ahora vamos a pasar ese ejemplo a una instalación en packages, con lo que tenemos que incluir en nuestro configuration.yaml una entrada tal que así:

homeassistant:
  name: Mi casa
  latitude: !secret latitude
  longitude: !secret longitude
  elevation: !secret elevation
  unit_system: metric
  time_zone: !secret timezone
  customize: !include customize.yaml
  packages: !include_dir_named packages
Creamos la carpeta packages dentro del config recordando siempre darle los permisos correspondientes.
Esta sería una estructura de carpetas y archivos de packages dentro.
Después tendremos que eliminar de los include en el archivo configuration.yaml que tenemos lo que queramos que vaya en cada package, yo en mi caso dejo todo dentro de los packages, con lo que ahí cada uno tiene que decidir lo que quiere dejar dentro o fuera, yo os voy a decir como lo hago yo:
  • group: dentro de packages, se elimina la entrada: group: !include groups.yaml
  • automation: dentro de packages, se elimina la entrada: automation: !include automations.yaml
  • script: dentro de packages, se elimina la entrada: script: !include_dir_named scripts
  • switch: dentro de packages, se elimina la entrada: switch: !include switch.yaml
  • binary_sensor: dentro de packages, se elimina la entrada:  !include binary_sensors.yaml
  • sensor: dentro de packages, se elimina la entrada: !include_dir_merge_list sensors

Luego hay algún tipo de elemento que se puede dejar con el include, como los panel_iframe, eso no tiene sentido que esté en los packages, ya que es algo global y lo suyo es que esté en un yaml suelto y con su include. Diferente es con la entrada camera, esa cada uno tiene que decidir donde lo deja, depende si tienes varias cámaras y quieres que estén juntas o cada una en su zona, si quieres organizarlas juntas puedes dejarlo como está, si quieres ponerlas cada una en su zona, tendrías que borrar el include y meter su entrada correspondiente en cada package donde quieras declarar las camaras. Algo parecido pasa con los media_player y los device_tracker, puedes dejarlos así o en un package, además cada instalación de Homeassistant es diferente, puedes querer dejar en un package llamado dormitorio.yaml todo lo relacionado con esa estancia, incluido los media_player y camera, o dejarlas fuera en un package juntos o incluso en el configuration.

El archivo configuration.yaml de una instalación con packages sería algo parecido a esto:

homeassistant:
  name: Mi casa
  latitude: !secret latitude
  longitude: !secret longitude
  elevation: !secret elevation
  unit_system: metric
  time_zone: !secret timezone
  customize: !include customize.yaml
  customize_glob: !include customize_glob.yaml
  packages: !include_dir_named packages
frontend:
config:
http:
  api_password: !secret api_password
updater:
discovery:
conversation:
history:
logbook:
map:
sun:
tts:
  - platform: google
cloud:
panel_iframe: !include panels.yaml
notify:
  - name: pushbullet_notify
    platform: pushbullet
    api_key: !secret pushbullet_token
device_tracker:
  - platform: bluetooth_tracker
    new_device_defaults:
    track_new_devices: True
    hide_if_away: False
  - platform: ping
    hosts:
    hostone: 192.168.1.3
mqtt:
  broker: !secret mqtt_ip
  port: !secret mqtt_port
  client_id: casa
  username: !secret mqtt_username
  password: !secret mqtt_password
xiaomi_aqara:
  discovery_retry: 15
  gateways:
    - key: !secret gateway_key
Si os fijáis se han quitado todos los include que quiero que estén en cada package, y además he eliminado el sensor del tiempo, ya que ese va en su package del tiempo, pero podría haberlo dejado, puedes declarar sensores en el configuration igual que en packages.
Ahora os pongo como sería un archivo packages de ejemplo en el que están dentro declarados varios elementos que antes estaban repartidos por diferentes archivos y carpetas:
homeassistant:
  customize:
    automation.luz_jardin_encendida_de_noche:
      friendly_name: Luz jardin solo de noche
      icon: mdi:theme-light-dark
    switch.luz_jardin:
      icon: mdi:track-light
    sensor.plantas_temperature:
      friendly_name: Temperatura
      icon: mdi:temperature-celsius
    sensor.plantas_light_intensity:
      friendly_name: Luminosidad
      icon: mdi:white-balance-sunny
    sensor.plantas_moisture:
      friendly_name: Humedad
      icon: mdi:water-percent
    sensor.plantas_conductivity:
      friendly_name: Conductividad
      icon: mdi:car-battery
    sensor.plantas_battery:
      friendly_name: Bateria
      icon: mdi:battery
group:
  garden:
    name: Jardin
    view: no
    icon: mdi:pine-tree
    control: hidden
    entities:
      - binary_sensor.puerta_jardin #puerta jardin
      - binary_sensor.motion_jardin #sensor movimiento jardin
      - sensor.temperatura_jardin_temperature #temperatura jardin
      - sensor.temperatura_jardin_pressure #presion jardin
      - sensor.temperatura_jardin_humidity #humedad jardin
      - switch.luz_jardin
      - automation.luz_jardin_encendida_de_noche
  plantas:
    name: Plantas
    view: no
    icon: mdi:flower
    control: hidden
    entities:
      - sensor.plantas_temperature
      - sensor.plantas_light_intensity
      - sensor.plantas_moisture
      - sensor.plantas_conductivity
      - sensor.plantas_battery
sensor:
  - platform: miflora
    mac: 'C1:5C:8D:87:57:C2'
    name: Plantas
    force_update: false
    median: 3
    monitored_conditions:
      - moisture
      - light
      - temperature
      - conductivity
      - battery
switch:
  - platform: mqtt
    name: "Luz jardin"
    state_topic: "stat/sonoff_s20_1/POWER"
    command_topic: "cmnd/sonoff_s20_1/POWER"
    qos: 1
    payload_on: "ON"
    payload_off: "OFF"
    retain: true
automation:
  - alias: Luz jardin encendida de noche
    trigger:
      - platform: sun
        event: sunset
      - platform: sun
        event: sunrise
    action:
      service: switch.toggle
      entity_id: switch.luz_jardin
camera:
script:
input_boolean:
etc…
Como podéis ver se puede declarar dentro del package todo lo que quieras.

Un comentario sobre “Configuración de Homeassistant en packages

Deja un comentario

Síguenos

Siguenos en facebook