Warunki w SUPLA Scripts - pomysły

Awatar użytkownika
fracz
Posty: 2256
Rejestracja: pt paź 28, 2016 10:56 pm
Lokalizacja: Kraków

W wersji 3.0 skryptów dodałem nowy format specyfikowania warunków oparty o Twig.

Poniżej zamieszczajcie pomysły co można z tym zrobić... ;-)

Aby podglądnąć, co jest w danym stanie kanału, można sobie (np. w odpowiedzi sceny przy edycji) podać

Kod: Zaznacz cały

{{ state(1)|json_encode|raw }}
Awatar użytkownika
fracz
Posty: 2256
Rejestracja: pt paź 28, 2016 10:56 pm
Lokalizacja: Kraków

Jeśli lampa jest włączona

Kod: Zaznacz cały

{{ state(1).on
Jeśli temperatura jest większa niż 20

Kod: Zaznacz cały

{{ state(2).temperature > 20 }}
Jeśli temperatura jest większa niż 20 i mniejsza niż 30

Kod: Zaznacz cały

{{ state(2).temperature > 20 and state(2).temperature < 30 }}
Jeśli roleta jest zamknięta lub prawie zamknięta

Kod: Zaznacz cały

{{ state(10).shut < 10 }}
Jeśli brama jest zamknięta

Kod: Zaznacz cały

{{ state(10).hi }}
Jeśli brama jest otwarta a moduł jest połączony

Kod: Zaznacz cały

{{ state(10).connected and not  state(10).hi }}
Jeśli moduł jest rozłączony

Kod: Zaznacz cały

{{ not state(10).connected }}
Jeśli okno jest zamknięte, a temperatura na jednym czujniku jest mniejsza niż na innym

Kod: Zaznacz cały

{{ state(4).hi and state(2).temperature < state(6).temperature }}
Jeśli kolor na RGB jest...

Kod: Zaznacz cały

{{state(123).color|colorNamePl == "czerwony"}}
Jeśli ledy świecą jasno a kolor na RGB jest

Kod: Zaznacz cały

{{ state(5).color_brightness > 50 and state(5).color|colorNamePl == "czerwony" }}
Jeśli jest niedziela

Kod: Zaznacz cały

{{('now'|date('N')) == 7}}
Jest przed zachodem słońca

Kod: Zaznacz cały

{{ time() < sunsetTime() }} 
Jest przed wschodem słońca (wg strefy czasowej z Twojego konta)

Kod: Zaznacz cały

{{ time() < sunriseTime() }} 
Jest po wschodzie słońca (wg strefy czasowej z Twojego konta)

Kod: Zaznacz cały

{{ time() > sunriseTime() }} 
Jest co najmniej 15 minut po zachodzie słońca na współrzędnych 50.1234N, 19.4372E

Kod: Zaznacz cały

{{ time('+15 minutes') > sunsetTime(50.1234, 19.4372) }} 
Jeśli będzie dziś ciepło w Paczkowie :lol:

Kod: Zaznacz cały

{{ (getUrl('https://www.meteoblue.com/pl/pogoda/prognoza/tydzień/paczków_polska_3089566', '#tab_temp_max".*?>\s*(.+?C)#s')|number_format) > 15 }}
wsosniak
Posty: 715
Rejestracja: sob cze 02, 2018 8:02 am

ja na te warunki czekam od dłuższego czasu. A szczególnie pomysł mam na taką jedną scenę "kobyłę" : Będzie jedna scena OTWORZ_DOM , która w zależności od tego kiedy podjeżdżam pod dom (tzn czy jest dzień , noc , południe …. ), od tego jaka jest temperatura na zewnątrz, czy jest zima czy lato …. otworzy mi bramy (jeśli zamknięte), otworzy rolety, lub tylko cześć, lub tylko lekko otworzy te od południa jeśli jest palma na zewnątrz rzędu 35st, albo zimą nie otworzy tych od północy, włączy odpowiednie lampki wewnątrz, włączy odpowiednie lampki na zewnątrz (lub nie włączy ich) , wyłączy / włączy odpowiednie kamery, włączy lub nie cyrkulacje wody ….. itd. itd.

w końcu mój dom nie będzie tylko zautomatyzowany ale trochę będzie myślał za mnie :)
@fracz ? kiedy wrzucisz na LIVE ? razem z cloud v2.3 ?
Awatar użytkownika
fracz
Posty: 2256
Rejestracja: pt paź 28, 2016 10:56 pm
Lokalizacja: Kraków

tak - jak ruszą cloudy 2.3 to niedługo potem skrypty 3 też
wsosniak
Posty: 715
Rejestracja: sob cze 02, 2018 8:02 am

Może się komuś przyda : Zimą zawsze mam problem z przymarzającymi roletami od strony zachodnio - północnej. A przymarzają mi dokładnie zawsze wtedy kiedy w dzień jest powyżej +2st a wieczorem spada poniżej -5 st. Wymyśliłem na to warunek : jeśli otwieram te zachodnio - północne rolety , i nie ma przewidzianego przymrozku (opisanego powyżej) to je otwieram. Warunek przy uruchamianiu sceny zrobiłem taki do tego :

Kod: Zaznacz cały

{{
('now'|date('Hi') >= '0530' and 'now'|date('Hi') <='2000' and 
((getUrl('https://www.meteoblue.com/pl/pogoda/prognoza/tydzień/katowice_polska_3096472', '#tab_temp_min".*?>\s*(.+?C)#s')|number_format) >=-4 or 
(getUrl('https://www.meteoblue.com/pl/pogoda/prognoza/tydzień/katowice_polska_3096472', '#tab_temp_min".*?>\s*(.+?C)#s')|number_format) <=-11) ) 

or

('now'|date('Hi') >= '0530' and 'now'|date('Hi') <='2000'  and
(getUrl('https://www.meteoblue.com/pl/pogoda/prognoza/tydzień/katowice_polska_3096472', '#tab_temp_min".*?>\s*(.+?C)#s')|number_format) <=-5  and 
(getUrl('https://www.meteoblue.com/pl/pogoda/prognoza/tydzień/katowice_polska_3096472', '#tab_temp_min".*?>\s*(.+?C)#s')|number_format) >=-10 ) and 
(getUrl('https://www.meteoblue.com/pl/pogoda/prognoza/tydzień/katowice_polska_3096472', '#tab_temp_max".*?>\s*(.+?C)#s')|number_format) <=1
}}
zobaczymy jak się będzie sprawować :)
Awatar użytkownika
fracz
Posty: 2256
Rejestracja: pt paź 28, 2016 10:56 pm
Lokalizacja: Kraków

