Snapshot op je mobiel als de bel gaat (pimatic deel 4)

Door K-Jay op donderdag 1 december 2016 15:24 - Reacties (16)
CategorieŽn: Geknutsel, Home automation, Raspberry pi, Views: 7.193

Belofte maakt schuld
In mijn laatste blogpost over domotica kondigde ik aan om wat te schrijven over het meesturen van een snapshot als er wordt aangebeld. Inmiddels zijn we bijna een jaar verder. Tijd om de belofte in te lossen.

Camera
Om een plaatje te maken heb je een camera nodig. En een beetje tweaker laat die uit China komen. Ik hoorde goede verhalen over de TOP-201 camera, dus die werd het. Het kostte een middag prutsen om hem aan de praat te krijgen, maar uiteindelijk had ik beeld via de meegeleverde web-interface. Tijd voor de volgende stap: zorgen dat het ding een snapshot maakt.

Snapshot maken en versturen
Kort samengevat moet het volgende gebeuren als er wordt aangebeld:
  • De camera maakt een foto en slaat die lokaal op
  • De gemaakte foto wordt ge-upload naar een plaats waar mijn telefoon ook toegang heeft
  • Er wordt een notificatie naar mijn telefoon gestuurd met daarin de locatie van de foto
Mijn camera levert een rtsp-stream aan. Daar kun je een snapshot van maken met het commando "avconv". Om daarvan gebruik te kunnen maken moet je eerst het commando

sudo apt-get install libav-tools 

uitvoeren op je raspberry pi.

Nu moet je een .sh-bestandje maken waarin we alle stappen gaan uitvoeren. Met de volgende regel maak je de snapshot en sla je het op in de map "snapshot/images":

code:
1
/usr/bin/avconv -rtsp_transport tcp -i 'rtsp://'ip-van-je-camera'/user=user-van-je-camera&password=paswword-van-je-camera&channel=1&stream=1.sdp' -f image2 -vframes 1 -aspect 16:9 /home/pi/snapshot/images/filename-van-je-plaatje.jpeg



En met dit commando upload je de afbeelding naar een plekje in de cloud:

code:
1
curl -T /home/pi/snapshot/images/filename-van-je-plaatje.jpeg ftp://$USERNAME:$PASSWORD@$SERVER/$DIR


Je zou hier ook Dropbox of iets anders voor kunnen gebruken, zie de reactie van i-chat onder deze blogpost.

Nu heb je alle informatie die in het pushbericht moet. Versturen doe ik met Pushalot:

code:
1
curl -F "AuthorizationToken=XXX" -F "Body=Er staat iemand voor de deur..." -F "Title=De bel gaat!" -F "LinkTitle=Afbeelding" -F  "Link=http://url-van-je-plaatje/"$today.jpeg -F "Image=http://url-van-je-plaatje/"$today.jpeg -F "Source=Voordeur" https://pushalot.com/api/sendmessage



Zorg dat je .sh-bestand in ieder geval bovenstaande commando's bevat. Desgewenst kun je het uitbreiden door alle variabelen netjes te definieren, de datumtijd in de bestandsnaam te verwerken, eerst te controleren of de camera wel online is, enzovoort. Ik heb het bestand opgeslagen als debelgaat.sh op mijn raspberry pi.

De laatste stap
Nu nog even aan pimatic vertellen dat debelgaat.sh uitgevoerd moet worden als er op de bel gedrukt wordt. Ik heb een device "deurbelsnapshot" gedefinieerd:

code:
1
2
3
4
5
6
7
8
9
10
{
      "id": "deurbelsnapshot",
      "name": "Snapshot deurbel",
      "class": "ShellSwitch",
      "onCommand": "sudo /home/pi/snapshot/snapshot.sh >/dev/null 2>&1 || true",
      "offCommand": "echo off",
      "getStateCommand": "echo false",
      "interval": 0,
      "forceExecution": true
    },


Deze maakt gebruik van de shell-execute-plugin.

Als er wordt aangebeld, treedt de volgende regel in werking:

code:
1
if deurbel is opened then switch on deurbelsnapshot after 1 second


en binnen een paar tellen wordt de foto gemaakt, opgeslagen, ge-upload, wordt de pushmessage verzonden en ontvangen op mijn telefoon.

Pushberichten

