Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Synology Surveillance Station API

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    Synology Surveillance Station API

    This topic has been deleted. Only users with topic management privileges can see it.
    • lobomau
      lobomau last edited by

      Hmm… will immer noch nicht. Habe neuen User. Nun meckert er bei der IP:

      javascript.0	2017-08-09 19:04:46.571	error	script.js.common.cam.cam_aussen compile failed: SyntaxError: Unexpected number
      

      Die Zeile mit IP wird auch innerhalb des Adapters rot markiert. "a leading decimal can be confused…"

      1 Reply Last reply Reply Quote 0
      • apollon77
        apollon77 last edited by

        Hast Du die ID etwa als Zahl geschrieben? Das muss ein String sein, also

        "192.168.111.111"

        mit Anführungszeichen drumrum

        1 Reply Last reply Reply Quote 0
        • lobomau
          lobomau last edited by

          Edit: nee, leider weiterhin unexpected token 😞
          @apollon77:

          Hast Du die ID etwa als Zahl geschrieben? Das muss ein String sein, also

          "192.168.111.111"

          mit Anführungszeichen drumrum `
          OK. Wir kommen der Sache schon näher mit "…":

          // Konfiguration
          var user = "user";  // Synology Benutzer mit Berechtigung die Kamera anzuzeigen
          var pass = "pass";  // Passwort zu eben eingegebenem Benutzer
          var ip = "192.168.178.24";  // IP-Adresse eures Synology-NAS
          var port = 5001;  // default Port der Surveillance Station
          var cameraID = 4;  // ID der Kamera
          

          Habe jetzt keinen Fehler mehr. Aber immer noch einen Hinweis. Vielleicht füllt er die value korrekt zur vollen Stunden!?

          javascript.0	2017-08-09 21:15:43.482	info	script.js.common.cam.cam_innen: Error update SurveillanceStation Stream URL: SyntaxError: Unexpected token u in JSON at position 0
          javascript.0	2017-08-09 21:15:43.383	info	script.js.common.cam.cam_innen: registered 0 subscriptions and 1 schedule
          javascript.0	2017-08-09 21:15:43.248	info	Start javascript script.js.common.cam.cam_innen
          
          1 Reply Last reply Reply Quote 0
          • lobomau
            lobomau last edited by

            Nun klappt es mit dem Script. Habe umgestellt auf port 5000 und http.

            Welches cam widget soll ich nun nehmen wo die source eingestellt wird?

            Bei denen kann ich es nicht eintragen:

            jqui-mfd Cam/Video (Object)

            jqui-mfd Cam/Video (img)

            basic image

            jqui-mfd Cam/ Snapshot dialog

            1 Reply Last reply Reply Quote 0
            • A
              andyb last edited by

              @lobomau:

              Welches cam widget soll ich nun nehmen wo die source eingestellt wird? `
              basic - string img src

              1 Reply Last reply Reply Quote 1
              • D
                deifel last edited by

                Hallo zusammen,

                ich verfolge den Thread schon ein paar Tage und bin gerade auch dran, meine Synology in IOBroker einzubauen. Ich habe 9 Kameras und möchte gerne ein View mit allen Kameras erstellen.

                Die einzelnen Standbilder sollen sich alle 10 Sekunden erneuern (egal ob Bewegung oder nicht). Bei Bewegung soll ein Live-Video zu sehen sein mit 30 Sekunden Nachlaufzeit.

                Wenn man auf eine der Kameras im View klickt, dann sollte grundsätzlich ein Live-Video laufen - am besten im Vollbild.

                Soweit die Wünsche :lol: Ist das darstellbar?

                Ich bin leider noch Anfänger und bekomme aktuell nicht mal das Bild der ersten Kamera hin 😕

                Bin wie folgt vorgegangen:

                Im Reiter Scripte unter global habe ich ein Javascript erzeugt und die Ip-Adressen, Ports und Kamera-ID ersetzt. Außerdem habe ich einfach mal einen Bewegungssensor als variable genommen (ganz unten im Script). Das Script sieht jetzt so aus:

                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 ='https://externAdress.myfritz.net:5001/webapi/auth.cgi?api=SYNO.API.Auth&method=Login&version=2&account=admin&passwd=Synopasswort&session=SurveillanceStation&format=sid';
                var url_logout = 'https://externAdress.myfritz.net:5001/webapi/auth.cgi? api=SYNO.API.Auth&method=Logout&version=2&session=SurveillanceStation';
                var url_snapshot = 'https://externAdress.myfritz.net:5001/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: "hm-rpc.0.LEQ0987565.1.MOTION"/* variable aktualiseren um snapshot zu versenden*/}, main);
                

                Dann habe ich das Script gestartet und im Vis-Editor das Widget basic-String-igm-scr genommen und dort unter Objekt das Script ausgewählt.

                War das richtig?? Ich bekomme leider kein Bild angezeigt.

                Gehe ich mit dem Browser auf https://externAdress.myfritz.net:5001/w … etSnapshot

                dann bekomme ich einen Snapshot von der Kamera - das scheint also zu funktionieren.

                Würde mich freuen, wenn mir jemand auf die Sprünge helfen könnte.

                Herzlichen Dank dafür und Grüße

                Frank

                1 Reply Last reply Reply Quote 0
                • lobomau
                  lobomau last edited by

                  @andyb:

                  @lobomau:

                  Welches cam widget soll ich nun nehmen wo die source eingestellt wird? basic - string img src Danke. Probiere ich mal aus.

                  @deifel: das Script speicherst du unter common, nicht global. Ansonsten sieht es so richtig aus wie du es gemacht hast.

                  Unter Objekte wird auch die IP Adresse dargestellt mit dem token?

                  1 Reply Last reply Reply Quote 0
                  • lobomau
                    lobomau last edited by

                    @deifel: habe jetzt erst gesehen, dass du beim Script bist um Bilder auf telegram zu senden.

                    Wir reden aber zuletzt über das Script von apollon77. Das musst du dafür nehmen.

                    1 Reply Last reply Reply Quote 0
                    • D
                      deifel last edited by

                      Hi Lobomau,

                      danke für Deine Hilfe. Habe es kapiert und bin jetzt auf das Script von Apollon gegangen und habe dieses unter Common angelegt und die jeweiligen Daten korrigiert.

                      Leider bleibt das Bild noch immer dunkel… 😞

                      Hast Du eine Idee, wo mein Fehler sein könnte?

                      Unter Objekte sehe ich den Status "true".

                      var request = require('request');
                      
                      // Konfiguration
                      var user = "Admin";  // Synology Benutzer mit Berechtigung die Kamera anzuzeigen
                      var pass = "Passwort";  // Passwort zu eben eingegebenem Benutzer
                      var ip = "externeAdresse.net";  // IP-Adresse eures Synology-NAS
                      var port = 8881;  // default Port der Surveillance Station
                      var cameraID = 1;  // ID der Kamera, welche angezeigt werden soll
                      
                      createState('javascript.' + instance + '.Anzeigen.Kamera.Eingangstuer-Stream', {'type': 'string', 'read': true, 'write': true, 'role': 'value', 'def': ""});
                      
                      // Authentifizierung an Synology Surveillance Station WebAPI und auslesen der SID
                      
                      function updateStreamUrl() {
                          request('https://' + ip + ':' + port + '/webapi/auth.cgi?api=SYNO.API.Auth&method=Login&version=3&account=' + user + '&passwd=' + pass + '&session=SurveillanceStation&format=sid', function (error, response, body) {
                              //console.log('error:', error); // Print the error if one occurred
                              //console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
                              //console.log('body:', body); // Print the HTML for the Google homepage.
                              try {
                                  var bodyObj = JSON.parse(body);
                              }
                              catch (e) {
                                  console.log("Error update SurveillanceStation Stream URL: " + e);
                                  return;
                              }
                              if (bodyObj && bodyObj.data && bodyObj.data.sid) {
                                  var sid = bodyObj.data.sid;
                                  setState('javascript.' + instance + '.Anzeigen.Kamera.Eingangstuer-Stream', 'http://' + ip + ':' + port + '/webapi/SurveillanceStation/videoStreaming.cgi?api=SYNO.SurveillanceStation.VideoStream&version=1&method=Stream&cameraId=' + cameraID + '&format=mjpeg&_sid=' + sid, true);
                              }
                              else {
                                  console.log("Invalid return on SurveillanceStation Stream URL: " + JSON.stringify(bodyObj));
                                  return;
                              }
                          });
                      }
                      
                      schedule("0 * * * *", function() {
                          updateStreamUrl();
                      });
                      
                      updateStreamUrl();
                      
                      1 Reply Last reply Reply Quote 0
                      • D
                        deifel last edited by

                        Bekomme folgenden Fehler im Log:

                        11:46:53.789 [info] javascript.0 script.js.common.Kamera_Pavillion: Error update SurveillanceStation Stream URL: SyntaxError: Unexpected token u

                        1 Reply Last reply Reply Quote 0
                        • D
                          deifel last edited by

                          Habe umgestellt auf http wie Du auch und jetzt klappt es 🙂

                          Danke!

                          1 Reply Last reply Reply Quote 0
                          • D
                            deifel last edited by

                            Da habe ich mich wohl ein bisschen zu früh gefreut. Nachdem jetzt von extern alles läuft, wollte ich auf zuhause auf die internen IPs umstellen.

                            Da bekomme ich aber (auch beim Aufuf mit dem Browser) folgenden Fehler:

                            {"error":{"code":105},"success":false}

                            Das besagt wohl, dass man eine Session-ID angeben muss. Weiß jemand, wo ich diese ID finde und wie ich die in den Aufruf mit einbaue - sowohl im Browser als auch über das Script?

                            Oder geht das bei Euch ohne Session ID aus dem internen Netz??

                            Vielen Dank im Voraus!

                            1 Reply Last reply Reply Quote 0
                            • lobomau
                              lobomau last edited by

                              @deifel:

                              Da habe ich mich wohl ein bisschen zu früh gefreut. Nachdem jetzt von extern alles läuft, wollte ich auf zuhause auf die internen IPs umstellen.

                              Da bekomme ich aber (auch beim Aufuf mit dem Browser) folgenden Fehler:

                              {"error":{"code":105},"success":false}

                              Das besagt wohl, dass man eine Session-ID angeben muss. Weiß jemand, wo ich diese ID finde und wie ich die in den Aufruf mit einbaue - sowohl im Browser als auch über das Script?

                              Oder geht das bei Euch ohne Session ID aus dem internen Netz??

                              Vielen Dank im Voraus! `
                              Interessant. Ich habe es andersrum am Laufen.

                              Ich habe die lokale IP von NAS angegeben und kann nur die Bilder sehen, wenn ich im eigenen Netz bin oder unterwegs VPN dazu nehme. So gefällt mir das ganz gut.

                              1 Reply Last reply Reply Quote 0
                              • P
                                PrinzEisenherz1 last edited by

                                Hi zusammen, mal kurz ne Frage an die Fachleute

                                Wie kann ich mit ioBroker durch einen z.b. BWM eine Aufnahme auf der Synology Surveillance Station starten (also mit Vorlauf und Nachlauf)

                                Ich verwende die SSS 7.2.

                                Brauche ich da auch immer ne neue SID?

                                Die Syno schlägt mir solch einen Link vor

                                http://<ip>:<port>/webapi/entry.cgi?api=SYNO.SurveillanceStation.ExternalEvent&method="Trigger"&version=1&eventId=1&eventName="ExtAlarm"&account="username"&password="userpassword"</port></ip>
                                

                                Wie ist da eure Erfahrung?

                                Kann ich das in nem Javascript einfach mit nem request anstoßen?

                                z.B.

                                var request = require('request');
                                
                                function record() {
                                request('http://<ip>:<port>/webapi/entry.cgi?api=SYNO.SurveillanceStation.ExternalEvent&method="Trigger"&version=1&eventId=1&eventName="ExtAlarm"&account="username"&password="userpassword");
                                }
                                
                                on({id: "hm-rpc.0.XXXXXXXXXXXX.1.MOTION"}, record);</port></ip> 
                                

                                Gruß

                                Johnny

                                1 Reply Last reply Reply Quote 0
                                • A
                                  andyb last edited by

                                  Sollte gehen. Ich würde aber noch, wie in die vorherigen Beispielen die SID mit in das Skript einbauen.

                                  Anderer Ansatz wäre noch, den Homemodus zu deaktivieren und entsprechende Aufnahmeregeln auf der SSS zu erstellen. Dafür hab ich aber den api Befehl noch nicht rausgefunden.

                                  Ebenfalls eine Alternative, per Request die Cam per Skript zu aktivieren bzw deaktivieren. Hat halt den Nachteil, wenn deaktiviert alle Regeln der SSS ausser Kraft gesetzt.

                                  1 Reply Last reply Reply Quote 0
                                  • A
                                    ACE76 last edited by

                                    @deifel:

                                    Da habe ich mich wohl ein bisschen zu früh gefreut. Nachdem jetzt von extern alles läuft, wollte ich auf zuhause auf die internen IPs umstellen.

                                    Da bekomme ich aber (auch beim Aufuf mit dem Browser) folgenden Fehler:

                                    {"error":{"code":105},"success":false}

                                    Das besagt wohl, dass man eine Session-ID angeben muss. Weiß jemand, wo ich diese ID finde und wie ich die in den Aufruf mit einbaue - sowohl im Browser als auch über das Script?

                                    Oder geht das bei Euch ohne Session ID aus dem internen Netz??

                                    Vielen Dank im Voraus! `

                                    Hallo,

                                    ich bekomme einen ähnlichen Fehler.

                                    {"error":{"code":400},"success":false}

                                    Hat jemand vielleicht schon eine Lösung hierzu gefunden?

                                    1 Reply Last reply Reply Quote 0
                                    • A
                                      andyb last edited by

                                      Ich steuere inzwischen Aufnahmen und Screenshots über den Home Modus. Da die Gefence Erkennung der App aber eine riesen Prozesserlast auf der Syno produziert schalte ich den Home Modus der SSS über meine Anwesenheitserkennung von IOBroker. Dazu einfach auf der SSS eine Aktionregel für Home on und eine für Home off erstellen. Den Rest der Aufnahmesteuerung usw hab ich alles auf der SSS eingerichtet.
                                      1586_2017-09-09_09_17_38-surveillance_station_client_-_neckarstat.jpg
                                      1586_2017-09-09_09_27_46-2017-09-09_09_19_36-surveillance_station_client_-_neckarstat.jpg
                                      1586_2017-09-09_09_20_19-surveillance_station_client_-_neckarstat.jpg
                                      1586_2017-09-09_09_20_28-surveillance_station_client_-_neckarstat.jpg

                                      1 Reply Last reply Reply Quote 0
                                      • Samson71
                                        Samson71 Global Moderator last edited by

                                        @apollon77:

                                        Es gibt dann einen Datenpunkt wo ich einmal pro Stunde ne neue URL hole und reinschreibe.

                                        In Vis zeige ich es dann mit dem Cam-Widget an und {javascript.0.Anzeigen.Kamera.Eingangstuer-Stream} als "Source"/Quelle. Das klappt recht gut. `
                                        Hallo,

                                        ich beschäftige mich auch gerade mit der Thematik, da ich Cams habe, die nur rtsp können und nicht wie die meisten Foscams nativ über eine normale URL einzubinden sind. Habe das jetzt soweit auch erfolgreich nachgebaut. Klappt einwandfrei.

                                        Kann mich jemand aufschlauen, wie ich diese URL regelmäßig neu hole? Ich habe von Scripting keine Ahnung. Muss ich dafür das Script, bzw. die Scripte in Intervallen neu anstoßen? Wenn ja wie?

                                        1 Reply Last reply Reply Quote 0
                                        • D
                                          deifel last edited by

                                          @andyb:

                                          Ich steuere inzwischen Aufnahmen und Screenshots über den Home Modus. Da die Gefence Erkennung der App aber eine riesen Prozesserlast auf der Syno produziert schalte ich den Home Modus der SSS über meine Anwesenheitserkennung von IOBroker. Dazu einfach auf der SSS eine Aktionregel für Home on und eine für Home off erstellen. Den Rest der Aufnahmesteuerung usw hab ich alles auf der SSS eingerichtet.

                                          2017-09-09 09_17_38-Surveillance Station Client - Neckarstat.jpg

                                          2017-09-09 09_27_46-2017-09-09 09_19_36-Surveillance Station Client - Neckarstat.jpg

                                          2017-09-09 09_20_19-Surveillance Station Client - Neckarstat.jpg

                                          2017-09-09 09_20_28-Surveillance Station Client - Neckarstat.jpg `

                                          Hallo,

                                          kannst Du bitte sagen wie Du das über IoBroker gelöst hast. Wie sieht Dein Script aus bzw. wie kann ich den Home-Modus aktivieren und deaktivieren in Abhängigkeit von einer Homematic Variable.

                                          Ich bekomme es hin, dass ich es über einen Browser aktiviere und deaktiviere, aber am einbauen in Iobroker oder Homematic scheitere ich leider…

                                          Sorry für die dumme Frage...

                                          1 Reply Last reply Reply Quote 0
                                          • M
                                            mitzu1981 last edited by

                                            @deifel:

                                            Hi Lobomau,

                                            danke für Deine Hilfe. Habe es kapiert und bin jetzt auf das Script von Apollon gegangen und habe dieses unter Common angelegt und die jeweiligen Daten korrigiert.

                                            Leider bleibt das Bild noch immer dunkel… 😞

                                            Hast Du eine Idee, wo mein Fehler sein könnte?

                                            Unter Objekte sehe ich den Status "true".

                                            var request = require('request');
                                            
                                            // Konfiguration
                                            var user = "Admin";  // Synology Benutzer mit Berechtigung die Kamera anzuzeigen
                                            var pass = "Passwort";  // Passwort zu eben eingegebenem Benutzer
                                            var ip = "externeAdresse.net";  // IP-Adresse eures Synology-NAS
                                            var port = 8881;  // default Port der Surveillance Station
                                            var cameraID = 1;  // ID der Kamera, welche angezeigt werden soll
                                            
                                            createState('javascript.' + instance + '.Anzeigen.Kamera.Eingangstuer-Stream', {'type': 'string', 'read': true, 'write': true, 'role': 'value', 'def': ""});
                                            
                                            // Authentifizierung an Synology Surveillance Station WebAPI und auslesen der SID
                                            
                                            function updateStreamUrl() {
                                                request('https://' + ip + ':' + port + '/webapi/auth.cgi?api=SYNO.API.Auth&method=Login&version=3&account=' + user + '&passwd=' + pass + '&session=SurveillanceStation&format=sid', function (error, response, body) {
                                                    //console.log('error:', error); // Print the error if one occurred
                                                    //console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
                                                    //console.log('body:', body); // Print the HTML for the Google homepage.
                                                    try {
                                                        var bodyObj = JSON.parse(body);
                                                    }
                                                    catch (e) {
                                                        console.log("Error update SurveillanceStation Stream URL: " + e);
                                                        return;
                                                    }
                                                    if (bodyObj && bodyObj.data && bodyObj.data.sid) {
                                                        var sid = bodyObj.data.sid;
                                                        setState('javascript.' + instance + '.Anzeigen.Kamera.Eingangstuer-Stream', 'http://' + ip + ':' + port + '/webapi/SurveillanceStation/videoStreaming.cgi?api=SYNO.SurveillanceStation.VideoStream&version=1&method=Stream&cameraId=' + cameraID + '&format=mjpeg&_sid=' + sid, true);
                                                    }
                                                    else {
                                                        console.log("Invalid return on SurveillanceStation Stream URL: " + JSON.stringify(bodyObj));
                                                        return;
                                                    }
                                                });
                                            }
                                            
                                            schedule("0 * * * *", function() {
                                                updateStreamUrl();
                                            });
                                            
                                            updateStreamUrl();
                                            ```` `  
                                            

                                            Hallo, ich hätte noch eine Frage dazu.

                                            Ich habe dieses, mein erstes Script von Apollon jetzt zum Laufen bekommen und die URL zu dem Kamera Stream wird in IO Broker unter Objekte angezeigt und funktioniert.

                                            Kann man vielleicht jetzt mithilfe von IO Broker von einer festen URL auf diese "dynamische URL" verlinken? Oder muss man dazu einen Web Server installieren und diese SS API Abfrage noch in PHP betreiben?

                                            Ich würde gern den Stream noch in anderen Anwendungen nutzen, zB in Kodi im surveillance room addon.

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

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

                                            971
                                            Online

                                            31.6k
                                            Users

                                            79.4k
                                            Topics

                                            1.3m
                                            Posts

                                            51
                                            181
                                            49906
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo