Wolna edycja automatyzacji

Witam,

Zauważyłem ostatnio, że każda edycja automatyzacji zajmuje bardzo dużo czasu - z 10-15 sekund na otwarcie i zapisane. Utylizacja CPU jakieś 30-40%. Ale bramka wyraźnie lekko zamula.

Czy ktoś miał podobny problem?

Nie mam zapisanie działa odrazu i otworzenie a co.masz w logach?

U mnie ostatnio też też trochę zamula bramka a na użycie procesora nie patrzyłem.

Czasami muszę 2 razy uruchamiać aplikacje ais bo na początku mam szary ekran (np. zminimalizować / cofnąć i uruchomić ponownie) i dopiero pojawia się prawidłowo.

Identyczna sytuacja jest jak otrzymam powiadomienie na telefon z bramki (ais_ai_service.mob_notify) i jak kliknę na nie to mam to samo że muszę zminimalizować / cofnąć i jeszcze raz odpalić ale wtedy odpala się ekran główny a nie karta ustawiona w powiadomieniu.

Od kilku dni zauważyłem także spore opóźnienie w zmianie jasności świecenia żarówki, kiedyś działo sie to od razu po puszczeniu suwaka żarówka reagowała natychmiastowo.

Szary ekran wina telefonu masz lagi w telefonie spróbuj przywrócić telefon do ustawień fabrycznych
A jeżeli masz lagi w urządzeniach zigbee zmień kanał routera oraz zigbee
Wifi analizer

Podejrzewałem, że długie otwieranie automatyzacji do edycji oraz zapis wynikają z lagów związanych z odczytywaniem stanów że sterboxa.
Udało się ten problem rozwiązać, a otwarcie automatyzacji zajmuje jakieś 8s.
Normalnie CPU się nudzi -80% w idle.
Podczas otwierania automatyzacji skacze o jakieś 10%. Żadnych błędów w logach w trybie debug…
Co jeszcze mogę sprawdzić?

Ma ktoś jeszcze pomysł gdzie szukać problemu?
Podejrzewam, że problem tkwi w samych automatyzacjach. Na ten moment jest ich 285.

Podczas przesiadki z v1 na dev3 automatyzacje były skopiowane i najwyraźniej problem się przeniósł, ale było tego z dużo żeby przepisać 1 po 1…
Znalazłem podobne problemy na ha community ale niestety bez odpowieidzi…

Na dev1 miałem podobnie, szału można było dostać, dlatego między innym “spróbowałem” na Node Reda. Polecam :wink:

1 polubienie

Ale teraz jestem już na dev3 i to samo.

Może brakuje RAM w momencie odczytu automatyzacji? Tak zgaduję, bo nie znam mechanizmu działania tego w systemie.

Patrzyłem zasoby i tutaj się prawie nic nie zmienia podczas edycji - jest zapas.

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0   7080 2506652 197012 442860    0    0     0     0   10   12 17 11 71  0  0
 2  0   7080 2503320 197012 442880    0    0     0     0 2329 4198 20 11 69  0  0
 0  0   7080 2504588 197012 442884    0    0     0     0 2277 3999 19  9 72  0  0
 1  0   7080 2500984 197012 442884    0    0     0     0 2312 3464 23 16 61  0  0
 1  0   7080 2503180 197012 442884    0    0     0     0 2175 3808 17  9 74  0  0
 4  0   7080 2502944 197036 442884    0    0     0     0 2252 3253 27 11 63  0  0
 1  0   7080 2500184 197036 442884    0    0     0     0 2440 3428 30  9 61  0  0
 1  0   7080 2500700 197040 442888    0    0     0     0 2203 3059 28  9 63  0  0
 1  0   7080 2502804 197040 442880    0    0     0     0 2361 4243 19 10 70  0  0
 1  0   7080 2503912 197040 442888    0    0     0     0 2317 4414 19 12 69  0  0
 1  0   7080 2502508 197040 442884    0    0     0     0 2299 4343 19 11 70  0  0
 1  0   7080 2503236 197040 442892    0    0     0     0 2032 3359 23  8 68  0  0
 2  0   7080 2502624 197040 442888    0    0     0     0 2582 3839 30 11 59  0  0
 2  0   7080 2498556 197040 442884    0    0     0     0 2540 3688 30  8 62  0  0
 2  0   7080 2499760 197040 442888    0    0     0     0 2807 4701 27 10 62  0  0

Czy automations występuje jako component ha i można włączyć debug dla tego komponentu? Zastanawiam się jak sparsować proces który ładuje automatyuzacje od edycji…

Zapięcie strace do procesu ukazuje pewne time outy:

