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'.


lauantai 20. huhtikuuta 2024

Reolink-820a

Reolink-820a liittyviä muistiinpanoja.

URL

  • ONVIF: http://etuovi.home:8000/onvif/device_service
  • Streams
    • 4K: rtsp://user:password@etuovi.home:554/
    • 4K: rtsp://user:password@etuovi.home/Preview_01_main
    • JPEG: https://etuovi.home/cgi-bin/api.cgi?cmd=Snap&channel=0&rs=sdaf&user=user&password=password
      • curl --insecure -X GET "https://etuovi.home/cgi-bin/api.cgi?cmd=Snap&channel=0&rs=sdaf&user=user&password=password" -o snapshot.jpg

Proxmox Zoneminder VM

Luotu VM Zoneminderille käyttäen Debianin ISOa. IP 192.168.1.69 ja DNS-nimi zoneminder.home. Vastaa osoitteessa http://zoneminder.home/zm

Asennettu Zoneminder asennusohjeiden mukaisesti: https://zoneminder.readthedocs.io/en/latest/installationguide/debian.html

Komennot:
apt update && apt upgrade

apt install mariadb-server

mariadb

CREATE DATABASE zm;

CREATE USER zmuser@localhost IDENTIFIED BY 'zmpass';

GRANT ALL ON zm.* TO zmuser@localhost;

FLUSH PRIVILEGES;

exit;

apt install zoneminder

mariadb -u zmuser -p zm < /usr/share/zoneminder/db/zm_create.sql # passwd zmpass

chgrp -c www-data /etc/zm/zm.conf
a2enconf zoneminder
a2enmod cgi
systemctl reload apache2.service
systemctl restart zoneminder.service
systemctl status zoneminder.service


Konfattu Reolink-820A Zoneminderin UI:sta. Kamera löytyy ONVIF:llä. Streamin tallennus passthrough ja jpeg-tallennus poistettuna.

ONVIF: http://etuovi.home:8000/onvif/device_service

Zoneminderilla ei näemä juuri tee mitään, jos streamia tallentaa passthrough. Esikatselu ei toimi H.265:llä, eikä oikein  muutakaan pysty tekemään. Mutta toimii videoiden tallentimena, jos ei muuten jaksa säätää.

 

 

 

 

 

 

 

 

maanantai 15. huhtikuuta 2024

Proxmox MQTT LXC

Luotu tteck:n skriptillä MQTT LXC. IP 192.168.1.230 ja lisäksi annettu DNS-nimi mqtt.home.

Luotu salasanatiedosto ja lisätty se /etc/mosquitto/passwd. Ilman salasanatiedostoa Mosquitto ei lähde käyntiin.

sunnuntai 14. huhtikuuta 2024

Proxmox NFS-palvelin

Levyjakoon virtuaalikoneiden välillä tarvitaan NFS-palvelin tai vastaava.

Käyttäen jälleen tteck:n valmista skriptiä, luotu Debian 12 VM. Koneella muistia 1 GB ja levyä 2 GB

Asetettu koneen hostname

hostnamectl set-hostname nfs

Lisätty koneelle Proxmoxin UI:sta 1500GB erillinen levy, joka jaetaan. Levy näkyy /dev/sdb:ssä.

Koneelle pääsee Proxmoxin shellistä käyttäjänä root ilman salasanaa.

Luotu koneelle fdiskillä primääripartitio 1, jolle annettu kaikki tila.

Luotu ext4-tiedostojärjestelmä.

$ mkfs.ext4 /dev/sdb1

 Lisätty /etc/fstab seuraavat rivit

# NFS levyjako

UUID=8e029af8-e8f5-45bb-a5ad-8f0de77cf4aa /mnt/nfs ext4 defaults,errors=remount-ro  0 1

 

 Ajettu seuraavat komennot

apt-get update

apt install nfs-kernel-server -y

systemctl start nfs-kernel-server

systemctl enable nfs-kernel-server

systemctl status nfs-kernel-server

chown nobody:nogroup /mnt/nfs

chmod 755 /mnt/nfs

Lisätty tiedostoon rivi /etc/exports

/mnt/nfs 192.168.1.0/24(rw,sync,no_subtree_check)

 Exportataan jaettu hakemisto

exportfs -a

 Lisätty lokaaliin DNS:ään koneen IP 192.168.1.90 nimelle nfs.home.

Testattu Ubuntu-koneella, että yhteys toimii.

sudo apt-get install nfs-common

sudo mount -o hard,rsize=1048576,wsize=1048576,timeo=600 nfs.home:/mnt/nfs /mnt/nfs

 

 

 

 

 

 

 

