Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Frage]Skript zur Steuerung ONVIF Kameras

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    17
    1
    386

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.9k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.3k

[Frage]Skript zur Steuerung ONVIF Kameras

Scheduled Pinned Locked Moved Skripten / Logik
79 Posts 27 Posters 28.9k Views 16 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • JB_SullivanJ Offline
    JB_SullivanJ Offline
    JB_Sullivan
    wrote on last edited by
    #35

    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

    ioBroker (since 2018) auf Intel Core i3-5005U NUC und Windwos10 Pro

    1 Reply Last reply
    0
    • R Offline
      R Offline
      RandyAndy
      wrote on last edited by
      #36

      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
      0
      • ChaotC Offline
        ChaotC Offline
        Chaot
        wrote on last edited by
        #37

        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

        ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.

        1 Reply Last reply
        0
        • P Offline
          P Offline
          pix
          wrote on last edited by
          #38

          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

          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 Reply Last reply
          0
          • smartboartS Offline
            smartboartS Offline
            smartboart
            wrote on last edited by
            #39

            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
            -1
            • DerMichaD Offline
              DerMichaD Offline
              DerMicha
              wrote on last edited by 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 Reply Last reply
              0
              • aurodionovA Offline
                aurodionovA Offline
                aurodionov
                wrote on last edited by
                #41

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

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

                1 Reply Last reply
                0
                • DerMichaD Offline
                  DerMichaD Offline
                  DerMicha
                  wrote on last edited by 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 Reply Last reply
                  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
                    wrote on last edited by smartboart
                    #43

                    @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
                    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
                      wrote on last edited by
                      #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 Replies Last reply
                      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
                        wrote on last edited by
                        #45

                        @pix Vielen Dank!

                        1 Reply Last reply
                        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
                          wrote on last edited by 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 Reply Last reply
                          0
                          • P Offline
                            P Offline
                            pix
                            wrote on last edited by
                            #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 Reply Last reply
                            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
                              wrote on last edited by 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 Reply Last reply
                              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
                                wrote on last edited by
                                #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 Reply Last reply
                                0
                                • P Offline
                                  P Offline
                                  pix
                                  wrote on last edited by
                                  #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 Reply Last reply
                                  0
                                  • metaxaM Offline
                                    metaxaM Offline
                                    metaxa
                                    wrote on last edited by 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 Reply Last reply
                                    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
                                      wrote on last edited by
                                      #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 Reply Last reply
                                      0
                                      • P Offline
                                        P Offline
                                        pix
                                        wrote on last edited by
                                        #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 Reply Last reply
                                        0
                                        • M Offline
                                          M Offline
                                          melodoi
                                          wrote on last edited by
                                          #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 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          684

                                          Online

                                          32.7k

                                          Users

                                          82.5k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe