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 Jakobsson har i mer än 10 år delat med sig av erfarenhet inom smarta hem på bloggen. Han har testa det mesta och lärt sig massor på vägen, något han delat med dig här på bloggen.
Du kanske uppskattade och fick nytta av det här inlägget och vill hjälpa sidan Automatiserar.se?
Swisha gärna en slant till kaffe på 0705470065 om du vill stötta bloggen.
Då visar du oss att det du läste på Bloggen skapar värden och uppskattas.
Vi kan dessutom fortsätta driva sidan helt utan reklam.
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 hos webbhotellet och köpa sensorer till bloggen.
Om bloggen:
Markus driver sidan helt på fritiden och ideellt. Därigenom är jag helt oberoende och kan ärligt skriva om allt bra och dåligt på tekniker vi testar på bloggen.
Vi hoppas att du som läsare hittat ett inlägg som hjälper dig att automatisera mera.
TIPS:
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
Sedan början av 2023 har vi skapat mer material på Youtube kanalen: Stötta oss gärna genom att kolla in filmerna där och följa kanalen
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