Package w Home Assistant

Konfiguracja HA wraz ze wzrostem liczby urzadzeń i automatyzacji w pewnym momencie staje się mało czytelna, rozwiązaniem tego jest uzupełnienie konfiguracji o tzw. package. Najprościej to opisać jako zbiór osobnych plików konfiguracyjnych HA, które razem tworzą całość. Każdy plik musi spełniać zasady konfiguracji pliku configuration.yaml.
Mój plik konfiguracyjny configuration.yaml po zakończeniu migracji na package (bo to chciałem osiągnąć) zawiera tylko to:

homeassistant:
# In the packages directory you can store any number of packages in a YAML file but not subfolders (use: packages: !include_dir_merge_named packages/)
  packages: !include_dir_named packages
# List of folders that can be used as sources for sending files.  
  allowlist_external_dirs:
    - /config

# Configure a default setup of Home Assistant (frontend, api, etc)
default_config:

# Text to speech
tts:
  - platform: google_translate

# -- start default config 
group: !include groups.yaml
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
# -- stop default config 

# https://www.home-assistant.io/integrations/time_date/
sensor:
  - platform: time_date
    display_options:
      - 'date'
      - 'time'
      - 'date_time'
      - 'date_time_utc'
      - 'date_time_iso'
      - 'time_utc'

python_script:

# https://www.home-assistant.io/integrations/logger/
logger:
  default: info

reszta jest w osobnych plikach yaml w katalogu \config\packages\. Jak widać nadal korzystam z plików groups.yaml, automations.yaml.

W ten sposób każdy nowy pomysł w HA realizuje od stworzenia nowego pliku z testową konfiguracją np. printer_test.yaml, dopiero po testach i akceptacji rozwiązania zmieniam nazwę pliku na printer.yaml. W przypadku problemów lub porzucenia tematu usuwam plik testowy, w prosty sposobów usuwam wszystkie testowe zmiany w HA.

Jeden z wielu przykładów takiego podejścia do konfiguracji HA:

Gorąco polecam skorzystanie z takiej konfiguracji Home Assistanta.

10 polubień

@macek jeśli chodzi o strukturę plików trafiłem właśnie na coś takiego:

# Configure a default setup of Home Assistant (frontend, api, etc)
default_config:

script:             !include_dir_merge_named ./configuration/scripts

input_number:       !include_dir_merge_named ./configuration/input_number
input_select:       !include_dir_named ./configuration/input_select

# Text to speech
tts:
  - platform: google_translate

group: !include groups.yaml
automation: !include automations.yaml
scene: !include scenes.yaml

można tworzyć katalogi a następnie mapować je w całości, a nie jako pojedyncze pliki, oczywiście twoje rozwiązanie też jest do rozpatrzenia.

EDIT:
w package: też jest opisane merge.

Rozwiązanie z użyciem packages jest moim zdaniem nie do przebicia. Szczególnie gdy masz rozbudowaną konfigurację, korzystasz często z templates i tym podobne. Dodając cokolwiek nowego do HA tworzysz po prostu kolejny plik yaml nadając mu charakterystyczną nazwę i w nim zawierasz wszystko co nowego dotyczy. Niezwykle łatwo się w tym wszystkim jest później odnaleźć i w razie potrzeby dokonywać zmian.

1 polubienie

Wolę wszystko co dotyczy np. pralki np. input_select, sensor, utility_meter, automation, notify umieścić w jednym pliku pralka.yaml niż “skakać” między kilkoma plikami. Dokonując zmian, robię to w jednym pliku, jak coś nie działa przywracam z kopii tylko jeden plik. Nic i nikt nie przekona mnie do innej konfiguracji HA :grin:.

4 polubienia

@macek o i to jest argument który kieruje mnie do twojego rozwiązania.

mam problem z tym elementem,
otóż wyskakuje mi:

String does not match the pattern of “DEPRECATED)


odpowiedź znalazłem, trzeba zmienić:

whitelist_external_dirs:

na
allowlist_external_dirs:

1 polubienie

Dodam od siebie, moja konfiguracja Packages
Screenshot - 03.03.2022 , 21_13_26

automation split: !include_dir_list ../automations
input_boolean: !include_dir_merge_named ../entities/input_booleans
binary_sensor: !include_dir_list ../entities/binary_sensors
itd.

Screenshot - 03.03.2022 , 21_09_33

Screenshot - 03.03.2022 , 21_12_19

Wpisy dla nowej konfiguracji MQTT

Plik configuration.yaml


mqtt:
  sensor: !include_dir_merge_list entities/mqtt/sensors/
  binary_sensor: !include_dir_merge_list entities/mqtt/binary_sensors/
  switch: !include_dir_merge_list entities/mqtt/switch/
2 polubienia

Odkopię ten temat, bo w końcu zabieram się do porządków z konfiguracji po latach mnożenia spontanicznych wpisów. A zapewne jest spora liczba nowych użytkowników, dla których będzie to nowa wiedza.

