Szablony powiadomień

Masz pomysł na funkcjonalność lub koncepcję na rozwój projektu. Opisz wszystko tutaj.
User avatar
klew
Posts: 13905
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

Powoli na serwerach pojawia się Cloud w wersji 26.03, a razem z nim nowa funkcja: Szablony powiadomień.
Jeśli na Twoim serwerze jest już nowa wersja, to zapraszamy do testowania. Jeśli nie, to masz czas, aby zapoznać się z poniższą instrukcją i objerzeć filmik na YouTube :).

Do czego są szablony powiadomień?
Pozwalają budować treść powiadomień dynamicznie - na podstawie wartości z kanałów, z użyciem warunków, pętli i prostych operacji.

Przykład:

Code: Select all

Brama jest {% if open %}otwarta{% else %}zamknięta{% endif %}
Silnik jest oparty o nieco okrojoną wersję: https://github.com/pantor/inja

Film instruktarzowy: https://youtu.be/m3z6elzKTug

Szablony można wstawiać do treści powiadomienia oraz do tytułu.

Aby zobaczyć, jakie pola są dostępne, można użyć:

Code: Select all

{{ kanał }}

Składnia:

Code: Select all

{{ wyrażenie }}        -> wstawienie wartości
{% instrukcja %}       -> logika (if, for, set)
{# komentarz #}
Dostępna jest też składnia uproszczona:

Code: Select all

## instrukcja jednowierszowa
Warunki:

Code: Select all

{% if warunek %}
  Prawda
{% else %}
  Fałsz
{% endif %}
Lub:

Code: Select all

## if warunek
Prawda
## else
Fałsz
## endif
Operatory:
and, or, ( ), not, >, ==, <, >=, <=
Uwaga: and i or mają ten sam priorytet

Pętle:

Code: Select all

{% for element in kolekcja %}
  {{ element }}
{% endfor %}
Lub:

Code: Select all

## for element in kolekcja
{{ element }}
## endfor
Dodatkowe parametry dostępne w pętli:

Code: Select all

loop.index  -> indeks elementu (0,1,2...)
loop.index1  -> numer elementu (1,2,3...)
loop.first  -> true dla pierwszego
loop.last   -> true dla ostatniego

at(lista, indeks) -> pobiera element z listy
Zmienne i parametry:

Code: Select all

{% set zmienna = wartosc %}
Lub:

Code: Select all

## set zmienna = wartosc
Dostęp do zmiennych zagnieżdżonych:

Code: Select all

{{ channel.temperature }}
Dostępne funkcje:

Code: Select all

getChannel(id)        -> pobiera dane kanału
abort()               -> przerywa wysyłkę powiadomienia
round(3.1415, 2)      -> 3.14
default(x, "wartość") -> wartość domyślna jeśli brak
default(x, true/false)
Używaj default gdy nie masz pewności czy pole istnieje.

Operator pipe:

Code: Select all

{{ "tekst" | upper }}
{{ 3.1415 | round(2) }}

Przykłady

Code: Select all

Brama jest {% if open %}otwarta{% else %}zamknięta{% endif %}

Code: Select all

## set thw = getChannel(48350)
Temperatura: {{ thw.temperature | round(1) }} C
Wilgotność: {{ thw.humidity | round(1) }} %

Code: Select all

## set chIds = [48350, 145324,145722]
## set names = ["Dom", "Garaż", "Działka"]

## for id in chIds
## set ch = getChannel(id)
Brama {{ at(names, loop.index) }} - {% if default(ch.open, false) %}otwarta{% else %}zamknięta{% endif %}
## endfor
ŚCIĄGAWKA – FUNKCJE I PARAMETRY (kanały)

Wszystkie kanały mają parameter connected: bool. Należy go sprawdzać czy jest true.
Jeśli jest false, to oznacza, że kanał jest niedostępny (błędny id, offline itp.) i reszta
parametrów będzie niedostępna.

ON/OFF
POWERSWITCH, LIGHTSWITCH, STAIRCASETIMER, PUMPSWITCH, HEATORCOLDSOURCESWITCH
- value: bool
- on: bool


BINARY (czujniki binarne)
NOLIQUIDSENSOR, HOTELCARDSENSOR, ALARM_ARMAMENT_SENSOR, MAILSENSOR,
CONTAINER_LEVEL_SENSOR, FLOOD_SENSOR, MOTION_SENSOR, BINARY_SENSOR
- value: bool


CONTAINER
CONTAINER, SEPTIC_TANK, WATER_TANK
- value: 0..100
- level: 0..100
- invalid_value: bool
- alarm: bool
- sound_alarm_on: bool
- warning: bool
- invalid_sensor_state: bool


ELECTRICITY METER (EM)
- voltage_avg
- current_sum
- power_active_sum
- power_reactive_sum
- power_apparent_sum
- fae_sum
- rae_sum
- voltage1, voltage2, voltage3
- current1, current2, current3
- power_active1, power_active2, power_active3
- power_reactive1, power_reactive2, power_reactive3
- power_apparent1, power_apparent2, power_apparent3
- fae1, fae2, fae3
- rae1, rae2, rae3


FACADE BLIND / VERTICAL BLIND (FB)
- shut: 0..100
- tilt: 0..100
- open: bool
- closed: bool
- calibration_failed: bool
- calibration_lost: bool
- motor_problem: bool
- calibration_in_progress: bool
- any_error_set: bool


MEASUREMENT
DEPTHSENSOR, DISTANCESENSOR, WINDSENSOR, PRESSURESENSOR,
RAINSENSOR, WEIGHTSENSOR, GENERAL_PURPOSE_MEASUREMENT, GENERAL_PURPOSE_METER
- value: float


OPEN / CLOSE
OPENINGSENSOR_GATEWAY, OPENINGSENSOR_GATE, OPENINGSENSOR_GARAGEDOOR,
CONTROLLINGTHEDOORLOCK, CONTROLLINGTHEGATEWAYLOCK,
OPENINGSENSOR_DOOR, OPENINGSENSOR_ROLLERSHUTTER,
OPENINGSENSOR_ROOFWINDOW, OPENINGSENSOR_WINDOW
- value: bool
- open: bool
- closed: bool


RGB / DIMMER
DIMMER
- brightness: 0..100
- on: bool

DIMMER_CCT
- brightness: 0..100
- white_temperature: 0..100
- on: bool

DIMMERANDRGBLIGHTING, DIMMER_CCT_AND_RGB
- color: hex
- color_brightness: 0..100
- brightness: 0..100
- white_temperature: 0..100
- on: bool

RGBLIGHTING
- color: hex
- color_brightness: 0..100
- on: bool


ROLLER SHUTTER (RS)
CONTROLLINGTHEROLLERSHUTTER, CONTROLLINGTHEROOFWINDOW,
TERRACE_AWNING, PROJECTOR_SCREEN, CURTAIN, ROLLER_GARAGE_DOOR
- shut: 0..100
- open: bool
- closed: bool
- calibration_failed: bool
- calibration_lost: bool
- motor_problem: bool
- calibration_in_progress: bool
- any_error_set: bool


TEMPERATURE / HUMIDITY (T+H)
THERMOMETER
- temperature: float

HUMIDITY
- humidity: float

HUMIDITYANDTEMPERATURE
- temperature: float
- humidity: float


VALVE
VALVEPERCENTAGE
- value: 0..100
- open: bool
- closed: bool
- flooding: bool
- manually_closed: bool
- motor_problem: bool

VALVEOPENCLOSE
- value: bool
- open: bool
- closed: bool
- flooding: bool
- manually_closed: bool
- motor_problem: bool


IMPULSE COUNTERS (IC)
IC_ELECTRICITYMETER, IC_GASMETER, IC_HEATMETER, IC_WATERMETER
- calculated_value: float
- counter: int


HVAC
HVAC_THERMOSTAT, HVAC_THERMOSTAT_HEAT_COOL, HVAC_DOMESTIC_HOT_WATER
- mode: NOT_SET / OFF / HEAT / COOL / HEAT_COOL / FAN_ONLY / DRY
- setpoint_temperature_heat: float
- setpoint_temperature_cool: float
- heating_or_cooling: IDLE / HEATING / COOLING
- errors: string
- heating: bool
- cooling: bool



Nie komplikuj logiki - to szablon, nie kod aplikacji

Kilka pomysłów zastosowań:
- wysyłanie powiadomienia o 21:30 tylko gdy brama jest otwarta
- cykliczne wysyłanie powiadomień, gdy czujnik poczty jest aktywny (np. co 4 h)
- wysyłanie rano powiadomienia o aktualnej pogodzie

W treści tego posta mogą być błędy. Będę je poprawiał systematycznie, jeśli ktoś coś zauważy i zgłosi :)
Najlepsze suple dla Twojego domu :mrgreen:
User avatar
klew
Posts: 13905
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