futex(0xab930774, FUTEX_WAIT_BITSET_PRIVATE, 44415366, {tv_sec=675564, tv_nsec=149559006}, FUTEX_BITSET_MATCH_ANY) = 0
futex(0xab930774, FUTEX_WAIT_BITSET_PRIVATE, 44415374, {tv_sec=675564, tv_nsec=155568840}, FUTEX_BITSET_MATCH_ANY) = 0
futex(0xab930774, FUTEX_WAIT_BITSET_PRIVATE, 44415378, {tv_sec=675564, tv_nsec=160658215}, FUTEX_BITSET_MATCH_ANY) = -1 EAGAIN (Try again)
futex(0xab930774, FUTEX_WAIT_BITSET_PRIVATE, 44415386, {tv_sec=675564, tv_nsec=160851173}, FUTEX_BITSET_MATCH_ANY) = -1 ETIMEDOUT (Connection timed out)
futex(0xab930774, FUTEX_WAIT_BITSET_PRIVATE, 44415386, {tv_sec=675564, tv_nsec=166056215}, FUTEX_BITSET_MATCH_ANY) = -1 EAGAIN (Try again)
futex(0xab930774, FUTEX_WAIT_BITSET_PRIVATE, 44415390, {tv_sec=675564, tv_nsec=166215131}, FUTEX_BITSET_MATCH_ANY) = -1 ETIMEDOUT (Connection timed out)
futex(0xab930774, FUTEX_WAIT_BITSET_PRIVATE, 44415394, {tv_sec=675564, tv_nsec=171412840}, FUTEX_BITSET_MATCH_ANY) = 0
futex(0xab930774, FUTEX_WAIT_BITSET_PRIVATE, 44415402, {tv_sec=675564, tv_nsec=172065256}, FUTEX_BITSET_MATCH_ANY) = -1 ETIMEDOUT (Connection timed out)
futex(0xab930774, FUTEX_WAIT_BITSET_PRIVATE, 44415402, {tv_sec=675564, tv_nsec=177227840}, FUTEX_BITSET_MATCH_ANY) = -1 EAGAIN (Try again)
futex(0xab930774, FUTEX_WAIT_BITSET_PRIVATE, 44415410, {tv_sec=675564, tv_nsec=177380256}, FUTEX_BITSET_MATCH_ANY) = 0
futex(0xab930774, FUTEX_WAIT_BITSET_PRIVATE, 44415418, {tv_sec=675564, tv_nsec=182763215}, FUTEX_BITSET_MATCH_ANY) = 0
futex(0xab930774, FUTEX_WAIT_BITSET_PRIVATE, 44415426, {tv_sec=675564, tv_nsec=187754256}, FUTEX_BITSET_MATCH_ANY) = -1 EAGAIN (Try again)
futex(0xab930774, FUTEX_WAIT_BITSET_PRIVATE, 44415430, {tv_sec=675564, tv_nsec=187984465}, FUTEX_BITSET_MATCH_ANY) = 0
futex(0xab930774, FUTEX_WAIT_BITSET_PRIVATE, 44415434, {tv_sec=675564, tv_nsec=193105298}, FUTEX_BITSET_MATCH_ANY) = -1 ETIMEDOUT (Connection timed out)
futex(0xab930774, FUTEX_WAIT_BITSET_PRIVATE, 44415434, {tv_sec=675564, tv_nsec=198290673}, FUTEX_BITSET_MATCH_ANY) = -1 ETIMEDOUT (Connection timed out)
futex(0xab930774, FUTEX_WAIT_BITSET_PRIVATE, 44415434, {tv_sec=675564, tv_nsec=211563631}, FUTEX_BITSET_MATCH_ANY) = -1 ETIMEDOUT (Connection timed out)
futex(0xab930774, FUTEX_WAIT_BITSET_PRIVATE, 44415438, {tv_sec=675564, tv_nsec=216817090}, FUTEX_BITSET_MATCH_ANY) = -1 EAGAIN (Try again)
futex(0xab930774, FUTEX_WAIT_BITSET_PRIVATE, 44415442, {tv_sec=675564, tv_nsec=217180256}, FUTEX_BITSET_MATCH_ANY) = -1 EAGAIN (Try again)
futex(0xab930774, FUTEX_WAIT_BITSET_PRIVATE, 44415446, {tv_sec=675564, tv_nsec=217310631}, FUTEX_BITSET_MATCH_ANY) = 0
futex(0xab930774, FUTEX_WAIT_BITSET_PRIVATE, 44415458, {tv_sec=675564, tv_nsec=217953965}, FUTEX_BITSET_MATCH_ANY) = -1 ETIMEDOUT (Connection timed out)
futex(0xab930774, FUTEX_WAIT_BITSET_PRIVATE, 44415462, {tv_sec=675564, tv_nsec=223225923}, FUTEX_BITSET_MATCH_ANY) = -1 ETIMEDOUT (Connection timed out)
futex(0xab930774, FUTEX_WAIT_BITSET_PRIVATE, 44415466, {tv_sec=675564, tv_nsec=228511131}, FUTEX_BITSET_MATCH_ANY) = 0
futex(0xab930774, FUTEX_WAIT_BITSET_PRIVATE, 44415474, {tv_sec=675564, tv_nsec=231783381}, FUTEX_BITSET_MATCH_ANY) = 0

