Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Synology Surveillance Station API

NEWS

  • Wartung am 15.11. – Forum ab 22:00 Uhr nicht erreichbar
    BluefoxB
    Bluefox
    11
    2
    212

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    7.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.7k

Synology Surveillance Station API

Synology Surveillance Station API

Scheduled Pinned Locked Moved ioBroker Allgemein
181 Posts 51 Posters 61.4k Views 35 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T Offline
    T Offline
    Trident
    wrote on last edited by
    #1

    Hallo zusammen,

    gibt es schon fertige Skripte oder Adapter zur Nutzung der Web API der Surveillance Station?

    Hier kann man per GET request Snapshots erstellen oder Aufnahmen starten.

    Eine Integration in ioBroker wäre wahnsinnig praktisch. Leider verstehe ich zu wenig von JS und http 🙂

    Hier der Link zur Doku der API

    https://global.download.synology.com/do … I_v2.0.pdf

    Mein konkrete Anwendungsfall wäre die automatische Erstellung von Snapshot auf Grund der Auslösung eines Bewegungsmelder bei Abwesenheit und der anschließende Versand dieser Snapshots per Telegram

    Ist laut API über die Methoden "take_snapshot" und "get_snapshot" wohl prinzipiell ohne weiteres möglich.

    Würde mich über Tipps und Vorschläge freuen - vielleicht hatte ja schon jemand ein ähnliches Problem?

    Viele Grüße

    Trident

    hollywootH 1 Reply Last reply
    0
    • DutchmanD Offline
      DutchmanD Offline
      Dutchman
      Developer Most Active Administrators
      wrote on last edited by
      #2

      Wen ich mir die docu so anschaue habe die eine starke API.

      Wäre cool wen jemand Zeit/Lust hätte einen Adapter zu bauen, mir fehlt leider das know/how +Zeit.

      Dan koönnte man Steuerungen auch leicht in vis integrieren 😄

      1 Reply Last reply
      0
      • P Offline
        P Offline
        pustekuchen
        wrote on last edited by
        #3
        • 1
        1 Reply Last reply
        0
        • ruhr70R Offline
          ruhr70R Offline
          ruhr70
          wrote on last edited by
          #4

          @Trident:

          Mein konkrete Anwendungsfall wäre die automatische Erstellung von Snapshot auf Grund der Auslösung eines Bewegungsmelder bei Abwesenheit und der anschließende Versand dieser Snapshots per Telegram `

          Die Surveillance Station erkennt Bewegungen auf Grund der Bildinhalte schon sehr zuverlässig, Man kann z.B. auch Bereiche eingrenzen, in denen Bewegung erkannt werden soll.

          Wenn eine Bewegung erkannt wird, kann man sich von der Surveillance Station eine Email mit dem Bild zusenden lassen.

          Das entspricht in etwa Deinem Anwendungsfall.

          Natürlich hat eine tiefere Integration in ioBroker seinen Reiz.

          Adapter: Fritzbox, Unify Circuit
          Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

          1 Reply Last reply
          0
          • T Offline
            T Offline
            Trident
            wrote on last edited by
            #5

            Hi Ruhr70,

            natürlich hast du insofern recht, als das die grundsätzliche Funktion alleine mit der Surveillance Station zu realisieren wäre.

            Ich würde die Kamera aber gerne in Abhängigkeit der Anwesenheitsvariablen (mittels Geofence) aus ioBroker "scharf" schalten. Sowie die Snapshoterstellung in meine "Alarmanlagen"-Funktionalität integrieren - welche eben auch über ioBroker läuft.

            Wie du auch schon festgestellt hast wäre eine Integration in ioBroker sehr praktisch.

            Ich kann mangels Kenntnis in JS (kann mir gerade mal ein paar Skripte zusammen schustern) auch den Aufwand zur Erstellung eines solchen Adapters nicht abschätzen…

            Viele Grüße

            Trident

            1 Reply Last reply
            0
            • P Offline
              P Offline
              pix
              wrote on last edited by
              #6

              Hallo,

              Ich habe leider keine solche Station. Daher kann ich nur Tipps zum selbstbau geben.

              Skripte, die per telegram Bilder versenden, findet man hier im Forum.

              Außerdem gibt es den phantomjs Adapter, der Fotos von Webseiten macht. So kann man leicht einen Snapshot eines streams in ioBroker verwenden.

              Und eine Scharfschaltung der Kamera braucht man nicht unbedingt. Es reicht vor dem Angreifen des Snapshots den Status von Alarmanlage abzufragen.

              Gruß

              Pix

              ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

              1 Reply Last reply
              0
              • T Offline
                T Offline
                Trident
                wrote on last edited by
                #7

                Hi Pix,

                mit dem Umweg über den PhantomJS Adapter verlegt man dann aber alle sonstigen Vorteile der Surveillance Station. Diese verwaltet und archiviert ja auch alle Aufnahmen und Standbilder der einzelnen Kameras. Ich möchte diese Funktion eigentlich nur ungern verlieren. Bzw. asynchron zu ioBroker laufen haben.

                Ich werde mich mal mit JS und der API beschäftigen… wenn ich was zu Stande kriege poste ich es natürlich 🙂

                Viele Grüße

                Trident

                1 Reply Last reply
                0
                • T Offline
                  T Offline
                  Trident
                  wrote on last edited by
                  #8

                  Hi zusammen,

                  ich habe ein fertiges Node.js Paket auf npm gefunden, welcher fast alle Funktionen der Surveillance Station umsetzt:

                  https://www.npmjs.com/package/node-syno … rveillance

                  Kann hieraus schnell ein ioBroker Adapter entstehen? Kenne mich da leider nicht wirklich aus...

                  Viele Grüße

                  Trident

                  1 Reply Last reply
                  0
                  • DutchmanD Offline
                    DutchmanD Offline
                    Dutchman
                    Developer Most Active Administrators
                    wrote on last edited by
                    #9

                    @Trident:

                    Hi zusammen,

                    ich habe ein fertiges Node.js Paket auf npm gefunden, welcher fast alle Funktionen der Surveillance Station umsetzt:

                    https://www.npmjs.com/package/node-syno … rveillance

                    Kann hieraus schnell ein ioBroker Adapter entstehen? Kenne mich da leider nicht wirklich aus...

                    Viele Grüße

                    Trident `

                    Gute recherche das ist schonmal ein anfang womit man nicht alles selber bauen muss sondern auf die node bausteine zurueck greifen kan.

                    Jetzt nur jemand der dies weiter umsetzten koennte (ware uch cool fuer RFXCom "zwinkern" ;)) um diese basis elementen in iObroker logic zu integrieren.

                    Also ich faende einen derartigen adapter genial, werde mir demnaest auch synology zulegen und war schon auf der suche.

                    Vorteil von diesem system sind die moeglichkeiten welche es bereits hat (much more interesting than screenshot of an IP-Cam ;)), wen man es dan auch noch 1:1 in domotic loesung pakken kan (camera steuern/aufname an&aus usw… genial !

                    PS: habe das pakket mal installiert um zu schaun op da bei node-red neue bausteine kommen, leider nein.

                    Beim node pakket von RFXCom habe ich diese bloecke dazu bekommen, also leider auch diese "einfache" variante leider sackgase 😞

                    979_rfxcom_blocks.jpg

                    1 Reply Last reply
                    0
                    • Alex1808A Offline
                      Alex1808A Offline
                      Alex1808
                      wrote on last edited by
                      #10

                      Ein Snapshot vom Survillance Station kann mann in zwei Schritten bekommen:

                      1. zuerst id vom benötigte Kamera rausfinden (ip, login, und password anpassen, als *.php auf dem lokalen webserever ablegen und im browser öffnen)

                      2. Snapshot erstellen und anzeigen (ip, login password und Kamera ID anpassen, als *.php auf dem lokalen webserever ablegen und im browser öffnen

                      Url lässt sich prima als Bild im VIS integrieren.

                      1 Reply Last reply
                      0
                      • T Offline
                        T Offline
                        Trident
                        wrote on last edited by
                        #11

                        Hi,

                        danke dir! Werde das sofort mal testen!

                        Viele Grüße

                        Trident

                        1 Reply Last reply
                        0
                        • Alex1808A Offline
                          Alex1808A Offline
                          Alex1808
                          wrote on last edited by
                          #12

                          @Trident:

                          Hi,

                          danke dir! Werde das sofort mal testen!

                          Viele Grüße

                          Trident `

                          Und? Hat funktioniert?

                          1 Reply Last reply
                          0
                          • lobomauL Offline
                            lobomauL Offline
                            lobomau
                            wrote on last edited by
                            #13

                            @Alex1808:

                            @Trident:

                            Hi,

                            danke dir! Werde das sofort mal testen!

                            Viele Grüße

                            Trident `

                            Und? Hat funktioniert? `
                            Bei mir noch nicht ganz. Wie erstelle ich die .php Datei am Windows Rechner? Einfach Textdokument und php Endung ist es ja nicht.

                            Host: NUC8i3 mit Proxmox:

                            • ioBroker CT Debian 13, npm 10.9.3, nodejs 22.20.0
                            • Slave: Pi4
                            1 Reply Last reply
                            0
                            • Alex1808A Offline
                              Alex1808A Offline
                              Alex1808
                              wrote on last edited by
                              #14

                              @lobomau:

                              @Alex1808:

                              @Trident:

                              Hi,

                              danke dir! Werde das sofort mal testen!

                              Viele Grüße

                              Trident `

                              Und? Hat funktioniert? Bei mir noch nicht ganz. Wie erstelle ich die .php Datei am Windows Rechner? Einfach Textdokument und php Endung ist es ja nicht.

                              Ja, z.b. mit Notepad++ ( https://notepad-plus-plus.org ), Endung logische weise muss selbst vergeben.

                              1 Reply Last reply
                              0
                              • S Offline
                                S Offline
                                Solear
                                wrote on last edited by
                                #15

                                @lobomau:

                                Bei mir noch nicht ganz. Wie erstelle ich die .php Datei am Windows Rechner? Einfach Textdokument und php Endung ist es ja nicht. `

                                In den Ordneransichtseinstellungen im Explorer unbedingt Häkchen bei "Bekannte Dateiendungen ausblenden" rausnehmen.

                                Sonst siehst du die Dateiendung nicht und eine umbenannte Textdatei zu php wird in Wirklichkeit zu "text.php.txt" und kann dann natürlich nicht als php Datei funktionieren.

                                Und/oder wie Alex1808 sagte bestimmte Programme wie Notepad++ benutzen, um mit "speichern unter" eine andere Dateiart festzulegen.

                                iobroker als LXC unter Proxmox

                                1 Reply Last reply
                                0
                                • lobomauL Offline
                                  lobomauL Offline
                                  lobomau
                                  wrote on last edited by
                                  #16

                                  Ich habe es mit geany erstellt… müsste genauso gehen wie mit notepad++.

                                  Das Format ist wohl nicht das Problem. Aber das Legen auf den Server und dann Öffnen mit Browser führe ich vermutlich falsch aus.

                                  Was ich mal ausprobiert habe und was einen Wert ausgibt ist in den Browser der Eintrag mit den entsprechenden individuellen Einträgen:

                                  http://'.$ip.':'.$port.'/webapi/auth.cgi?api=SYNO.API.Auth&method=Login&version=3&account='.$user.'&passwd='.$pass.'&session=SurveillanceStation&format=sid
                                  

                                  Host: NUC8i3 mit Proxmox:

                                  • ioBroker CT Debian 13, npm 10.9.3, nodejs 22.20.0
                                  • Slave: Pi4
                                  1 Reply Last reply
                                  0
                                  • T Offline
                                    T Offline
                                    Trident
                                    wrote on last edited by
                                    #17

                                    Hi zusammen,

                                    danke für die Vorschläge. ich hatte auch meine Schwierigkeiten die Umsetzung mit PHP zu realisieren. daraufhin habe ich es nochmal mit Javascript probiert und es tatsächlich zum laufen bekommen.

                                    Es ist noch nicht komplett allgemein gültig geschrieben. So sind Username und Passwort noch teil der URL, ebenso die KameraID. Dies könnte man schnell beheben und als Variablen oben anlegen. Die IP muss auch in den URLs der API ergänzt werden. ABER: Es klappt!

                                    Bei Aktualisierung der angegebenen Variablen wird das Skript ausgeführt und ein Screenshot versandt.

                                    var request = require("request");
                                    var fs = require('fs');
                                    var myJson = {};
                                    var sid = 0;
                                    
                                    function parseJson(text) {
                                        if (text === "") return {};
                                        try {
                                            json = JSON.parse(text);
                                        } catch (ex) {
                                            json = {};
                                        }
                                        if(!json) json = {};
                                        return json;
                                    }
                                    
                                    function readJson(url, callback) {
                                        request(url, function (err, state, body){
                                            if (body) {
                                                var json = parseJson(body);
                                                callback(null, json);
                                            } else {
                                                var error = "(" + err + ") ERROR bei Abfrage von: " + url;
                                                log(error, "warn"); 
                                                callback(error, null);
                                            }
                                        });
                                    }
                                    
                                    var url_login ='http://xxxxx:zzzz/webapi/auth.cgi?api=SYNO.API.Auth&method=Login&version=2&account=XXXXX&passwd=YYYYYY&session=SurveillanceStation&format=sid';
                                    var url_logout = 'http://xxxxxx:zzzz/webapi/auth.cgi? api=SYNO.API.Auth&method=Logout&version=2&session=SurveillanceStation';
                                    var url_snapshot = 'http://xxxxx:zzzz/webapi/entry.cgi?camStm=1&version=8&cameraId=1&api=SYNO.SurveillanceStation.Camera&preview=true&method=GetSnapshot';
                                    
                                    function main() {
                                        readJson(url_login, function(err,json) {
                                            if(!err) {
                                                myJson = json;
                                                sid = myJson.data.sid;
                                    	        url_snapshot += '&_sid='+sid;
                                    	        url_logout += '&_sid='+sid;
                                    	        request.get({url: url_snapshot, encoding: 'binary'}, function (err, response, body) {
                                                fs.writeFile("/tmp/snap.jpg", body, 'binary', function(err) {
                                                    if (err) {
                                                        console.error(err);
                                                    } else {
                                                        console.log('Snapshot sent');
                                                        sendTo('telegram.0', '/tmp/snap.jpg');
                                                        request.get({url: url_logout, encoding: 'binary'})
                                                        }
                                                    }); 
                                                });
                                            } else {
                                                log("Fehler beim Auslesen des JSON. Keine Daten erhalten.","warn");
                                                myJson = {};
                                            }
                                        });
                                    }
                                    
                                    on({id: "xxxx"/* variable aktualiseren um snapshot zu versenden*/}, main);
                                    
                                    

                                    Ich hoffe das Skript hilft euch!

                                    Beste Grüße

                                    Trident

                                    1 Reply Last reply
                                    0
                                    • lobomauL Offline
                                      lobomauL Offline
                                      lobomau
                                      wrote on last edited by
                                      #18

                                      @Trident:

                                      Hi zusammen,

                                      danke für die Vorschläge. ich hatte auch meine Schwierigkeiten die Umsetzung mit PHP zu realisieren. daraufhin habe ich es nochmal mit Javascript probiert und es tatsächlich zum laufen bekommen.

                                      Es ist noch nicht komplett allgemein gültig geschrieben. So sind Username und Passwort noch teil der URL, ebenso die KameraID. Dies könnte man schnell beheben und als Variablen oben anlegen. Die IP muss auch in den URLs der API ergänzt werden. ABER: Es klappt!

                                      Bei Aktualisierung der angegebenen Variablen wird das Skript ausgeführt und ein Screenshot versandt.

                                      var request = require("request");
                                      var fs = require('fs');
                                      var myJson = {};
                                      var sid = 0;
                                      
                                      function parseJson(text) {
                                          if (text === "") return {};
                                          try {
                                              json = JSON.parse(text);
                                          } catch (ex) {
                                              json = {};
                                          }
                                          if(!json) json = {};
                                          return json;
                                      }
                                      
                                      function readJson(url, callback) {
                                          request(url, function (err, state, body){
                                              if (body) {
                                                  var json = parseJson(body);
                                                  callback(null, json);
                                              } else {
                                                  var error = "(" + err + ") ERROR bei Abfrage von: " + url;
                                                  log(error, "warn"); 
                                                  callback(error, null);
                                              }
                                          });
                                      }
                                      
                                      var url_login ='http://xxxxx:zzzz/webapi/auth.cgi?api=SYNO.API.Auth&method=Login&version=2&account=XXXXX&passwd=YYYYYY&session=SurveillanceStation&format=sid';
                                      var url_logout = 'http://xxxxxx:zzzz/webapi/auth.cgi? api=SYNO.API.Auth&method=Logout&version=2&session=SurveillanceStation';
                                      var url_snapshot = 'http://xxxxx:zzzz/webapi/entry.cgi?camStm=1&version=8&cameraId=1&api=SYNO.SurveillanceStation.Camera&preview=true&method=GetSnapshot';
                                      
                                      function main() {
                                          readJson(url_login, function(err,json) {
                                              if(!err) {
                                                  myJson = json;
                                                  sid = myJson.data.sid;
                                      	        url_snapshot += '&_sid='+sid;
                                      	        url_logout += '&_sid='+sid;
                                      	        request.get({url: url_snapshot, encoding: 'binary'}, function (err, response, body) {
                                                  fs.writeFile("/tmp/snap.jpg", body, 'binary', function(err) {
                                                      if (err) {
                                                          console.error(err);
                                                      } else {
                                                          console.log('Snapshot sent');
                                                          sendTo('telegram.0', '/tmp/snap.jpg');
                                                          request.get({url: url_logout, encoding: 'binary'})
                                                          }
                                                      }); 
                                                  });
                                              } else {
                                                  log("Fehler beim Auslesen des JSON. Keine Daten erhalten.","warn");
                                                  myJson = {};
                                              }
                                          });
                                      }
                                      
                                      on({id: "xxxx"/* variable aktualiseren um snapshot zu versenden*/}, main);
                                      
                                      

                                      Ich hoffe das Skript hilft euch!

                                      Beste Grüße

                                      Trident `
                                      Wo muss ich genau was ersetzen?

                                      http://xxxxx:zzzz/webapi/auth.cgi?
                                      ````= IP der Synology mit 192.168.xxx.xxx:5000 (das ganze auf drei Zeilen)
                                      
                                      Dann bei````
                                      t=XXXXX&passwd=YYYYYY&session=Surveillance
                                      

                                      Login und Passwort fuer Synology eintragen.

                                      Aber wo wird die sid der Camera eingetragen?

                                      Host: NUC8i3 mit Proxmox:

                                      • ioBroker CT Debian 13, npm 10.9.3, nodejs 22.20.0
                                      • Slave: Pi4
                                      1 Reply Last reply
                                      0
                                      • K Offline
                                        K Offline
                                        krissi
                                        wrote on last edited by
                                        #19

                                        Hi, ich tipp mal auf

                                        var sid = 0;

                                        @lobomau:

                                        Aber wo wird die sid der Camera eingetragen? `

                                        ioBroker in VM (unraid) / CCU2 für IP FB-Heizungssteuerung raspi3 / 3x Echo Dot / IKEA Tradfri / zigBee mit Conbee II

                                        1 Reply Last reply
                                        0
                                        • Alex1808A Offline
                                          Alex1808A Offline
                                          Alex1808
                                          wrote on last edited by
                                          #20

                                          doppelpost

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate
                                          FAQ Cloud / IOT
                                          HowTo: Node.js-Update
                                          HowTo: Backup/Restore
                                          Downloads
                                          BLOG

                                          68

                                          Online

                                          32.4k

                                          Users

                                          81.3k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe