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.
  • A Offline
    A Offline
    Alexxx2005
    schrieb am zuletzt editiert von
    #70

    @Glasfaser

    habe nun festgestellt das nach einem Iobroker neustart die URL

    http://<IP>/web/tmpfs/snap.jpg
    http://Name:PW@<IP>/snap.jpg?JpegCam=1
    

    funktioniert.

    Was noch nicht funktioniert ist der PTZ Present ist es möglich diese
    Steuerung im Skript anzupassen ?

    Nach Stundenlangen Googeln kam ich auf diesen Pfad was durch ändern
    der Number=1 die verschiedenen Postionen anfährt.

    http://<IP>/cgi-bin/hi3510/param.cgi?cmd=preset&-act=goto&-status=1&-number=2
    

    Grüße Alex

    1 Antwort Letzte Antwort
    0
    • B Offline
      B Offline
      BamBam89
      schrieb am zuletzt editiert von
      #71

      Hallo zusammen,

      ich möchte mich gerne hier mit ran hängen.
      Auch ich möchte meine Cams gerne mit VIS visualisieren.
      Allerdings bin ich noch recht neu in der Materie und an der ein oder anderen Stelle hakt es noch ein wenig.
      Eine Stelle an der es gewaltig hakt, ist die Einbindung der CAMS.

      Ich habe mir den Adapter Onvif Support geladen. Die Kameras gesucht und auch gefunden.
      Allerdings komme ich nun nicht weiter. Unter den Objekten wird mir die Kamera angezeigt

      18f1f7aa-48e6-4fc1-b466-67db37649b9f-image.png

      Aber wie komme ich nun an die Bilder?

      Danke euch und schönes Wochenende
      Gruß BamBam89

      GlasfaserG 1 Antwort Letzte Antwort
      0
      • B BamBam89

        Hallo zusammen,

        ich möchte mich gerne hier mit ran hängen.
        Auch ich möchte meine Cams gerne mit VIS visualisieren.
        Allerdings bin ich noch recht neu in der Materie und an der ein oder anderen Stelle hakt es noch ein wenig.
        Eine Stelle an der es gewaltig hakt, ist die Einbindung der CAMS.

        Ich habe mir den Adapter Onvif Support geladen. Die Kameras gesucht und auch gefunden.
        Allerdings komme ich nun nicht weiter. Unter den Objekten wird mir die Kamera angezeigt

        18f1f7aa-48e6-4fc1-b466-67db37649b9f-image.png

        Aber wie komme ich nun an die Bilder?

        Danke euch und schönes Wochenende
        Gruß BamBam89

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

        @BamBam89

        Du hast den offiziellen Onvif Adapter installiert ...

        Nimm den Test Adapter onvif v0.1.x ,dazu kann man sagen , er funktioniert .

        ( aber vorher den Adapter komplett deinstallieren )

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

        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

          WiednitzW Offline
          WiednitzW Offline
          Wiednitz
          schrieb am zuletzt editiert von Wiednitz
          #73

          @pix

          Grüsse,

          ich habe das Script auch am Laufen. Funktioniert soweit, wenn ich die States direkt in den Objekten ändere, zum Beispiel gotopreset auf 7, Kamera geht auf Position 7. Wenn ich den State jedoch durch Blockly ändere, Datenpunkt steuern oder aktualisieren, dann wird zwar die Zahl eingetragen, aber die Kamera bewegt sich nicht !?

          Wo ist der Fehler ?

          WiednitzW 1 Antwort Letzte Antwort
          0
          • WiednitzW Wiednitz

            @pix

            Grüsse,

            ich habe das Script auch am Laufen. Funktioniert soweit, wenn ich die States direkt in den Objekten ändere, zum Beispiel gotopreset auf 7, Kamera geht auf Position 7. Wenn ich den State jedoch durch Blockly ändere, Datenpunkt steuern oder aktualisieren, dann wird zwar die Zahl eingetragen, aber die Kamera bewegt sich nicht !?

            Wo ist der Fehler ?

            WiednitzW Offline
            WiednitzW Offline
            Wiednitz
            schrieb am zuletzt editiert von
            #74

            @wiednitz

            Ich antworte mir mal selbst....

            Nachdem ich alles aus dem Skript außer die gotopreset Funktion gelöscht habe, funktioniert es mit dem Blockly steuere Befehl.

            R 1 Antwort Letzte Antwort
            0
            • WiednitzW Wiednitz

              @wiednitz

              Ich antworte mir mal selbst....

              Nachdem ich alles aus dem Skript außer die gotopreset Funktion gelöscht habe, funktioniert es mit dem Blockly steuere Befehl.

              R Offline
              R Offline
              Ritschy2000
              schrieb am zuletzt editiert von
              #75

              @wiednitz könntest du eventl. deine gekürzte Version online stellen?
              Habe ein ähnliches Problem und brauche eigentlich auch nur die gotopreset Funktion.
              Danke

              WiednitzW 1 Antwort Letzte Antwort
              0
              • R Ritschy2000

                @wiednitz könntest du eventl. deine gekürzte Version online stellen?
                Habe ein ähnliches Problem und brauche eigentlich auch nur die gotopreset Funktion.
                Danke

                WiednitzW Offline
                WiednitzW Offline
                Wiednitz
                schrieb am zuletzt editiert von
                #76

                @ritschy2000

                const fC = false;
                const logging = false;
                const pfad = 'javascript.' + instance + '.Yucheng.PTZ.';
                const idGotoPreset =   pfad + 'gotoPreset';
                const onvif = require('node-onvif');
                const fs = require('fs');
                
                createState(idGotoPreset, 0, fC, {
                   def:  0,
                   name: 'Kamera 1 PTZ Preset Wähler',
                   desc: 'Preset auswählen (Zahlen von 1 bis X)',
                   type: 'number'
                });
                
                // Create an OnvifDevice object
                const device = new onvif.OnvifDevice({
                   xaddr: 'http://192.xxx.xx.xx:80/onvif/device_service',
                   user : 'xxxxx',
                   pass : 'xxxxx'
                });
                
                // 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': 'PROFILE_000',
                                   '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
                   }
                }
                
                // 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);
                */
                 
                
                

                Achtung ! Hab den Profile Token an meine Kamera angepasst und verwende anderen Pfad zu den Objekten !

                Habe jetzt für meine Cam endlich die http xml requests herausgefunden mit einem speziellen Programm. Eine API Dokumentation wie für Hikvision ist für meine Yucheng/Esunstar nirgends zu finden. Node-onvif ist irgendwie langsam, XML reagiert sofort, werde das wohl nicht weiter verwenden. Mit XML kann man alle Funktionen aufrufen, die auch die Konfiguration der Cam im Browser bietet.

                GlasfaserG 1 Antwort Letzte Antwort
                0
                • WiednitzW Wiednitz

                  @ritschy2000

                  const fC = false;
                  const logging = false;
                  const pfad = 'javascript.' + instance + '.Yucheng.PTZ.';
                  const idGotoPreset =   pfad + 'gotoPreset';
                  const onvif = require('node-onvif');
                  const fs = require('fs');
                  
                  createState(idGotoPreset, 0, fC, {
                     def:  0,
                     name: 'Kamera 1 PTZ Preset Wähler',
                     desc: 'Preset auswählen (Zahlen von 1 bis X)',
                     type: 'number'
                  });
                  
                  // Create an OnvifDevice object
                  const device = new onvif.OnvifDevice({
                     xaddr: 'http://192.xxx.xx.xx:80/onvif/device_service',
                     user : 'xxxxx',
                     pass : 'xxxxx'
                  });
                  
                  // 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': 'PROFILE_000',
                                     '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
                     }
                  }
                  
                  // 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);
                  */
                   
                  
                  

                  Achtung ! Hab den Profile Token an meine Kamera angepasst und verwende anderen Pfad zu den Objekten !

                  Habe jetzt für meine Cam endlich die http xml requests herausgefunden mit einem speziellen Programm. Eine API Dokumentation wie für Hikvision ist für meine Yucheng/Esunstar nirgends zu finden. Node-onvif ist irgendwie langsam, XML reagiert sofort, werde das wohl nicht weiter verwenden. Mit XML kann man alle Funktionen aufrufen, die auch die Konfiguration der Cam im Browser bietet.

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

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

                  Eine API Dokumentation wie für Hikvision ist für meine Yucheng/Esunstar nirgends zu finden.

                  Teste mal :

                  Schwenkt nach rechts :

                  http://user:passwort@192.168.178.53/PTZ/channels/1/PTZControl?command=PAN_RIGHT&speed=2&mode=start
                  

                  Schwenken stop :

                  http://user:passwort@192.168.178.53/PTZ/channels/1/PTZControl?command=PAN_RIGHT&speed=1&mode=stop
                  

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

                  WiednitzW 1 Antwort Letzte Antwort
                  0
                  • GlasfaserG Glasfaser

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

                    Eine API Dokumentation wie für Hikvision ist für meine Yucheng/Esunstar nirgends zu finden.

                    Teste mal :

                    Schwenkt nach rechts :

                    http://user:passwort@192.168.178.53/PTZ/channels/1/PTZControl?command=PAN_RIGHT&speed=2&mode=start
                    

                    Schwenken stop :

                    http://user:passwort@192.168.178.53/PTZ/channels/1/PTZControl?command=PAN_RIGHT&speed=1&mode=stop
                    
                    WiednitzW Offline
                    WiednitzW Offline
                    Wiednitz
                    schrieb am zuletzt editiert von Wiednitz
                    #78

                    @glasfaser

                    nein alles schon durch. Für PTZ 1 (bei cgi oder xml Aufruf muss dafür 0 eingetragen werden) funktioniert folgendes Script:

                    var request = require('request');
                    var options = {
                      'method': 'PUT',
                      'url': 'http://192.168.10.62/PTZ/1/Presets/Goto',
                      'headers': {
                        'Host': '192.168.10.62',
                        'Connection': 'keep-alive',
                        'Cache-Control': 'max-age=0',
                        'Authorization': 'Basic XXXXXXXXXXXXXX',
                        'Accept': '*/*',
                        'DNT': '1',
                        'X-Requested-With': 'XMLHttpRequest',
                        'If-Modified-Since': '0',
                        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36',
                        'Content-Type': 'application/x-www-form-urlencoded',
                        'Origin': 'http://192.168.10.62',
                        'Referer': 'http://192.168.10.62/main.html',
                        'Accept-Encoding': 'gzip, deflate',
                        'Accept-Language': 'de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7',
                        'Cookie': 'userInfo=XXXXXXXXXXXXXXX; stream=1; language=de; commandPort=6060; rtspPort=554'
                      },
                      form: {
                        'Param1': '0'
                      }
                    };
                    request(options, function (error, response) {
                      if (error) throw new Error(error);
                      console.log(response.body);
                    });
                    setStateDelayed('javascript.' + instance +  '.scriptEnabled.' + name.slice(10), false, 3*1000);
                    

                    Url, Cookie und Parameter gilt es eben herauszufinden, ohne Doku ein Rätsel, aber nun gelöst :hugging_face:

                    1 Antwort Letzte Antwort
                    0
                    • B Offline
                      B Offline
                      Bully85
                      schrieb am zuletzt editiert von
                      #79

                      Hallo welches Widget benutzt ihr um den livestream anzuzeigen?

                      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

                      838

                      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