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 %}
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 #}
Code: Select all
## instrukcja jednowierszowa
Code: Select all
{% if warunek %}
Prawda
{% else %}
Fałsz
{% endif %}
Code: Select all
## if warunek
Prawda
## else
Fałsz
## endif
and, or, ( ), not, >, ==, <, >=, <=
Uwaga: and i or mają ten sam priorytet
Pętle:
Code: Select all
{% for element in kolekcja %}
{{ element }}
{% endfor %}
Code: Select all
## for element in kolekcja
{{ element }}
## endfor
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
Code: Select all
{% set zmienna = wartosc %}
Code: Select all
## set zmienna = wartosc
Code: Select all
{{ channel.temperature }}
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)
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
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

