Dzwonek z Biedronki + kamera = zdjęcie na Slack'a

Jak wysłać zdjęcie z kamery na komunikator Slack w momencie wciśnięcia przycisku dzwonka do drzwi?
Oczywiście można kupić i zainstalować gotowy video-domofon z wifi i używać apki producenta x, ale można również obsłużyć za pomocą kilku tańszych i uniwersalnych elementów.
Niezbędne do działania:

Opis działania w skrócie - musimy nauczyć bramkę RF naszego kodu z dzwonka i po jego wykryciu uruchomić automatyzację zapisującą zdjęcie z kamery i wysłanie komunikatu przez Slack.

  1. z konsoli bramki RF zapisujemy kod pod przyciskiem 16 komendą:
    RfKey 2 16
    lub uczymy bramkę RF wg instrukcji: https://sviete.github.io/AIS-docs/docs/en/next/ais_iot_gate_device_rf433.html#uczenie-bramki-kodow-rf
  2. w configuration.yaml dodajemy nową encję (lub używamy dodanej wg powyższej instrukcji):
input_boolean:
  doorbell:
    name: Dzwonek do drzwi
    initial: off
    icon: mdi:doorbell-video
  1. konfigurujemy kamerę:
  • w przypadku Yi Outdoor jest to nieco bardziej skomplikowane ponieważ trzeba wgrać dodatkowy software umożliwiający stream’owanie RSTP - https://github.com/TheCrypt0/yi-hack-v4
  • w configuration.yaml dodajemy (uzupełnij IP kamery w adresie rstp):