Proxmox ja NUC

 Muistiinpanot Proxmox-asennuksesta NUC:lle: 11. sukupolven Intel NUC11ATKPE emolevy (vuoden 2022 mallisto), Intel Pentium Silver N6005 suoritin, Intel UHD Graphics (32EU) integroitu näytönohjain, 2 kpl SO-DIMM DDR4 2933MHz muistipaikka (32GB max.), M.2 PCIe Gen3x2 / SATA3 SSD kiintolevypaikka, 1kpl HDMI 2.0b näyttöliitäntä, 1kpl DisplayPort 1.4 näyttöliitäntä, 4kpl USB 3.2 Gen1/2, 2kpl USB 2.0, 1kpl 1Gbps verkkoliitäntä, sisäänrakennettu Wireless-AC langaton verkkokortti. (lainaus Terastoren sivuilta)


Asennus perustuu näihin ohjeisiin: https://www.derekseaman.com/2023/10/home-assistant-proxmox-ve-8-0-quick-start-guide-2.html

Lisäksi käytetty näitä apuskriptejä https://tteck.github.io/Proxmox/

Proxmox-asennus

Asennus tehty Proxmox 8.1.4-versiolla. Asennuksen aikana menty oletusasetuksilla.
Tällaiset lisäsäädöt tehty asennuksen aikana:
  1. Laitettu koneen nimeksi nucci.home
  2. Laitettu nucci.home paikalliseen DNS:ään
  3. Annettu kiinteä IP-osoite 192.168.1.141
Asennuksen jälkeen ajettu tteck Proxmox VE Post Install, joka konfasi käytössä olevat repot, asensi päivitykset ja poisti high availabilityn pois käytöstä (ja jotain pienempää).

Asennettu myös uusin prosessorin mikrokoodi intel-microcode_3.20240312.1~deb12u1_amd64.deb (käyttäen tteck-skriptiä).

Home Assistant -asennus

Asennettu tteck-skriptillä Home Assistant OS VM 12.2.

Asetettu kiinteä IP ja nimi homeassistant.home.

Home Assistantin oma asennus huomasi heti Shellyn sekä Reolinkin kameran.

Lisätty Proxmoxiin "Use USB Vendor / Device ID" (passthrough), jossa Z-Stick 7. Tällä pitäisi saada Z-Wave-laitteet näkymään.

Asennettu Home Assistantiin Z-Wave JS addon. Päivitetty Z-Stick 7 versioon 7.18.8 käyttäen HA:n addonia. Eri versioissa on bugeja ja uusinta versiota ei edes kannata asentaa tällä hetkellä. Ohjeita löytyy täältä: https://aeotec.freshdesk.com/support/solutions/articles/6000263744-update-z-stick-7-with-z-wavejs-ui

Paineltu yksitellen Fibaro Dimmer 2 (FGD-212) läpi. Lisäksi käyty läpi Fibari Single Switch 2 (FGS-213) läpi.

sunnuntai 25. helmikuuta 2018

Using NGINX as web cache

Sometimes you have to work with an HTTP(S) service that's too slow for your purposes. For example, you might have to test your service against HTTP based interface, which takes ages to respond and you don't want to spend too much testing time on waiting responses to see how your latest code change behaves. If it's ok to use cached data, you can use NGINX as web cache and proxy all your requests through it. If you have already used the same request before (most likely test code generates the same request all over again), NGINX doesn't call the real HTTP interface. Instead, it's returning a cached response you got previously.

Here's a working configuration for setting up NGINX for caching site https://www.uta.fi.

events {
  worker_connections  4096;  ## Default: 1024
}
 
http {
  proxy_cache_path /tmp/nginx-proxy levels=1:2 keys_zone=my_cache:10m max_size=10g
                 inactive=1y use_temp_path=off;
  proxy_hide_header       Set-Cookie;
  proxy_ignore_headers    Set-Cookie;
  server {
      listen   80;
      location / {
          proxy_send_timeout   180s;
          proxy_read_timeout   180s;
 
          proxy_cache my_cache;
          proxy_cache_valid 200 1y;
          proxy_pass https://www.uta.fi;
      }
  }
}

This configuration stores up to 10GB of cached data for 1 year. The local cache path is set to existing directory /tmp/nginx-proxy.

To use NGINX, you don't have to install it locally. I prefer using Docker images. You can run the example above with the following command.

docker run -d --rm -p 1001:80 --name nginx-cache \
-v /tmp/proxy-blog/nginx-proxy.conf:/etc/nginx/nginx.conf:ro \
-v /tmp/proxy-blog/proxy-local-directory:/tmp/nginx-proxy nginx

After the command, point your browser at http://localhost:1001 and see the results. The command assumes that you have saved the NGINX configuration listed above as /tmp/proxy-blog/nginx-proxy.conf and that you have directory /tmp/proxy-blog/proxy-local-directory on your computer (the Docker host).