Warunki w SUPLA Scripts - pomysły

Pietras81
Posts: 2409
Joined: Sun Feb 17, 2019 6:56 am
Location: Osielsko
Been thanked: 1 time

Post

klew wrote: Tue Oct 31, 2023 10:37 am
Pietras81 wrote: Tue Oct 31, 2023 10:34 am Spróbuje ale wtedy harmonogram który mam obecnie do rolet zostaje tak jak jest obecnie. Bo jak dobrze rozumiem to on ma mi zamykać i otwierać rolety jak przez kilka dni nie będzie włączony alarm.
Harmonogram nadal będzie zamykał i otwierał - niezależnie od stanu alarmu.

Aby to uwzględnić, to trzeba by dodać kolejne reakcje:
1. na uzbrojenie alarmu -> wyłącz harmongoramy sterujące roletami
2. na rozbrojenie alarmu -> włącz harmonogramy sterujące roletami
Dzięki @klew nie wiedziałem że w reakcjach można włączyć i wyłączyć harmonogram.
Ustawiłem sobie na próbę pompę obiegową od CWU żeby niezależnie od harmonogramu jaki mam czyli harmonogram od 5:50 do 7:30 i od 15:30 do 22:30, była wyłączona jak nie ma nikogo w domu - szczególnie w weekend kiedy nie ma nas w domu.
Ustawiłem 4 reakcję i chyba działa.

1. reakcja - gdy alarm włączony - wyłącz pompę
2. reakcja - gdy alarm włączony - wyłącz harmonogram
3. reakcja - gdy alarm wyłączony - włącz harmonogram
4. reakcja - gdy alarm wyłączony - włącz pompę z uwzględnieniem harmonogramu aktywności i tu dałem zakres od 5:00 do 8:00 i od 15:00 do 22:00 - i tu niestety brakło mi możliwości określenia minut, są tylko pełne godziny - dla powyższego celu i tak super

Szkoda tylko że nie można w jednej reakcji dodać kilku zależności bo teraz 1 kanał zajął aż 4 reakcję. Dobrze się człowiek nie rozpędzi i będzie po limicie.
https://pietras-81.aqi.eco/
User avatar
klew
Posts: 13908
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 135 times
Been thanked: 137 times

Post

Pietras81 wrote: Tue Oct 31, 2023 11:46 am
Szkoda tylko że nie można w jednej reakcji dodać kilku zależności bo teraz 1 kanał zajął aż 4 reakcję. Dobrze się człowiek nie rozpędzi i będzie po limicie.
Akcje można wstawić w scenę, ale przy dwóch to raczej mija się z celem ;)

Harmonogram dostępności dla reakcji można też ustawiać względem wschodu i zachodu słońca
Najlepsze suple dla Twojego domu :mrgreen:
mabakay
Posts: 42
Joined: Mon Oct 30, 2023 8:52 am

Post

W trakcie sprawdzania warunków "Wyzwalacz sceny w oparciu o stan kanałów", brakuje transakcyjności dla zmiany stanu sceny gdy użytych jest kilka kanałów w warunku.

Przykład:

Code: Select all

{{ (state(A).temperature > state(B).temperature) and (state(C).temperature > 35) }}
Jeżeli więcej niż jeden kanał pochodzi z tego samego urządzenia, a zmiana wystąpi na kanałach z tego urządzenia to wyzwalacz wykona scenę kilkukrotnie mimo, że dotyczy tego samego warunku.

Code: Select all

Logi
Kiedy?	Treść
Dziś o 05:31	Odpowiedź: Zasilanie CO (36.1C) > Powrót (34.8C) AND Zasilanie CWU (42.7C) > 35C
Dziś o 05:31	Wysłano powiadomienia
Dziś o 05:31	Odpowiedź: Zasilanie CO (36.1C) > Powrót (34.8C) AND Zasilanie CWU (42.7C) > 35C
Dziś o 05:31	Odpowiedź: Zasilanie CO (36.1C) > Powrót (34.8C) AND Zasilanie CWU (42.7C) > 35C
Dziś o 05:31	Wysłano powiadomienia
Dziś o 05:31	Wysłano powiadomienia
Dziś o 05:31	Wykryto zmianę warunku wyzwolenia sceny - wykonuję.
Dziś o 05:31	Wykryto zmianę warunku wyzwolenia sceny - wykonuję.
Dziś o 05:31	Wykryto zmianę warunku wyzwolenia sceny - wykonuję.
W powyższym przypadku, zostają np. wysłane trzy powiadomienia, a telefon szaleje :o

