Jak to zrobić (szablon)

{{ state_attr('sensor.darek_last_notification', 'android.text') }}    wynik =    Ogród (E71160330) Motion Detection Alarm(2021-09-22 16:25:34)

{{ is_state('sensor.darek_last_notification', 'Ogród (E71160330) Motion Detection Alarm(2021-09-22 16:25:34)') }}     wynik = True

{{ is_state('sensor.darek_last_notification', '(E71160330)')}}  wynik False

Mam Trzy kamery do których integracja nie działa(EZVIZ) tylko strumień RTSP.
I chciałbym wykorzystać encje z aplikacji mobilnej który daje sensor last_notification. Problem polega na tym że info które przychodzi zawsze zawiera datę i czas przez co nie potrafię określić która to z kamer alarmuje. Jaki szablon zrobić aby wyciągał tylko numer kamery? lub ograniczał wyświetlanie daty i czasu??
Treści wysyłania powiadomienia z aplikacji Ezviz zmienić nie mogę.

Edit: Znalazłem coś takiego ale nie mam pojęcia jak to zastosować i czy zadziała

Generalnie dużo da się zrobić. Napisz co byłoby najlepszym rozwiązaniem, a postaram się przybliżyć ciebie do potencjalnych możliwości.

  1. można stworzyć np. sensor.darek_last_motion_detection_area
  2. można napisać warunki które uzupełnisz akcjami w zależności od tego jaka to kamera
  3. mozna stworzyć sensor.darek_last_motion_detection_time
    pytanie co chcesz zrobić?

Styknie szablon który określi mi numer kamery, z resztą sądzę że sobie poradzę. Tzn: aby z powiadomienia potrafiłem wyszczególnić tylko dany text

Sorki ale nadal trochę się gubię w tym co piszesz. Bazując na pierwszym i tym poście wnioskuję, że coś takiego wystarczy:

{% if('E71160330' in states('sensor.darek_last_notification')) -%}
Jolka, Jolka,
Pamiętasz lato ze snu,
...
{%- endif -%}

Albo to:

{{ states('sensor.darek_last_notification') | regex_findall_index(find='[A-Z]\d{8}') }}
1 polubienie
alias: Nowa automatyzacja
description: ''
trigger:
  - platform: template
    value_template: '{{ if(''E71160330'' in states(''sensor.darek_last_notification'')) -}}'
condition: []
action:
  - service: ais_ai_service.mob_notify
    data:
      device_id: 5eeca49373d76e8fda3145658c003953
      message: 'Udana próba '
      title: Kamera
      say: true
mode: single

Pierwszy szablon

alias: Nowa automatyzacja2
description: ''
trigger:
  - platform: template
    value_template: >-
      {{ states('sensor.darek_last_notification') |
      regex_findall_index(find='[A-Z]\d{8}') }}
condition: []
action:
  - service: ais_ai_service.mob_notify
    data:
      device_id: 5eeca49373d76e8fda3145658c003953
      message: Drugi
      title: Forum
mode: single

Drugi szablon

Oba niestety w automatyzacji nie działają. Sam się zgubiłem w tym wszystkim, szablony sprawdzałem przed każdą zmianą wywoływałem detekcję na kamerę.

Edit : Sablon zadziałał po dodaniu nawiasów w tekscie …

{% if(’ (’'E71160330) ’ in states(‘sensor.darek_last_notification’)) -%}
Jolka, Jolka,
Pamiętasz lato ze snu,

{%- endif -%}

dziękuję za pomoc :beers:

1 polubienie

Jednak czas wysłania powiadomienia z aplikacji ezviz jest potrzebny aby użyć tych szablonów do automatyzacji bo jeśli ta sama kamera wykryje kilka razy ruch to dane powiadomienia się nie zmieniają i automatyzacja nie jest ponownie wyzwalana. potrzebny by tu chyba był kolejny szablon sprawdzający stan ostatniego powiadomienia o której ono godzinie było i jeśli jest inna godzina to ma wykonać automatyzację dobrze myślę ?? i jak takie coś stworzyć ?

To proponuję jednak przejść na coś takiego:
image

Plik templates.yaml

- sensor:
  - name: darek_last_notification_time
    state: '{{ states.sensor.darek_last_notification.state | regex_findall_index(find="[A-Z]\d{8}") }}'
    attributes:
      date: '{{ states.sensor.darek_last_notification.state | regex_findall_index(find="\d{4}-\d{2}-\d{2}") }}'
      time: '{{ states.sensor.darek_last_notification.state | regex_findall_index(find="\d{2}:\d{2}:\d{2}") }}'

Wpis do configuration.yaml jeśli jeszcze nie masz:

template: !include templates.yaml
1 polubienie

No ładnie to wykreowałeś dzięki tobie będę o kilka siwych włosów mniej :grin:. W relu postawił bym Ci :beer::tumbler_glass:.
Wielkie dzięki. A generalnie zastanawiam się w jaki sposób dobierasz składnie tego szablonu??

regex_findall_index(find="\d{2}:\d{2}:\d{2}")

Bo czarów chyba nie używasz… :laughing:?

To jest regex. Np. \d to dowolna cyfra, zapis \d{2} oznacza że chcesz dokładnie 2 cyfry, dalsza analiza tego przypadku jest prosta. :slight_smile:
Możesz sobie testować składnię np. tutaj:

2 polubienia

Bardzo interesujące, będę miał zabawę na jesienne długie wieczory… :thinking::+1:

Chyba coś nie do końca to funguje jak powinno bo sensor.darek_last_notification nie aktualizuje czujnika który stworzyłeś sensor.darek_last_notification_time chyba że ja coś spierniczyłem ?
w tym zdj stan kamery E71160330 powiniem być= true
a stan kamery E75829693 = false

Edytowałem powyższy wpis - brakowało “.state” przez to sensor nie wpinał się w event aktualizacji sensora kamery.

Dzięki za szybką odpowiedź, już sprawdzam jak teraz się to zachowa.

Wygląda teraz poprawnie :+1:
tylko zachodzę w głowę jak teraz poprawnie sformułować automatyzację, że numer kamery z darek_last_notification_time ma wyzwalać akcję ale jeśli jest inna data i czasz niż porzednio.
date: ‘{{ states.sensor.darek_last_notification.state | regex_findall_index(find="\d{4}-\d{2}-\d{2}") }}’
time: ‘{{ states.sensor.darek_last_notification.state | regex_findall_index(find="\d{2}:\d{2}:\d{2}") }}’

człowiek się uczy ale cały czas brakuje czegoś.

Edit: Albo jeśli jest data i czas inny w darek_last_notification_time to wykona akcję ale warunkiem będzie numer kamery ?

Pytanie co chcesz osiągnąć, kiedy faktycznie chcesz coś zrobić?
Ustawienie triggera na encję sensor.darek_last_notification_time będzie reagować na każdą zmianę - każde wykrycie ruchu, a zakładam że ponowne wykrycie ruchu na kamerze X zmieni stan encji sensor.darek_last_notification tylko z innym czasem niż poprzednio, ale sensor.darek_last_notification_time się zmieni i trigger się wywoła. Jeśli to jest spodziewane zachowanie to lecisz z tematem :slight_smile:

Właśnie nie potrafię zastosować warunku coś takiego jak if the condition is different from the previous.
albo
if the time is different from the previous time z sensora darek_last_notification_time to wykonaj akcję pod warunkiem że kamera x jest w powiadomieniu…

Taki trigger będzie uruchamiał się za każdą, dowolną zmianą, nie ważne czy to będzie stan (numer kamery) czy też data/czas(założyłbym nawet że czas będzie się zmieniał zawsze).

To teraz przycięcie do zmian tylko w jednej kamerze:

O coś takiego chodziło?

1 polubienie

W życiu bym nie wpadł na to że do trigera nie trzeba podawać jakiejś wartości zmiennej, zawsze coś wklepywałem jako stan z tąd moje zdziwienie :astonished: i niemoc w tym temacie haha :man_facepalming: