perjantai 26. huhtikuuta 2024

ONVIF, MQTT ja S3-tallennus tapahtumien perusteella

Tässä kuvataan Debian 12 LXC:n sisään leivottu MQTT-kuuntelija, joka saa HomeAssistantin ONVIF:n kautta tulevasta kameran tapahtumasta viestin ja joka käynnistää äskettäin talletetun kamerakuvan lähetyksen S3:een. Kun videopätkä on S3:ssa, lähetetään vielä heräte puhelimeen.

Kaikki lähdekoodi löytyy Githubista: https://github.com/perttuta/home-alarm

LXC Debian 12 alustus

  • Asennetaan Supervisord
    • apt install supervisor
  • Asennetaan ffmpeg
    • apt install ffmpeg
  • Luodaan hakemisto videotiedostoille
    • mkdir /var/cache/alarm-video
  • Asennetaan Mosquitto (asiakaspää)
    • apt install mosquitto-clients
  • Asennetaan curl
    • apt install curl
  • Asennetaan jq
    • apt install jq
  • Asennetaan git
    • apt install git
  • Vaihdetaan aikavyöhyke
    • timedatectl set-timezone "Europe/Helsinki"

Supervisor-valvottu videoiden poistoskripti

Talletetaan poistoskripti (https://github.com/perttuta/home-alarm/blob/main/bin/alarm-delete-video.sh) nimelle /usr/bin/alarm-delete-video.sh nimelle.

Talletetaan poistoskriptin Supervisor-konfis (https://github.com/perttuta/home-alarm/blob/main/supervisor/alarm-delete-video.conf) nimelle /etc/supervisor/conf.d/alarm-delete-video.conf.

Päivitetään Supervisor.
supervisorctl reread
supervisorctl update 

Supervisor-valvottu videon talletus ffmepg

Talletetaan tallennuksen Supervisor-konfis (https://github.com/perttuta/home-alarm/blob/main/supervisor/alarm-record-video.conf) nimelle /etc/supervisor/conf.d/alarm-record-video.conf.

Lisätään kameran tarvitsemat tunnukset /etc/supervisor/supervisord.conf kohtaan [supervisord] environment alle tyyliin
environment=CAMERA_USERNAME_ETUOVI=foo,CAMERA_PASSWORD_ETUOVI=bar

Päivitetään Supervisor-konfis, kuten edellä.

Näyttää siltä, että Supervisorin pitää välillä käynnistää ffmpeg useampaan kuin kolmeen kertaa (10s odotuksilla), koska ainakin kerran prosessi kaatui siihen, että ffmpeg ei saanut yhteyttä kameraan.

Supervisor-valvottu MQTT-käsittely

Lisätään MQTT tarvitsemat tunnukset /etc/supervisor/supervisord.conf.

Lisätään Supervisor-konfis /etc/supervisor/conf.d/alarm-extract-video.conf.

Lisätään skripti nimelle /usr/bin/alarm-mqtt-action.sh, joka havaitsee MQTT-viestit ja luo viimeisimmistä videoista kopion.

MQTT-käsittely toimii niin, että mikäli topiciin tulee nopeasti peräkkäisiä tapahtumia, ne jätetään käsitelemättä ja seuraavaan tapahtumaan reagoidaan kasvavan viiveen jälkeen.

AWS stack

Luodaan CDK:lla AWS stack (https://github.com/perttuta/home-alarm/tree/main/cdk/alarm-video). Stackissa käyttäjä, jolla voidaan siirtää tiedostot ja luoda presigned URL:t, joilla tiedostoihin pääsee suoraan käsiksi.

Lisätään käyttäjän tiedot AWS:n credentials-tiedostoon ja asennetaan aws cli.

Supervisor-valvottu valokuvaviestin lähetys puhelimeen

Näiden ohjeiden mukaisesti luotu Telegram-botti, joka osaa lähettää notifikaation
https://hackernoon.com/how-to-create-a-simple-bash-shell-script-to-send-messages-on-telegram-lcz31bx

Ohjeista puuttuu tieto, että botilta pitää poistaa group privacy, että se näkee groupin viestit.

Lisätään Telegramin vaatimat tunnukset /etc/supervisor/supervisord.conf.

Lisätään Supervisor-konfis /etc/supervisor/conf.d/alarm-publish-photo.conf.
 
Lisätään skripti nimelle /usr/bin/alarm-publish-photo-action.sh.

Supervisor-valvottu S3 siirto ja viestien lähetys puhelimeen

Lisätään Supervisor-konfis /etc/supervisor/conf.d/alarm-publish-video.conf.
 
Lisätään skripti nimelle /usr/bin/alarm-publish-video-action.sh.

HomeAssistant ja ONVIF

HomeAssistantissa on Reolinkin addon, jolla pystyy vastaanottamaan kameran ONVIF-herätteitä. Heräte laukaisee triggerin, joka kirjoittaa MQTT-topiciin etuovi-person merkkijonon 'person'.


Ei kommentteja:

Lähetä kommentti