16.1.2017 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 Jaa tämä:Jaa Twitterissä(Avautuu uudessa ikkunassa)Jaa Facebookissa(Avautuu uudessa ikkunassa)Jaa Google+ palvelussa(Avautuu uudessa ikkunassa) Aiheeseen liittyy