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
- Asennetaan ffmpeg
- Luodaan hakemisto videotiedostoille
- mkdir /var/cache/alarm-video
- Asennetaan Mosquitto (asiakaspää)
- apt install mosquitto-clients
- Asennetaan curl
- Asennetaan jq
- Asennetaan 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'.