Zapraszam do testowania i dzielenia się swoimi pomysłami :)
Najlepsze suple dla Twojego domu :mrgreen:
User avatar
Duch__
Posts: 2199
Joined: Wed Aug 24, 2016 7:26 pm
Location: Opole
Been thanked: 6 times

Post

:shock:, czekam na swój serwer
User avatar
vajera
Posts: 7285
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 288 times
Been thanked: 161 times

Post

Wow! Robi wrażenie - czy to będzie dostępne również dla tych powiadomień generowanych przez urządzenie (klasa Notifications w SD)?
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
User avatar
Zibi_007
Posts: 3985
Joined: Tue Oct 31, 2023 10:06 pm
Has thanked: 10 times
Been thanked: 31 times

Post

No cóż, brawo!
Gratulowałem już tydzień wcześniej viewtopic.php?p=231957#p231957, ale powtórzę:

To jest dokładnie ten moment, na który się czekało - nawet jeśli wcześniej trudno było go precyzyjnie nazwać. Nowa funkcja pojawiła się trochę jak odpowiedź na potrzebę, którą wszyscy czuli, ale nikt nie potrafił do końca ubrać w słowa. I nagle jest - działa, upraszcza, porządkuje, sprawia, że powiadomienia stają się jasne, proste i użyteczne, dając ogrom dodatkowych możliwości!