wsosniak pisze: czw gru 20, 2018 12:20 pm Może się komuś przyda : Zimą zawsze mam problem z przymarzającymi roletami od strony zachodnio - północnej. A przymarzają mi dokładnie zawsze wtedy kiedy w dzień jest powyżej +2st a wieczorem spada poniżej -5 st. Wymyśliłem na to warunek : jeśli otwieram te zachodnio - północne rolety , i nie ma przewidzianego przymrozku (opisanego powyżej) to je otwieram. Warunek przy uruchamianiu sceny zrobiłem taki do tego :

Kod: Zaznacz cały

{{
('now'|date('Hi') >= '0530' and 'now'|date('Hi') <='2000' and 
((getUrl('https://www.meteoblue.com/pl/pogoda/prognoza/tydzień/katowice_polska_3096472', '#tab_temp_min".*?>\s*(.+?C)#s')|number_format) >=-4 or 
(getUrl('https://www.meteoblue.com/pl/pogoda/prognoza/tydzień/katowice_polska_3096472', '#tab_temp_min".*?>\s*(.+?C)#s')|number_format) <=-11) ) 

or

('now'|date('Hi') >= '0530' and 'now'|date('Hi') <='2000'  and
(getUrl('https://www.meteoblue.com/pl/pogoda/prognoza/tydzień/katowice_polska_3096472', '#tab_temp_min".*?>\s*(.+?C)#s')|number_format) <=-5  and 
(getUrl('https://www.meteoblue.com/pl/pogoda/prognoza/tydzień/katowice_polska_3096472', '#tab_temp_min".*?>\s*(.+?C)#s')|number_format) >=-10 ) and 
(getUrl('https://www.meteoblue.com/pl/pogoda/prognoza/tydzień/katowice_polska_3096472', '#tab_temp_max".*?>\s*(.+?C)#s')|number_format) <=1
}}
zobaczymy jak się będzie sprawować :)
Możesz to uprościć by było bardziej czytelne i utrzymywalne, wprowadzając zmienną.