Niet alleen als de bel gaat...
Ik laat mijn camera niet alleen een foto maken als de bel gaat, maar ook als de voordeur open gaat of als er beweging gedetecteerd wordt. In deze gevallen gaat er echter geen pushbericht naar mijn telefoon. Om alle foto's wel inzichtelijk te hebben, heb ik een iframe in pimatic draaien waar een php-script achter zit dat de meest recente foto's toont. Met de knoppen kun je navigeren en door te swipen krijg je de vorige/volgende foto.

pakketje uit China?

Volgende: Heteluchtverwarming loggen (pimatic deel 5) 12-'16 Heteluchtverwarming loggen (pimatic deel 5)
Volgende: DIY head tracking, deel 2: IR-camera en software 01-'16 DIY head tracking, deel 2: IR-camera en software

Reacties


Door Tweakers user rb338, donderdag 1 december 2016 19:35

Ik heb zelf een ipcam hangen die een bericht stuurt bij beweging. Persoonlijk vraag ik me af wat de toegevoegde waarde is van de deurbel trigger en de deur open trigger. Immers, voordat iemand de deurbel bereikt heeft ziet de camera al beweging. En het openen van de deur is (in mijn geval) ook een beweging want ik heb de deur in beeld.

Mijn vraag is dus: waarom die deurbel trigger? Ik ben oprecht benieuwd want zie veel soortgelijke oplossingen, maar heb gewoon serieus nooit de toegevoegde waarde boven de simpele (in de cam ingebouwde) bewegingsdetectie gezien.

Overigens uiteraard top dat je je bevindingen en kennis deelt! :)

[Reactie gewijzigd op donderdag 1 december 2016 19:43]


Door Tweakers user Soggney, donderdag 1 december 2016 23:06

@rb338 dat is toch om het pushbericht te triggeren
beweging als er iemand of iets is (kat ofzo), maar bij bel krijg je push
handig als je achterin de tuin bent of niet ver van huis bent. (op weg of terug van de winkel).
Dan kan je toch beslissen om die te openen

Door Tweakers user pumpidumpi, vrijdag 2 december 2016 00:32

Nu nog koppelen aan AWS Rekognition en je kunt meesturen wie er voor de deur staat...

Door Tweakers user rb338, vrijdag 2 december 2016 07:25

Soggney schreef op donderdag 01 december 2016 @ 23:06:
@rb338 dat is toch om het pushbericht te triggeren
beweging als er iemand of iets is (kat ofzo), maar bij bel krijg je push
handig als je achterin de tuin bent of niet ver van huis bent. (op weg of terug van de winkel).
Dan kan je toch beslissen om die te openen
Beweging kan het pushbericht ook triggeren, dat is nu juist mijn punt :) Ik krijg vaak al bericht voordat de bel gaat, omdat de persoon nog op de oprit loopt.

Door Tweakers user walteij, vrijdag 2 december 2016 07:56

rb338 schreef op vrijdag 02 december 2016 @ 07:25:
Beweging kan het pushbericht ook triggeren, dat is nu juist mijn punt :) Ik krijg vaak al bericht voordat de bel gaat, omdat de persoon nog op de oprit loopt.
Dat is inderdaad handig als je een oprit hebt, maar als je tuintje voor de deur pakweg een 1 meter diep is (zie foto postbode), en het een drukbezochte straat is, krijg je dan erg veel pushberichten, die helemaal niet nodig zijn.

Door Tweakers user TIGER79, vrijdag 2 december 2016 10:48

Mijn vraag is dus: waarom die deurbel trigger?
Dit is om false positives tegen te gaan.. Immers je wilt niet onnodig gestoord worden door berichten dat er iemand voor de deur staat als dat dus niet zo is... In jou scenario (beweging) wordt er ook een bericht verstuurd als iemand voor de deur staat maar niet aanbelt, denk de postbode of de foldertjes-man.... Deze zijn er ff en lopen dan gewoon door, die moeten jou helemaal niet hebben...
Tevens, afhankelijk van de gevoeligheid, kunnen er ook onnodige meldingen gemaakt worden wanneer een kat/hond langswandelt, of als er bij wind veel bladeren door je beeld vliegen, of sterker nog als er een vlieg/bij/insect dichtbij je camera vliegt of er op gaat zitten....
Een trigger bij een intentionele fysieke actie blijft het minst foutgevoelig, daarom werken de meeste alarmeringssystemen daar ook nog mee....

[Reactie gewijzigd op vrijdag 2 december 2016 10:49]


Door Tweakers user MtC, vrijdag 2 december 2016 10:56