Pierwsza reakcja? Ulga. Taka prawdziwa, codzienna. Bo coś, co wcześniej wymagało kilku kroków, kombinowania albo po prostu irytowało swoją niedoskonałością lub było niemożliwe, teraz dzieje się naturalnie. Intuicyjnie. Jakby ta funkcja była tam od zawsze. Szczególnie dla tych, którym nie obce są skrypty Fracza :)

Trzeba naprawdę docenić autorów. Widać, że to nie jest przypadkowy dodatek ani szybka poprawka „na odczepnego”. To efekt wsłuchania się w użytkowników, zrozumienia ich frustracji i przełożenia tego na konkretne, działające rozwiązanie. Co więcej - rozwiązanie eleganckie. Takie, które nie tylko spełnia swoją rolę, ale robi to w sposób kompleksowy!

Jest w tym też coś więcej - poczucie, że Supla dojrzewa razem z użytkownikiem. Że ktoś po drugiej stronie naprawdę myśli o tym, jak wygląda codzienne korzystanie z technologii, a nie tylko o tym, żeby „coś dodać” do listy funkcji.

Można powiedzieć: w końcu. Ale można też powiedzieć: było warto czekać :D
Image Wiesz, że Supla obsługuje Zigbee? Wstąp do Klubu Promila: https://forum.supla.org/viewtopic.php?t=18018
Image Szukasz nowego GG? Jest tutaj: https://forum.supla.org/viewtopic.php?t=18036
User avatar
klew
Posts: 13905
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

vajera wrote: Tue Mar 24, 2026 2:33 pm Wow! Robi wrażenie - czy to będzie dostępne również dla tych powiadomień generowanych przez urządzenie (klasa Notifications w SD)?
To jest funkcja serwera. Nie testowałem tego z powiadomieniami z urządzeń, ale serwer powinien zaaplikować te szablony także do powiadomień z urządzenia.
Tylko trzeba pamiętać, że to serwer wykonuje i trzeba podać id kanału na serwerze
Najlepsze suple dla Twojego domu :mrgreen:
Maciek663
Posts: 217
Joined: Thu Jan 11, 2024 6:33 am
Has thanked: 1 time
Been thanked: 1 time

Post

Super! Widzę ogromne możliwości.

Ale widzę też tysiąc postów na fb i na forum: "nie działa mi, pomocy" :D
User avatar
klew
Posts: 13905
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

Maciek663 wrote: Wed Mar 25, 2026 5:22 am Super! Widzę ogromne możliwości.

Ale widzę też tysiąc postów na fb i na forum: "nie działa mi, pomocy" :D
Wizjoner :p

Czekam na te pomysły :)
Najlepsze suple dla Twojego domu :mrgreen:
Maciek663
Posts: 217
Joined: Thu Jan 11, 2024 6:33 am
Has thanked: 1 time
Been thanked: 1 time

Post

Najczęściej co się pojawia na forum to chyba powiadomienie o otwartej bramie po jakiejś godzinie.

Jak rozumiem teraz to można zrobić poprzez scenę wyzwalaną harmonogramem (np. codziennie o 22 sprawdź czy brama jest otwarta, jeśli tak to wyślij powiadomienie).
lukasz06
Posts: 2540
Joined: Sun Jul 17, 2022 6:53 pm
Has thanked: 45 times
Been thanked: 21 times

Post

Czekam na aktualizację serwera, ale widzę, że to bardzo przypomina mi skrypty.
Może i fajne, ale nie wiem o co tam chodzi, dla zwykłego zjadacza chleba to jakiś kosmos.
Ale będę próbował ;)

Return to “Pomysły i koncepcje”