Das schöne an einem Smarthome ist ja, dass man auch mal gerne experimentieren und neue Integrationen ausprobieren kann.
Ich habe nun einige Benachrichtigungen und “Spielereien” implementiert um mit Homematic die Synology Surveillance Station zu steuern und somit Kamera-Automatisierungen zu bauen, die per Standard nicht möglich sind.
Ich beziehe mich hier auf Standard API’s die somit auch mit anderen SmartHome Systemen wie ioBroker, Home Assistant oder OpenHAB funktionieren dürften.
Synology WebAPI
Es gibt ein gutes PDF welches die Synology WebAPI sehr gut beschreibt und sich auch gut nach eigenen Anforderungen durchsuchen lässt.
Dreh und Angelpunkt dieser API ist die SID, welche man für weitere Web-Requests benötigt.
Generieren lässt sich die SID mit folgendem Befehl:
curl -L "http://<IP der Syno>:5000/webapi/auth.cgi?api=SYNO.API.Auth&method=Login&version=3&account=<Benutzer>&passwd=<Passwort>&session=SurveillanceStation&format=sid"
Output:
{"data":{"sid":"askdh12i3z%98nb12ubfsasmd!akz12!309891204h&u"},"success":true
Mit dieser SID kann man nun Befehle an die Surveilance Station senden.
Ich hatte zum Beispiel die Anforderung eine Kamera auf Basis der realen Anwesenheit zu aktivieren oder deaktivieren.
Mit Board-Mitteln kann man Kameras nur Zeitgesteuert Aktivieren bzw. Deaktivieren jedoch ist das gerade für Überwachungskameras viel zu Vage.
Mit folgendem Befehl in der CCU kann ich nun über ein Programm eine beliebige Kamera entsprechend steuern.
curl -L "http://<IP der Syno>:5000/webapi/entry.cgi?api="SYNO.SurveillanceStation.Camera"&method="Disable"&version=9&idList="4"&_sid="<SID>"" >/dev/null 2>&1
Um die Kamera nun wieder zu aktivieren, gibt man als method=”Enable“ an.
An diesem String ist noch wichtig: Die idList=”4″ – diese gibt an für welche Kamera(s) dieser Befehl gültig ist.
Tipp:
Am einfachsten findet man die ID der Kamera, in dem man in der IP-Kamera Übersicht einen Rechtsklick auf die Kamera macht und dann auf Streampfad freigeben geht.
Die Kamera-ID ist: Sms=<Kamera-ID>
Die Logik der WebAPI Befehle ist immer die selbe.
So kann man zum Beispiel auch eine PTZ Kamera durch einen Homematic Bewegungsmelder gesteuert an eine gewisse Position fahren lassen.
curl -L "http://<IP der Syno>:5000/webapi/entry.cgi?
api="SYNO.SurveillanceStation.PTZ.Preset"&version="1"&method="SetPreset"&cameraId=<Kamera-ID>&position=1&n
ame="<Name des Preset>"
Hier ist der eigenen Phantasie keine wirkliche Grenze gesetzt auch da die Logik der API sehr einfach zu verstehen ist lässt sich damit sehr viel Umsetzen.
Für die Befehle kann auch jeweils immer die selbe SID genutzt werden.
Aktuell weiß ich jedoch nicht, wie lange so eine SID ihre Gültigkeit behält, vielleicht weiß das jemand meiner fleißigen Leser?
Kamera als Bewegungsmelder
Das ganze geht natürlich auch anders herum so das die Synology dem SmartHome System bei Bewegung oder ähnlichen Ergebnissen eine Nachricht zukommen lässt.
Ich habe zum Beispiel eine Kamera zu einem Bewegungsmelder umfunktioniert um hier bei Bewegung eine Nachricht per Telegram zu senden.
Natürlich könnte man darüber auch Licht oder Musik schalten.
Um das ganze zu implementieren, habe ich in meinem Raspberrymatic eine neue Variable angelegt als Logikwert welche später in dem Programm verwendet wird.
Zusätzlich wird noch das XML-API CCU Addon auf der CCU benötigt.
In der Surveillance Station wird nun eine neue Aktionsregel angelegt.
Als Ereignis-Trigger wird die Kamera ausgewählt, welches als Ereignis auf Bewegung erkannt gestellt wird.
Die auszuführende Aktion ist ein Webhook als GET Request an die XML-API des Raspberrymatics / Homematic CCU.
http://<Homematic CCU IP>/config/xmlapi/statechange.cgi?ise_id=<Sysvar ID>&new_value=true
Tipp:
Die hier benötigte ise_id oder ID der Systemvariable erhält man über die XML API wenn man folgende Adresse aufruft und dort in der Zeile der eigenen Systemvariable sucht und weiter hinten in der Zeile findet man die ID.http://<Homematic CCU IP>/config/xmlapi/sysvarlist.cgi
Das Programm in der CCU ist nun recht einfach gehalten.
Wenn diese Variable durch die Surveillance Station auf true gesetzt wird, erhalte ich eine Nachricht per Telegram und die Variable wird nach 20 Sekunden wieder auf Ruhe gesetzt.
Fazit
Eine API zu verwenden scheint im ersten Moment als Nicht-Programmierer schwierig zu sein jedoch wenn man sich mal kurz damit Beschäftigt ist es doch recht einfach.
Die Möglichkeit eine Kamera Anwesenheitsbasiert abzuschalten ist gerade bei Kameras im Privaten Bereich sehr praktisch.
Eine Kamera als Bewegungsmelder zu verwenden ist auch Recht smart, so spart man sich ein Zusatzgerät wenn dort sowieso schon eine Kamera hängt.
UPDATE 17.05.2021
Mittlerweile habe ich herausgefunden, dass die SID keine zeitliche Begrenzung hat sondern nur bei einem Neustart der Synology NAS die Gültigkeit verliert.
UPDATE 04.10.2021
Ich hatte mir in Zwischenzeit ein kleines Quick & Dirty Script zusammengebaut um die SID für die Befehle automatisch zu aktuallisieren.
#!/bin/bash
working_dir=/root/homematic/Syno-Token/
target_dir=/root/homematic/
/root/homematic/Syno-Token/syno_token.sh | jq '.data.sid' -r > /root/homematic/Syno-Token/new_SID
new_sid=$(cat $working_dir/new_SID)
cp -r $working_dir/cam-control.save $working_dir/cam-control.save_temp
sed -i 's/Synology/'$new_sid'/g' $working_dir/cam-control.save_temp
cp -r $working_dir/cam-control.save_temp $target_dir/cam-control.sh
rm -r $working_dir/cam-control.save_temp
Die Ordnerstruktur dazu:
-rwxr-xr-x 1 root root 462 Sep 9 11:39 Update-Token.sh
-rw-r--r-- 1 root root 3346 Sep 9 11:39 cam-control.save
-rw-r--r-- 1 root root 87 Oct 4 00:59 new_SID
-rwxr-xr-x 1 root root 171 Sep 9 11:39 syno_token.sh
Im Grunde genommen wird hier eine SID angefragt und diese ausgewertet und in eine Text-Datei geschrieben.
Diese wird dann in einem vordefinierten Script ausgetauscht und in das “Arbeitsverzeichnis” gelegt.