Słabo jeszcze znam HA, ale chcę go wykorzystać do włączania, wyłączania i czasem zmiany ustawień kilkunastu urządzeń takich jak bojlery, grzejniki elektryczne, klimatyzatory itp. Celem jest wykorzystanie energii z fotowoltaiki. Odczytuję parametry z Solarmana przez wifi, steruję bojlerem ariston przez wifi i mam podpięte i działające gniazdka zigbee przez ZBT-1. Mam też działającą automatyzację dla jednego bojlera.
Teraz chciałbym stworzyć bazę urządzeń, ktorymi chcę utomatycznie sterować i ustawiać kolejność ich włączania. Dla każdego z nich chcę ustawić dodatkowe parametry: czy sterować automatycznie true/false, liczba wolnej energii przy której wykonać skrypt włączenia, id skryptu włączenia, id skryptu wyłączenia. No i teraz pytanie właściwe, jak najlepiej wykonać taką tablicę urządzeń w HA?
Dla wyjaśnienia stworzona tablica ma być wykorzystana w taki sposób, że po każdym odczycie parametrów z solarmana (od wschodu do zachodu słońca) jeśli jakiś prąd jest wysyłany do sieci to bierzemy pierwsze nieuruchomione jeszcze urządzenie z tablicy i jeśli wysyłamy więcej energii niż ono potrzebuje wykonujemy skrypt włączenia. Jeśli pobieramy energię z sieci lub z baterii to wykonujemy skrypt wyłączenia ostatniego włączonego urządzenia. Dla uproszczenia przy każdym odczycie z solarmana włączamy/wyłączamy tylko jedno urządzenie.
Skrypt włączenia/wyłączenia może włączać, wyłączać lub tylko zmieniać parametry pracy, dlatego ma być zdefiniowany w skryptach.
Tu raczej potrzebna byłaby tablica wielowymiarowa, czy też wiele inputów. Tylko do tego przydałby się interfejs graficzny do ustalania kolejności urządzeń - coś jak strzałki góra, dół. Da się?
Pomysł takiego rozwiązania zrodził się na podstawie doświadczeń z php, mysql, html, gdzie zrobienie takiego fragmentu “automatu” było by dość proste. Skoro jest w HA python, mysql (mariaDB) to zakładam, że da się to jakoś ogarnąć.
Żeby jednak nie robić pewnych rzeczy całkiem wbrew logice HA zacząłem od zapytania znawców tematu.
Złe porównanie. Skoro w “z php, mysql, html, gdzie zrobienie takiego fragmentu “automatu” było by dość proste” to zbuduj taki system “obok” odwołując się do urządzeń w HA a poźniej w dashboardzie HA dodaj ten system jako stronę (type: iframe). Uzyskany efekt będzie podobny do tego jaki chcesz osiągnąć.
Zakładając, że w zależności od ilości “wolnej energii” chcę włączyć odpowiednią liczbę odbiorników (pobór prądu każdego nich załóżmy, że jest znany) to jaką drogą poszedłby doświadczony użytkownik HA?
Zakładając, że nawet doświadczony użytkownik HA nie musi wiedzieć co znaczą sowa:
to zapewne szukał bym rozwiązania w formie blueprint. Nadal nie kumam jakie cechy miała by mieć taka tabela urządzeń. Dla mnie taką tabelą jest to co już mam w HA. A jeśli czegoś mi brakuje w liście encji, to chyba największą moc mają szablony, które pozwalają na tworzenie dowolnych innych bytów w HA w sposób dynamiczny. Dla mniej zaawansowanych powstały ułatwienia deweloperskie nazywane pomocnicy.
Wracając do Twojego pytania i po zastanowieniu - układałbym pewnie długą automatyzację warunkową. W końcu obecna forma graficzna tworzenia automatyzacji pasuje nawet to tego co opisujesz. Można przesuwać listę urządzeń, warunkować wielopoziomowo akcje i debugować przebiegi w śladach.
Do czego tabela: chciałbym, aby w dashboardzie powstała sekcja, w której mogę zmieniać kolejność włączania urządzeń (to najważniejsze) i czasowo wyłączać je z automatycznej kolejki. Nigdzie nie natknąłem się na coś w rodzaju kolejki. Takich odbiorników może być kilkanaście (mam 3 bojlery, 12 grzejników) dlatego zarządzanie kolejką wolałbym wyłączyć poza automatyzację.
Musisz oddzielić sekcję wizualizacji od automatyzacji dziejących się w tle, jakoby w innym miejscu. Dla umieszczania wizualnych przycisków, takich wirtualnych, które następnie mogą mieć swoją rolę do wykonania w automatyzacji czy skrypcie służą w HA na przykład pomocnicy typu “switch”.
Takie elementy (lista gotowych jest spora) możesz później dowolnie umiejscawiać według własnych koncepcji w danym miejscu dashbordu. Nie stoi nic na przeszkodzie aby tworzyć własne byty na bazie szablonów. Często już w takim szablonie możesz zaszywać drobne automatyzacje w postaci działań matematycznych na atrybutach innych encji. Używać w nich znaczników czasu i innych funkcji. To bardzo potężne narzędzie ale wymaga już wiedzy programisty, której większość z nas nie ma.
Przejrzyj również dobrze wszystkie zakładki w sekcji narzędzia deweloperskie, bo pomoże Ci to zrozumieć jak to wszystko działa pod spodem. Dla przykładu - pomocnik typu switch czy przycisk może wywoływać akcje (dawniej zwane usługi) przełączenia między automatyzacją czy wykonanie skryptu.
Pomocnika przełącznik wykorzystałem już do ustawiania czy moje pierwsze urządzenia ma być sterowane automatyzacją czy też nie (i działa). Tylko ten przełącznik jest jakoś tak nie związany logicznie z samym urządzeniem. Nie stał się jego dodatkową encją. Żeby go wykorzystywać muszę pamiętać do czego go ustawiłem. Da się rozszerzyć urządzenie o dodatkowe pola z nim związane?
Identyfikatory są fikcyjne. Kod wyświetla to, co powinien. No i teraz pytanie: do jakiego pliku przenieść moją tablicę, żeby była dostępna w szablonach, skryptach i automatyzacjach i jak użyć powyższej pętli w szablonie. Próbowałem przenieść przekonwertowaną tablicę do sensors.yaml, ale nie chciało to działać.
Cała ta tablica jest w szablonie po to żeby, użytkownik, który nie zna HA mógł w prosty sposób zmieniać kolejność włączania urządzeń (to dopiero do zrobienia). Dlatego właśnie kolejka ma być oddzielona od warstwy automatyzacji.
Mam nadzieję, że nie chcesz docelowo wykorzystać Edytora szablonów w Narzędzia deweloperski aby tam trzymać tę tablicę bo to miejsce nie zostało zaprojektowane do takich rzeczy, jak nazwa wskazuje to narzędzia deweloperskie i zwykły user HA nie powinien mieć do nich dostępu.
Mam nadzieję, że nie chcesz docelowo wykorzystać Edytora szablonów w Narzędzia deweloperskie
Oczywiście, że nie.
W szablonie ma się pojawić narzędzie do zarządzania listą. Pierwszym elementem układanki jest baza urządzeń, które mają być sterowane, drugim elementem zarządzanie tą bazą urządzeń poprzez szablon, a trzecim automatyzacje, które włączają i wyłączają urządzenia w ustalonej kolejności. Założenie wydaje się proste, ale aż tak proste nie jest.
Może tak ale ja nie kapuję tego bo za dużo jest zależności. Rozumiem, że masz listę urządzeń do sterowania w odpowiedniej kolejności ale ta kolejność jest zmienna czyli rozumiem to jako opis ciągu: "Bojler góra"; "Grzejnik sypialnia"; "Bojler dół". Jeżeli chcę usunąć z działajacego ciągu “Grzejnik sypialnia”, to ciąg musi wygladać po zmianie tak: "Bojler góra"; "Bojler dół"? Albo upraszczając sobie życie tak: "Bojler góra"; null; "Bojler dół" - zakladam, że ciąg ma stałą liczbę elementów (urządzeń), elementy mogą być puste.
Trochę czasu minęło i udało się stworzyć zarządzalną kolejkę urządzeń, które mają być włączane lub wyłączane w zależności od dostępnego prądu. Wygląd kolejki:
Następnie sensory te zostały oznaczone etykietą, którą nazwałem ‘hemsorder’. To oznaczenie trzeba było zrobić osobno w dziale zarządzania pomocnikami.
Następny element to już sam element dashboardu kolejki zbudowany z dwóch dodatków:
Ten pierwszy potrzebny jest do ustawiania kolejności, drugi pozwala na prezentację kilku encji w jednym wierszu. Kolejka ma podpięte skrypty, które po pierwsze i najwżniejsze w tym elemencie pozwalają na zmianę kolejniości (hems_kolejnosc_zmien), włączają lub wyłączają urządzenie (hems_device_on_off_zmien) oraz pozwalają lub nie na automatyczne sterowanie urządzeniem przez system kolejki (hems_auto_zmien). Aby zmieniać wartości i argumenty sensorów konieczne było wykorzystanie skryptu pythona set_state.
Całość na razie sprawnie działa razem z resztą skryptów i automatyzacji, które odpowiadają za włączanie i wyłączanie urządzeń. Mam nadzieję, że opis jest w miarę zrozumiały.
Kilku rzeczy nie udało mi się jeszcze zrobić w dasboardzie. Wstawić kodu jinja2, zmienić koloru ikonki, kiedy urządzenie jest włączone (kiedy atrybut is_on ma wartość true) oraz zamienić napisów true/false na jakieś przełączniki. Jakieś pomysły jak udoskonalić ten dashboard?