NEWS
Dahua Camera Snapshot mit axios
-
Hallo,
ich verzweifele daran einen Snapshot einer Dahua/Alhua Kamera per axios oder httpGet zu bekommen. Mit request hatte es funktioniert, aber jetzt bekomme ich nur Fehler 401, also Anmeldefehler.
Habe es mit httpGet und auch direkt mit axios.get probiert, user/pw in der url oder als auth Parameter, geht alles nicht. Hat jemand eine Idee?const axios = require('axios'); function sendImage() { console.info('Test SendImage'); // httpGet('http://viewer:123456@192.168.10.200/cgi-bin/snapshot.cgi', // encoding null for write to buffer httpGet('http://192.168.10.200/cgi-bin/snapshot.cgi', // encoding null for write to buffer { responseType: 'arraybuffer', basicAuth: { user: 'viewer', password: '123456' } }, (error, response) => { console.warn('response statuscode: ' + response.statusCode); console.warn('response data length: ' + response.data.length); console.log(response.headers); console.log(error); if (!error) { console.log('sendTo Telegram.0'); writeFile('0_userdata.0', 'test-sendimage.jpg', response.data, (err) => { if (err) { console.error(err); } }); // sendTo('telegram.0', {text: response.data, type: 'photo', caption: 'Test Test'}); } else { console.log(error); } } ); } function sendImage2() { // read image // axios.get('http://viewer:123456@192.168.10.200/cgi-bin/snapshot.cgi', { axios.get('http://192.168.10.200/cgi-bin/snapshot.cgi', { auth: { username: 'viewer', password: '123456' } }) .then(function (response) { // handle success console.log(response.statusCode); }) .catch(function (error) { // handle error console.log(error); }) .finally(function () { // always executed }); } sendImage2();Fehler von der httpGet Version:
javascript.0 00:37:13.402 info Stopping script script.js.common.TestSendImage javascript.0 00:37:13.489 info Start JavaScript script.js.common.TestSendImage (Javascript/js) javascript.0 00:37:13.502 info script.js.common.TestSendImage: Test SendImage javascript.0 00:37:13.503 info script.js.common.TestSendImage: httpGet(config={"method":"get","url":"http://192.168.10.200/cgi-bin/snapshot.cgi","responseType":"arraybuffer","responseEncoding":"utf8","timeout":2000,"auth":{"username":"viewer","password":"123456"},"headers":{"User-Agent":"Mozilla/5.0 (X11; Linux i686; rv:109.0) Gecko/20100101 Firefox/121.0"}}) javascript.0 00:37:13.504 info script.js.common.TestSendImage: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions javascript.0 00:37:13.534 info script.js.common.TestSendImage: httpGet(url=http://192.168.10.200/cgi-bin/snapshot.cgi, responseTime=31ms) javascript.0 00:37:13.534 warn script.js.common.TestSendImage: response statuscode: 401 javascript.0 00:37:13.534 warn script.js.common.TestSendImage: response data length: 0 javascript.0 00:37:13.534 info script.js.common.TestSendImage: Object [AxiosHeaders] { 'www-authenticate': 'Digest realm="Login to fa37801de3adf33db0a8c0fb69a45df5", qop="auth", nonce="1355095432", opaque="da3a7775ef776651c4b36d707fb55fcc1a4335d8"', connection: 'close', 'content-length': '0' } javascript.0 00:37:13.534 info script.js.common.TestSendImage: null javascript.0 00:37:13.534 info script.js.common.TestSendImage: sendTo Telegram.0 javascript.0 00:37:13.535 info script.js.common.TestSendImage: writeFile(adapter=0_userdata.0, fileName=test-sendimage.jpg)mit curl bekomme ich ein image:
curl -o image.jpg --digest --user viewer:123456-O "http://192.168.10.200/cgi-bin/snapshot.cgi"edit:
nach weiterem suchen finde ich das axios wohl kein 'digest auth' kann, wurde in den issues vielfach gewünscht. Request kann es mit sendImmediately=false.
Kann ich ein npm Modul wie axios-digest-auth benutzen? JavaScript ist nicht meine Muttersprache... -
Hallo,
ich verzweifele daran einen Snapshot einer Dahua/Alhua Kamera per axios oder httpGet zu bekommen. Mit request hatte es funktioniert, aber jetzt bekomme ich nur Fehler 401, also Anmeldefehler.
Habe es mit httpGet und auch direkt mit axios.get probiert, user/pw in der url oder als auth Parameter, geht alles nicht. Hat jemand eine Idee?const axios = require('axios'); function sendImage() { console.info('Test SendImage'); // httpGet('http://viewer:123456@192.168.10.200/cgi-bin/snapshot.cgi', // encoding null for write to buffer httpGet('http://192.168.10.200/cgi-bin/snapshot.cgi', // encoding null for write to buffer { responseType: 'arraybuffer', basicAuth: { user: 'viewer', password: '123456' } }, (error, response) => { console.warn('response statuscode: ' + response.statusCode); console.warn('response data length: ' + response.data.length); console.log(response.headers); console.log(error); if (!error) { console.log('sendTo Telegram.0'); writeFile('0_userdata.0', 'test-sendimage.jpg', response.data, (err) => { if (err) { console.error(err); } }); // sendTo('telegram.0', {text: response.data, type: 'photo', caption: 'Test Test'}); } else { console.log(error); } } ); } function sendImage2() { // read image // axios.get('http://viewer:123456@192.168.10.200/cgi-bin/snapshot.cgi', { axios.get('http://192.168.10.200/cgi-bin/snapshot.cgi', { auth: { username: 'viewer', password: '123456' } }) .then(function (response) { // handle success console.log(response.statusCode); }) .catch(function (error) { // handle error console.log(error); }) .finally(function () { // always executed }); } sendImage2();Fehler von der httpGet Version:
javascript.0 00:37:13.402 info Stopping script script.js.common.TestSendImage javascript.0 00:37:13.489 info Start JavaScript script.js.common.TestSendImage (Javascript/js) javascript.0 00:37:13.502 info script.js.common.TestSendImage: Test SendImage javascript.0 00:37:13.503 info script.js.common.TestSendImage: httpGet(config={"method":"get","url":"http://192.168.10.200/cgi-bin/snapshot.cgi","responseType":"arraybuffer","responseEncoding":"utf8","timeout":2000,"auth":{"username":"viewer","password":"123456"},"headers":{"User-Agent":"Mozilla/5.0 (X11; Linux i686; rv:109.0) Gecko/20100101 Firefox/121.0"}}) javascript.0 00:37:13.504 info script.js.common.TestSendImage: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions javascript.0 00:37:13.534 info script.js.common.TestSendImage: httpGet(url=http://192.168.10.200/cgi-bin/snapshot.cgi, responseTime=31ms) javascript.0 00:37:13.534 warn script.js.common.TestSendImage: response statuscode: 401 javascript.0 00:37:13.534 warn script.js.common.TestSendImage: response data length: 0 javascript.0 00:37:13.534 info script.js.common.TestSendImage: Object [AxiosHeaders] { 'www-authenticate': 'Digest realm="Login to fa37801de3adf33db0a8c0fb69a45df5", qop="auth", nonce="1355095432", opaque="da3a7775ef776651c4b36d707fb55fcc1a4335d8"', connection: 'close', 'content-length': '0' } javascript.0 00:37:13.534 info script.js.common.TestSendImage: null javascript.0 00:37:13.534 info script.js.common.TestSendImage: sendTo Telegram.0 javascript.0 00:37:13.535 info script.js.common.TestSendImage: writeFile(adapter=0_userdata.0, fileName=test-sendimage.jpg)mit curl bekomme ich ein image:
curl -o image.jpg --digest --user viewer:123456-O "http://192.168.10.200/cgi-bin/snapshot.cgi"edit:
nach weiterem suchen finde ich das axios wohl kein 'digest auth' kann, wurde in den issues vielfach gewünscht. Request kann es mit sendImmediately=false.
Kann ich ein npm Modul wie axios-digest-auth benutzen? JavaScript ist nicht meine Muttersprache...ich habe es endlich hinbekommen.
Mit dem npm Modul mhoc/axios-digest-auth ging es:const axios = require('axios'); const AxiosDigestAuth = require('@mhoc/axios-digest-auth').default; const options = { axios, username: "viewer", password: "123456", }; const axiosDigestAuthInst = new AxiosDigestAuth(options); const ExecuteMyRequest = async () => { const requestOptions = { responseType: 'arraybuffer', method: "GET", url: "http://192.168.10.200/cgi-bin/snapshot.cgi" } const response = await axiosDigestAuthInst.request(requestOptions); console.log(response.status); sendTo('telegram.0', {text: response.data, type: 'photo', caption: 'Test Test'}); writeFile('0_userdata.0', 'test-sendimage.jpg', response.data, (err) => { if (err) { console.error(err); } }); console.log('request done.'); }; function sendImage3() { ExecuteMyRequest(); } sendImage3();Das Modul axios-digest-auth ist nicht in der ioBroker Installation drin, muss also noch in den Javascript Adaptereinstellungen hinzugefügt werden.
-
ich habe es endlich hinbekommen.
Mit dem npm Modul mhoc/axios-digest-auth ging es:const axios = require('axios'); const AxiosDigestAuth = require('@mhoc/axios-digest-auth').default; const options = { axios, username: "viewer", password: "123456", }; const axiosDigestAuthInst = new AxiosDigestAuth(options); const ExecuteMyRequest = async () => { const requestOptions = { responseType: 'arraybuffer', method: "GET", url: "http://192.168.10.200/cgi-bin/snapshot.cgi" } const response = await axiosDigestAuthInst.request(requestOptions); console.log(response.status); sendTo('telegram.0', {text: response.data, type: 'photo', caption: 'Test Test'}); writeFile('0_userdata.0', 'test-sendimage.jpg', response.data, (err) => { if (err) { console.error(err); } }); console.log('request done.'); }; function sendImage3() { ExecuteMyRequest(); } sendImage3();Das Modul axios-digest-auth ist nicht in der ioBroker Installation drin, muss also noch in den Javascript Adaptereinstellungen hinzugefügt werden.
@jojos Gute Lösung - muss ich gelegentlich mal ausprobieren!
Ich hatte ebenfalls verschiedene Ansätze probiert und schließlich als Lösung 'motioneye' auf meinem NAS in einem Docker-Container installiert. Aus diesem Programm lassen sich die Snapshots (und das Live-Video für die vis) ebenfalls abholen.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden