Olen rakentanut valvontakameroita muutamaan eri sijaintiin ja tietenkään jokaisessa niistä en voi olla paikalla, joten olisi kiva tietää, että mikä siellä on tilanne. Valvonnan tallennusratkaisut on toteutettu niin, että pääseen niihin tarvittaessa kiinni etänä. Voin siis tarkistaa mitä siellä tapahtuu tai on tapahtunut.

Mutta mistä tiedän, että siellä on ylipäänsä kaikki kamerat linjoilla? Onhan noita järjestelmiä tarjolla jos jonkinlaisia ja mm. Zoneminderia olen joskus käyttänytkin. Foscamin kameroiden kanssa tuli vain pieniä ongelmia vastaan koska API ei tahtonut taipua millään. Ratkaisun taisin kylläkin löytää, mutta en ole vielä ehtinyt zoneminderia asentamaan. Tuli sitten tehtyä taas sellanen ”diy-ratkaisu” niillä kyvyillä mitä on käytössä. Eli raspi, cron ja kälyset shell-skriptit 🙂

Joten cronissa ajettava bash-skripti haistelee ajettaessa kaikkien kameroiden IP-osoitteita (jotka ovat DCHP:ssä määrätty kiinteiksi). Sen lisäksi skripti tarkastaa onko sinä päivänä tullut yhtään kuvaa kyseisestä kamerasta. Jos kamera ei vastaa pingiin eikä se ole tallentanut yhtään kuvaa, päätelmä on ettei kamera ole ehkä linjoilla. Silloin hyväksikäytetään pushover.netin tarjoamaa sähköpostiosoitetta, johon laitetaan sähköpostiviesti. Palvelu kääntää viestin kännykässä olevan pushover.net -appsin kautta kännykän käyttöjärjestelmän ymmärtämäksi push-viestiksi.

Nyt ei tarvitse koko aikaa olla ihmettelemässä, että toimiikohan ne kamerat. Ei se nyt aukoton systeemi ole, mutta parempi sekin kuin ettei ole mitään käryä tilanteesta. Aukkoina mm. se että jos kamera ei just sillä hetkellä vastaa, niin se voi johtua ihan kyseisen paikan sisäverkosta. On myös mahdollista ettei kameralla ole ollut mitään tallennettavaa, joten tyhjä kuvakansio antaa väärän viestin kameran tilasta.

Alla oleva skripti päräyttää tarvittaessa sähköpostiin sekä kännykkään pushviestin, jos ehdot toteutuvat. Skriptin ajossa oletetaan, että mail -sovellus on asennettu ja konffattu oikein. 

 

#!/bin/bash

## Kameroiden IP-osoitteet
kamera1="nnn.nnn.nnn.nnn"
kamera2="nnn.nnn.nnn.nnn"
kamera3="nnn.nnn.nnn.nnn"

## Arrayn alustus
failureArray=() ##<== Tuonne kerätään virheet ### Pingaukset (hiljaisina muutaman sekunnin odotuksena [W2]) ping -c1 -W2 $kamera1 2>/dev/null 1>/dev/null
kamera1Ping=$( echo $? )
ping -c1 -W2 $kamera2 2>/dev/null 1>/dev/null
kamera2Ping=$( echo $? )
ping -c1 -W2 $kamera3 2>/dev/null 1>/dev/null
kamera3Ping=$( echo $? )
## Kuvien laskurit, palauttaa per kamera kansiossa olevien kuvien määrän, -mtimellä määritetään, että ne on tänään
kamera1Kuvat=$(find /tiedostopolku/kuva/kansioon/ -iname '*.jpg' -mtime -1 |wc -l)
kamera2Kuvat=$(find /tiedostopolku/kuva/kansioon/ -iname '*.jpg' -mtime -1 |wc -l)
kamera3Kuvat=$(find /tiedostopolku/kuva/kansioon/ -iname '*.jpg' -mtime -1 |wc -l)

### Alustetaan arvo, jonka perusteella lähetetään virheet spostiin
arvo=0 ##<= jos pysyy nollana = ei yhtään virhettä. 
### Käydään läpi pingaus ja kuvien määrä kunkin kameran osalta 
### failureArrayhyn lisätään virheviesti ja arvoon lisätään yksi, jos todetaan virhe 
if [ "$kamera1Ping" = 0 -a "$kamera1Kuvat" = 0 ]; 
then 
failureArray=('Kamera1 näyttäisi olevan pois linjoilta') 
arvo=$(($arvo+1)) fi 
if [ "$kamera2Ping" = 0 -a "$kamera2Kuvat" = 0 ]; 
then 
failureArray=('Kamera2 näyttäisi olevan pois linjoilta') 
arvo=$(($arvo+1)) fi 
if [ "$kamera3Ping" = 0 -a "$kamera3Kuvat" = 0 ]; 
then 
failureArray=('Kamera3 näyttäisi olevan pois linjoilta') 
arvo=$(($arvo+1)) fi 

### Tarkistetaan tuliko virheitä, jos muuttuja arvo>0 lähetetään virheviesti
if [ "$arvo" -gt 0 ];
then
	#echo "Virheviesti lähetettiin"
	printf "%s\n" "${failureArray[@]}" | mail -s "Virheviestin otsikko" email1 email2
fi