Chcę dobrze zrozumieć mechanizm i po lekturze dokumentacji HA w tym zakresie widzę, że jest kilka metodologii na wprowadzenie pakietów. @macek - możesz przedstawić jak masz zagnieżdżony wpis odsyłający w głównym pliku konfiguracji HA i dalej ścieżkę dla tej przykładowej pralki. Jak wygląda wówczas układ katalogów?
Podoba mi się bardzo pomył robienia pliku yaml dla danego urządzenia (może też dla pomieszczenia :thinking:). Mam część encji tworzonych z mqtt i trochę własnych wpisów pod customize.yaml (jeden plik dostosowujący różne encje, róznych urządzeń). Rozumiem, że w takim pliku pralka.yaml mógłbym zamieścić również zapisy dla dostosowania encji dotyczących np. pralki, które obecnie mam w tym customize.yaml?

@angler wieczorem odpowiem na zadane pytania.

1 polubienie

###############################################################################
## Telefon App Package 
###############################################################################
homeassistant:
  customize:
    alert.artur_phone_high_accuracy:
      icon: mdi:crosshairs-gps
      category: mobile
    alert.artur_phone_bluetooth_disconnected:
      icon: mdi:phone-bluetooth
      category: mobile
    alert.artur_phone_bluetooth_device:
      icon: mdi:headphones-bluetooth
      category: mobile
    alert.artur_phone_ringer_off:
      icon: mdi:phone-ring
      category: mobile
    alert.artur_phone_bluetooth_off:
      icon: mdi:phone-bluetooth
      category: mobile
    alert.artur_phone_wifi_disconnected:
      icon: mdi:cellphone-wireless

input_boolean:
  artur_phone_alarm_clock_enabled:
    name: "Artur Phone Alarm Clock"
    icon: mdi:alarm
  artur_phone_alarm_clock_notifications:
    name: "Artur Phone Alarm Clock Notifications"
    icon: mdi:file-clock
  artur_phone_tts_enabled:
    name: "Artur Phone TTS Announcements"
    icon: mdi:account-voice

input_number:
  mobile_waketime_volume_artur:
    name: "Waketime Alarm Volume"
    icon: mdi:volume-high
    min: 0
    max: 7
    step: 1

switch:
  - platform: template
    switches:
      artur_phone_bluetooth:

alert:
  artur_phone_battery_low:
    name: "Artur Phone Battery Low"
    title: "Phone Battery Low"

itd.

OK, to rozumiem. Tylko chciałbym zrozumieć jak zapisywać ścieżkę do tego pliku. Pokazujecie własny układ katalogów ale ja tego nie widzę.
Widzę ścieżkę na grafice od Ciebie
/usr/share/hassio/hameassistant/packages/
i w tej lokalizacji na grafice masz pojedyncze pliku yaml, jest też folder z devices, to w nim masz plik dla np. Telefon App Package?
Chodzi mi o zrozumienie tego mapowania, tak aby nie świadomie utworzyć to drzewo.

packages: !include_dir_named packages/

mqtt: !include mqtt_include.yaml

#mqtt_include.yam

sensor: !include_dir_merge_list mqtt/sensor/
switch: !include_dir_merge_list mqtt/switch/
climate: !include_dir_merge_list mqtt/climate/
binary_sensor: !include_dir_merge_list mqtt/binary_sensor/
light: !include_dir_merge_list mqtt/light/
fan: !include_dir_merge_list mqtt/fan/

#mqtt_sensors.yaml

#sensor:
  - name: "Airly limit"
    state_class: measurement
    unit_of_measurement: "/100"
    state_topic: "node-red/Airly/limit/value"
    payload_available: "online"
    payload_not_available: "offline"

  - name: "Airly NO2"
    device_class: nitrogen_monoxide
    state_class: measurement
    unit_of_measurement: "µg/m³"
    state_topic: "node-red/Airly/NO2/value"
    payload_available: "online"
    payload_not_available: "offline"

  - name: "Airly NO2_2"
    device_class: nitrogen_monoxide
    state_class: measurement
    unit_of_measurement: "%"
    state_topic: "node-red/Airly/NO2/limit-percent"
    payload_available: "online"
    payload_not_available: "offline"

  - name: "Airly O3"
    device_class: ozone
    state_class: measurement
    unit_of_measurement: "µg/m³"
    state_topic: "node-red/Airly/O3/value"
    payload_available: "online"
    payload_not_available: "offline"

  - name: "Airly O3_2"
    device_class: ozone
    state_class: measurement
    unit_of_measurement: "%"
    state_topic: "node-red/Airly/O3/limit-percent"
    payload_available: "online"
    payload_not_available: "offline"

  - name: "Airly PM1"
    device_class: pm1
    state_class: measurement
    unit_of_measurement: "µg/m³"
    state_topic: "node-red/Airly/PM1/value"
    payload_available: "online"
    payload_not_available: "offline"

  - name: "Airly PM2.5"
    device_class: pm25
    state_class: measurement
    unit_of_measurement: "µg/m³"
    state_topic: "node-red/Airly/PM25/value"
    payload_available: "online"
    payload_not_available: "offline"

  - name: "Airly PM2_5_2"
    device_class: pm25
    state_class: measurement
    unit_of_measurement: "%"
    state_topic: "node-red/Airly/PM25/limit-percent"
    payload_available: "online"
    payload_not_available: "offline"

1 polubienie