Porządki w configuration.yaml

Od bardzo niedawna używam HA, przenosząc swoje “smarty” z Domoticza. Jako początkujący wszystkie konfiguracje wykonywałem w pliku configuration.yaml. Obecnie jest on dla mnie już nieczytelny, mało przejrzysty, skorzystałem z rad @artpc
z tego wątku. W zasadzie wszystko udało mi się poprawnie przenieść wykorzystując !include filename.yaml
Mam jednak problem z przeniesieniem liczników utility_meter. Moje próby są daremne i generują błąd przy sprawdzeniu konfiguracji, proszę o wskazanie jak poprawnie dokonać takiej migracji.


1a2

PS. czy przy użyciu packages: !include_dir_named packages
powinno to wyglądać tak ?
a1a1

W linii 31 masz " # "
Ja mam:

homeassistant:
  packages: !include_dir_merge_named packages/

Pamiętaj o restarcie HA
/
ScreenShot_20220910193708
/
Jedynie co mi przechodzi do głowy to zdublowany wpis

@krskrab mam ‘#’ bo nie wiem czy to co robię jest ok, dlatego zakomentowałem.
Liczniki, które pokazujesz pochodzą z pliku configuration.yaml, który nawet wyjaśniałeś tu i ja mam je tak samo (zobacz 1 mój obraz), one działają już dość długo. Chcę je przenieść albo jako utility_meter !include utility_meter.yaml albo np. packages: !include_dir_named packages ale nie potrafię ich przenieść z pliku configuration.yaml do docelowego np. utility_meter.yaml stąd prośba o pomoc.
Tego sposobu też próbowałem i lipa błąd konfiguracji.

Pokaż jak masz skonfigurowane oba pliki i wklej ten błąd.

Configuration.yaml

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

frontend:
  themes: !include_dir_merge_named themes

# Text to speech
tts:
  - platform: google_translate
    language: 'pl'
logger:
  default: warn
  logs:
    homeassistant.bootstrap: info    
    
    
    
group: !include groups.yaml
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
sensor: !include sensor.yaml
binary_sensor: !include binary_sensor.yaml
mqtt: !include mqtt.yaml
input_select: !include input_select.yaml
input_number: !include input_number.yaml
utility_meter: !include utility_meter.yaml

homeassistant:
  customize: !include customize.yaml
#  packages: !include_dir_named packages
  allowlist_external_dirs:
    - /config/www 
  
influxdb:
  host: !secret influxdb_host
  port: 8086
  username: !secret influxdb_username
  password: !secret influxdb_password
  max_retries: 3
  default_measurement: state
    
camera:
  - platform: xiaomi_cloud_map_extractor
    host: !secret roborock_host
    token: !secret roborock_token
    username: !secret roborock_username
    password: !secret roborock_password
    draw: ['all']
    attributes:
      - calibration_points
     
adb_service:
  host: !secret adb_service_host    

Plik utility_meter.yaml w katalogu pakages

utility_meter:
  gas_hourly:
    source: sensor.gas_meter_value
    cycle: hourly
  gas_daily:
    source: sensor.gas_meter_value
    cycle: daily
  gas_weekly:
    source: sensor.gas_meter_value
    cycle: weekly
  gas_monthly:
    source: sensor.gas_meter_value
    cycle: monthly 
  gas_daily_kwh:
    source: sensor.gas_m3_na_kwh
    cycle: daily
  gas_weekly_kwh:
    source: sensor.gas_m3_na_kwh
    cycle: weekly
  gas_monthly_kwh:
    source: sensor.gas_m3_na_kwh
    cycle: monthly  
  gas_daily_pln:
    source: sensor.gas_meter_cost   
    cycle: daily
  gas_weekly_pln:
    source: sensor.gas_meter_cost
    cycle: weekly
  gas_monthly_pln:
    source: sensor.gas_meter_cost
    cycle: monthly  
    
  gas_bimonthly:
    source: sensor.gas_meter_value
    cron: "0 0 1 2/2 *" 
  gas_bimonthly_kwh:
    source: sensor.gas_m3_na_kwh
    cron: "0 0 1 2/2 *"     
  gas_bimonthly_cost:
    source: sensor.gas_meter_cost
    cron: "0 0 1 2/2 *"  

