Rozróżnienie ręcznego i automatycznego wyłączenia termostatu

Cześć. Niedawno zacząłem bawić się HA i postanowiłem zabrać się za konfigurację termostatu. Termostat Tuya Zigbee. Wzorując się na filmie Artura stworzyłem flow wyłączający lub załączający termostat na podstawie stanów kontaktronów. Wszystko działa bardzo dobrze. W moim flow brakuje mi jeszcze rozpoznawania czy termostat został wyłączony poprzez automatyzację na podstawie stanu kontaktronów, czy ręcznie. W tym momencie, co określony czas (jeśli okna są zamknięte) termostat załącza się automatycznie, nawet jeśli ręcznie został wyłączony. Czy da się to jakoś rozwiązać bez dodawanie dodatkowych switchy w dashboardzie? Nie każdy użytkownik korzysta z HA, a ogrzewanie załącza bezpośrednio na termostacie. Dodatkowo dodam, że sterowanie samą temperaturą zadaną planuje zostawić “ręczne”. Poniżej wklejam zrzut ekranu z node-red

Co to za termostat? Może posiada wybór Manual/Auto?
W samym NR musiałbyś sprawdzać czy zmiana stanu termostatu wystąpiła równocześnie za zmianą stanu okien. Jeśli była tylko sama zmiana stanu termostatu to uznałbym to jako sterowanie ręczne i zaprzestał sprawdzania stanu okien. Taka sztuczka działaby tylko w przypadku w jedną stron np.tylko na OFF.
Obecny flow się do tego nie nadaje. Trzeba zacząć od początku :slight_smile:
Robiąc procesy miej z tyłu głowy, że za każdego noda płacisz :wink:
Takie sprawdzenie, które zrobiłeś powinno wyglądać tak
onoff

1 polubienie

Mój termostat: Termostat Tuya ZigBee
Na aucji są skreeny ze wszystkimi funkcjami w aplikacji Tuya.

Nie do końca wiem czy dobrze rozumiem. Podpinam 2nody debug -jeden do ostatniego current_state sprawdzającego stan kontaktronu oraz jeden na wyjściu call_service załączającego termostat. W oknie debug obie wiadomości wyświetlają się w tym samym momencie jedna pod drugą (ta z kontaktronów na górze)

Może masz pomysł i wiesz jak naprowadzić mnie na rozwiązanie? Pomyślałem o przechowywaniu w jakiejś zmiennej stanu termostatu sprzed otwarcia okna (wyłączenia termostatu) i jeśli ta zmienna zawietała by stan “on”, to termostat ponownie załączał by się po zamknięciu okien. Niestety nie wiem jak to ugryźć i czy to dobre podejście.

Cenna uwaga :smiley: poprawione

Jest coś takiego jak “Mode” - nie wiem jakie, ale przestawienie w jeden z trybów ( powiedzmy manual) mógłby być sprawdzany w NR i blokować sprawdzanie otwarcia okien.

Można jeszcze inaczej: proces uruchamiać zmianą stanu okien a nie okresowo przez inject

itd

Dzięki temu wszystkie ręczne zmiany na termostacie obowiązywały by do następnej zmiany stanu okien.

Do sprawdzania “jednoczesności” wystąpienia określonych zdarzeń doskonale nadaje się węzeł join.

Można go tak ustawić aby czekał przez ustawiony okres czasu na otrzymanie okreśclonej ilości msg.
Jeśli to się powiedzie w czasie, łączy te dwie wiadomości jako jedną i wysyła.
W Twoim przypadku to mogłoby być: 2 wiadomości w czasie np. 2sek. (jedna z okna, druga z termostatu). Otrzymaną połączoną msg musiał byś sprawdzić na obecność tych dwóch zdarzeń - co oznaczałoby, że zmiana stanu termostatu nastąpiła od “okna”

join

…właśnie :slight_smile: i tą właśnie przyczynę musiał byś zapamiętać w zmiennej.
Pozostała część procesu działałaby jak dotychczas tylko dodatkowo sprawdzałby stan tej zmiennej.
Takie rozwiązanie to ostateczność bo istnieje ryzyko wpadnięcia procesu w permanentny stan “manual”.
Podaje to raczej jako przykład rozwiązania podobnych problemów i w Twoim przypadku wymagałoby to trochę zabawy aby to “zestroić”