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

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

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.

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

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

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.

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.
# Telldus Live [bool]$script:SendTelldusNotifiering = $false [int] $script:TelldusBell = '1234567'
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.

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.

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.
<# Skriven av Ispep www.automatiserar.se Jag nyttjar scriptet för att läsa av en filstruktur dit webbkameror sparar bilder när rörelse detekteras. När en fil skrivs i mappstrukturen som anges under $folder triggas en händelse. Jag nyttjar nu detta för att få en 433MHz ringklocka att blinka när en rörelse på en webbkamera registreras max var 5:e minut. Ändrar jag läge på ringklockan så plingar det med (Vilket inte uppskattades) Om scriptet startas och du behöver göra ändringar glöm då inte att köra raden: Unregister-Event FileCreated Krav * Powershell 4.0 eller senare * Hemautomations modulen vi har på github ( https://github.com/Ispep/Hemautomation/blob/master/Powershell/Automatiserar.psm1 ) Behoven mot modulen är följande rader: Connect-TelldusLive -Credential (Get-TDCredential) # Detta behövs bara om du har Telldus live! Set-TDDevice -DeviceID 123456 -Action bell # Detta behövs bara om du har Telldus live! Funktionen som läser filsystemet bygger på (Register-ObjectEvent) som kommer från : https://gallery.technet.microsoft.com/scriptcenter/Powershell-FileSystemWatche-dfd7084b #> $VerbosePreference = "silentlycontinue" # Grundläggande funktion [string]$folder = 'D:\LARMMAPP\FTP' # Mappen som ska övervakas. [string]$filter = '*.jpg' # Filtypen som ska övervakas. [int]$script:Triggtid = 1 # Anger hur många minuter det ska vara mellan varje "triggnign (Send-MJ-Notifiering)" # VERA [bool]$script:SendVeraNotifiering = $false [string]$veraIP = 'VeraIP' # Ange namn eller IP till vera om du har en. [int]$veraDevideID = '220' # Ange enhets id i Vera som scriptet ska rapportera antal till ( se luvans Guide på hur du lägger till enheten - https://www.automatiserar.se/hamta-data-fran-webbsidor/) # Telldus Live [bool]$script:SendTelldusNotifiering = $false [int] $script:TelldusBell = '1234567' # Loggservern [bool]$Script:SendHTTPNotifiering = $false # Anger om du vill nyttja loggning till http servern som anges ovan, sätts till false annars [string]$script:IpTillLoggserver = "10.20.30.40:90" # Anger ip till loggserver dit alla händeler sedan skickas: (kör det själv till: https://www.automatiserar.se/loggning-med-http/ ) # Ändra ej dessa så vida du inte vet vad du gör! [int]$script:FileCreated = 0 # Används för att se hur många bilder som skapats sedan start. $script:StartDate = (Get-Date).ToShortDateString() # Hämtar datum för att nolla räknaren varje dag. $script:lasttripped = get-date # Används för att inte utföra nått för ofta. $fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{IncludeSubdirectories = $true;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'} # Funktion för att kunna få in en delay mellan händer och bestämma hur ofta det får ske. function Send-MJ-Notifiering{ param( $info ) Write-Verbose "Tid som diffas: $(Get-Date) -ge $($lasttripped.AddMinutes($Triggtid))" if ((Get-Date) -ge ($lasttripped.AddMinutes($Triggtid))) { $script:lasttripped = Get-Date Write-host "En händelse registrerades! - från: $info" -ForegroundColor Red return $true } else { Write-Verbose "Har redan triggat de senaste $triggtid minuterna" return $false } } Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action { $name = $Event.SourceEventArgs.Name $changeType = $Event.SourceEventArgs.ChangeType $timeStamp = $Event.TimeGenerated Write-Host "Filen '$name' skapades klockan $timeStamp - nr $FileCreated" -fore green $tmp = $name.Split("\") $FileCreated++ if (!(((Get-Date).ToShortDateString()) -le $StartDate)) { $StartDate = (Get-Date).ToShortDateString() $FileCreated = 0 Write-Verbose "Satte ny tid $StartDate och nollade räknaren" } else { Write-Verbose "Samma dag - $StartDate" } if ($SendHTTPNotifiering){ Invoke-WebRequest "http://$($IpTillLoggserver)/?Kamera/$($tmp[0])/$($tmp[1])/AllToday/$($FileCreated)" } # skickar in en fråga för att se om en notifiering skickats inom tidsramen som sattes. Dvs, var det mer än 5 minuter sedan det senast skickades så skickar den igen. if (Send-MJ-Notifiering -info $tmp[0]) { if ($SendHTTPNotifiering) { Invoke-WebRequest "http://$($IpTillLoggserver)/?Telldus/bell/$($tmp[0])/$($FileCreated)" } if ($SendVeraNotifiering){ Invoke-WebRequest "http://$($veraIP):3480/data_request?id=variableset&DeviceNum=$($veraDevideID)&serviceId=urn:micasaverde-com:serviceId:LightSensor1&Variable=CurrentLevel&Value=$($FileCreated)" } if ($SendTelldusNotifiering){ Connect-TelldusLive -Credential (Get-TDCredential) # Detta fungerar bra om du har Telldus live och hemautomations modulen: https://github.com/Ispep/Hemautomation/blob/master/Powershell/Automatiserar.psm1 Set-TDDevice -DeviceID $TelldusBell -Action bell # Detta fungerar bra om du har Telldus live och hemautomations modulen: https://github.com/Ispep/Hemautomation/blob/master/Powershell/Automatiserar.psm1 } } } Clear-Host write-host "Scriptet startade: $lasttripped" #Unregister-Event FileCreated # detta avregistrerar lyssnaren
// Ispep