TIGER79 schreef op vrijdag 02 december 2016 @ 10:48:
[...]

Dit is om false positives tegen te gaan.. Immers je wilt niet onnodig gestoord worden door berichten dat er iemand voor de deur staat als dat dus niet zo is... In jou scenario (beweging) wordt er ook een bericht verstuurd als iemand voor de deur staat maar niet aanbelt, denk de postbode of de foldertjes-man.... Deze zijn er ff en lopen dan gewoon door, die moeten jou helemaal niet hebben...
Tevens, afhankelijk van de gevoeligheid, kunnen er ook onnodige meldingen gemaakt worden wanneer een kat/hond langswandelt, of als er bij wind veel bladeren door je beeld vliegen, of sterker nog als er een vlieg/bij/insect dichtbij je camera vliegt of er op gaat zitten....
Een trigger bij een intentionele fysieke actie blijft het minst foutgevoelig, daarom werken de meeste alarmeringssystemen daar ook nog mee....
Je kan op de meeste camera's toch het gebied waarbinnen de beweging plaatsvindt om een trigger te sturen beperken? Stel een klein gebied in, en je hebt geen false positives meer. Als er iemand aan de voordeur staat, wil je dat sowieso weten, ook als hij niet aanbelt, toch?

Door Tweakers user RobbertDs1, vrijdag 2 december 2016 12:04

Werkt dit met iedere camera?
Want ik heb geen internet kabel bij de deur liggen, wel wifi.

Door Tweakers user TIGER79, vrijdag 2 december 2016 14:31

Je kan op de meeste camera's toch het gebied waarbinnen de beweging plaatsvindt om een trigger te sturen beperken?
Dan nog kunnen objecten of dieren (en bij sommige camera's zelfs licht-vernaderingen) roet in het water gooien....

Door Tweakers user K-Jay, vrijdag 2 december 2016 15:21

@RobbertDs1 ja, dit zou met elke ip-camera moeten werken, draadloos of bedraad. Als er maar een rtsp-stream is.
@MtC mijn camera is heel simpel en detecteert geen beweging. Daarvoor heb ik een klikaanklikuit bewegingsmelder bij de voordeur. En die ziet inderdaad elke kat/postbode/buurvrouw. Daar wil ik geen pushberichten van hebben!
@rb338 Waarom? Omdat het kan. Omdat het leuk is. En ik heb geen oprit.

Door Tweakers user sdk1985, vrijdag 2 december 2016 17:12

Tof project :). Hoe zit dat met het niet mogen filmen op straat?

Door Tweakers user K-Jay, vrijdag 2 december 2016 17:23

Als je maar een bordje ophangt waarop staat dat je een camera hebt hangen.
Overigens worden de videobeelden van mijn camera niet opgeslagen, afgezien van de snapshots.

Door Tweakers user i-chat, vrijdag 2 december 2016 21:30

hmm, curl en ftp gebruiken om een plaatje te uploaden, kun je daar niet beter een ander programma, voor gebruiken. nu hangt het er natuurlijk van af wat je voor webhosting gebruikt... maar misschien is het handig om voor die stap nog alternatieven te geven voor iets als dropbox, of owncloud of stack zoals:
code:
1
curl -T '/path/to/local/file.jpg' 'https://naam.stackstorage.com/remote.php/'



of gebruik makend van iets als https://github.com/andreafabrizi/Dropbox-Uploader

[Reactie gewijzigd op vrijdag 2 december 2016 21:34]


Door Tweakers user Soldaatje, zaterdag 3 december 2016 08:55

Dit is wel supervet dit!

Door Tweakers user Red devil, zondag 4 december 2016 11:46

Leuk project! Hoe lang duurt het voordat iemand aanbelt en jij een bericht krijgt? Je kunt ook nog Telegram overwegen voor je berichtjes. Die gebruik ik voor mijn camera setup, die knalt 4 foto's naar mijn telegram zodra iemand over een virtuele grens gaat.

Door Tweakers user K-Jay, maandag 5 december 2016 13:46

@i-chat: dank voor je aanvulling! Ik heb een regel toegevoegd in de tekst met daarin jouw suggestie.
@Red devil: het duurt meestal een paar seconden en dan heb ik het pushbericht binnen. Overigens is dat voor onze vaste pakketbezorger al lang genoeg om maar naar de buren te lopen :D . Het gebruiken van Telegram heb ik nog op mijn todo-list staan, samen met 100 andere dingen...

Reageren is niet meer mogelijk