Kod: Zaznacz cały

{% set forecastTempToday = getUrl('https://www.meteoblue.com/pl/pogoda/prognoza/tydzień/katowice_polska_3096472', '#tab_temp_min".*?>\s*(.+?C)#s')|number_format %}
{{ ('now'|date('Hi') >= '0530' and 'now'|date('Hi') <='2000' and (forecastTempToday >= -4 or forecastTempToday <= -11) }}
wsosniak
Posty: 715
Rejestracja: sob cze 02, 2018 8:02 am

ooo super że są zmienne :)
sprawdziłem dwie zmienne i jest ok :
{% set z1 = 16 %}
{% set z2 = 8 %}
{{z1>z2}}

ale mam pytanie : czy definicja tych zmiennych obowiązuje tylko w warunku i wartości tych zmiennych nie można wyświetlić w odpowiedzi ? no bo próbuje {{z1}} {z1} i nic :)
Awatar użytkownika
fracz
Posty: 2256
Rejestracja: pt paź 28, 2016 10:56 pm
Lokalizacja: Kraków

Wszystkie zmienne są zamknięte w zakresie jednego miejsca (warunku/odpowiedzi itp). Dlaczego nie możesz ich tam zdefiniować jeszcze raz? ;-)
wsosniak
Posty: 715
Rejestracja: sob cze 02, 2018 8:02 am

Mogę, mogę :) ale myślałem że to scena jest tym jednym miejscem i że definiując zmienne w warunku jest jakiś sposób żeby wyświetlić wartości zmiennych w odpowiedzi.

Ten mój warunek teraz wygląda tak :
{% set TempMax = getUrl('https://www.meteoblue.com/pl/pogoda/pro ... ka_3096472', '#tab_temp_max".*?>\s*(.+?C)#s')|number_format %}
{% set TempMin = getUrl('https://www.meteoblue.com/pl/pogoda/pro ... ka_3096472', '#tab_temp_min".*?>\s*(.+?C)#s')|number_format %}
{{
( 'now'|date('Hi') >= '0530' and 'now'|date('Hi') <='2000' and (TempMin >=-4 or TempMin <=-11) )
or
('now'|date('Hi') >= '0530' and 'now'|date('Hi') <='2000' and TempMin <=-5 and TempMin >=-10 and TempMax <=1 )
}}

żeby było idealnie to jeszcze bym musiał odczytać czy prognoza mówi , czy będzie deszcz ( obojętnie o której ) czy też nie . GetUrl….? lub jakoś inaczej ? Jak się nie da to trudno :)
Awatar użytkownika
fracz
Posty: 2256
Rejestracja: pt paź 28, 2016 10:56 pm
Lokalizacja: Kraków

Teraz możesz już używać time() - będzie czytelniej. I możesz pisać dwukropki w godzinach, będzie do ogarnięcia dla każdego co tam się dzieje ;-)

Kod: Zaznacz cały

time() > '05:30'
ODPOWIEDZ

Wróć do „SUPLA Scripts”