NEWS
Update v8.3.1 fehlerhafte Skripte
-
Guten Tag zusammen,
ich habe mich versucht an den Lösungsvorschlägen, die ich bisher finden konnte. Mein Level ist aber nicht so hoch, als dass ich es momentan lösen kann.
Zu erst waren alle meine NPM-Module verschwunden - bis auf jetzt neu eingefügte Modul "execljs" habe ich da im Moment nichts stehen.Nun ergibt das folgende Script, was bis zum Update ohne Fehler lief, eine längere Fehlerliste und es scheint meine beiden NAS mit Anfragen zu bombardieren, die sind nämlich jetzt per Webinterface nicht mehr erreichbar. Ich hatte mich gewundert, dass die erste in die Knie gegangen ist, mit der zweiten (unten ip_2) habe ich dass durch Test jetzt nachvollziehbar auch geschafft.
Das Script habe ich gekürzt. Die Zeile 241 in der Fehlermeldung ist im hier gezeigten Script die Zeile 22.
const ip_2 = "xxx"; // IP-Adresse eures Synology-NAS const port = yyy; // default Port der Surveillance Station var iplong_2 = 'http://' + ip_2 + ':' + port + '/webapi/'; const cameraID_mobil = 1; const cameraID_mobil_text = 'Mobil'; var request = require('request'); var fs = require('fs'); var url_login_2 = iplong_2 + 'auth.cgi?api=SYNO.API.Auth&version=3&method=login&account=' + user + '&passwd=' + pass + '&session=SurveillanceStation&format=sid'; // ÖFFNUNG DER HAUSTÜR on({id: path_link + 'Eingang.Kontakt_Haustür.State', val:1, change: 'ne'}, function (obj) { bewegung(iplong_2, url_login_2, cameraID_mobil, cameraID_mobil_text); }); function bewegung (iplong, url_login, cameraID, cameraIDtext){ // EINLOGGEN IN DIE SYNOLOGY SURVEILLANCESTATION request(url_login, function(error, response, body){ var my_sid = JSON.parse(body).data.sid; // ======================== // 2.3.4.5 GetSnapshot method var url_GetSnapshot = iplong + 'entry.cgi?version=9&id='+cameraID+'&api="SYNO.SurveillanceStation.Camera"&method="GetSnapshot"&profileType=1&_sid=' + my_sid; //console.log('url_GetSnapshot: ' + url_GetSnapshot); // ======================== //2.3.34.8 TakeSnapshot method var url_Snapshot = iplong + 'entry.cgi?camId='+cameraID+'&version="1"&blSave=true&api="SYNO.SurveillanceStation.SnapShot"&dsId=0&method="TakeSnapshot"&_sid=' + my_sid; // ======================== // 2.3.10.1 (External) Record method => OK var url_RecordStart = iplong + 'entry.cgi?api=SYNO.SurveillanceStation.ExternalRecording&method=Record&version=1&cameraId='+cameraID+'&action=start&_sid=' + my_sid; var url_RecordStop = iplong + 'entry.cgi?api=SYNO.SurveillanceStation.ExternalRecording&method=Record&version=1&cameraId='+cameraID+'&action=stop&_sid=' + my_sid; // ======================== var filename = '/home/iobroker/' + GetCurrentTimeStamp() + '_Snap_Reolink_'+cameraIDtext+'.jpg'; request.get({url: url_GetSnapshot, encoding: 'binary'}, function(error, response, body){ fs.writeFile(filename, body, 'binary', function(err){ function fake(){} setTimeout(fake,1000); //(28.07.2023)g_pushover('Bewegung ',6,filename,'tugboat'); //Speichert Snapshot auch auf der Synology request(url_Snapshot,function(error, response, body) {}); request(url_RecordStart,function(error, response, body) {}); setTimeout(function() { // weitere Befehle request(url_RecordStop,function(error, response, body) {}); //AUSLOGGEN var url_logout = iplong + 'auth.cgi?api=SYNO.API.Auth&method=Logout&version=2&session=SurveillanceStation&_sid=' + my_sid; request.get({url: url_logout, encoding: 'binary'},function (error){}); }, 6000); }); }); }); };
Die Zeile 297 in der Fehlermeldung ist im hier gezeigten Script die Zeile 1.
function formatTwoDigits(n) { return n < 10 ? '0' + n : n; } function GetCurrentTimeStamp() { var now = new Date(); var dd = now.getDate(); var mm = now.getMonth()+1; var yyyy = now.getFullYear(); dd = formatTwoDigits(dd); mm = formatTwoDigits(mm); var hours = formatTwoDigits(now.getHours()); var minutes = formatTwoDigits(now.getMinutes()); var seconds = formatTwoDigits(now.getSeconds()); var TimeStampString = yyyy + "." + mm + "." + dd + "_" + hours + ":" + minutes + ":" + seconds; return TimeStampString; }
Ich bin ziemlich ratlos, zumal ich mit dem Folgenden ebenfalls nicht so recht viel anfangen kann:
javascript.0 2024-06-09 17:58:22.716 warn script.js.Homedingskacke.Sicherheit_Alarmanlage: request package is deprecated - please use httpGet (or a stable lib like axios) instead!
Und zu Schluss ist durch die Umprogrammierung nun auch noch das hinzugekommen.
pushover.0 2024-06-09 18:08:01.117 error Error from Pushover: SyntaxError: Unexpected token < in JSON at position 0
Also seht es mir bitte, bitte nach - an sich versuche ich mich schon immer mit Testscripts, aber dies ist für mich jetzt eine Nummer zu groß.
In der Hoffnung, dass mir einer einer helfen kann, viele Grüße, Martin -
- https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#httpget
- https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/upgrade-guide.md
Und:
const fs = require('node:fs'); const user = 'bla'; // Username const pass = '!!!'; // Password const ip = 'xxx'; // IP-Adresse eures Synology-NAS const port = 1234; // default Port der Surveillance Station const baseUrlApi = `http://${ip}:${port}/webapi/`; const defaultTimeout = 3000; const urlLogin = `${baseUrlApi}auth.cgi?api=SYNO.API.Auth&version=3&method=login&account=${user}&passwd=${pass}&session=SurveillanceStation&format=sid`; // ÖFFNUNG DER HAUSTÜR on({ id: path_link + 'Eingang.Kontakt_Haustür.State', val: 1, change: 'ne' }, (obj) => { bewegung(1, 'Mobil'); }); function bewegung (cameraID, cameraIDtext) { // EINLOGGEN IN DIE SYNOLOGY SURVEILLANCESTATION httpGet(urlLogin, { timeout: defaultTimeout }, (err, response) => { if (!err) { const mySid = JSON.parse(response.data).data.sid; // ======================== // 2.3.4.5 GetSnapshot method const urlGetSnapshot = `${baseUrlApi}entry.cgi?version=9&id=${cameraID}&api=SYNO.SurveillanceStation.Camera&method=GetSnapshot&profileType=1&_sid=${mySid}`; //console.log('urlGetSnapshot: ' + urlGetSnapshot); // ======================== //2.3.34.8 TakeSnapshot method const urlSnapshot = `${baseUrlApi}entry.cgi?api=SYNO.SurveillanceStation.SnapShot&method=TakeSnapshot&version=1&camId=${cameraID}&blSave=true&dsId=0&_sid=${mySid}`; // ======================== // 2.3.10.1 (External) Record method => OK const urlRecordStart = `${baseUrlApi}entry.cgi?api=SYNO.SurveillanceStation.ExternalRecording&method=Record&version=1&cameraId=${cameraID}&action=start&_sid=${mySid}`; const urlRecordStop = `${baseUrlApi}entry.cgi?api=SYNO.SurveillanceStation.ExternalRecording&method=Record&version=1&cameraId=${cameraID}&action=stop&_sid=${mySid}`; // ======================== const urlLogout = `${baseUrlApi}auth.cgi?api=SYNO.API.Auth&method=Logout&version=2&session=SurveillanceStation&_sid=${mySid}`; httpGet(urlGetSnapshot, { timeout: defaultTimeout }, { responseType: 'arraybuffer' }, (err, response) => { const filename = `/home/iobroker/${formatDate(new Date(), 'YYYY.MM.DD_hh:mm:ss')}_Snap_Reolink_${cameraIDtext}.jpg`; fs.writeFile(filename, response.data, 'binary', (err) => { // Speichert Snapshot auch auf der Synology httpGet(urlSnapshot, { timeout: defaultTimeout }, (err, response) => {}); httpGet(urlRecordStart, { timeout: defaultTimeout }, (err, response) => {}); setTimeout(() => { httpGet(urlRecordStop, { timeout: defaultTimeout }, (err, response) => { httpGet(urlLogout, { timeout: defaultTimeout }, (err, response) => {}); }); }, 6000); }); }); } else { console.error(err); } }); }
EDIT: Anführungszeichen in Urls entfernt (was machen die da?) + Error-Handling
-
@peterpan sagte in Update v8.3.1 fehlerhafte Skripte:
zumal ich mit dem Folgenden ebenfalls nicht so recht viel anfangen kann:
das ist doch ganz deutlich, oder etwa nicht?
@peterpan sagte in Update v8.3.1 fehlerhafte Skripte:
javascript.0 2024-06-09 17:58:22.716 warn script.js.Homedingskacke.Sicherheit_Alarmanlage: request package is deprecated - please use httpGet (or a stable lib like axios) instead!
Du verwendest eine abgekündigte Version und sollst sie ersetzen
-
@haus-automatisierung Vielen Dank für die Antwort und die Bearbeitung des Skriptes, was mir an den Stellen mit "request" dann in der Übersetzung geholfen hat. Mit der Änderung der Variablen würde ich mich dann später beschäftigen ... Ich habe versucht, die geänderte Schreibweise zu übernehmen, bekomme jetzt eine Fehlermeldung, dass kein Inhalt drin ist.
Könnte es daranliegen, dass die NAS aktuell keine Antwort durch ihre Überlastung geben kann?
Zuvor hatte ich "console.log" hinter der Variablen stehen, da erhielt ich
2024-06-09 20:28:46.008 error script.js.Homedingskacke.Fehler: timeout of 2000ms exceeded javascript.0 2024-06-09 20:28:46.008 info script.js.Homedingskacke.Fehler: null
Codeauszug:
httpGet(url_login, function(err, response){ console.log('data: ', response.data); console.error('Error: ',err); var my_sid = JSON.parse(response.data).data.sid; ...
Fehlermeldung dazu:
avascript.0 2024-06-09 20:32:06.530 error at processTimers (node:internal/timers:512:7) javascript.0 2024-06-09 20:32:06.529 error at listOnTimeout (node:internal/timers:538:9) javascript.0 2024-06-09 20:32:06.529 error at runNextTicks (node:internal/process/task_queues:60:5) javascript.0 2024-06-09 20:32:06.529 error at /opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1217:38 javascript.0 2024-06-09 20:32:06.529 error at Object.<anonymous> (script.js.Homedingskacke.Fehler:243:47) javascript.0 2024-06-09 20:32:06.528 error Error in callback: TypeError: Cannot read properties of null (reading 'data') javascript.0 2024-06-09 20:32:06.526 error script.js.Homedingskacke.Fehler: Error: javascript.0 2024-06-09 20:32:06.525 info script.js.Homedingskacke.Fehler: data:
Viele Grüße!
-
@peterpan sagte in Update v8.3.1 fehlerhafte Skripte:
rror at Object.<anonymous> (script.js.Homedingskacke.Fehler:243:47)
und was steht an dieser Stelle?
Möglicherweise ist der Timeout zu kurz und dies ein Folgefehler weil kein data.response kommt
-
@homoran Ja, für viele sicher offensichtlich und auch ich hatte gefunden, dass man request gegen httpget tauschen muss. Aber für mich ist es schon mit Unsicherheit behaftet, dann dies auch aus request.get zu übertragen. Ich gebe dir recht, aber als jemand, der sich aus Skript-Schnipsel aus dem Forum ernährt, ist vieles erst einmal nicht so offensichtlich.
-
@homoran Es ist dann die Zeile nach der Variablen my_sid:
var url_GetSnapshot = iplong + 'entry.cgi?version=9&id='+cameraID+'&api="SYNO.SurveillanceStation.Camera"&method="GetSnapshot"&profileType=1&_sid=' + my_sid;
-
@peterpan sagte in Update v8.3.1 fehlerhafte Skripte:
Könnte es daranliegen, dass die NAS aktuell keine Antwort durch ihre Überlastung geben kann?
Du kannst den Timeout auch mitgeben und erhöhen. Siehe Link oben zur Doku.
-
@peterpan sagte in Update v8.3.1 fehlerhafte Skripte:
Es ist dann die Zeile
und wo ist Position 47? (incl. Einrückung)
ist am Handy schwer abzuzählen. -
@homoran sagte in Update v8.3.1 fehlerhafte Skripte:
@peterpan sagte in Update v8.3.1 fehlerhafte Skripte:
Es ist dann die Zeile
und wo ist Position 47? (incl. Einrückung)
ist am Handy schwer abzuzählen.Hi, tut mir leid, ich bin im Skript verrutscht, die ist die richtige Zeile:
var my_sid = JSON.parse(response.data).data.sid;
Position ist das zweite "data".
-
@peterpan sagte in Update v8.3.1 fehlerhafte Skripte:
Position ist das zweite "data".
dann wird
@homoran sagte in Update v8.3.1 fehlerhafte Skripte:
dies ein Folgefehler weil kein response.data kommt
sein.
-
@homoran @haus-automatisierung
@homoran sagte in Update v8.3.1 fehlerhafte Skripte:
dies ein Folgefehler weil kein response.data kommt
sein.
Ich habe jetzt wieder zu einer NAS Kontakt und das timeout hoch gesetzt. Es ist klar das "response.data" leer.
javascript.0 2024-06-09 21:49:08.474 info script.js.Homedingskacke.Fehler: mysid: javascript.0 2024-06-09 21:49:08.473 error script.js.Homedingskacke.Fehler: Error: javascript.0 2024-06-09 21:49:08.470 info script.js.Homedingskacke.Fehler: data:
Ich versuche mich morgen und vermutlich die Tage mit Ersetzung der Variablen.
Ganz lieben Dank für eure Unterstützung!
Viele Grüße
-
@peterpan Hab das Script oben nochmal angepasst. Waren teilweise irgendwelche Anführungszeichen um die GET-Parameter (warum das? und warum nur bei manchen?).
-
@haus-automatisierung sagte in Update v8.3.1 fehlerhafte Skripte:
@peterpan Hab das Script oben nochmal angepasst. Waren teilweise irgendwelche Anführungszeichen um die GET-Parameter (warum das? und warum nur bei manchen?).
Besten Dank, schaue ich mir in Ruhe an, da brauche ich etwas mehr Zeit für. Bezüglich der Anführungszeichen sind die Skripte ein wenig historisch gewachsen (und nicht von mir nachgezogen).
Viele Grüße
-
@homoran @haus-automatisierung
Ich wollte jetzt doch auch nach längerer Zeit ein kurzes Feedback geben.
Es lag am timeout, welches ich jetzt noch etwas höher gestellt habe, ich hatte zuvor das Script auf das Minimum reduziert und dann mit der verlinkten Anleitung und mit eurer Skriptbearbeitung alles wieder ans Laufen bekommen. Ebenso habe ich das Error-Handling eingefügt und die Anführungszeichen sind nicht mehr da :). Herzlichen Dank dafür!!
VG
-
Moin!
Geht bei Dir die //2.3.34.8 TakeSnapshot method noch?
Habe am Wochenende DSM auf 7.2.2 upgedatetd und in diesem Zuge wurde auch die SurvillanceStation upgedated...
sietdem geht obige Funktion bei mir nicht mehr...- sid holen geht
- Snapshot anzeigen geht
Nur einen Snapshot speichern und die Nummer zurückzubekommen geht nicht mehr...
bis denne
Mr.Lee -
Hi Mr.Lee,
ich bin auch auf DMS 7.2.2. Ich hole mir nach Einloggen an der Surveillance Station den Snapshot (Abschnitt 2.3.4.5) und speichere ihn im home-Verzeichnis des iobrokers, damit ich mit pushover dieses Bild mit einer Nachricht aufs Handy bekomme. Weiterhin speichere ein kleinen Film auf der NAS (Abschnitt 2.3.10.1) als "Backup". Allerdings finde ich auch kein Bild nach Abschnitt 2.3.34.8, also TakeSnapshot.
Muss ich mir anschauen - falls du eine Lösung finden solltest, würd ich mich über eine Info freuen.
VG peterpan