Har nu skrivit ett script för att trigga bland annat Vera och Telldus Znet med hjälp av webbkamerors rörelseavkänning.

Hemautomations script

Script för att göra kameror smartare!

Tidigare har jag skrivit att billiga webbkameror som exempelvis D-link DCS-930L kan ge ett stort mervärde för hemautomation. Scriptet gör indirekt kameror till rörelsesensor. Allt som behövs är att kameran konfigureras att ladda upp en bild till en mapp på något sätt, i mitt fall blev det via FTP (Filezilla). Kameror triggar i och med detta i REALTID händelser, detta går sedan att skicka vidare till Vera och Telldus.

Eftersom det även fungerar med FTP är det möjligt att placera kameran i en sommarstuga eller på samma nätverk, vid händelser skickas informationen direkt in till Vera och Telldus Znet i REALTID. Oavsett om detta sker över internet eller på samma nätverk (Fantasin sätter gränsen för vad man kan göra!)

 

Hur fungerar det

Varje gång en fil skrivs i mappstrukturen som scriptet övervakar körs en scriptsnurra igång, i mitt fall aktiverar det Vera och Telldus.  För att se hur ofta detta sker finns en global räknare som adderar varje bild som loggats under dagen, räknaren nollställs 00:00 varje dag.  För att undvika att trigga händelser för ofta har jag lagt in en delay på 5 minuter, dvs max var 5:e minut triggas Vera och Telldus Live om kameran mot förmodan detekterar rörelser för ofta.

Bilderna placeras lokalt, dvs man behöver inte oroa sig för att bilderna lagras externt om man inte vill.

Scriptet ligger längst ner på sidan och på Github.

  • Vera: En räknare uppdateras i Vera:n vid rörelse, dock med ett max intervall  på var 5:e minut.
  • Telldus Znet: Med ett max intervall på max var 5:e minut skickas ett 433Mhz kommando (via Telldus Live och Telldus Znet) till en dörrklocka (som blinkar och inte låter i mitt fall). Vilket gör att man får en visuell feedback när en kamera har detekterat rörelse.

 

Tekniskt

För att lättast se vad som händer körs scriptet igång i en Powershell ISE. Scriptet skapar en “IO.FileSystemWatcher” vilket agerar i realtid på filskrivningar och den “trådar”.  I mitt exempel har jag skapat en mappstruktur “D:\Larmmapp\FTP”, i mappen ligger två mappar Kamera1 och Kamera2 som ett exempel. Dessa skulle motsvara två olika webbkamerors destinationsmapp på FTP:N. Grunden för att övervaka filsystemet så pass fort hittade jag på följande technet sida, detta har jag sedan byggt mitt script runt om.

Uppsättning

Jag började med att konfigurera Dlink kameran att ladda upp bilder till mappen /dlink*****  (se bilden nedan). För att ladda till en mapp med namnet Kamera1 skulle det ha stått: “/Kamera1”.

Konfigurera FTP i dlink kameran.

Konfigurera FTP i Dlink kameran.

 

Följande filstruktur finns sedan skapat på FTP:n. Mapparnas namn nyttjar jag i scriptet som kamerans namn för att enkelt kunna skicka vidare informationen till andra system.

Filsystem

Exempelstruktur

 

När en fil sparas med filändelsen .JPG har jag valt att scriptet ska trigga.

FilsystemMedBild

En Dlink kamera har nu laddat upp en bild på FTP:n

POWERSHELL

När en fil sparas och scriptet är aktivt visas följande resultat i realtid:

Exempel

Exempel på hur det ser ut när några bilder skapas i olika strukturer där scriptet körs.

Jag har själv valt att nyttja detta för att se hur många bilder / dag som genereras. Detta gör det enkelt att i efterhand se vilka dagar som extra många bilder skapats. Genom att kontrollera innehållet i bilderna just dom dagarna är det enkelt att konfigurera om kameran om det visar sig att ett område i bilden rör sig extremt mycket.

Grafen nedan orsakades av att rörelseavkänningen på testkameran medvetet konfigurerades med för låg känslighet i rörelseavkänningen. Grafen kommer från DataMine i min Vera.

DataMine graf över hur mycket bilder som sparats totalt av alla kameror

Just nu är känsligheten ställd VÄLDIGT låg på kameran för att kontrollera att scriptet trådar ut och att ingen rörelse missas. Vilket än så länge ser riktigt bra ut! Grafen kommer från DataMine i Vera:n

Genom att ändra raden nedan till $true och ange id på en Nexa ringklocka i Telldus Live är det möjligt att få den att blinka varje gång en rörelse registreras. Tror detta fungerar oavsett om man har en Telldus Znet eller Telldus NET. Detta kräver dock att du tidigare har laddat hem hemautomations modulen vi skrivit.

 

Med fördröjningen undviker scriptet att aktiveras hela tiden om det rör sig framför en kamera. Varje gång den triggar på riktigt och har gått minst 5 min skrivs texten ut i rött.  Jag har valt att logga varje rörelse oavsett till min http loggserver för att få en tydlig bild av vad som händer mellan alla system.

powershell filsystemsövervakare

Exempel på hur det ser ut när scriptet har gått en stund och registrerat 1456 bilder :/

 

Jag har konfigurerat alla system hemma att skicka information till loggservern för att få en god bild över vad som händer och när.  Detta gör att jag kan se vad som kan förbättras och vad som fungerar mindre bra.

Loggservern

Loggservern vi delar med oss av på bloggen.

Nedan är hela scriptet i sin helhet, är det nått som är oklart skriv kommentar så försöker jag förklara så gått det går 🙂

Gilla och dela gärna så vi ser att det är värt att fortsätta dela med oss av saker vi själva byggt.

// Ispep

PowerShell – Trigga system med bilder från webbkameror
Ge ett betyg på innehållet