Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Synology Surveillance Station API

NEWS

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

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

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.2k

Synology Surveillance Station API

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
181 Beiträge 51 Kommentatoren 61.8k Aufrufe 35 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • P Offline
    P Offline
    pix
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    0
    • T Offline
      T Offline
      Trident
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      0
      • T Offline
        T Offline
        Trident
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        0
        • DutchmanD Offline
          DutchmanD Offline
          Dutchman
          Developer Most Active Administrators
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          0
          • Alex1808A Offline
            Alex1808A Offline
            Alex1808
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            0
            • T Offline
              T Offline
              Trident
              schrieb am zuletzt editiert von
              #11

              Hi,

              danke dir! Werde das sofort mal testen!

              Viele Grüße

              Trident

              1 Antwort Letzte Antwort
              0
              • Alex1808A Offline
                Alex1808A Offline
                Alex1808
                schrieb am zuletzt editiert von
                #12

                @Trident:

                Hi,

                danke dir! Werde das sofort mal testen!

                Viele Grüße

                Trident `

                Und? Hat funktioniert?

                1 Antwort Letzte Antwort
                0
                • lobomauL Offline
                  lobomauL Offline
                  lobomau
                  schrieb am zuletzt editiert von
                  #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.4, nodejs 22.21.0
                  • Slave: Pi4
                  1 Antwort Letzte Antwort
                  0
                  • Alex1808A Offline
                    Alex1808A Offline
                    Alex1808
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    0
                    • S Offline
                      S Offline
                      Solear
                      schrieb am zuletzt editiert von
                      #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 Antwort Letzte Antwort
                      0
                      • lobomauL Offline
                        lobomauL Offline
                        lobomau
                        schrieb am zuletzt editiert von
                        #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.4, nodejs 22.21.0
                        • Slave: Pi4
                        1 Antwort Letzte Antwort
                        0
                        • T Offline
                          T Offline
                          Trident
                          schrieb am zuletzt editiert von
                          #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 Antwort Letzte Antwort
                          0
                          • lobomauL Offline
                            lobomauL Offline
                            lobomau
                            schrieb am zuletzt editiert von
                            #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.4, nodejs 22.21.0
                            • Slave: Pi4
                            1 Antwort Letzte Antwort
                            0
                            • K Offline
                              K Offline
                              krissi
                              schrieb am zuletzt editiert von
                              #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 Antwort Letzte Antwort
                              0
                              • Alex1808A Offline
                                Alex1808A Offline
                                Alex1808
                                schrieb am zuletzt editiert von
                                #20

                                doppelpost

                                1 Antwort Letzte Antwort
                                0
                                • Alex1808A Offline
                                  Alex1808A Offline
                                  Alex1808
                                  schrieb am zuletzt editiert von
                                  #21

                                  @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 `

                                  Bei mir funktioniert nicht. Im log steht das Snapshot gesendet wird, aber im Telegramm kommt nichts an. Auch erstellte Snapshot im /tmp ist fehlerhaft und lässt sich nicht öffnen.

                                  1 Antwort Letzte Antwort
                                  0
                                  • Alex1808A Offline
                                    Alex1808A Offline
                                    Alex1808
                                    schrieb am zuletzt editiert von
                                    #22

                                    Sory, problem gefunden..

                                    CamID wird wohl nicht am Anfang vom Skript definiert, sonder in dritte url >>
                                    > var url_snapshot = 'http://xxxxx:zzzz/webapi/entry.cgi?camStm=1&version=8&cameraId=1&api=SYNO.SurveillanceStation.Camera&preview=true&method=GetSnapshot';

                                    Also funktioniert, Danke! :)

                                    1 Antwort Letzte Antwort
                                    0
                                    • T Offline
                                      T Offline
                                      Trident
                                      schrieb am zuletzt editiert von
                                      #23

                                      Hi,

                                      sorry hab die Posts erst jetzt gesehen.

                                      Ich hätte vielleicht mehr erklären sollen! Sorry dafür!

                                      Aber Ihr habt euch ja schon alles "erraten". :)

                                      Freut mich das es funktioniert!

                                      Viele Grüße

                                      Trident

                                      1 Antwort Letzte Antwort
                                      0
                                      • lobomauL Offline
                                        lobomauL Offline
                                        lobomau
                                        schrieb am zuletzt editiert von
                                        #24

                                        Ich habe es noch nicht am Laufen.

                                        Habe testweise die drei URLS einzeln in Browser eingetippt. Kommt dann folgendes:

                                        1. URL:````
                                        {"data":{"sid":"Suw.s8Tmr6epY15A0MPN835504"},"success":true}

                                        2\. URL:````
                                        {"error":{"code":101},"success":false}
                                        

                                        3. URL:````
                                        {"error":{"code":101},"success":false}

                                        
                                        Ich dachte die sid waere eine feste zahl der IP CAM. Aber jedes Mal wenn die erste URL aktualisiere kommt eine neue sid!? Soll das so sein?

                                        Host: NUC8i3 mit Proxmox:

                                        • ioBroker CT Debian 13, npm 10.9.4, nodejs 22.21.0
                                        • Slave: Pi4
                                        1 Antwort Letzte Antwort
                                        0
                                        • lobomauL Offline
                                          lobomauL Offline
                                          lobomau
                                          schrieb am zuletzt editiert von
                                          #25

                                          @Trident:

                                          on({id: "xxxx"/* variable aktualiseren um snapshot zu versenden*/}, main); `
                                          muss man diese xxxx auch anpassen?

                                          Host: NUC8i3 mit Proxmox:

                                          • ioBroker CT Debian 13, npm 10.9.4, nodejs 22.21.0
                                          • Slave: Pi4
                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

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

                                          889

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe