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. Skripten / Logik
  4. [Frage]Skript zur Steuerung ONVIF Kameras

NEWS

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

  • 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

[Frage]Skript zur Steuerung ONVIF Kameras

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
79 Beiträge 27 Kommentatoren 27.5k Aufrufe 16 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.
  • DerMichaD Offline
    DerMichaD Offline
    DerMicha
    schrieb am zuletzt editiert von DerMicha
    #40

    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 Antwort Letzte Antwort
    0
    • aurodionovA Offline
      aurodionovA Offline
      aurodionov
      schrieb am zuletzt editiert von
      #41

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

      Пишу с пульта….

      1 Antwort Letzte Antwort
      0
      • DerMichaD Offline
        DerMichaD Offline
        DerMicha
        schrieb am zuletzt editiert von wendy2702
        #42

        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 Antwort Letzte Antwort
        0
        • P pix

          Hallo,

          nach langem Tüfteln habe ich es diesen Sommer geschafft, meine ONVIF Kamera einzubinden.

          Es wird ein Node-Modul benötigt, dass im Javascript Adapter eingestellt werden muss (https://www.npmjs.com/package/node-onvif von futomi (https://github.com/futomi/node-onvif/tree/master/sample))

          /* Kinderzimmer Kamera 1 ONVIF
          Steuerung meiner einzigen ONVIF Kamera via Javascript
          https://github.com/futomi/node-onvif/tree/master/sample
            hostname: "192.168.178.XXX",
           username: "username",
           password: "passwort"
          
          Presets direkt in Kamera-Webserver (sihe hostname) speichern.
          Todo: 
          Presets speichern und dabei Snapshot für Preview in vis.0 speichern
          Presets löschen und dabei neutrales Vorschaubild in vis.0 erstellen
          Wie AutoPan oder Pattern oder Tour aufrufen?
          23.07.2017 Presets zugefügt
          14.08.2017 Test beendet, umbeannt
          */
          const fC = false;
          const logging = false;
          const dest_path = '/Users/pix/Documents/iobroker/iobroker-data/webcam/'; // OS X Pfad
          const pfad = 'javascript.' + instance + '.VIS.Kamera.1.PTZ.';
          const idSpeed     = pfad + 'Geschwindigkeit';
          const idStoppzeit = pfad + 'Stoppzeit';
          const idStopp =     pfad + 'Stopp';
          const idRechts =    pfad + 'rechts';
          const idLinks =     pfad + 'links';
          const idHoch =      pfad + 'hoch';
          const idRunter =    pfad + 'runter';
          const idZoomIn =    pfad + 'ZoomIn';
          const idZoomOut =   pfad + 'ZoomOut';
          const idGotoPreset =   pfad + 'gotoPreset';
          const onvif = require('node-onvif');
          const fs = require('fs');
          createState(idSpeed, 1, fC, {
             def: 1,
             min: 0,
             max: 1,
             name: 'Kamera 1 PTZ Geschwindkeit bei Bewegung',
             desc: 'Geschwindigkeit von 0-1 bei der Bewegung',
             type: 'number'
          });
          createState(idStoppzeit, 1, fC, {
             def: 0,
             min: 0,
             name: 'Kamera 1 PTZ Stoppzeit',
             desc: 'Dauer in Sekunden bis zum Stopp der Bewegung',
             type: 'number',
             unit: 's'
          });
          createState(idStopp, false, fC, {
             def: false,
             name: 'Kamera 1 PTZ Stopp',
             desc: 'Sofortiger Stopp der Bewegung',
             type: 'boolean',
             role: 'switch'
          });
          createState(idRechts, false, fC, {
             def: false,
             name: 'Kamera 1 PTZ rechts',
             desc: 'Bewegung nach rechts',
             type: 'boolean',
             role: 'switch'
          });
          createState(idLinks, false, fC, {
             def: false,
             name: 'Kamera 1 PTZ links',
             desc: 'Bewegung nach links',
             type: 'boolean',
             role: 'switch'
          });
          createState(idHoch, false, fC, {
             def: false,
             name: 'Kamera 1 PTZ oben',
             desc: 'Bewegung nach oben',
             type: 'boolean',
             role: 'switch'
          });
          createState(idRunter, false, fC, {
             def: false,
             name: 'Kamera 1 PTZ unten',
             desc: 'Bewegung nach unten',
             type: 'boolean',
             role: 'switch'
          });
          createState(idZoomIn, false, fC, {
             def: false,
             name: 'Kamera 1 PTZ Zoom in',
             desc: 'Bild vergößern',
             type: 'boolean',
             role: 'switch'
          });
          createState(idZoomOut, false, fC, {
             def: false,
             name: 'Kamera 1 PTZ Zoom out',
             desc: 'Bild verkleinern',
             type: 'boolean',
             role: 'switch'
          });
          createState(idGotoPreset, 0, fC, {
             def:  0,
             name: 'Kamera 1 PTZ Preset Wähler',
             desc: 'Preset auswählen (Zahlen von 1 bis X)',
             type: 'number'
          });
          /*
          log('Start the discovery process.');
          // Find the ONVIF network cameras
          onvif.startDiscovery((info) => {
           // Show the device name and the URL of the end point
           log('- ' + info.urn);
           log('  - ' + info.name);
           log('  - ' + info.xaddrs[0]);
          });
          // Stop the discovery process in 3 seconds
          setTimeout(() => {
           onvif.stopDiscovery(() => {
             log('Stopped the discovery process.');
          
           });
          }, 3000);
          */
          // Create an OnvifDevice object
          const device = new onvif.OnvifDevice({
             xaddr: 'http://192.168.178.xxx:8999/onvif/device_service',
             user : 'username',
             pass : 'passwort'
          });
          function movePTZ (ptz_x, ptz_y, ptz_z, stoptime) {
             // https://github.com/futomi/node-onvif#ptzmoveparams-callback
             device.init((error) => {
                 if (error) {
                     log('[ERROR] ' + error.message);
                     return;
                 } else {
                     // +++ CONTROL via PTZ 
                     var ptzlog = '';
                     ptz_x = (ptz_x <=1 && ptz_x >=-1) ? ptz_x : 0;
                     ptz_y = (ptz_y <=1 && ptz_y >=-1) ? ptz_y : 0;
                     ptz_z = (ptz_z <=1 && ptz_z >=-1) ? ptz_z : 0;
                     if (ptz_x > 0) ptzlog = 'Schwenk nach rechts';
                     if (ptz_x < 0) ptzlog = 'Schwenk nach links';
                     if (ptz_y > 0) ptzlog = 'Schwenk nach oben';
                     if (ptz_y < 0) ptzlog = 'Schwenk nach unten';
                     if (ptz_z > 0) ptzlog = 'Zoom in';
                     if (ptz_z < 0) ptzlog = 'Zoom out';
                     ptzlog += ' für ' + stoptime + 's';
                     if (logging) log(ptzlog);
                     // Create the parameters
                     var params = {
                         'speed': {
                             x: ptz_x, // Speed of pan (in the range of -1 to 1.0)
                             y: ptz_y, // Speed of tilt (in the range of -1 to 1.0)
                             z: ptz_z  // Speed of zoom (in the range of -1 to 1.0)
                         },
                         'timeout': 30 // seconds
                     };
                     // Move the camera
                     device.ptzMove(params, (error) => {
                         if (error) {
                             log(error.message, 'error');
                         } else {
                             log('Camera moved!');
                         }
                     });
          
                     // Stop to the PTZ in X seconds
                     setTimeout(() => {
                         device.ptzStop((error) => {
                             if (error) {
                                 log(error.message, 'error');
                             } else {
                                 log('Succeeded to stop after ' + stoptime + ' seconds.');
                             }
                         });
                     }, stoptime * 1000);  // stopzeit
                 }
             });
          }
          function stopMoving () {
             device.ptzStop((error) => {
                 if (error) {
                     log(error.message, 'error');
                 } else {
                     log('Succeeded to stop.');
                 }
             });
          }
          // https://github.com/futomi/node-onvif#gotopresetparams-callback-method
          function gotoPreset (presetNumber) { // 1,2,3 kommt als ganze Zahl
             if (presetNumber > 0) {
                 device.init((error) => {
                     if (error) {
                         log('[ERROR] ' + error.message, 'error');
                         return;
                     } /*else {*/
                     // The OnvifServicePtz object
                     var ptz = device.services.ptz;
                     if (ptz) {
                         //var profile = device.getCurrentProfile(); // debug
                         //log(JSON.stringify(profile, null, '  ')); // debug log
          
                         var params = {
                             'ProfileToken': 'MainStream',
                             'PresetToken' : presetNumber.toString(),
                             'Speed'       : {'x': 1, 'y': 1, 'z': 1}
                         };
          
                         device.services.ptz.gotoPreset(params, (error, result) => {
                             if (error) {
                                 log('[ERROR] ' + error.message, 'error');
                             } else {
                                 if (logging) log('Preset: ' + JSON.stringify(result.data, null, '  ')); // statt result.['data']
                                 log('Camera moved to Preset #' + presetNumber.toString());
                             }
                         });
                     } else {
                         log('[ERROR] Your ONVIF network camera does not support the PTZ service.');
                     }
                     //}
                 });
             } else {
                 log('Preset für Kamera 1 kein valider Preset-Wert'); // debug log
             }
          }
          // Bild an telegram schicken
          function sendImage (pfad, bildtext) {
             setTimeout(function() {
                 sendTo('telegram.1', {
                     text: pfad,
                     caption: bildtext
                 });
                 log('Webcam Bild per telegram verschickt');
             }, 2 * 1000);
          }
          function saveImage () {
                 // Initialize the OnvifDevice object
                 device.init((error) => {
                     if (error) {
                         log('[ERROR] ' + error.message, 'error');
                         return;
                     } else {
                         if (logging) log('The OnvifDevice object has been initialized successfully.');
                         // +++ Get the detailed device information
                         var device_info = device.getInformation();
                         if (logging) log(JSON.stringify(device_info, null, '  '));
                         // +++ Get the UDP stream URL
                         var url = device.getUdpStreamUrl();
                         if (logging) log('UDP-Stream: ' + url);
          
                         // +++ Get Profile
                         var profile = device.getCurrentProfile();
                         if (logging) log('Profile: ' + JSON.stringify(profile, null, '  ')); // Viele Infos
                         // für debug: 
                         //log('http: ' + profile.stream.http);
          
                         var cam_info = 'ONVIF Bild' + '\n'
                                      + 'Model: ' + device_info.Model + '\n'
                                      + 'Firmware: ' + device_info.FirmwareVersion + '\n'
                                      + 'Seriennummer: ' + device_info.SerialNumber + '\n'
                                      + 'Harware ID: ' + device_info.HardwareId + '\n'
                                      + 'RTSP-Stream: ' + url;     
          
                         // +++ Get the data of the snapshot
                         log('fetching the data of the snapshot...');
                         device.fetchSnapshot((error, res) => {
                             if (error) {
                                 log(error.message, 'error');
                                 return;
                             }
                             // Save the data to a file and send via telegram
                             fs.writeFile(dest_path + 'onvif_snapshot.jpg', res.body, function (error) { // Anpassen an die OS X gegebenheiten (oder per Telegram senden)
                                 if (error) {
                                     log(error.message, 'error');
                                 } else {
                                     sendImage(dest_path + 'onvif_snapshot.jpg', cam_info);
                                     log('Image sent!');
                                 }
                             });
                         });
                     }
                 });    
          }
          // Start beim Setzen auf true
          // Links
          on(idLinks, function (obj) {
             if (!obj.state.ack && obj.state.val) {
                var stoppzeit = getState(idStoppzeit).val;
                var speed = getState(idSpeed).val;
                movePTZ(-1 * speed , 0, 0, stoppzeit);
                setStateDelayed(idLinks, false, 500); // ggf , 500 + (stoppzeit * 1000)
             }
          });
          // rechts
          on({id: idRechts, val: true}, function (obj) {
             if (!obj.state.ack && obj.state.val) {
                var stoppzeit = getState(idStoppzeit).val;
                var speed = getState(idSpeed).val;
                movePTZ(1 * speed , 0, 0, stoppzeit);
                setStateDelayed(idRechts, false, 500);
             }
          });
          // oben
          on(idHoch, function (obj) {
             if (!obj.state.ack && obj.state.val) {
                var stoppzeit = getState(idStoppzeit).val;
                var speed = getState(idSpeed).val;
                movePTZ(0, 1 * speed, 0, stoppzeit);
                setStateDelayed(idHoch, false, 500, 500);
             }
          });
          // rechts
          on(idRunter, function (obj) {
             if (!obj.state.ack && obj.state.val) {
                var stoppzeit = getState(idStoppzeit).val;
                var speed = getState(idSpeed).val;
                movePTZ(0, -1 * speed, 0, stoppzeit);
                setStateDelayed(idRunter, false, 500);
             }
          });
          // vergrößern
          on(idZoomIn, function (obj) {
             if (!obj.state.ack && obj.state.val) {
                var stoppzeit = getState(idStoppzeit).val;
                var speed = getState(idSpeed).val;
                movePTZ(0, 0, 1 * speed, stoppzeit);
                setStateDelayed(idZoomIn, false, 500);
             }
          });
          // verkleinern
          on(idZoomOut, function (obj) {
             if (!obj.state.ack && obj.state.val) {
                var stoppzeit = getState(idStoppzeit).val;
                var speed = getState(idSpeed).val;
                movePTZ(0, 0, -1 * speed, stoppzeit);
                setStateDelayed(idZoomOut, false, 500);
             }
          });
          // sofortiger Stopp
          on(idStopp, function (obj) {
             if (!obj.state.ack && obj.state.val) {
                stopMoving();
                setStateDelayed(idStopp, false, 500);
                setState(idGotoPreset, 0);
             }
          });
          // bei Bedienung aller Knöpfe sofert Preset Anzeige löschen 
          // klappt noch nicht so richtig, da laufende Fahrt zum Presetpunkt noch beendet wird
          on({
             id: [idStopp, idZoomOut, idZoomIn, idRunter, idHoch, idRechts, idLinks], 
             change: 'any'
          }, function (obj) {
             if (!obj.state.ack && obj.state.val) {
                setState(idGotoPreset, 0);
             }
          });
          // zum bereits gespeicherten Preset X fahren (Ganze Zahl, kommt aus VIS, Scenes oder Script)
          on(idGotoPreset, function (obj) {
             if (!obj.state.ack && obj.state.val) {
                gotoPreset(parseInt(obj.state.val,10)); // wird später zu einem String gewandelt
                //setStateDelayed(idGotoPreset, 0, 500); // reset
             }
          });
          // Skriptstart
          //setTimeout(saveImage, 15000);
          // setTimeout(goHome, 1000);
          /*
          setTimeout(function() {
             movePTZ(1,0,0,5); // rechts, 2 sek
          }, 1000);
          */
          
          

          So wie das Skript hier veröffentlicht ist, läuft es bei mir (natürlich noch Nutzernamen, Passwort und Kamera-IP:Onvif-Pport anpassen).

          Durch setzen der Objekte kann die Kamera bewegt werden. Sieht dann bei mir so aus: 261_bildschirmfoto_2017-11-01_um_22.55.06.png
          Die drei Presets habe ich natürlich in der Kamera gespeichert, aber das Node-Modul lässt es auch zu, dort Positionen festzulegen und abzufahren. War mir zu aufwendig 8-) .

          Viel Erfolg! :D

          Gruß

          Pix

          PS: Leider habe ich derzeit, überhaupt keine Zeit, daraus einen Adapter zu machen. Aber geplant ist es eigentlich schon :roll:

          Edit 7.3.2019 nach Portierung ins neue Forum Skript bereinigt

          smartboartS Offline
          smartboartS Offline
          smartboart
          schrieb am zuletzt editiert von smartboart
          #43

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

          1 Antwort Letzte Antwort
          0
          • S schittl

            @pix:

            Öhömmm :oops: Da habe ich wohl den Aufruf vergessen. Oder vielmehr habe ich vergessen, den Telegram Teil nach dem testen wieder rauszulöschen, denn das Zusenden nach Bewegungsalarm mache ich woanders. `

            Hi Pix,

            danke für das Script. Genial! Könntest Du mir vielleicht mitteilen wie Du das Zusenden nach Bewegungsalarm gelöst hast?

            vg

            Falk

            P Offline
            P Offline
            pix
            schrieb am zuletzt editiert von
            #44

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

            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

            smartboartS metaxaM 2 Antworten Letzte Antwort
            1
            • P pix

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

              smartboartS Offline
              smartboartS Offline
              smartboart
              schrieb am zuletzt editiert von
              #45

              @pix Vielen Dank!

              1 Antwort Letzte Antwort
              0
              • P pix

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

                metaxaM Offline
                metaxaM Offline
                metaxa
                schrieb am zuletzt editiert von metaxa
                #46

                @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 Antwort Letzte Antwort
                0
                • P Offline
                  P Offline
                  pix
                  schrieb am zuletzt editiert von
                  #47

                  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

                  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

                  metaxaM 1 Antwort Letzte Antwort
                  0
                  • P pix

                    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

                    metaxaM Offline
                    metaxaM Offline
                    metaxa
                    schrieb am zuletzt editiert von metaxa
                    #48

                    @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

                    metaxaM 1 Antwort Letzte Antwort
                    0
                    • metaxaM 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

                      metaxaM Offline
                      metaxaM Offline
                      metaxa
                      schrieb am zuletzt editiert von
                      #49

                      @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 Antwort Letzte Antwort
                      0
                      • P Offline
                        P Offline
                        pix
                        schrieb am zuletzt editiert von
                        #50

                        Hallo,

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

                        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

                        lobomauL 1 Antwort Letzte Antwort
                        0
                        • metaxaM Offline
                          metaxaM Offline
                          metaxa
                          schrieb am zuletzt editiert von metaxa
                          #51

                          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 Antwort Letzte Antwort
                          0
                          • P pix

                            Hallo,

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

                            Gruß
                            Pix

                            lobomauL Offline
                            lobomauL Offline
                            lobomau
                            schrieb am zuletzt editiert von
                            #52

                            Ich habe das Script nochmal ausprobiert (nach 1,5 Jahren) mit gleicher Kamera. Hat sofort funktioniert. Klasse. Ich kann es nicht mehr nachvollziehen woran es lag.

                            @pix welche widget nimmst du, um die Pfeile in VIS darzustellen?

                            Host: NUC8i3 mit Proxmox:

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

                              Hallo,

                              ich nehme die set-value-Widgets. Also bei Druck wird ein Wert in einen Datenpunkt geschrieben.

                              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
                              • M Offline
                                M Offline
                                melodoi
                                schrieb am zuletzt editiert von
                                #54

                                Hi,
                                kennt jemand auch eine einfachere Möglichkeit der PTZ Steuerung wie über http get (z.B. http//user:pw/192.168.1.15/onvif/steuerung/nach_links). Ich stelle mir das sicher zu einfach vor. Aber das wäre doch schön.
                                Gruß
                                Sylvio

                                GlasfaserG 1 Antwort Letzte Antwort
                                0
                                • smartboartS Offline
                                  smartboartS Offline
                                  smartboart
                                  schrieb am zuletzt editiert von smartboart
                                  #55

                                  Hi , habe das Script am Laufen mit ner Foscam FI9938P. funktioniert soweit alles , ausser der Zoom in beide Richtungen... Hat jremand ne Idee?
                                  Update: ist ein Firmware Fehler der Kamera...

                                  1 Antwort Letzte Antwort
                                  0
                                  • M melodoi

                                    Hi,
                                    kennt jemand auch eine einfachere Möglichkeit der PTZ Steuerung wie über http get (z.B. http//user:pw/192.168.1.15/onvif/steuerung/nach_links). Ich stelle mir das sicher zu einfach vor. Aber das wäre doch schön.
                                    Gruß
                                    Sylvio

                                    GlasfaserG Offline
                                    GlasfaserG Offline
                                    Glasfaser
                                    schrieb am zuletzt editiert von
                                    #56

                                    @melodoi
                                    Kenne deine Kamera nicht bzw. wurde nicht angegeben .

                                    Bei meinen PTZ Hikvision habe ich es so, hier einige Beispiele:

                                    links:
                                    http://user:passwort@IPadresse/PTZ/channels/1/PTZControl?command=PAN_LEFT&speed=2&mode=start
                                    rechts:
                                    http://user:passwort@IPadresse//PTZ/channels/1/PTZControl?command=PAN_RIGHT&speed=2&mode=start
                                    stop:
                                    http://user:passwort@IPadresse//PTZ/channels/1/PTZControl?/PTZ/channels/1/PTZControl?command=PAN_RIGHT&speed=1&mode=stop

                                    55555555555555555555555.JPG
                                    hier ein Widget davon :

                                    [{"tpl":"tplIconHttpGet","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"url":"http://user:passwort@IPadresse/PTZ/channels/1/PTZControl?command=PAN_RIGHT&speed=1&mode=stop","text":"","src":"/vis.0/Wohnen/audio_stop.png"},"style":{"left":"110px","top":"261px","width":"86px","height":"58px","z-index":"5"},"widgetSet":"jqui"}]
                                    
                                    

                                    Synology 918+ 16GB - ioBroker in Docker v9 , VISO auf Trekstor Primebook C13 13,3" , Hikvision Domkameras mit Surveillance Station .. CCU RaspberryMatic in Synology VM .. Zigbee CC2538+CC2592 .. Sonoff .. KNX .. Modbus ..

                                    smartboartS 1 Antwort Letzte Antwort
                                    0
                                    • GlasfaserG Glasfaser

                                      @melodoi
                                      Kenne deine Kamera nicht bzw. wurde nicht angegeben .

                                      Bei meinen PTZ Hikvision habe ich es so, hier einige Beispiele:

                                      links:
                                      http://user:passwort@IPadresse/PTZ/channels/1/PTZControl?command=PAN_LEFT&speed=2&mode=start
                                      rechts:
                                      http://user:passwort@IPadresse//PTZ/channels/1/PTZControl?command=PAN_RIGHT&speed=2&mode=start
                                      stop:
                                      http://user:passwort@IPadresse//PTZ/channels/1/PTZControl?/PTZ/channels/1/PTZControl?command=PAN_RIGHT&speed=1&mode=stop

                                      55555555555555555555555.JPG
                                      hier ein Widget davon :

                                      [{"tpl":"tplIconHttpGet","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"url":"http://user:passwort@IPadresse/PTZ/channels/1/PTZControl?command=PAN_RIGHT&speed=1&mode=stop","text":"","src":"/vis.0/Wohnen/audio_stop.png"},"style":{"left":"110px","top":"261px","width":"86px","height":"58px","z-index":"5"},"widgetSet":"jqui"}]
                                      
                                      

                                      smartboartS Offline
                                      smartboartS Offline
                                      smartboart
                                      schrieb am zuletzt editiert von
                                      #57

                                      Hat das Script schonmal jemand erweitert um ptz Bewegung obenlinks, obenrechts, untenlinks, untenrechts, und die Funktion zum autonmatischen Abfahren der voreingestelleten Presetpositionen?

                                      smartboartS 1 Antwort Letzte Antwort
                                      0
                                      • smartboartS smartboart

                                        Hat das Script schonmal jemand erweitert um ptz Bewegung obenlinks, obenrechts, untenlinks, untenrechts, und die Funktion zum autonmatischen Abfahren der voreingestelleten Presetpositionen?

                                        smartboartS Offline
                                        smartboartS Offline
                                        smartboart
                                        schrieb am zuletzt editiert von smartboart
                                        #58

                                        Das sollte gehen am Beispiel hoch rechts..

                                        das mit den verschiedenen presets abfahren wäre mittels skript auch kein problem..Die Kamera hat dies alerdings on board muesste also auch mittels onvif gehen oder..

                                        const idHochRechts = pfad + 'hochrechts';
                                        
                                        createState(idHochRechts, false, fC, {def: false,name: 'Kamera 1 PTZ obenrechts',desc: 'Bewegung nach obenrechts',type: 'boolean',role: 'switch'});
                                        
                                        
                                        
                                        on(idHochRechts, function (obj) {
                                           if (!obj.state.ack && obj.state.val) {
                                              var stoppzeit = getState(idStoppzeit).val;
                                              var speed = getState(idSpeed).val;
                                              movePTZ(1 * speed , 0, 0, stoppzeit);
                                              movePTZ(0, 1 * speed, 0, stoppzeit);
                                              setStateDelayed(idHochRechts, false, 500);
                                           }
                                        });
                                        
                                        1 Antwort Letzte Antwort
                                        0
                                        • smartboartS Offline
                                          smartboartS Offline
                                          smartboart
                                          schrieb am zuletzt editiert von
                                          #59

                                          noch ne Frage ..habe noch Probleme mit dem profiletoken.
                                          habe davon 2 in der Kamera... prof0 und prof1.
                                          die scheinen immer abwechselnd aktiv zu sein...Wenn die Presetfahrt nicht funktioniert muss ich im script den profiletoken wieder ändern dann gehts wieder.
                                          Wenn es wieder nicht geht wieder zurück zum anderen...Jemand ne Idee wie ich das lösen kann?

                                                     var ptz = device.services.ptz;
                                                     if (ptz) {
                                                         var params = {
                                                             'ProfileToken': 'prof1',
                                                             'PresetToken' : presetNumber.toString(),
                                                             'Speed'       : {'x': 1, 'y': 1, 'z': 1}
                                                         };
                                          
                                          GlasfaserG 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

                                          799

                                          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