Skribent: Markus är teknikintresserad och gillar att dela med sig av smarta lösningar. Med mer än +10 års erfarenhet inom smarta hem så har han hunnit lära sig det mesta! Men fullärd blir man aldrig 😉
På bloggen Automatiserar.se tipsar vi hur du själv kommer igång och automatiserar ditt hem.
Vill gärna tipsa om ett inlägg där du hittar grupperad information om smarta hem: Automatiserar.se/smarta-hem/
Skulle du mot förmodan inte hittat det du sökte kommer du troligen hitta det här: Automatiserar.se/sok-om-hemautomation/
Vill du diskutera smarta hem så har vi en kanal på Facebook med +7000 medlemmar: Smartare hem & Hemautomation | Facebook
Du kanske uppskattade och fick nytta av det här inlägget och vill hjälpa sidan Automatiserar.se?
Swisha en slant på 0705470065 för att stötta bloggen, du kan även stötta bloggen genom att köpa någon av våra smarta hållare. Alla bidrag vi får går till att täcka driftkostnaderna för bloggen, samt att köpa den teknik vi kan skriver om på bloggen. Vi kör sidan helt på fritiden, därigenom helt oberoende och gör detta för att det är roligt. Vi hoppas att du som läsare hittat ett inlägg som hjälper dig att automatisera mera.
Gillade du bloggen så dela den gärna med vänner, och var det något du inte tyckte var allt för bra så hör av dig så vi får veta! Stort tack för att du tog dig tid att läsa vårt inlägg.
Med vänliga hälsningar Markus Jakobsson
Allt går att automatisera!
Pingback: Allt om Vera och VeraSecure |
Hej,
Jag är inne och kollar på Automatisera.PSM1 men hittar ingen GetTDCredential. Ska jag bara börja med att lägga in det scriptet och sen lägga in scriptet från denna sida?
Behöver jag inte logga in på min telldus live och hämta något annat?
Pingback: Flows & Apps i Homey 2.0 | Lösningar för smarta hem