Skip to content
  • 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
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Frage]Skript zur Steuerung ONVIF Kameras

NEWS

  • Wartung am 15.11. – Forum ab 22:00 Uhr nicht erreichbar
    BluefoxB
    Bluefox
    11
    2
    224

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.7k

[Frage]Skript zur Steuerung ONVIF Kameras

[Frage]Skript zur Steuerung ONVIF Kameras

Scheduled Pinned Locked Moved Skripten / Logik
79 Posts 27 Posters 27.0k 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.
  • GlasfaserG Glasfaser

    @smartboart

    Leider kann ich dir dazu nicht weiterhelfen ….
    Hatte es auch mal versucht es auf meine Hikvison PTZ Kameras umzustricken , aber bin mehr auf die Lösung zu den " http " Ansteuerungen umgeschwenkt . ( siehe oben )

    Es ist nur eine einmalige Sache gewesen die Buttons dazu zu belegen .
    Rechts - Links - Unten - Oben
    Oben links - oben rechts
    unten links - unten rechts
    Stop
    Zoom in - Zoom out
    4 x PTZ Anfahrten

    smartboartS Offline
    smartboartS Offline
    smartboart
    wrote on last edited by
    #61

    @Glasfaser danke, das funktioniert mit meiner cam leider nicht so...

    1 Reply Last reply
    0
    • D Offline
      D Offline
      dare
      wrote on last edited by
      #62

      Hi,
      Hat da bitte wer eine Ahnung wo ich bei erfolgreicher installation des ONVIF Adapter die Status bzw. Steuerobjekte für die PTZ Cam finde ?
      Bei den Objekten sehe ich ledglich den Ordner ONVIV 0 und den Unterordner mit der IP der CAM -> connection = true
      Die Cam ist eine H.VIEW HV-PTZ500. Mit dem Onfiv Device Manager kann ich die Cam steuern liveBild sehen usw...
      Was mache ich hier falsch bzw. braucht man zur Steuerung der Cam noch zusätzlich zu dem Onvif Adapter etwas

      BG dare

      1 Reply Last reply
      0
      • A Offline
        A Offline
        Alexxx2005
        wrote on last edited by
        #63

        @pix

        ist es möglich die 5MP Dome Kamera von YoLuke einzubinden ?

        Habe es versucht mit deinem Skript , auch dem Port auf 80
        geändert aber er meldet mir :

        javascript.0
        2020-01-13 20:37:49.336
        info
        (9808) script.js.common.PTZ_Kamera: [ERROR] Failed to initialize the device: Error: 404 Not Found
        javascript.0
        2020-01-13 20:37:48.309
        info
        (9808) script.js.common.PTZ_Kamera: [ERROR] Failed to initialize the device: Error: 404 Not Found
        javascript.0
        2020-01-13 20:37:24.672
        info
        (9808) script.js.common.PTZ_Kamera: registered 15 subscriptions and 0 schedules 
        

        Beim Aufruf im Browser : http://192.168.86.34:80/onvif/device_service

        meldet er mir :

        Error 404: Not Found
        File not found
        
        

        Grüße Alex

        GlasfaserG 1 Reply Last reply
        0
        • A Alexxx2005

          @pix

          ist es möglich die 5MP Dome Kamera von YoLuke einzubinden ?

          Habe es versucht mit deinem Skript , auch dem Port auf 80
          geändert aber er meldet mir :

          javascript.0
          2020-01-13 20:37:49.336
          info
          (9808) script.js.common.PTZ_Kamera: [ERROR] Failed to initialize the device: Error: 404 Not Found
          javascript.0
          2020-01-13 20:37:48.309
          info
          (9808) script.js.common.PTZ_Kamera: [ERROR] Failed to initialize the device: Error: 404 Not Found
          javascript.0
          2020-01-13 20:37:24.672
          info
          (9808) script.js.common.PTZ_Kamera: registered 15 subscriptions and 0 schedules 
          

          Beim Aufruf im Browser : http://192.168.86.34:80/onvif/device_service

          meldet er mir :

          Error 404: Not Found
          File not found
          
          

          Grüße Alex

          GlasfaserG Offline
          GlasfaserG Offline
          Glasfaser
          wrote on last edited by
          #64

          @Alexxx2005

          Hast du ONVIF in der Kamera freigegeben !?

          Hiermit kannst du es testen , ob ein ONVIF im Netzwerk vorhanden ist .
          Die Ausgabe erfolgt im LOG .

          /// ONVIF Ausgabe ioBroker 01.01.2020 Glasfaser
          
          const onvif = require('node-onvif');// 
          
          console.log('Start the discovery process.');
          // Find the ONVIF network cameras.
          // It will take about 3 seconds.
          onvif.startProbe().then((device_info_list) => {
           console.log(device_info_list.length + ' devices were found.');
           // Show the device name and the URL of the end point.
           device_info_list.forEach((info) => {
             console.log('- ' + info.urn);
             console.log('  - ' + info.name);
             console.log('  - ' + info.xaddrs[0]);
           });
          }).catch((error) => {
           console.error(error);
          });
          
          

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

          A 1 Reply Last reply
          0
          • GlasfaserG Glasfaser

            @Alexxx2005

            Hast du ONVIF in der Kamera freigegeben !?

            Hiermit kannst du es testen , ob ein ONVIF im Netzwerk vorhanden ist .
            Die Ausgabe erfolgt im LOG .

            /// ONVIF Ausgabe ioBroker 01.01.2020 Glasfaser
            
            const onvif = require('node-onvif');// 
            
            console.log('Start the discovery process.');
            // Find the ONVIF network cameras.
            // It will take about 3 seconds.
            onvif.startProbe().then((device_info_list) => {
             console.log(device_info_list.length + ' devices were found.');
             // Show the device name and the URL of the end point.
             device_info_list.forEach((info) => {
               console.log('- ' + info.urn);
               console.log('  - ' + info.name);
               console.log('  - ' + info.xaddrs[0]);
             });
            }).catch((error) => {
             console.error(error);
            });
            
            

            A Offline
            A Offline
            Alexxx2005
            wrote on last edited by Alexxx2005
            #65

            @Glasfaser

            tolles Skript von dir , ja er meldet bei mir das er etwas findet allerdings unter 8080

            javascript.0
            2020-01-13 21:04:04.629
            info
            (9808) script.js.common.Onvif_testen: - http://192.168.86.34:8080/onvif/device_service 
            javascript.0
            2020-01-13 21:04:04.629
            info
            (9808) script.js.common.Onvif_testen: - IPCAM 
            

            Habe jetzt mal das WebInterface der Kamera geöffnet wenn ich dann die
            Kamera im VIS bewege , bewegt sie sich auch im WebInterface , ich verstehe
            nur nicht warum das Widget kein Bild anzeigt , als Quelle wird hier auf :

            {javascript.0.Xeoma.Kamera.1.IP} verwiesen , benötige ich ein weiteres Skript
            zum Bild anzeigen ?

            Grüße Alex

            1 Reply Last reply
            0
            • A Offline
              A Offline
              Alexxx2005
              wrote on last edited by
              #66

              Ich vermute das hat mit diesem hier noch zu tun :

              const dest_path = 'C:/Program Files/iobroker/SmartHome/iobroker-data/webcam/'; // OS X Pfad
              
              const pfad = 'javascript.' + instance + '.VIS.Kamera.1.PTZ.';
              

              hier meckert er noch das der Pfad auch nicht stimmt 😕

              GlasfaserG 1 Reply Last reply
              0
              • A Alexxx2005

                Ich vermute das hat mit diesem hier noch zu tun :

                const dest_path = 'C:/Program Files/iobroker/SmartHome/iobroker-data/webcam/'; // OS X Pfad
                
                const pfad = 'javascript.' + instance + '.VIS.Kamera.1.PTZ.';
                

                hier meckert er noch das der Pfad auch nicht stimmt 😕

                GlasfaserG Offline
                GlasfaserG Offline
                Glasfaser
                wrote on last edited by Glasfaser
                #67

                @Alexxx2005

                Er hat doch Windows ... du nicht 😉
                Nimm das erstmal als Füller ... :

                const dest_path = '/opt/iobroker/iobroker-data/files/vis.0/snapsonvif.jpg';
                

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

                @Glasfaser
                Habe jetzt mal das WebInterface der Kamera geöffnet wenn ich dann die
                Kamera im VIS bewege , bewegt sie sich auch im WebInterface , ich verstehe
                nur nicht warum das Widget kein Bild anzeigt , als Quelle wird hier auf :
                {javascript.0.Xeoma.Kamera.1.IP} verwiesen , benötige ich ein weiteres Skript
                zum Bild anzeigen ?

                Meinst du das :
                Dort kannst du deine URL auch eingeben (Snapshot )

                http://user:passwort@.......

                1.JPG

                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 Reply Last reply
                0
                • A Offline
                  A Offline
                  Alexxx2005
                  wrote on last edited by
                  #68

                  @Glasfaser said in [Frage]Skript zur Steuerung ONVIF Kameras:

                  snapsonvif.jpg';

                  Okay ja ich benötige einen Windows Pfad da iobroker bei mir auf einem
                  Nuc mit Windows läuft.

                  Verstehe jetzt nur nicht ob die Klammern \ oder so / hin müssen normal ja :

                  C:\Program Files\iobroker\SmartHome\iobroker-data\files\vis.0\snap.jpg
                  

                  Das nächste große Problem ist wie finde ich die Snapshot URL heraus
                  da es sich um eine Kamera handelt die nicht so gängig ist (5MP YoLuke
                  PTZ) , habe ich mit dem Programm Ispy64 hunderte URL`s ermittelt aber
                  die wo ich mal getestet haben gehen nicht :

                  rtsp://admin:admin@192.168.86.34:554/1
                  rtsp://192.168.86.34/12:
                  http://admin:admin@192.168.86.34/snap.jpg?JpegCam=0
                  

                  Kennst du zufällig Möglichkeiten oder gibt es ein Skript sowas auszulesen ?

                  Danke, Grüße Alex

                  GlasfaserG 1 Reply Last reply
                  0
                  • A Alexxx2005

                    @Glasfaser said in [Frage]Skript zur Steuerung ONVIF Kameras:

                    snapsonvif.jpg';

                    Okay ja ich benötige einen Windows Pfad da iobroker bei mir auf einem
                    Nuc mit Windows läuft.

                    Verstehe jetzt nur nicht ob die Klammern \ oder so / hin müssen normal ja :

                    C:\Program Files\iobroker\SmartHome\iobroker-data\files\vis.0\snap.jpg
                    

                    Das nächste große Problem ist wie finde ich die Snapshot URL heraus
                    da es sich um eine Kamera handelt die nicht so gängig ist (5MP YoLuke
                    PTZ) , habe ich mit dem Programm Ispy64 hunderte URL`s ermittelt aber
                    die wo ich mal getestet haben gehen nicht :

                    rtsp://admin:admin@192.168.86.34:554/1
                    rtsp://192.168.86.34/12:
                    http://admin:admin@192.168.86.34/snap.jpg?JpegCam=0
                    

                    Kennst du zufällig Möglichkeiten oder gibt es ein Skript sowas auszulesen ?

                    Danke, Grüße Alex

                    GlasfaserG Offline
                    GlasfaserG Offline
                    Glasfaser
                    wrote on last edited by
                    #69

                    @Alexxx2005

                    Mit dem Windows Pfad kann ich dir nicht helfen ….

                    Kennst du zufällig Möglichkeiten oder gibt es ein Skript sowas auszulesen ?

                    Von Jey Cee der Adapter onvif v0.1.x , ist sehr gut !

                    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 Reply Last reply
                    0
                    • A Offline
                      A Offline
                      Alexxx2005
                      wrote on last edited by
                      #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 Reply Last reply
                      0
                      • B Offline
                        B Offline
                        BamBam89
                        wrote on last edited by
                        #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 Reply Last reply
                        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
                          wrote on last edited by 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 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! 😄

                            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
                            wrote on last edited by 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 Reply Last reply
                            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
                              wrote on last edited by
                              #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 Reply Last reply
                              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
                                wrote on last edited by
                                #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 Reply Last reply
                                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
                                  wrote on last edited by
                                  #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 Reply Last reply
                                  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
                                    wrote on last edited by
                                    #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 Reply Last reply
                                    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
                                      wrote on last edited by 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 🤗

                                      1 Reply Last reply
                                      0
                                      • B Offline
                                        B Offline
                                        Bully85
                                        wrote on last edited by
                                        #79

                                        Hallo welches Widget benutzt ihr um den livestream anzuzeigen?

                                        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

                                        55

                                        Online

                                        32.4k

                                        Users

                                        81.3k

                                        Topics

                                        1.3m

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

                                        • Don't have an account? Register

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