Rozwiązanie:
Zmiany w stanie kanałów w obrębie wyzwalacza sceny, powinny być sprawdzane sekwencyjnie z uwzględnieniem wyzwolenia (zmiany stanu) sceny przez poprzedni kanał.
User avatar
YoMan
Posts: 3521
Joined: Thu Apr 30, 2020 5:18 pm
Location: Częstochowa
Has thanked: 3 times
Been thanked: 3 times

Post

mabakay wrote: Fri Nov 03, 2023 8:56 am W trakcie sprawdzania warunków "Wyzwalacz sceny w oparciu o stan kanałów", brakuje transakcyjności dla zmiany stanu sceny gdy użytych jest kilka kanałów w warunku.

Przykład:

Code: Select all

{{ (state(A).temperature > state(B).temperature) and (state(C).temperature > 35) }}
Jeżeli więcej niż jeden kanał pochodzi z tego samego urządzenia, a zmiana wystąpi na kanałach z tego urządzenia to wyzwalacz wykona scenę kilkukrotnie mimo, że dotyczy tego samego warunku.

Code: Select all

Logi
Kiedy?	Treść
Dziś o 05:31	Odpowiedź: Zasilanie CO (36.1C) > Powrót (34.8C) AND Zasilanie CWU (42.7C) > 35C
Dziś o 05:31	Wysłano powiadomienia
Dziś o 05:31	Odpowiedź: Zasilanie CO (36.1C) > Powrót (34.8C) AND Zasilanie CWU (42.7C) > 35C
Dziś o 05:31	Odpowiedź: Zasilanie CO (36.1C) > Powrót (34.8C) AND Zasilanie CWU (42.7C) > 35C
Dziś o 05:31	Wysłano powiadomienia
Dziś o 05:31	Wysłano powiadomienia
Dziś o 05:31	Wykryto zmianę warunku wyzwolenia sceny - wykonuję.
Dziś o 05:31	Wykryto zmianę warunku wyzwolenia sceny - wykonuję.
Dziś o 05:31	Wykryto zmianę warunku wyzwolenia sceny - wykonuję.
W powyższym przypadku, zostają np. wysłane trzy powiadomienia, a telefon szaleje :o

Rozwiązanie:
Zmiany w stanie kanałów w obrębie wyzwalacza sceny, powinny być sprawdzane sekwencyjnie z uwzględnieniem wyzwolenia (zmiany stanu) sceny przez poprzedni kanał.
Albo nie do końca rozumiem albo nie jestem w stanie potwierdzić twojej obserwacji. Zawsze dostawałem jedno powiadomienie bez względu na ilość warunków a miałem kilka pokręconych z 6 urządzeniami.
Podałęś tutaj warunek a jaki jest wyzwalacz?
YoMan
________________________________________
Wziąłem udział w SOP2023 & SOP2024
User avatar
Arghatell
Posts: 127
Joined: Thu Jun 11, 2020 10:39 pm

Post

mabakay wrote: Fri Nov 03, 2023 8:56 am W trakcie sprawdzania warunków "Wyzwalacz sceny w oparciu o stan kanałów", brakuje transakcyjności dla zmiany stanu sceny gdy użytych jest kilka kanałów w warunku.

Rozwiązanie:
Zmiany w stanie kanałów w obrębie wyzwalacza sceny, powinny być sprawdzane sekwencyjnie z uwzględnieniem wyzwolenia (zmiany stanu) sceny przez poprzedni kanał.
Zapewne skorzystałeś tylko z rubryki "wyzwalacza".
No to poniżej w drugiej tabelce "warunki" dopisz warunek. Pozostawiając tą rubrykę pustą, logicznym jest, że każda zmiana w "wyzwalaczu" będzie powodowała reakcję. Po wpisaniu i ustaleniu konkretnego warunku, wyzwalacz w momencie zmiany, będzie wykonany dopiero wtedy, jeśli warunek jako warunek a nie wyzwalacz będzie spełniony.

Według mnie, niczego nie brakuje i nie ma tutaj błędu. Błąd jest u usera, że nie ogarnął jeszcze warunkowania:)
mabakay
Posts: 42
Joined: Mon Oct 30, 2023 8:52 am

Post

Arghatell wrote: Fri Nov 03, 2023 1:26 pm
mabakay wrote: Fri Nov 03, 2023 8:56 am W trakcie sprawdzania warunków "Wyzwalacz sceny w oparciu o stan kanałów", brakuje transakcyjności dla zmiany stanu sceny gdy użytych jest kilka kanałów w warunku.

