Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Frage]Skript zur Steuerung ONVIF Kameras

    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

    [Frage]Skript zur Steuerung ONVIF Kameras

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

      Hallo daniello,

      gib mir bitte 1-2 Tage Zeit.

      Ich muss das Skript noch einmal erzeugen, da ich mir das image abgeschossen habe.

      Daneben muss ich dann auch noch zusammenfassen wie man die onvif adpater unter nodejs installiert, das war die größte Hürde.

      Skript kommt asap

      Andreas

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

        Hallo RandyAndy,

        ich freue mich, dass das Skript auch anderen hilft.

        Ich habe deine Posts eben erst gesehen, da ich den Thread nicht mehr abonniert habe.

        1. Die korrekte Pfadangabe für das lokale Speichern von Dateien auf dem Raspberry kann ich dir nicht sagen. Es gibt aber hier im Forum einige Beispiele für Skripte, die genau das machen. Suche einfach mal nach "fs.writeFile".

        2. BITTE BITTE BITTE keine Skripte in /global abspeichern. Die Skripte im Ordner global werden jedem anderen Skript angehängt. Somit läuft das Skript dann praktisch mehrfach. Skripte gehören in common oder in eigene, selbst erstellte Ordner.

        Es ist schon spät, ich kann gerade nicht ausführlich antworten.

        Vielleicht klappt es morgen.

        Gruß

        Pix

        1 Reply Last reply Reply Quote 0
        • R
          RandyAndy last edited by

          Hallo Pix,

          danke für die Info. Wie ich schon geschrieben habe, ist es mir möglich einen Snapshot über fs.write zu erzeugen, wobei ich das File aber auf einem USB-Stick schreibe, da ich ungerne auf der SD-Karte (auf der das ganze Betriebssystem liegt) alle 10 Sekunden ein Bild schreiben möchte.

          ICh denke aber das man das im Skriopt erzeugte onvif object nach dem schreiben wieder auf NULL setzen sollte (das muss ich noch testen), sonst könnte es sein, dass ich ein Object nach dem anderen generiere und das führte dann zu meinem Crash.

          Bitte einfach mal das Skript wenn ich es gepostet habe durchsehen (sind nur wenige Zeilen) und dann Feedback geben.

          Was ich auch nicht hinbekommen habe, ist das Bild vom USB-Stick wieder zu lesen. Vis erlaubt offensichtlich nur Dateien vom vis.0 Ordner anzuzeigen.

          Ich hatte dann noch die Idee das über den Web-Server zu machen sozusagen eine http-Seite mit einm integrietrten link zum Bild, das hat aber leider auch nicht funktioniert. Am besten wäre es ohnehin das Bild im DRAM abzulegen und dann im VIS anzuzeigen (das wäre die beste Lösung), da habe ich aber gar keine Idee mehr wie das gehen soll.

          ANdreas

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

            Schön das dieser Thread gerade so zeitnah bearbeitet wird.

            Ich versuche nämlich auch meine Kameras ins VIS einzubinden. Da ich im Skript Bereich von iobroker keine Fehler angezeigt bekomme, gehe ich mal davon aus das ich die node_onvif Installation erfolgreich hinter mich gebracht habe.

            Ich habe mit dem hier empfohlenen Programm ONVIF Device Manager, alle Informationen aus meinen Kameras heraus bekommen die ich wohl brauchen werde. Somit habe ich im Skript die IP, den ONVIF Port und den Token Parameter entsprechen geändert. Benutzername und Password ist eh klar.

            Leider bekomme ich in der Objekt Anzeige aber nur "false" Werte für die verschiedenen Funktionen. Auch in dem Widget was hier gepostet wurde, bleibt ein mögliches Bild (Stream?) bislang aus.

            Wäre cool wenn mir jemand ein bisschen auf die Sprünge helfen könnte. Ich bin noch relativ neu bei iobroker dabei und hatte in der letzen Woche mehr mit ausprobieren und "kämpfen" der iobroker Installation auf verschiedenen Hardware Systemen zu tun.

            9724_2018-11-28_09_54_54-objects_-_iobroker.png

            1 Reply Last reply Reply Quote 0
            • R
              RandyAndy last edited by

              Hi,

              so jetzt habe ich mal alles zusammengeschrieben wie ich vorgegangen bin.

              Vorweg den ganzen PTZ Kram habe ich über Board geworfen, da meine Kameras fest verbaut sind und Bewegungen, Zoom usw. nicht besitzen.

              Da ich meine Kameras über VPN eingebunden habe ist für mich der Daten-Traffic noch ein wichtiges Kriterium, daher möchte ich nur alle 10 - 15 Sekunden ein Bild übertragen. Einen Stream habe ich erst mal kein Interesse (aber natürlich wenn es einer hinbekommt wäre das hilfreich).

              So nun zum Vorgehen:

              • Zunächst muß man über die Konsole in den Ordner "opt/iobroker/node_modules/iobroker.javascript" wechseln

              • dort installiert man über "npm install -s node-onvif" den benötigten Adapter (Ich habe versucht node-onvif im im Verzeichnis node_modules von iobroker zu installieren, das hat aber eine Fehlermeldung erzeugt. Kann man sicher anpassen aber was soll es.

              • Danach habe ich folgendes Skript erstellt:

              const onvif = require('node-onvif');
              const fs = require('fs');
              
              // Create an OnvifDevice object
              let device = new onvif.OnvifDevice({
                xaddr: 'http://192.168.xx.xx:port/onvif/device_service',
                user : 'user (der onvif user)',
                pass : 'password (onvif password)'
              });
              
              // Initialize the OnvifDevice object
              device.init().then(() => {
                // Get the data of the snapshot
                console.log('fetching the data of the snapshot...');
                return device.fetchSnapshot();
              }).then((res) => {
                // Save the data to a file
                fs.writeFileSync('/home/pi/snapshot.jpg', res.body, {encoding: 'binary'});
                console.log('Done!');
                device = null;
                // habe ich noch eingefügt, da ich mir nicht sicher bin ob das device auch wirklich wieder frei gegeben wird insb. wenn ich es in einem CRON - Job laufen lasse
              }).catch((error) => {
                console.error(error);
              });
              
              

              Ich verwende eine Hikvision Kamera und damit das funktioniert muss man natürlich den onvif Zugang aktivieren und einen user definieren.

              Ich habe auch versucht das Snapshot auf einem USB-Laufwerk zu schreiben (geht auch und das Bild wird erzeugt) aber dann kann ich es in Vis nicht integieren, offensichtlich erlaubt VIS nur den Zugriff auf Bilder im Verzeichnis opt/iobroker/iobroker-data/files/vis.0/…

              Da wäre ein Hinweis von Euch hilfreich wie man über Vis auf eine Datei auf einem USB-Laufwerk zugreifen kann

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

                Irgendwie kriege ich das Ganze nicht eingebunden.

                Bei mir erscheinen unter VIS - Kamera nur die Punkte "PTZ"

                Meine Kamera kann kein PTZ.

                Den Pfad zu stream kann ich nirgendwo finden.

                Oder anders herum:

                Muss ich zwingend die Ganze Geschichte so aufbauen oder besteht die Möglichkeit das Livebild direkt in VIS darzustellen?

                Über den VLC komme ich ja problemlos auf den Stream:

                rtsp://192.168.8.90:554/user=xxxx_password=xxxx_channel=1_stream=0.sdp?real_stream
                

                Aber wie binde ich den jetzt in VIS ein

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

                  Hallo,

                  bitte den ganzen Thread lesen. Hier geht’s nicht um die Einbindung in Vis, sondern um die Ansteuerung mit JavaScript per onvif, im speziellen um die Schwenks. Wenn eine Kamera keine PTZ Funktion hat, ist das Skript nicht optimal. Lösungen zum Abrufen eines Snapshots finden sich im Forum einige (inkl. z.B. PhantomJS).

                  Pix

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

                    Hi ist die Kommunikation mittels onvif nur in Richtung Kamera moeglich? Oder kann man auch eine bewegungserkennung der Kamera einlesen um als trigger zu benutzen? Hat jemand mal den onvif Adapter ausprobiert (iobroker. Onvif) forked von kirovilya?

                    Gesendet von meinem CLT-L09 mit Tapatalk

                    1 Reply Last reply Reply Quote -1
                    • DerMicha
                      DerMicha last edited by DerMicha

                      Hi Leute,
                      ich probiere seit kurzem auch mit IOBroker, SmartHome und IP-Kamera herum. Mit meiner Kamera komme ich aber irgendwie nicht weiter..
                      Ich habe das Skript von RandyAndy genommen und Bilder von meiner Cam in ../Vis.0 gespeichert und dann in der Vis mit Image eingefügt. das ganze dann im 10 Sekunden takt dank Cron.
                      Danach habe ich den Speicherpfad um einen Unterordner erweitert und schon geht nix mehr. Ich habe den Speicherpfad wieder auf den Ursprung geändert und trotzdem die gleiche Fehlermeldung:
                      "21:21:52.665 error javascript.0 script.js.Kamera.KameraTest: Error: 500 Web Error"
                      Hat jemand eine Idee was das Problem sein könnte?
                      Hat ja vorher funktioniert.
                      Leider behersche ich Javascript nicht wirklich.

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

                        https://github.com/Haba1234/ioBroker.onvif/blob/master/README.md

                        1 Reply Last reply Reply Quote 0
                        • DerMicha
                          DerMicha last edited by wendy2702

                          Was ich schon komisch finde ist, dass laut der Beschreibung nach dem Scannen und Einbinden der Kamera ein Snapshot in der Instanz angezeigt werden sollte. Macht der aber nicht.
                          Trotzdem hat das Holen und Speichern des Bildes ja am Anfang funktioniert und jetzt wird immer "Error: 500 Web Error" angezeigt.
                          Hier das verwendete Skript:

                          function kameraSnapshot() {
                          
                          const onvif = require('node-onvif');
                          //const fs = require('fs');
                          
                          // Create an OnvifDevice object
                          let device = new onvif.OnvifDevice({
                            xaddr: 'http://192.168.2.88:2000/onvif/device_service',
                            user : 'nutzer',
                            pass : 'passwort'
                          });
                          
                          // Initialize the OnvifDevice object
                          device.init().then(() => {
                            // Get the data of the snapshot
                            console.log('fetching the data of the snapshot...');
                            return device.fetchSnapshot();
                          }).then((res) => {
                            // Save the data to a file
                            fs.writeFileSync('/opt/iobroker/iobroker-data/files/vis.0/snapshot.jpg', res.body, {encoding: 'binary'});
                            console.log('Done!');
                            device = null;
                            // habe ich noch eingefügt, da ich mir nicht sicher bin ob das device auch wirklich wieder frei gegeben wird insb. wenn ich es in einem CRON - Job laufen lasse
                          }).catch((error) => {
                            console.error(error);
                          })
                          } //Ende kameraSnapshot
                          schedule('*/60 * * * * *', kameraSnapshot); // alle X Minuten
                          setTimeout(kameraSnapshot, 2000);;
                          

                          OnvifInstanz.PNG
                          OnvifObjekt.PNG

                          1 Reply Last reply Reply Quote 0
                          • smartboart
                            smartboart @pix last edited by smartboart

                            @pix Hi pix kannst du das script nochmal hochladen? Durch die Umstellung im Forum scheint es etwas durcheinander geraten zu sein.

                            1 Reply Last reply Reply Quote 0
                            • P
                              pix @schittl last edited by

                              @schittl Habe das Skript ganz oben im Thread nochmal bereinigt. Nach der Protierung zum neuen Forum haben sich tatsächlich einige falsche Zeichen eingeschlichen

                              smartboart metaxa 2 Replies Last reply Reply Quote 1
                              • smartboart
                                smartboart @pix last edited by

                                @pix Vielen Dank!

                                1 Reply Last reply Reply Quote 0
                                • metaxa
                                  metaxa @pix last edited by metaxa

                                  @pix
                                  Hi pix, ich habe s tatsächlich jetzt mit deinem Script hinbekommen eine onvif cam (Escam) zu steuern. Dennoch habe ich paar Fragen bzw. Probleme:

                                  1. Ich haber jetzt auf einer Testumgebung - ich weiß nicht wie oft und wo überall "node-onvif" installiert. Muss man "npm install -s node-onvif" überhaupt noch installieren wenn man den Adapter "ioBroker.onvif 0.0.2" installiert hat?

                                  2. In meinem Fall setze ich in deinen Datenpunkten einen preset, enter, und dann heißt es warten, teilweise dauertg es bis zu 20 Sekunden bis die Cam zur gewünschten Position los fährt?

                                  3. Mein JS-Adapter meckert die Zeile "const onvif = require('node-onvif')" mit [Cannot find module 'node-onvif'.] an? Wie gesagt ich habs x-mal installiert.

                                  LG und danke für dein Script, wenn auch schwerfällig aber immerhin kann ich die Cam jetzt schon mal bewegen 🙂
                                  mxa

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

                                    Hallo,

                                    schön, dass das Skript bei dir funktioniert.

                                    1. Ich habe den Adapter ioBroker.onvif nicht installiert. Kann dazu nichts sagen. Skripte im Adapter ioBroker.javascript erwarten die Definition Nodes in den Javascript-Adapter-Einstellungen (der entsprechenden Adapter-Instanz).
                                    2. Habe jetzt gerade nicht in den Code gesehen, aber du kannst zB im Bereich der Subscription on() für die Presets mal eine Log-Zeile einfügen (müsste aber schon da sein). Wenn du ein Preset änderst, reagiert das Skript sofort. Nur die Kamera eben nicht.
                                    3. siehe 1

                                    Gruß
                                    Pix

                                    metaxa 1 Reply Last reply Reply Quote 0
                                    • metaxa
                                      metaxa @pix last edited by metaxa

                                      @pix sagte in [Frage]Skript zur Steuerung ONVIF Kameras:

                                      Skripte im Adapter ioBroker.javascript erwarten die Definition Nodes in den Javascript-Adapter-Einstellungen (der entsprechenden Adapter-Instanz).

                                      Lieben Dank für deine Reaktion!
                                      Kannst du mir das bitte für Dummis mit anderen Worten erklären?
                                      In welches Verzeichnis muss ich auf der Commanzeile den Befehl "npm install -s node-onvif" eingeben?

                                      c87d966d-3157-4211-ad14-236da39d3c01-grafik.png

                                      LG & Dank im Voraus
                                      mxa

                                      metaxa 1 Reply Last reply Reply Quote 0
                                      • metaxa
                                        metaxa @metaxa last edited by

                                        @metaxa sagte in [Frage]Skript zur Steuerung ONVIF Kameras:

                                        In welches Verzeichnis

                                        erl.: iobroker.javascript, die Cam moved.

                                        Nur sehr, sehr verspätet mit einer Verzögerung von gefühlten 10 Sekunden. Hat jemand eine Idee warum das so sein könnte, wo ich ansetzen kann zu suchen?

                                        LG, mxa

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

                                          Hallo,

                                          du solltest den node über die EInstellungen vom Javascript Adapter installieren:
                                          Bildschirmfoto 2019-05-11 um 17.13.22.jpg

                                          Gruß
                                          Pix

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

                                            Hallo Pix,
                                            jetzt habe ich endlich verstanden, wofür man diese "zusätzlichen NPM-Module" im JS-Adapter benötigt, danke!

                                            Den alten, mit sudo händisch installierten, Ordner habe ich unbenannt, sodaß das Script nicht mehr funktionierte. Ich wollte es sauber installieren lt. deinen Angaben.
                                            Leider nein:

                                            javascript.0	2019-05-12 10:24:40.700	error	Cannot install node-onvif: 254
                                            javascript.0	2019-05-12 10:24:40.686	error	npm ERR! /home/iobroker/.npm/_logs/2019-05-12T08_24_40_586Z-debug.log
                                            javascript.0	2019-05-12 10:24:40.686	error	npm ERR! A complete log of this run can be found in:
                                            javascript.0	2019-05-12 10:24:40.685	error	
                                            javascript.0	2019-05-12 10:24:40.580	error	npm ERR! enoent
                                            javascript.0	2019-05-12 10:24:40.580	error	npm ERR! enoent This is related to npm not being able to find a file.
                                            javascript.0	2019-05-12 10:24:40.580	error	ERR! enoent ENOENT: no such file or directory, access '/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-onvif'
                                            javascript.0	2019-05-12 10:24:40.579	error	npm
                                            javascript.0	2019-05-12 10:24:40.576	error	npm ERR! syscall access
                                            javascript.0	2019-05-12 10:24:40.576	error	errno -2
                                            javascript.0	2019-05-12 10:24:40.576	error	npm ERR!
                                            javascript.0	2019-05-12 10:24:40.576	error	npm ERR! code ENOENT
                                            javascript.0	2019-05-12 10:24:40.576	error	ERR! path /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-onvif
                                            javascript.0	2019-05-12 10:24:40.574	error	npm
                                            javascript.0	2019-05-12 10:24:39.419	error	WARN checkPermissions Missing write access to /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-onvif
                                            javascript.0	2019-05-12 10:24:39.418	error	npm
                                            javascript.0	2019-05-12 10:24:22.753	info	npm install node-onvif --production --prefix "/opt/iobroker/node_modules/iobroker.javascript" (System call)
                                            

                                            Hier noch der Auszug aus dem angesprochenen Log:

                                            0 info it worked if it ends with ok
                                            1 verbose cli [ '/usr/bin/node',
                                            1 verbose cli   '/usr/bin/npm',
                                            1 verbose cli   'install',
                                            1 verbose cli   'node-onvif',
                                            1 verbose cli   '--production',
                                            1 verbose cli   '--prefix',
                                            1 verbose cli   '/opt/iobroker/node_modules/iobroker.javascript' ]
                                            2 info using npm@6.7.0
                                            3 info using node@v8.15.0
                                            4 verbose npm-session ca193bb86e340986
                                            5 silly install loadCurrentTree
                                            6 silly install readLocalPackageData
                                            7 http fetch GET 200 https://registry.npmjs.org/node-onvif 48ms (from cache)
                                            8 silly pacote range manifest for node-onvif@^0.1.7 fetched in 71ms
                                            9 timing stage:loadCurrentTree Completed in 4292ms
                                            10 silly install loadIdealTree
                                            11 silly install cloneCurrentTreeToIdealTree
                                            12 timing stage:loadIdealTree:cloneCurrentTree Completed in 30ms
                                            13 silly install loadShrinkwrap
                                            14 timing stage:loadIdealTree:loadShrinkwrap Completed in 2346ms
                                            15 silly install loadAllDepsIntoIdealTree
                                            16 silly resolveWithNewModule node-onvif@0.1.7 checking installable status
                                            17 silly removeObsoleteDep removing node-onvif@0.1.7 from the tree as its been replaced by a newer version or is no longer required
                                            18 silly removeObsoleteDep removing html@1.0.0 from the tree as its been replaced by a newer version or is no longer required
                                            19 silly removeObsoleteDep removing xml2js@0.4.19 from the tree as its been replaced by a newer version or is no longer required
                                            20 silly removeObsoleteDep removing sax@1.2.4 from the tree as its been replaced by a newer version or is no longer required
                                            21 silly removeObsoleteDep removing xmlbuilder@9.0.7 from the tree as its been replaced by a newer version or is no longer required
                                            22 http fetch GET 200 https://registry.npmjs.org/xml2js 22ms (from cache)
                                            23 http fetch GET 200 https://registry.npmjs.org/html 21ms (from cache)
                                            24 silly pacote range manifest for xml2js@>=0.4.17 fetched in 29ms
                                            25 silly resolveWithNewModule xml2js@0.4.19 checking installable status
                                            26 silly pacote range manifest for html@>=1.0.0 fetched in 30ms
                                            27 silly resolveWithNewModule html@1.0.0 checking installable status
                                            28 http fetch GET 200 https://registry.npmjs.org/sax 29ms (from cache)
                                            29 http fetch GET 200 https://registry.npmjs.org/xmlbuilder 30ms (from cache)
                                            30 silly pacote range manifest for sax@>=0.6.0 fetched in 39ms
                                            31 silly resolveWithNewModule sax@1.2.4 checking installable status
                                            32 silly pacote range manifest for xmlbuilder@~9.0.1 fetched in 41ms
                                            33 silly resolveWithNewModule xmlbuilder@9.0.7 checking installable status
                                            34 timing stage:loadIdealTree:loadAllDepsIntoIdealTree Completed in 3498ms
                                            35 timing stage:loadIdealTree Completed in 6921ms
                                            
                                            38 silly install generateActionsToTake
                                            39 silly diff-trees filtering actions: includeDev false includeProd true includeOpt true
                                            40 warn checkPermissions Missing write access to /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-onvif
                                            41 timing stage:rollbackFailedOptional Completed in 3ms
                                            42 timing stage:runTopLevelLifecycles Completed in 11485ms
                                            43 silly saveTree iobroker.javascript@4.1.12
                                            
                                            44 verbose stack Error: ENOENT: no such file or directory, access '/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-onvif'
                                            45 verbose cwd /
                                            46 verbose Linux 4.4.174-rockchip
                                            47 verbose argv "/usr/bin/node" "/usr/bin/npm" "install" "node-onvif" "--production" "--prefix" "/opt/iobroker/node_modules/iobroker.javascript"
                                            48 verbose node v8.15.0
                                            49 verbose npm  v6.7.0
                                            50 error path /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-onvif
                                            51 error code ENOENT
                                            52 error errno -2
                                            53 error syscall access
                                            54 error enoent ENOENT: no such file or directory, access '/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-onvif'
                                            55 error enoent This is related to npm not being able to find a file.
                                            56 verbose exit [ -2, true ]
                                            

                                            Sicherheitshalber habe ich - wie hier beschrieben - mt

                                            sudo chown -R iobroker:iobroker /opt/iobroker/node_modules/iobroker.javascript
                                            

                                            die Rechte wieder zurecht gerückt.

                                            Hast du eine Idee woran ich scheitere?

                                            LG, mxa

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            791
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

                                            27
                                            79
                                            23298
                                            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