NEWS
[Frage]Skript zur Steuerung ONVIF Kameras
-
Was ich schon komisch finde ist, dass laut der Beschreibung nach dem Scannen und Einbinden der Kamera ein Snapshot in der Instanz angezeigt werden sollte. Macht der aber nicht.
Trotzdem hat das Holen und Speichern des Bildes ja am Anfang funktioniert und jetzt wird immer "Error: 500 Web Error" angezeigt.
Hier das verwendete Skript:function kameraSnapshot() { const onvif = require('node-onvif'); //const fs = require('fs'); // Create an OnvifDevice object let device = new onvif.OnvifDevice({ xaddr: 'http://192.168.2.88:2000/onvif/device_service', user : 'nutzer', pass : 'passwort' }); // Initialize the OnvifDevice object device.init().then(() => { // Get the data of the snapshot console.log('fetching the data of the snapshot...'); return device.fetchSnapshot(); }).then((res) => { // Save the data to a file fs.writeFileSync('/opt/iobroker/iobroker-data/files/vis.0/snapshot.jpg', res.body, {encoding: 'binary'}); console.log('Done!'); device = null; // habe ich noch eingefügt, da ich mir nicht sicher bin ob das device auch wirklich wieder frei gegeben wird insb. wenn ich es in einem CRON - Job laufen lasse }).catch((error) => { console.error(error); }) } //Ende kameraSnapshot schedule('*/60 * * * * *', kameraSnapshot); // alle X Minuten setTimeout(kameraSnapshot, 2000);;

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

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
@pix Hi pix kannst du das script nochmal hochladen? Durch die Umstellung im Forum scheint es etwas durcheinander geraten zu sein.
-
@pix:Öhömmm :oops: Da habe ich wohl den Aufruf vergessen. Oder vielmehr habe ich vergessen, den Telegram Teil nach dem testen wieder rauszulöschen, denn das Zusenden nach Bewegungsalarm mache ich woanders. `
Hi Pix,
danke für das Script. Genial! Könntest Du mir vielleicht mitteilen wie Du das Zusenden nach Bewegungsalarm gelöst hast?
vg
Falk
-
@schittl Habe das Skript ganz oben im Thread nochmal bereinigt. Nach der Protierung zum neuen Forum haben sich tatsächlich einige falsche Zeichen eingeschlichen
@pix Vielen Dank!
-
@schittl Habe das Skript ganz oben im Thread nochmal bereinigt. Nach der Protierung zum neuen Forum haben sich tatsächlich einige falsche Zeichen eingeschlichen
@pix
Hi pix, ich habe s tatsächlich jetzt mit deinem Script hinbekommen eine onvif cam (Escam) zu steuern. Dennoch habe ich paar Fragen bzw. Probleme:-
Ich haber jetzt auf einer Testumgebung - ich weiß nicht wie oft und wo überall "node-onvif" installiert. Muss man "npm install -s node-onvif" überhaupt noch installieren wenn man den Adapter "ioBroker.onvif 0.0.2" installiert hat?
-
In meinem Fall setze ich in deinen Datenpunkten einen preset, enter, und dann heißt es warten, teilweise dauertg es bis zu 20 Sekunden bis die Cam zur gewünschten Position los fährt?
-
Mein JS-Adapter meckert die Zeile "const onvif = require('node-onvif')" mit [Cannot find module 'node-onvif'.] an? Wie gesagt ich habs x-mal installiert.
LG und danke für dein Script, wenn auch schwerfällig aber immerhin kann ich die Cam jetzt schon mal bewegen :-)
mxa -
-
Hallo,
schön, dass das Skript bei dir funktioniert.
- Ich habe den Adapter ioBroker.onvif nicht installiert. Kann dazu nichts sagen. Skripte im Adapter ioBroker.javascript erwarten die Definition Nodes in den Javascript-Adapter-Einstellungen (der entsprechenden Adapter-Instanz).
- Habe jetzt gerade nicht in den Code gesehen, aber du kannst zB im Bereich der Subscription on() für die Presets mal eine Log-Zeile einfügen (müsste aber schon da sein). Wenn du ein Preset änderst, reagiert das Skript sofort. Nur die Kamera eben nicht.
- siehe 1
Gruß
Pix -
Hallo,
schön, dass das Skript bei dir funktioniert.
- Ich habe den Adapter ioBroker.onvif nicht installiert. Kann dazu nichts sagen. Skripte im Adapter ioBroker.javascript erwarten die Definition Nodes in den Javascript-Adapter-Einstellungen (der entsprechenden Adapter-Instanz).
- Habe jetzt gerade nicht in den Code gesehen, aber du kannst zB im Bereich der Subscription on() für die Presets mal eine Log-Zeile einfügen (müsste aber schon da sein). Wenn du ein Preset änderst, reagiert das Skript sofort. Nur die Kamera eben nicht.
- siehe 1
Gruß
Pix@pix sagte in [Frage]Skript zur Steuerung ONVIF Kameras:
Skripte im Adapter ioBroker.javascript erwarten die Definition Nodes in den Javascript-Adapter-Einstellungen (der entsprechenden Adapter-Instanz).
Lieben Dank für deine Reaktion!
Kannst du mir das bitte für Dummis mit anderen Worten erklären?
In welches Verzeichnis muss ich auf der Commanzeile den Befehl "npm install -s node-onvif" eingeben?
LG & Dank im Voraus
mxa -
@pix sagte in [Frage]Skript zur Steuerung ONVIF Kameras:
Skripte im Adapter ioBroker.javascript erwarten die Definition Nodes in den Javascript-Adapter-Einstellungen (der entsprechenden Adapter-Instanz).
Lieben Dank für deine Reaktion!
Kannst du mir das bitte für Dummis mit anderen Worten erklären?
In welches Verzeichnis muss ich auf der Commanzeile den Befehl "npm install -s node-onvif" eingeben?
LG & Dank im Voraus
mxa@metaxa sagte in [Frage]Skript zur Steuerung ONVIF Kameras:
In welches Verzeichnis
erl.: iobroker.javascript, die Cam moved.
Nur sehr, sehr verspätet mit einer Verzögerung von gefühlten 10 Sekunden. Hat jemand eine Idee warum das so sein könnte, wo ich ansetzen kann zu suchen?
LG, mxa
-
Hallo Pix,
jetzt habe ich endlich verstanden, wofür man diese "zusätzlichen NPM-Module" im JS-Adapter benötigt, danke!Den alten, mit sudo händisch installierten, Ordner habe ich unbenannt, sodaß das Script nicht mehr funktionierte. Ich wollte es sauber installieren lt. deinen Angaben.
Leider nein:javascript.0 2019-05-12 10:24:40.700 error Cannot install node-onvif: 254 javascript.0 2019-05-12 10:24:40.686 error npm ERR! /home/iobroker/.npm/_logs/2019-05-12T08_24_40_586Z-debug.log javascript.0 2019-05-12 10:24:40.686 error npm ERR! A complete log of this run can be found in: javascript.0 2019-05-12 10:24:40.685 error javascript.0 2019-05-12 10:24:40.580 error npm ERR! enoent javascript.0 2019-05-12 10:24:40.580 error npm ERR! enoent This is related to npm not being able to find a file. javascript.0 2019-05-12 10:24:40.580 error ERR! enoent ENOENT: no such file or directory, access '/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-onvif' javascript.0 2019-05-12 10:24:40.579 error npm javascript.0 2019-05-12 10:24:40.576 error npm ERR! syscall access javascript.0 2019-05-12 10:24:40.576 error errno -2 javascript.0 2019-05-12 10:24:40.576 error npm ERR! javascript.0 2019-05-12 10:24:40.576 error npm ERR! code ENOENT javascript.0 2019-05-12 10:24:40.576 error ERR! path /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-onvif javascript.0 2019-05-12 10:24:40.574 error npm javascript.0 2019-05-12 10:24:39.419 error WARN checkPermissions Missing write access to /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-onvif javascript.0 2019-05-12 10:24:39.418 error npm javascript.0 2019-05-12 10:24:22.753 info npm install node-onvif --production --prefix "/opt/iobroker/node_modules/iobroker.javascript" (System call)Hier noch der Auszug aus dem angesprochenen Log:
0 info it worked if it ends with ok 1 verbose cli [ '/usr/bin/node', 1 verbose cli '/usr/bin/npm', 1 verbose cli 'install', 1 verbose cli 'node-onvif', 1 verbose cli '--production', 1 verbose cli '--prefix', 1 verbose cli '/opt/iobroker/node_modules/iobroker.javascript' ] 2 info using npm@6.7.0 3 info using node@v8.15.0 4 verbose npm-session ca193bb86e340986 5 silly install loadCurrentTree 6 silly install readLocalPackageData 7 http fetch GET 200 https://registry.npmjs.org/node-onvif 48ms (from cache) 8 silly pacote range manifest for node-onvif@^0.1.7 fetched in 71ms 9 timing stage:loadCurrentTree Completed in 4292ms 10 silly install loadIdealTree 11 silly install cloneCurrentTreeToIdealTree 12 timing stage:loadIdealTree:cloneCurrentTree Completed in 30ms 13 silly install loadShrinkwrap 14 timing stage:loadIdealTree:loadShrinkwrap Completed in 2346ms 15 silly install loadAllDepsIntoIdealTree 16 silly resolveWithNewModule node-onvif@0.1.7 checking installable status 17 silly removeObsoleteDep removing node-onvif@0.1.7 from the tree as its been replaced by a newer version or is no longer required 18 silly removeObsoleteDep removing html@1.0.0 from the tree as its been replaced by a newer version or is no longer required 19 silly removeObsoleteDep removing xml2js@0.4.19 from the tree as its been replaced by a newer version or is no longer required 20 silly removeObsoleteDep removing sax@1.2.4 from the tree as its been replaced by a newer version or is no longer required 21 silly removeObsoleteDep removing xmlbuilder@9.0.7 from the tree as its been replaced by a newer version or is no longer required 22 http fetch GET 200 https://registry.npmjs.org/xml2js 22ms (from cache) 23 http fetch GET 200 https://registry.npmjs.org/html 21ms (from cache) 24 silly pacote range manifest for xml2js@>=0.4.17 fetched in 29ms 25 silly resolveWithNewModule xml2js@0.4.19 checking installable status 26 silly pacote range manifest for html@>=1.0.0 fetched in 30ms 27 silly resolveWithNewModule html@1.0.0 checking installable status 28 http fetch GET 200 https://registry.npmjs.org/sax 29ms (from cache) 29 http fetch GET 200 https://registry.npmjs.org/xmlbuilder 30ms (from cache) 30 silly pacote range manifest for sax@>=0.6.0 fetched in 39ms 31 silly resolveWithNewModule sax@1.2.4 checking installable status 32 silly pacote range manifest for xmlbuilder@~9.0.1 fetched in 41ms 33 silly resolveWithNewModule xmlbuilder@9.0.7 checking installable status 34 timing stage:loadIdealTree:loadAllDepsIntoIdealTree Completed in 3498ms 35 timing stage:loadIdealTree Completed in 6921ms 38 silly install generateActionsToTake 39 silly diff-trees filtering actions: includeDev false includeProd true includeOpt true 40 warn checkPermissions Missing write access to /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-onvif 41 timing stage:rollbackFailedOptional Completed in 3ms 42 timing stage:runTopLevelLifecycles Completed in 11485ms 43 silly saveTree iobroker.javascript@4.1.12 44 verbose stack Error: ENOENT: no such file or directory, access '/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-onvif' 45 verbose cwd / 46 verbose Linux 4.4.174-rockchip 47 verbose argv "/usr/bin/node" "/usr/bin/npm" "install" "node-onvif" "--production" "--prefix" "/opt/iobroker/node_modules/iobroker.javascript" 48 verbose node v8.15.0 49 verbose npm v6.7.0 50 error path /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-onvif 51 error code ENOENT 52 error errno -2 53 error syscall access 54 error enoent ENOENT: no such file or directory, access '/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-onvif' 55 error enoent This is related to npm not being able to find a file. 56 verbose exit [ -2, true ]Sicherheitshalber habe ich - wie hier beschrieben - mt
sudo chown -R iobroker:iobroker /opt/iobroker/node_modules/iobroker.javascriptdie Rechte wieder zurecht gerückt.
Hast du eine Idee woran ich scheitere?
LG, mxa
-
Hallo,
du solltest den node über die EInstellungen vom Javascript Adapter installieren:

Gruß
Pix -
Hi , habe das Script am Laufen mit ner Foscam FI9938P. funktioniert soweit alles , ausser der Zoom in beide Richtungen... Hat jremand ne Idee?
Update: ist ein Firmware Fehler der Kamera... -
Hi,
kennt jemand auch eine einfachere Möglichkeit der PTZ Steuerung wie über http get (z.B. http//user:pw/192.168.1.15/onvif/steuerung/nach_links). Ich stelle mir das sicher zu einfach vor. Aber das wäre doch schön.
Gruß
Sylvio@melodoi
Kenne deine Kamera nicht bzw. wurde nicht angegeben .Bei meinen PTZ Hikvision habe ich es so, hier einige Beispiele:
links:
http://user:passwort@IPadresse/PTZ/channels/1/PTZControl?command=PAN_LEFT&speed=2&mode=start
rechts:
http://user:passwort@IPadresse//PTZ/channels/1/PTZControl?command=PAN_RIGHT&speed=2&mode=start
stop:
http://user:passwort@IPadresse//PTZ/channels/1/PTZControl?/PTZ/channels/1/PTZControl?command=PAN_RIGHT&speed=1&mode=stop
hier ein Widget davon : -
@melodoi
Kenne deine Kamera nicht bzw. wurde nicht angegeben .Bei meinen PTZ Hikvision habe ich es so, hier einige Beispiele:
links:
http://user:passwort@IPadresse/PTZ/channels/1/PTZControl?command=PAN_LEFT&speed=2&mode=start
rechts:
http://user:passwort@IPadresse//PTZ/channels/1/PTZControl?command=PAN_RIGHT&speed=2&mode=start
stop:
http://user:passwort@IPadresse//PTZ/channels/1/PTZControl?/PTZ/channels/1/PTZControl?command=PAN_RIGHT&speed=1&mode=stop
hier ein Widget davon :Hat das Script schonmal jemand erweitert um ptz Bewegung obenlinks, obenrechts, untenlinks, untenrechts, und die Funktion zum autonmatischen Abfahren der voreingestelleten Presetpositionen?
-
Hat das Script schonmal jemand erweitert um ptz Bewegung obenlinks, obenrechts, untenlinks, untenrechts, und die Funktion zum autonmatischen Abfahren der voreingestelleten Presetpositionen?
Das sollte gehen am Beispiel hoch rechts..
das mit den verschiedenen presets abfahren wäre mittels skript auch kein problem..Die Kamera hat dies alerdings on board muesste also auch mittels onvif gehen oder..
const idHochRechts = pfad + 'hochrechts'; createState(idHochRechts, false, fC, {def: false,name: 'Kamera 1 PTZ obenrechts',desc: 'Bewegung nach obenrechts',type: 'boolean',role: 'switch'}); on(idHochRechts, function (obj) { if (!obj.state.ack && obj.state.val) { var stoppzeit = getState(idStoppzeit).val; var speed = getState(idSpeed).val; movePTZ(1 * speed , 0, 0, stoppzeit); movePTZ(0, 1 * speed, 0, stoppzeit); setStateDelayed(idHochRechts, false, 500); } }); -
noch ne Frage ..habe noch Probleme mit dem profiletoken.
habe davon 2 in der Kamera... prof0 und prof1.
die scheinen immer abwechselnd aktiv zu sein...Wenn die Presetfahrt nicht funktioniert muss ich im script den profiletoken wieder ändern dann gehts wieder.
Wenn es wieder nicht geht wieder zurück zum anderen...Jemand ne Idee wie ich das lösen kann?var ptz = device.services.ptz; if (ptz) { var params = { 'ProfileToken': 'prof1', 'PresetToken' : presetNumber.toString(), 'Speed' : {'x': 1, 'y': 1, 'z': 1} }; -
noch ne Frage ..habe noch Probleme mit dem profiletoken.
habe davon 2 in der Kamera... prof0 und prof1.
die scheinen immer abwechselnd aktiv zu sein...Wenn die Presetfahrt nicht funktioniert muss ich im script den profiletoken wieder ändern dann gehts wieder.
Wenn es wieder nicht geht wieder zurück zum anderen...Jemand ne Idee wie ich das lösen kann?var ptz = device.services.ptz; if (ptz) { var params = { 'ProfileToken': 'prof1', 'PresetToken' : presetNumber.toString(), 'Speed' : {'x': 1, 'y': 1, 'z': 1} };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 -
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@Glasfaser danke, das funktioniert mit meiner cam leider nicht so...