Synology Surveillance Station: Aufnahmen und Kamerasteuerung

Begonnen von dott.olivero, 18 Januar 2016, 15:09:15

Vorheriges Thema - Nächstes Thema

dott.olivero

Liebe Automatisierungsgemeinde,

nachdem ich hier so viele wertvolle Hinweise für mein Heimautomatisierungsprojekt erhalten und umgesetzt habe - vielen Dank dafür - möchte ich in meinem ersten Beitrag meine Anbindung einer Webcam über die Synology Surveillance Station mit WebAPIs beschreiben.

Vor gut 2 Monaten war ich auf der Suche nach passenden Beispielen und Modulen, wurde allerdings nicht fündig. Mittlerweile gibt es das Modul SSCAM. Das ist super.
Für jene, die "selbst Hand anlegen" möchten und eigene Erweiterungen umsetzen wollen, wie z.B. die Kamera schwenkt in Richtung des auslösenden Bewegungsmelders und zoomt hinein, oder einen definierten Schwenk, möge das Beispiel hilfreich sein.

Hardware: Synology DS214play (auf jener läuft auch FHEM)
Firmware: DSM 5.2-5644 Update 1
Surveillance Station: 7.1-4110

Ich habe einen Surveillance User "surveillance_user" angelegt. Er hat die Privilegien "Betrachter für alle Objekte" (ACHTUNG: der User darf nicht "fhem" heissen, da der Service FHEM dann unter diesem User startet und evtl. Rechteprobleme zu merkwürdigen Phänomenen führen können).

Für Surveillance Station >= V7.0 gilt die URL: /webapi/_______________________________________________________entry.cgi?
Für Versionen < 7.0 gelten die URLs aus der Dokumentation von Synology "Synology Surveillance Station Web API", V2.0 vom 13.3.15 für V6.x.

Definition:
# ##################################################################################################### #
#                            SYNOLOGY SURVEILLANCE STATION                                              #
# ##################################################################################################### #

# TimeOut Synology diskstation: 15 Min (=900 Sek); interval=0: SYNO.API.Auth wird bei Fehler 105 (Insufficient user privilege, z.B. nach Session-TimeOut) aufgerufen
# CameraID in Resonse unter 'id: ": http://192.168.1.101:5000/webapi/_______________________________________________________entry.cgi?version=8&api=SYNO.SurveillanceStation.Camera&basic=true&method=List
define ss_ipcam_haustuere HTTPMOD http://192.168.1.101:5000/webapi/_______________________________________________________entry.cgi? 0
attr ss_ipcam_haustuere alias IPCAM Haustüre via Surveillance Station
attr ss_ipcam_haustuere room Hausfront
attr ss_ipcam_haustuere group Kamera
attr ss_ipcam_haustuere icon it_camera
# Timeout von 2 -> 5, da bei Auslastung Synology (z.B. SynoBackup) Verzögerung möglich
attr ss_ipcam_haustuere timeout 5
attr ss_ipcam_haustuere reAuthRegex "success":false
attr ss_ipcam_haustuere sidURL http://192.168.1.101:5000/webapi/auth.cgi?api=SYNO.API.Auth&version=4&format=sid&method=Login&account=surveillance_user1234&passwd=passwort1234&session=SurveillanceStation
attr ss_ipcam_haustuere sidHeader1 Content-Type: application/json
attr ss_ipcam_haustuere enableControlSet 1
attr ss_ipcam_haustuere sid1IDRegex .*"([0-9a-zA-Z.]{26}).*
# YNO.SurveillanceStation.ExternalRecording: Aufnahmesteuerung
attr ss_ipcam_haustuere set01Name record
attr ss_ipcam_haustuere set01TextArg
attr ss_ipcam_haustuere set01URL http://192.168.1.101:5000/webapi/_______________________________________________________entry.cgi?api=SYNO.SurveillanceStation.ExternalRecording&version=2&cameraId=3&method=Record&action=$val&_sid=$sid
attr ss_ipcam_haustuere set01Map start:start, stop:stop
attr ss_ipcam_haustuere set01ReAuthRegex "code":105
# SYNO.SurveillanceStation.PTZ: Positionssteuerung
# Presets können ausgelesen werden mittels http://192.168.1.101:5000/webapi/_______________________________________________________entry.cgi?api=SYNO.SurveillanceStation.PTZ&method=ListPreset&version=1&cameraId=3
attr ss_ipcam_haustuere set02Name position
attr ss_ipcam_haustuere set02TextArg
attr ss_ipcam_haustuere set02URL http://192.168.1.101:5000/webapi/_______________________________________________________entry.cgi?api=SYNO.SurveillanceStation.PTZ&version=3&cameraId=3&method=GoPreset&presetId=$val&_sid=$sid
attr ss_ipcam_haustuere set02Map 7:Haustüre, 8:Eingangsweg, 9:Garage
attr ss_ipcam_haustuere set02ReAuthRegex "code":105
# SYNO.SurveillanceStation.PTZ: Zoom
attr ss_ipcam_haustuere set03Name zoom
attr ss_ipcam_haustuere set03TextArg
attr ss_ipcam_haustuere set03URL http://192.168.1.101:5000/webapi/_______________________________________________________entry.cgi?api=SYNO.SurveillanceStation.PTZ&version=3&cameraId=3&method=Zoom&moveType=Start&control=$val&_sid=$sid
attr ss_ipcam_haustuere set03Map in:in, out:out
attr ss_ipcam_haustuere set03ReAuthRegex "code":105
# SYNO.API.Auth: Logout (zu Testzwecken)
attr ss_ipcam_haustuere set04Name auth
attr ss_ipcam_haustuere set04TextArg
attr ss_ipcam_haustuere set04URL http://192.168.1.101:5000/webapi/auth.cgi?api=SYNO.API.Auth&method=$val&version=2&session=SurveillanceStation&_sid=$sid
attr ss_ipcam_haustuere set04Map Logout:Logout


Die Surveillance Station wird nur per Aufruf kontaktiert (da Interval=0), keine zyklische Abfrage. Sollte in der Zwischenzeit die Session ungültig geworden sein (Timeout für User unter Systemsteuerung > Sicherheit in DSM, default 15 Min.), so erfolgt mittels Modul HTTPMOD eine automatische Neuauthentifizierung (mit geänderter SessionID). Alternativ kann das Intervall angegeben werden, z.B. mit 840 (=14 Min).
(http://forum.fhem.de/index.php?action=dlattach;topic=47744.0;attach=44541)

Im Anhang für den Interessierten das Log 'Verbose 5' für für einen unauthorisierten Aufruf mit erfolgreicher Reauthentifizierung.

Aufruf:
# Makro für Videoaufzeichnung für 90 Sekunden
define m_ss_ipcam_haustuere_record notify m_ss_ipcam_haustuere_record set ss_ipcam_haustuere record start ;; delete at_ss_ipcam_haustuere_stop ;; define at_ss_ipcam_haustuere_stop at +00:01:30 set ss_ipcam_haustuere record stop
attr m_ss_ipcam_haustuere_record alias Surveillance Station Record


Weitere Features wie Zoom oder GoToPresets sind ebenso möglich. Weitere können nach dem gleichen Schema anhand der API-Doku leicht hinzugefügt werden.

Die RegEx (.*"([0-9a-zA-Z.]{26}).*) zum Auslesen der Session-ID genügt sicher nicht Profi-Ansprüchen. Wer hier eine bessere hat - immer gerne.

Btw, die Bewegungserkennung der Surveillance Station übersteuert die manuelle Aufnahme. Sollte also im Makro oben das Ende erreicht sein, ohne dass neuerlich ein Bewegungsmelder Bewegung signalisiert hätte, läuft die Aufnahme mit Bewegungserkennung der SuSt weiter. Gut so, im Fall der Fälle. Und auch bei manueller Aufnahme wird der eingestellte Vorlauf hinzugefügt.

harway2007

welche Änderungen gibt es für die Synology DS216play ?