NEWS
[Frage]Skript zur Steuerung ONVIF Kameras
[Frage]Skript zur Steuerung ONVIF Kameras
-
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...
-
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 etwasBG dare
-
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 schedulesBeim Aufruf im Browser : http://192.168.86.34:80/onvif/device_service
meldet er mir :
Error 404: Not Found File not foundGrüße Alex
-
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 schedulesBeim Aufruf im Browser : http://192.168.86.34:80/onvif/device_service
meldet er mir :
Error 404: Not Found File not foundGrüße Alex
Hast du ONVIF in der Kamera freigegeben !?
Hiermit kannst du es testen , ob ein ONVIF im Netzwerk vorhanden ist .
Die Ausgabe erfolgt im LOG . -
Hast du ONVIF in der Kamera freigegeben !?
Hiermit kannst du es testen , ob ein ONVIF im Netzwerk vorhanden ist .
Die Ausgabe erfolgt im LOG .tolles Skript von dir , ja er meldet bei mir das er etwas findet allerdings unter 8080
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
-
Ich vermute das hat mit diesem hier noch zu tun :
hier meckert er noch das der Pfad auch nicht stimmt

-
Ich vermute das hat mit diesem hier noch zu tun :
hier meckert er noch das der Pfad auch nicht stimmt

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

-
@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.jpgDas 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=0Kennst du zufällig Möglichkeiten oder gibt es ein Skript sowas auszulesen ?
Danke, Grüße Alex
-
@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.jpgDas 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=0Kennst du zufällig Möglichkeiten oder gibt es ein Skript sowas auszulesen ?
Danke, Grüße Alex
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 !
-
habe nun festgestellt das nach einem Iobroker neustart die URL
http://<IP>/web/tmpfs/snap.jpg http://Name:PW@<IP>/snap.jpg?JpegCam=1funktioniert.
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=2Grüße Alex
-
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
Aber wie komme ich nun an die Bilder?
Danke euch und schönes Wochenende
Gruß 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
Aber wie komme ich nun an die Bilder?
Danke euch und schönes Wochenende
Gruß BamBam89 -
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!

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
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 ?
-
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 ?
-
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.
@wiednitz könntest du eventl. deine gekürzte Version online stellen?
Habe ein ähnliches Problem und brauche eigentlich auch nur die gotopreset Funktion.
Danke -
@wiednitz könntest du eventl. deine gekürzte Version online stellen?
Habe ein ähnliches Problem und brauche eigentlich auch nur die gotopreset Funktion.
Dankeconst 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.
-
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.
@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=startSchwenken stop :
http://user:passwort@192.168.178.53/PTZ/channels/1/PTZControl?command=PAN_RIGHT&speed=1&mode=stop