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

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Synology Surveillance Station API

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

      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 Reply Quote 0
      • P
        pix last edited by

        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

        1 Reply Last reply Reply Quote 0
        • T
          Trident last edited by

          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 Reply Quote 0
          • T
            Trident last edited by

            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 Reply Quote 0
            • Dutchman
              Dutchman Developer Most Active Administrators last edited by

              @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 Reply Quote 0
              • Alex1808
                Alex1808 last edited by

                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 Reply Quote 0
                • T
                  Trident last edited by

                  Hi,

                  danke dir! Werde das sofort mal testen!

                  Viele Grüße

                  Trident

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

                    @Trident:

                    Hi,

                    danke dir! Werde das sofort mal testen!

                    Viele Grüße

                    Trident `

                    Und? Hat funktioniert?

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

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

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

                        @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 Reply Quote 0
                        • S
                          Solear last edited by

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

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

                            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
                            
                            1 Reply Last reply Reply Quote 0
                            • T
                              Trident last edited by

                              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 Reply Quote 0
                              • lobomau
                                lobomau last edited by

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

                                1 Reply Last reply Reply Quote 0
                                • K
                                  krissi last edited by

                                  Hi, ich tipp mal auf

                                  var sid = 0;

                                  @lobomau:

                                  Aber wo wird die sid der Camera eingetragen? `

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

                                    doppelpost

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

                                      @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 Reply Last reply Reply Quote 0
                                      • Alex1808
                                        Alex1808 last edited by

                                        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 Reply Last reply Reply Quote 0
                                        • T
                                          Trident last edited by

                                          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 Reply Last reply Reply Quote 0
                                          • lobomau
                                            lobomau last edited by

                                            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?
                                            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

                                            896
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            51
                                            181
                                            52863
                                            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