ffmpeg:
camera:
  - platform: ffmpeg
    name: Yi_Outdor_Cam_Low
    input: -rtsp_transport tcp -i rtsp://CAMERA_IP_ADDRESS/ch0_1.h264
  1. konfigurujemy integrację Slack (https://www.home-assistant.io/integrations/slack/)
  • ustaw własną nazwę konta i domyślny kanał
  • zdefiniuj hasło w pliku secrets.yaml
notify:
  - name: NOTIFIER_NAME
    platform: slack
    api_key: !secret slack_api_key
    default_channel: '#dom'
  1. dodajemy automatyzację w automations.yaml
  • zamiast xxxxxx wstaw rozpoznany kod dzwonka - można go znaleźć w konsoli RF’a w polu Data:
    20:11:38 MQT: RFBridge/tele/RESULT = {"Time":"2019-12-18T20:11:38","RfReceived":{"Sync":5110,"Low":180,"High":490,"Data":"xxxxxx","RfKey":16}}
  • zamiast NOTIFIER_NAME wstaw nazwę konta w Slack
- id: 11111353bd7440dca318a33474bc1112
  alias: Dzwonek do drzwi - wyślij zdjęcie na Slack
  initial_state: 'on'
  trigger:
    platform: mqtt
    topic: RFBridge/tele/RESULT
  condition:
    condition: template
    value_template: '{{ trigger.payload_json.RfReceived.Data == "xxxxxx" }}'
  action:
  - service: camera.snapshot
    data:
      entity_id: camera.yi_outdor_cam_low
      filename: /data/data/pl.sviete.dom/files/home/AIS/www/img/snapshot_camera.jpg
  - service: notify.NOTIFIER_NAME
    data_template:
      title: Dzwonek
      message: Ktoś dzwoni do drzwi! {{now().strftime("%H:%M:%S")}}
      data:
        file:
          path: /data/data/pl.sviete.dom/files/home/AIS/www/img/snapshot_camera.jpg

a dodając dodatkową akcję można wywołać powiadomienie głosowe:

  - service: ais_ai_service.say_it
    data:
      text: Ktoś dzwoni do drzwi!

lub nawet w określonych godzinach zadzwonić dzwonkiem sąsiada, coby odebrał paczkę od listonosza :wink:

- id: 11111353bd7440dca318a33474bc3212
  alias:  Dzwonek do drzwi -> Dzwonek do sąsiada
  initial_state: 'on'
  trigger:
    platform: mqtt
    topic: RFBridge/tele/RESULT
  condition:
  - condition: template
    value_template: '{{ trigger.payload_json.RfReceived.Data == "xxxxxx" }}'
  - condition: time
    after: 08:00:00
    before: '16:00:00'
    weekday:
    - mon
    - tue
    - wed
    - thu
    - fri
  action:
  - service: mqtt.publish
    data_template:
      topic: RFBridge/cmnd/RfKey13
      payload: ''

W Asystencie może to wyglądać tak:


a na Slack’u dostajemy takie powiadomienie:
image

Powodzenia w kopiowaniu :wink:

3polubienia

Super!
W jaki sposób działa te powiadomienie głosowe ?
Nawet jak mam zablokowany telefon to je usłyszę ?
Zastanawiam się nad podobnym rozwiązanie ale nie koniecznie z kamerą, potrzebuje tylko powiadomienie na telefon, że ktoś dzwoni do drzwi.

Powiadomienie głosowe (ais_ai_service.say_it) to po prostu tekst odczytany przez Jolkę - na podłączonym głośniku, na kompie w przeglądarce (wystarczy mieć otwartą kartę z Asystentem) lub w apce na telefonie (tu niestety dużo zależy od telefonu i Androida - może ubić proces w tle i komunikatu nie usłyszysz).

Powiadomienie na Slack’a działa bezbłędnie - zazwyczaj po kilku sekundach od zdarzenia mam go na telefonie. Jeśli nie korzystasz ze Salck’a na co dzień, to można przekierować powiadomienia na dowolny inny komunikator obsługiwany przez HA np. Hangout, Messanger, Jabber, Telegram i wiele innych opisanych tu: https://www.home-assistant.io/integrations/#notifications

Dzisiaj chwilę pobawiłem się ais_ai_service.say_it i faktycznie na Androidzie różnie bywa z powiadomieniem. Na bramce oczywiście działa niezawodnie :+1:
Co do Slacka to nigdy nie używałem ale może pora spróbować, Trello w zupełności mi wystarczało :grinning:

Niestety u mnie Slack pomimo zastosowania sugerowanych ustawień nie da się zmusić do powiadomień pushUp na Lenovo K6 Note. Nie i koniec… Test w apce slacka wypada pomyślnie ale po wysłaniu message pojawia się w chat’cie ale bez jakichkolwiek powiadomień. (Cała konfiguracja i faq przestudiowane kilka razy.)
Zmieniłem na Pushsafer też ciekawa apka do powiadomień.

Ile mogę dodać kamer, żeby nie zabić bramki? Rozumiem, ze strumień video cały czas obciąża bramkę mimo, że do niczego nie jest wykorzystywany w danym momencie?

Cześć,

To zależy jak to rozwiążesz - jak to będzie u Ciebie działać.

Normalnie, jeżeli nic nie robisz kamerami, to nie ma limitu - możesz podłączyć tyle kamer, ile tylko chcesz, bo bramka nie używa tych kamer aktywnie (nie nagrywa/przetwarza obrazu z tych kamer).

W takiej konfiguracji jak opisana powyżej Asystent wykonuje zdjęcie albo nagrywa film kamerą, tylko jak dostaje zdarzenie z czujnika (wykrycie ruchu, otwarcie furtki, dzwonienie dzwonkiem itp.).

Nie robimy kamerami żadnego ciągłego nagrywania wideo, rozpoznawania obiektów czy wykrywania ruchu to by obciążało procesor za mocno, pewnie i7 intela z 8 rdzeniami miałby co robić a co dopiero nasze 4 rdzenie na ARM (które mamy na bramce).

Idea z kamerami jest taka, żeby przesyłać z nich obraz tylko wtedy kiedy jest potrzebny (kiedy ktoś go ogląda w przeglądarce, kiedy wykryto ruch i trzeba kogoś powiadomić).

Zakładamy, że kamera w Asystencie domowym jest do tego, żeby zrobić automatyzację typu:

  • wyślij powiadomienie ze zdjęciem po wystąpieniu zdarzenia (np. ktoś dzwoni do drzwi).
  • wyślij obraz z kamery przy drzwiach, na telewizor czy inny odtwarzacz mediów jak wykryto zdarzenie(np. ktoś otworzył furtkę).

Ja mam 4 kamery, teraz włączyłem w nich “Preload stream” - opcja która cały czas utrzymuje strumień wideo do klienta (przeglądarki) i wstępnie ładuje kanał przy starcie Home Assistant. To powoduje zmniejszenie opóźnień podczas otwierania strumienia(wideo z kamery) w przeglądarce internetowej, a także podczas korzystania z usługi play_strem. Zużywa to jednak więcej zasobów na bramce.

Podsumowując normalnie nie ma limitu :slight_smile: bo zakładamy, że kamera jest tylko urządzeniem takim jak każde inne. Jeśli planujesz korzystać z funkcji “Preload stream” to zalecamy sprawdzenie użycia procesora,

Możesz łatwo sprawdzić jak kamera (czy inna rzecz) obciąża procesor na bramce.
Wejdź na konsole bramki po ssh i wpisz:

htop

4 kamery, sterowanie ogrzewaniem, oświetlenie, odtwarzanie muzyki… kilkanaście procent CPU, 540M mamy jeszcze sporo zasobów :wink:

PS
oczywiście temperatura CPU też pod kontrolą

2polubienia

Super. Dokładnie o to mi chodzi. Chcę podłączyć kilka kamer, które tylko mają wysłać zdjęcie jak coś się wydarzy. Z tego co piszesz to widzę, ze tez można nagrac krotki film? Jak byś znalazł chwile w niedalekiej przyszlosci i opisał jeszcze trochę bajerów z kamerami będziemy wszyscy wdzięczni.

Mam taką akcję ustawioną po załączeniu się alarmu w domu.

duration: 30
filename: >-
  /data/data/pl.sviete.dom/files/home/AIS/www/img/alarm_{{ now ().year }}_{{ now
  ().month }}_{{ now ().day }}_{{ now ().hour }}_{{ now ().minute }}.mp4
lookback: 4

Filmik zapisuje się w galerii. Konieczne jest odświeżenie galerii ais_files.refresh_files.

3polubienia

Czyli w momencie załączenia alarmu nagrywasz film 30 sekundowy? Pewnie można podać ścieżkę do nagrania do jakiegoś dysku sieciowego, albo wysłać go na komunikator Telegram?

Jak wyrzuciłeś temp cpu w formie wykresu? Ja nie widzę takiej encji. Czy obciążenie cpu też da się tak zrobić?

@traviz zerknij na ten wpis :slight_smile:

@Celina dziękuję, już czytam :slight_smile:

1polubienie

@Sebastian, zrobiłem sobie bardzo podobnie jak u Ciebie tj. Zdjęcie zrobione podczas ostatniego użycia dzwonka, ale w dashboardzie nie odświeża się fotka po każdym powiadomieniu, a co ciekawe w powiadomieniach jest ok (w moim przypadku aplikacja Home Assistant). Zauważyłem też, że w aplikacji HA raz się zdjęcie zmieniło, ale przez www nie. Próbowałem czyścić cookies i cache przeglądarki ale bez rezultatu. Co może być przyczyną?

A jednak to wina cache, wczoraj źle to usuwałem :frowning: jak można rozwiązać ten problem?

@Cezary.K, dziękuję za link, ale niestety to rozwiązanie powoduje wyłączenie cache w przeglądarce, a co za tym idzie na wszystkich stronach. Ponadto nie dotyka problemu w aplikacjach. Na szczęście znalazłem rozwiązanie, więc gdyby ktoś był zainteresowany to podaję poniżej:

Należy dodać kamerę w pliku configuration.yaml lub jak ktoś ma cameras.yaml

camera:
  - platform: local_file
    file_path: /data/data/pl.sviete.dom/files/home/AIS/www/img/snapshot_camera.jpg

a potem wyświetlić ją tworząc ręcznie kartę wpisując yaml:

camera_image: camera.local_file
elements: []
type: picture-elements

użycie camera_image jest tutaj kluczowe, ponieważ obraz z kamery jest odświeżany na bieżąco i nie jest przechowywany w cache. Works like a charm :ok_hand:

1polubienie