Rozwiązanie:
Zmiany w stanie kanałów w obrębie wyzwalacza sceny, powinny być sprawdzane sekwencyjnie z uwzględnieniem wyzwolenia (zmiany stanu) sceny przez poprzedni kanał.
Zapewne skorzystałeś tylko z rubryki "wyzwalacza".
Zgadza się, ale...
No to poniżej w drugiej tabelce "warunki" dopisz warunek.
Dopisałem "Warunek wykonania sceny" identyczny jak "Wyzwalacz sceny w oparciu o stan kanałów" i efekt jest ten sam.
Image
Image
Pozostawiając tą rubrykę pustą, logicznym jest, że każda zmiana w "wyzwalaczu" będzie powodowała reakcję. Po wpisaniu i ustaleniu konkretnego warunku, wyzwalacz w momencie zmiany, będzie wykonany dopiero wtedy, jeśli warunek jako warunek a nie wyzwalacz będzie spełniony.
Każda zmiana? Przecież tam jest napisane
Scena zostanie wykonana za każdym razem gdy zmiana stanu któregoś z użytych w wyrażeniu kanałów spowoduje zmianę jego wyniku.
Jak dla mnie, to chodzi o zmianę wyniku całego wyrażenia i wydaje się że tak to właśnie działa. Za to "warunek wykonania sceny" służy do
Przy wykonaniu sceny poniższy warunek musi być spełniony, by kontynuować jej wykonanie.
Jak na moje to "Wyzwalacz sceny w oparciu o stan kanałów" ma działanie analogiczne do termostatu. A "Warunek wykonania sceny" pozwala określić na który z kierunków zmiany chcemy zareagować.

Przykład: Jeżeli w "Wyzwalacz sceny w oparciu o stan kanałów" wpiszemy "temperature > 35" to scena zostanie wyzwolona raz gdy temperatura przekroczy 35, a drugi raz kiedy osiągnie lub spadnie poniżej 35 - jak wahadło. Przepisanie tego samego warunku do "Warunek wykonania sceny" pozwoli wykonać reakcję (czyli np. wysłać powiadomienie) tylko kiedy temperatura była niższa lub równa 35, a teraz ją przekroczyła.

Wydaje się to proste i zrozumiałe. Problem jest IMO w innym miejscu. Jeżeli kanały (czujniki) są w tym samym urządzeniu np. ESP z kilkoma DS18B20, to aktualizacja danych do serwera SUPLA CLOUD jest wysyłana o wszystkich czujnikach w tym samym zapytaniu. Backend SUPLA SCRIPTS przetwarza jest równolegle, a stan zmiany "termostatu" opisanego za pomocą "Wyzwalacz sceny w oparciu o stan kanałów", pobierany jest z bazy przed zakończeniem aktualizacji sceny (sprawdzania wyzwalaczy). To powoduje, że np. pierwszy z czujników wyzwala scenę (spełniony jest cały warunek), stan zostanie zapisany w bazie, ale pozostałe czujniki są sprawdzane z poprzednio pobranym stanem - dlatego scena wykonuje się kilkukrotnie.
User avatar
YoMan
Posts: 3521
Joined: Thu Apr 30, 2020 5:18 pm
Location: Częstochowa
Has thanked: 3 times
Been thanked: 3 times

Post

Przy następującej konfiguracji powiadomienie przychodzi raz. Sprawdziłem przed chwilą:

Wyzwalanie w oparciu o stan kanałów

Code: Select all

{{state(xx60).temperature >= state(xx54).temperature}}
Warunek wykonania

Code: Select all

{{ state(xx60).temperature >= state(xx54).temperature and state(xx66).temperature > 20}}
YoMan
________________________________________
Wziąłem udział w SOP2023 & SOP2024
User avatar
Arghatell
Posts: 127
Joined: Thu Jun 11, 2020 10:39 pm

Post

mabakay wrote: Sun Nov 05, 2023 10:23 am Dopisałem "Warunek wykonania sceny" identyczny jak "Wyzwalacz sceny w oparciu o stan kanałów" i efekt jest ten sam.
Coś mi jednak nie pasuje bo nie zwykłem ustawiać dwóch zmiennych obok siebie, tym bardziej że jedna z nich jest "logiczna".

Zmienna ">" implikuje w sobie "=" i działa w jedną stronę, znaczy będzie tylko jedno powiadomienie. Nie sprawdzałem tego ale możliwe, że ustawienie ">=" powoduje właśnie efekt dwóch powiadomień w tym samym czasie.
Pozostawiając tą rubrykę pustą, logicznym jest, że każda zmiana w "wyzwalaczu" będzie powodowała reakcję. Po wpisaniu i ustaleniu konkretnego warunku, wyzwalacz w momencie zmiany, będzie wykonany dopiero wtedy, jeśli warunek jako warunek a nie wyzwalacz będzie spełniony.
Każda zmiana? Przecież tam jest napisane
Scena zostanie wykonana za każdym razem gdy zmiana stanu któregoś z użytych w wyrażeniu kanałów spowoduje zmianę jego wyniku.
A ile kanałów masz w tym wpisie? Scriptum Verbum...wyraźnie jest napisane "za każdym razem gdy zmiana stanu któregoś z użytych w wyrażeniu kanałów" czyli tak jak napisałem. Nie możesz tego traktować jako całość tym bardziej że masz "and" czyli drugi warunek. To, że zapisałeś to w jednym ciągu nie definiuje że jest to jeden wyzwalacz.
Jak dla mnie, to chodzi o zmianę wyniku całego wyrażenia i wydaje się że tak to właśnie działa.
No nie :)
Jak na moje to "Wyzwalacz sceny w oparciu o stan kanałów" ma działanie analogiczne do termostatu. A "Warunek wykonania sceny" pozwala określić na który z kierunków zmiany chcemy zareagować.

Przykład: Jeżeli w "Wyzwalacz sceny w oparciu o stan kanałów" wpiszemy "temperature > 35" to scena zostanie wyzwolona raz gdy temperatura przekroczy 35, a drugi raz kiedy osiągnie lub spadnie poniżej 35 - jak wahadło. Przepisanie tego samego warunku do "Warunek wykonania sceny" pozwoli wykonać reakcję (czyli np. wysłać powiadomienie) tylko kiedy temperatura była niższa lub równa 35, a teraz ją przekroczyła.
No właśnie. Po co Ci ta "równa"? Tutaj może tkwić błąd logiczny jak i zapisu warunku. Inna sprawa, to już pisałem wcześniej, że często lepiej rozbić sobie to na dwie lub trzy sceny zamiast kombinować upakowanie wszystkiego w jednej. Zyskujemy wtedy dodatkowe opcje na postawienie następnych warunków jak i opóźnienie (możliwość).
mabakay
Posts: 42
Joined: Mon Oct 30, 2023 8:52 am

Post

YoMan wrote: Sun Nov 05, 2023 1:47 pm Przy następującej konfiguracji powiadomienie przychodzi raz. Sprawdziłem przed chwilą:
Powiadomienie to rzecz wtórna, chodzi o to że scena się wykonuje kilka razy "w tej samej chwili". Jak ustawię jako wynik wykonania sceny przełączenie przekaźnika, to ten będzie robił szybkie - klik, kilk, kilk - tej samej sekundzie.

Ale wracając do meritum, ja wkleiłem logi ze strony supla scripts - a Ty odpowiadasz "sprawdziłem i u mnie działa". Mnie się wydaje, że ktoś kto zarządza/ma dostęp do serwera mógłby tutaj pomóc.

No nic, dzięki.
mabakay
Posts: 42
Joined: Mon Oct 30, 2023 8:52 am

Post

Arghatell wrote: Sun Nov 05, 2023 9:12 pm Zmienna ">" implikuje w sobie "=" i działa w jedną stronę, znaczy będzie tylko jedno powiadomienie. Nie sprawdzałem tego ale możliwe, że ustawienie ">=" powoduje właśnie efekt dwóch powiadomień w tym samym czasie.
Że co? 15.0 > 15.0 to, to samo co 15.0 >= 15.0? I że jeszcze ma wpływ na ilość powiadomień? :D

PS. Wcześniej miałem ">" i działało tak samo.
A ile kanałów masz w tym wpisie? Scriptum Verbum...wyraźnie jest napisane "za każdym razem gdy zmiana stanu któregoś z użytych w wyrażeniu kanałów" czyli tak jak napisałem. Nie możesz tego traktować jako całość tym bardziej że masz "and" czyli drugi warunek. To, że zapisałeś to w jednym ciągu nie definiuje że jest to jeden wyzwalacz.
Przecież post wyżej YoMan napisał że mimo dwóch warunków (i kanałów) połączonych AND, dostaje jedno powiadomienie - viewtopic.php?p=165298#p165298

Wydaje mi się, że właśnie podałem argument przeciw tej hipotezie.
No właśnie. Po co Ci ta "równa"? Tutaj może tkwić błąd logiczny jak i zapisu warunku. Inna sprawa, to już pisałem wcześniej, że często lepiej rozbić sobie to na dwie lub trzy sceny zamiast kombinować upakowanie wszystkiego w jednej. Zyskujemy wtedy dodatkowe opcje na postawienie następnych warunków jak i opóźnienie (możliwość).
Rozumiem opcję z rozbiciem sprawdzania "całego warunku" w kilku scenach. Ale przypuszczam, że jeżeli nawet by to coś dało, to dlatego że dołożyłbym "opóźnienia" w przetwarzaniu tych transakcji i w między czasie, może reszta wywołań odczytała by prawidłowy stan sceny.

Return to “SUPLA Scripts”