Błąd

`Sprawdzanie konfiguracji
Kliknij Sprawdź konfigurację, jeśli wprowadziłeś ostatnio zmiany, aby upewnić się, że jest ona prawidłowa.
Konfiguracja nieprawidłowa!

Invalid config for [utility_meter]: expected a dictionary for dictionary value @ data['utility_meter']['cycle']. Got 'monthly'
expected a dictionary for dictionary value @ data['utility_meter']['gas_monthly_kwh']. Got None
expected a dictionary for dictionary value @ data['utility_meter']['source']. Got 'sensor.gas_m3_na_kwh'. (See /config/configuration.yaml, line 27).`

Edit:
Usunięcie z configuration.yaml wpisu utility_meter !include utility_meter.yaml oraz odkomentowanie packages: !include_dir_named packages
i zawartość pliku utility_meter.yaml w katalogu packages identyczna jak na screeenie i powyżej nie generuje błędu przy sprawdzaniu konfiguracji.

Usuń u samej góry z tego pliku utility_meter: (pierwsza linijka)

Usuń pierwszą linię z utility_meter.yaml.
Bo w takim układze jak poskłasz wszystkie includy to będzies mial dwa razy wpis utility_meter

Moja pomyłka w pliku utility_meter.yaml nie ma tego wpisu utility_meter: (on jest ale w pliku utility_meter.yaml w katalogu packages

gas_hourly:
  source: sensor.gas_meter_value
  cycle: hourly
    
gas_daily:
  source: sensor.gas_meter_value
  cycle: daily
    
gas_weekly:
  source: sensor.gas_meter_value
  cycle: weekly
    
gas_monthly:
  source: sensor.gas_meter_value
  cycle: monthly
    
gas_daily_kwh:
  source: sensor.gas_m3_na_kwh
  cycle: daily
    
gas_weekly_kwh:
  source: sensor.gas_m3_na_kwh
  cycle: weekly
    
gas_monthly_kwh:
source: sensor.gas_m3_na_kwh
cycle: monthly
    
gas_daily_pln:
  source: sensor.gas_meter_cost
  cycle: daily
    
gas_weekly_pln:
  source: sensor.gas_meter_cost
  cycle: weekly
    
gas_monthly_pln:
  source: sensor.gas_meter_cost
  cycle: monthly  
    
gas_bimonthly:
  source: sensor.gas_meter_value
  cron: "0 0 1 2/2 *"
    
gas_bimonthly_kwh:
  source: sensor.gas_m3_na_kwh
  cron: "0 0 1 2/2 *"
    
gas_bimonthly_cost:
  source: sensor.gas_meter_cost
  cron: "0 0 1 2/2 *"
    

Brakuje tutaj odpowiedniego formatowania.

gas_monthly_kwh:
  source: sensor.gas_m3_na_kwh
  cycle: monthly

porównaj sobie z wszystkimi pozostałymi wpisami z pliku.

O to chodziło @fronteri , po poprawieniu tych nieszczęsnych dla mnie wcięć sprawdzenie również bez błędu przeszło.
Reasumując: wpis w configuration.yaml taki utility_meter: !include utility_meter.yaml
i zawartość pliku utility_meter.yaml taka:

gas_hourly:
  source: sensor.gas_meter_value
  cycle: hourly
    
gas_daily:
  source: sensor.gas_meter_value
  cycle: daily
    
gas_weekly:
  source: sensor.gas_meter_value
  cycle: weekly
    
gas_monthly:
  source: sensor.gas_meter_value
  cycle: monthly
    
gas_daily_kwh:
  source: sensor.gas_m3_na_kwh
  cycle: daily
    
gas_weekly_kwh:
  source: sensor.gas_m3_na_kwh
  cycle: weekly
    
gas_monthly_kwh:
  source: sensor.gas_m3_na_kwh
  cycle: monthly
    
gas_daily_pln:
  source: sensor.gas_meter_cost
  cycle: daily
    
gas_weekly_pln:
  source: sensor.gas_meter_cost
  cycle: weekly
    
gas_monthly_pln:
  source: sensor.gas_meter_cost
  cycle: monthly  
    
gas_bimonthly:
  source: sensor.gas_meter_value
  cron: "0 0 1 2/2 *"
    
gas_bimonthly_kwh:
  source: sensor.gas_m3_na_kwh
  cron: "0 0 1 2/2 *"
    
gas_bimonthly_cost:
  source: sensor.gas_meter_cost
  cron: "0 0 1 2/2 *"

nie generuje błędu i jest ok.

PS. Rozumiem, że w tym układzie drugie rozwiązanie z pakages też jest ok ?

!include_dir_named packages/
Ładuje wszystko to co się znajduje w katalogach packages łącznie z katalogami
przykłady:
Katalogi
snmp
climate
mobile
itd.
Wszystkie pliki *.yaml zostaną załadowane.
Można też odwoływać do plików nie zawartych w katalogu packages
np. Katalog packages plik automation.yaml
zawartość:

automation split: !include_dir_list ../automations

lub binary_sensors.yaml

binary_sensor: !include_dir_list ../entities/binary_sensors

odwołuje się do katalogu entities/binary_sensors i zawartych w nim plikach.
Warto sobie porozdzielać pliki i umieszczać je w katalogach.
Zawartość katalogu packages można przeładować poleceniami z Narzędzia developerskie YAML

1 polubienie

Ja też sie pogłubiłem w Twojej konfiguracji a przecież wszystko musi być proste, proponuję Package w Home Assistant i podejście nie per encja tylko per projekt, np. wszystko co dotyczy “gazu” (encje, liczniki, itp.) jest w jednym pliku gas.yaml.

1 polubienie

Dziękuję @artpc i @macek , z uwagą czytam Wasze rady i odpowiedzi w wielu wątkach i są one dla mnie cenne. Proszę jeszcze o wyjaśnienie, który wpis jest poprawny:

!include_dir_named packages/
!include_dir_named packages

To jest coś co chciałbym osiągnąć, póki co jestem szczęśliwy, że pozbyłem się mnóstwa linijek z pliku configuration.yaml

Czyli tutaj:
a1a1
nazwa pliku zamiast utility_meter.yaml może być bardziej dowolna, przyjazna dla mnie np. gaz.yaml a dopiero w zawartości tego pliku deklaruję co to jest czyli tak jak wyżej plus mogę tam wrzucić wszystkie inne “template” i encje dotyczące gazu np. w taki sposób ?

platform: template
  sensors:
    gas_m3_na_kwh:
      value_template: "{{ (states('sensor.gas_daily') | float(0) * (states('input_number.gas_przelicznik_m3_kwh') | float(0) ))  | round(3) }}"
      unit_of_measurement: "kWh"
      device_class: "energy"
    gas_meter_cost:
      value_template: "{{ (states('sensor.gas_m3_na_kwh') | float(0) * (states('input_number.gas_cena_za_kwh') | float(0) ))  | round(2) }}"
      unit_of_measurement: "PLN"
    jakosc_powietrza:
      friendly_name: "Jakość powietrza"
      value_template: "{{ state_attr('sensor.serock_caqi', 'advice') }}" 
    jakosc_powietrza1:
      friendly_name: "Jakość powietrza"
      value_template: "{{ state_attr('sensor.serock_caqi', 'level') }}" 
    jakosc_powietrza2:
      friendly_name: "Jakość powietrza"
      value_template: "{{ state_attr('sensor.serock_caqi', 'description') }}"   

Taki mam wpis w configuration.yaml ale zapis
!include_dir_named packages/ też jest poprawny.