Warunki w SUPLA Scripts - pomysły

User avatar
fracz
Posts: 2256
Joined: Fri Oct 28, 2016 10:56 pm
Location: Kraków

Post

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ć

Code: Select all

{{ state(1)|json_encode|raw }}
User avatar
fracz
Posts: 2256
Joined: Fri Oct 28, 2016 10:56 pm
Location: Kraków

Post

Jeśli lampa jest włączona

Code: Select all

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

Post

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 ?
User avatar
fracz
Posts: 2256
Joined: Fri Oct 28, 2016 10:56 pm
Location: Kraków

Post

tak - jak ruszą cloudy 2.3 to niedługo potem skrypty 3 też
wsosniak
Posts: 726
Joined: Sat Jun 02, 2018 8:02 am

Post

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 :

Code: Select all

{{
('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ć :)
User avatar
fracz
Posts: 2256
Joined: Fri Oct 28, 2016 10:56 pm
Location: Kraków

Post

wsosniak wrote: Thu Dec 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 :

Code: Select all

{{
('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ą.

Code: Select all

{% 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
Posts: 726
Joined: Sat Jun 02, 2018 8:02 am

Post

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 :)
User avatar
fracz
Posts: 2256
Joined: Fri Oct 28, 2016 10:56 pm
Location: Kraków

Post

Wszystkie zmienne są zamknięte w zakresie jednego miejsca (warunku/odpowiedzi itp). Dlaczego nie możesz ich tam zdefiniować jeszcze raz? ;-)
wsosniak
Posts: 726
Joined: Sat Jun 02, 2018 8:02 am

Post

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 :)
User avatar
fracz
Posts: 2256
Joined: Fri Oct 28, 2016 10:56 pm
Location: Kraków

Post

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 ;-)

Code: Select all

time() > '05:30'

Return to “SUPLA Scripts”