Te timeouty pojawiają się podczas próby otwarcie pierwszej lepszej automatyzacji do edycji. Ale to tak niskopoziomowe komunikaty, że nic nie mówią.

Włączyłęm debug na automatyzacjach ale nie pokazał niż podczas próby edycji. Natomiast włączenie debug na wszystko wypluło już dość dużo.

Podczas całego czasu gdy otwieram do edycji automatyzację plik automations jest otwarty przez proces ha. Co ciekawe websocket API zbiera wszystkie dane o automatyzacjach i wypluwa to do logu:

2|ais  | 2021-11-16 10:33:42 DEBUG (MainThread) [homeassistant.components.websocket_api.http.connection] [2775510896] Sending {"id": 136, "type": "result", "success": true, "result": [{"config_entry_id": nu
ll, "device_id": null, "area_id": null, "disabled_by": null, "entity_id": "input_datetime.ais_quiet_mode_start", "name": null, "icon": null, "platform": "input_datetime"}, {"config_entry_id": null, "device_
id": null, "area_id": null, "disabled_by": null, "entity_id": "input_datetime.ais_quiet_mode_stop", "name": null, "icon": null, "platform": "input_datetime"}, {"config_entry_id": null, "device_id": null, "a
rea_id": null, "disabled_by": null, "entity_id": "input_select.book_autor", "name": null, "icon": null, "platform": "input_select"}, {"config_entry_id": null, "device_id": null, "area_id": null, "disabled_b
y": null, "entity_id": "input_select.book_name", "name": null, "icon": null, "platform": "input_select"}, {"config_entry_id": null, "device_id": null, "area_id": null, "disabled_by": null, "entity_id": "inp
ut_select.book_chapter", "name": null, "icon": null, "platform": "input_select"}, {"config_entry_id": null, "device_id": null, "area_id": null, "disabled_by": null, "entity_id": "input_select.assistant_voic
e", "name": null, "icon": null, "platform": "input_select"}, {"config_entry_id": null, "device_id": null, "area_id": null, "disabled_by": null, "entity_id": "input_select.ais_usb_flash_drives", "name": null
, "icon": null, "platform": "input_select"}, {"config_entry_id": null, "device_id": null, "area_id": null, "disabled_by": null, "entity_id": "input_select.ais_rss_help_topic", "name": null, "icon": null, "p

I taki ogromny output na kilka ekranów. Mam wrażenie, że za każdym razem HA zbiera mnóstwo danych i parsuje je. Ale czy te 285 automatyzacji to dużo? Czy ktoś inny zauważył podobny problem? Ja się dopiero rozkręcam i dodawanie każdej automatyzacji to koszmar. Zaczynam poważnie myśleć o node-red ale gryzie się to z moją ideą prostoty…

1 polubienie

Jak nad tym zapanowałeś ? W nazwach stosujesz jakiś schemat? Stosujesz w automatyzacjach Automation Trigger - Home Assistant co teoretycznie powinno ograniczyć liczbę automatyzacji?

Tak, oczywiście, że stosuję trigger automatyzacji w innych automatyzacjach :wink:

Część z nich to zwykłe triggery do rest_command - głównie pod kątem wywołań głosowych czy przycisków w poszczególnych tab-ach.

Staram się używać schematów i tagów dla automatyzacji. Aczkolwiek wiele z nich było pisane na kolanie dawno temu i teraz to poprawiam. Tylko strasznie długo to trwa. W dodatku każde przeładowanie przy zapisie przerywa obecnie trwającą automatyzację - a mam jakieś z opóżnieniem 3 minutowym do cyrkulacji CWU np.

Tak sie zastanawiam co się stanie jak część automatyzacji (te rzadko edytowane) przeniesiesz do innych plików, np. stosując Packages - Home Assistant ale edycja tych automatyzacji nie będzie jednak możliwa z GUI HA, będą tylko widoczne, próba edycji kończy się wtedy komunikatem:
image

i trzeba edytować plik ręcznie. Osobiście mi to nie przeszkadza, eliminuje sporo potencjalnych błedów, np. wszystko co dotyczy pralki (sensor, utylity_meter, automation, notify, itd) po produkcyjnym odpaleniu wylądowało w jednym pliku, którego nie edytowałem od ponad roku.
To oczywiście sugestia, może u Ciebie nie sprawdzi się taki sposób zarządzania konfiguracją HA ale przykłady na Githubie pokazują, że to dobry sposób.

1 polubienie

Czasem szybciej można zedytować w pliku niż w GUI na ten moment, więc może mieć to sens. Szczególnie jakieś starsze, których obecnie nie używam.