Settings Store - trwałe przechowywanie wartości w Home Assistant

Cześć, chciałbym podzielić się moją nową integracją do Home Assistant: HomeAssistant-SettingsStore.

Integracja powstała z dość prostego powodu - czasami potrzebujemy w automatyzacji zapisać jakąś wartość, licznik, parametr czy stan i chcemy, żeby przetrwał restart Home Assistanta.

Do tej pory często kończyło się to tworzeniem input_number, input_text, input_boolean albo jakiegoś pomocniczego sensora, mimo że dana wartość wcale nie musi być widoczna w interfejsie HA. Nie potrzebujemy też historii dla niej. Settings Store pozwala przechowywać takie dane bez tworzenia dodatkowych encji.

Co to właściwie robi?

Integracja udostępnia prosty magazyn typu key-value, zapisujący dane w lokalnej bazie SQLite.

Dane można organizować za pomocą:

  • scope – przestrzeń/nazwa grupy,

  • name – nazwa konkretnej wartości,

  • value – przechowywana wartość.

Każda skonfigurowana instancja ma własną bazę danych, więc można np. utworzyć osobny store dla różnych zastosowań.

Dostępne usługi

Integracja udostępnia cztery usługi:

  • settings_store.set – zapisanie lub aktualizacja wartości,

  • settings_store.get – odczyt wartości,

  • settings_store.delete – usunięcie konkretnej wartości,

  • settings_store.clear – wyczyszczenie całego store.

get obsługuje również service response, dzięki czemu pobraną wartość można bezpośrednio wykorzystać w automatyzacji lub skrypcie.

Przykładowo:

action: settings_store.set
data:
  entity_id: sensor.settings_store_main_entries
  scope: irrigation
  name: last_run_duration
  value: "15"

A później możemy ją odczytać:

action: settings_store.get
data:
  entity_id: sensor.settings_store_main_entries
  scope: irrigation
  name: last_run_duration.value
response_variable: saved_setting

i wykorzystać np. w kolejnym kroku automatyzacji:

message: "Ostatni czas pracy: {{ saved_setting.value }} minut"

Po co może się to przydać?

Moim zdaniem zastosowań jest całkiem sporo. Na przykład:

  • zapamiętywanie ostatniego wykonania automatyzacji,

  • przechowywanie liczników,

  • zapisywanie parametrów obliczanych podczas działania automatyzacji,

  • przechowywanie tymczasowej konfiguracji,

  • przekazywanie wartości pomiędzy różnymi automatyzacjami i skryptami,

  • przechowywanie danych, których nie chcemy zaśmiecać encjami pomocniczymi.

Szczególnie przy bardziej rozbudowanych automatyzacjach można dzięki temu ograniczyć liczbę “technicznych” helperów tworzonych tylko po to, żeby coś zapamiętać.

Dodatkowo

Każda instancja tworzy sensor diagnostyczny pokazujący liczbę zapisanych wpisów. Jest on automatycznie aktualizowany po dodaniu, zmianie lub usunięciu danych.

Integracja jest jeszcze świeża, więc wszelkie uwagi, pomysły i sugestie są mile widziane. Jeśli ktoś ma pomysł na ciekawe zastosowanie albo znajdzie jakiś problem – będę wdzięczny za informację.

4 Likes