Momentan ist es so, dass im Falle eines Alarms offenbar nur 4 Bilder pro Minute per FTP versandt werden. Das ist manchmal zu wenig, da mitunter Bewegung und Gesichter nicht vollständig sichtbar sind.
Der nachfolgende Powershell-Script prüft, ob ein neues Bild per FTP hochgeladen wurde, holt sich eine beliebige Anzahl weiterer Bilder von der Cam und stellt diese im gleichen Verzeichnis wie die Original-Alarmbilder bereit.
Das ist insbesondere dann gut, wenn es ich um einen vielfrequentierten Bereich handelt oder man mit den 4 Bildern pro Minute aus sonstigen Gründen nicht auskommt.
Der Script läuft und wurde getestet auf einem Windows 2012 Server, der parallel als FTP-Server für die Cam fungiert.
Man sollte den Script als Task beim Serverstart einplanen, so ist er durchgehend aktiv.
Auf entsprechende Ausführungsrechte achten, damit auf die benötigten Verzeichnisse zugegriffen werden kann.
# FTP-Verzeichnis auf Server
$folder = 'D:\Inetpub\ftp\webcam'
$filter = '*.jpg'
# Filesystem Watcher auf neue .jpg-Objekte
$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{
IncludeSubdirectories = $false
NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
}
$onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
$path = $Event.SourceEventArgs.FullPath
$name = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
$folder = Split-Path $path
Set-Location -Path $folder
# Anzahl der zusätzlichen Bilder
$number = 10
$User = "guest"
$Pwd = ConvertTo-SecureString –String "DasPasswortHierRein" –AsPlainText -Force
$Credential = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $User, $Pwd
While( $number-- ) {
# Als .~tmp speichern um rekursives Event durch neues .jpg zu vermeiden
# Zur Unterscheidung von originalen jpegs wird ein kleines "p" am dateinamen angehängt
$filename = $folder + "\A" + (Get-Date).ToString("yyMMddHHmmssff") + "p.~tmp"
#DDNS-Name und port anpassen
Invoke-WebRequest -Uri "http://xxxxxxx.ddns-instar.com:81/tmpfs/snap.jpg" -Credential $Credential -OutFile $filename
}
# Alle .~tmp-Dateien nach .jpg umbenennen -> löst kein Event aus
get-childItem "*.~tmp" | rename-item -newname { $_.name -replace '\.~tmp','.jpg' }
}
Manuell kann man den Script wie folgt deaktivieren:
Unregister-Event -SourceIdentifier FileCreated
cp