NEWS
[Neuer Adapter] Reolink Kamera
-
@matzebhv v1.0.2 sollte aber wieder gehen.
-
@michael-schumann
Bin mir nicht sicher ob ich dir richtig folgen kann, aber alles unter Settings ist solange Null bis du es beschreibst.
Der Adapter kann das was du in den jeweiligen Datenunkt schreibst senden, aber nicht den Status abholen. Das sieht die API so noch nicht vor.
AudioAlarmPlay sagt mir nichts, wenn du damit playAlarm meinst, der steuert die Sirene. In den Datenpunkt kannst du eine Zahl schreiben. 0 = AUS, 1 = 1x Alarm, 2 = 2x Alarm abspielen usw. ob und welcher Wert das Maximum ist hab ich noch nicht probiert. Funktioniert hier sowohl mit einer E1 Zoom als auch mit einer E1 Outdoor POE. -
@oelison leider nein, grade nochmal probiert.
reolink.0 2023-12-22 15:02:24.131 error TypeError: Cannot read properties of undefined (reading 'DevInfo'): undefined reolink.0 2023-12-22 15:02:23.452 info Current IP: 192.168.178.236 reolink.0 2023-12-22 15:02:23.451 info Reolink adapter has started reolink.0 2023-12-22 15:02:23.442 info starting. Version 1.0.2 in /opt/iobroker/node_modules/iobroker.reolink, node: v18.19.0, js-controller: 5.0.17
-
@bommel_030
Ah so funktioniert das! Super vielen Dank, hat geklappt!
Allerdings nur bei meiner E1 Outdoor, nicht bei meiner E1 Zoom.
Jetzt muss ich mal in den Code schauen wieso ich das nicht selbst via API hinbekommen habe.Gibt es auch irgendwo das Setting um "Bei Bewegungserkennung wird Sirene automatisch ausgelöst" zu aktiveren?
-
Hallo Zusammen,
ich habe meine RLC-833A mittlerweile eingebunden bekommen und nun wollte ich die Lampe über den IoBroker aktivieren, dies funktioniert aber nicht.
Ich gehe doch recht in der Annahme, dass ich das Objekt "switchLed" auf "true" stellen muss, oder?
Müssen noch andere Einstellungen getätigt werden?
Version des Adapters ist 1.0.2.Wäre nett, wenn ihr mir einen Tipp geben könntet.
-
Hallo in die Rund,
ich habe zu Weihnachten eine Reolink TrackMix PoE Kamera bekommen und habe diese über ein Javascript mithilfe der Reolink API Doku V8 eingebunden. Jetzt habe ich diesen Adapter entdeckt und wollte fragen, ob dieser noch weiter entwickelt wird?
Mir fehlt hier vor allem die Möglichkeit der PTZ Steuerung, um auf diesen Adapter umzusteigen.VG Arno
-
@arnod Hi. Weiterentwickelt wird der. Und PTZ steuerung geht schon. Bitte mal die API Befehle senden, die funktionieren und im Adapter nicht.
-
@matzebhv Bitte mal den Adapter in Debug umstellen. Es wäre mal interessant wie weit er kommt, befor er die Exeption schmeißt.
-
@matzebhv Und das passwort neu setzen!
-
In meinem Script mache ich das über
[{"cmd":"PtzCtrl","param":{"channel":KameraKanal,"id":ID,"op":Richtung,"speed":Speed}}];
op: ist dabei die Richtung, also "Left" ,"Right", "Stop", "Up", "Down" , "LeftDown" .. usw.
Dafür habe ich eine eigene Objekt-ID angelegt und solange z.B. "Left" true ist, wird die Kamera nach links verfahren und bei false sende ich dann "Stop" sodass ich in Vis das über eine Tastenfunktion steuern kann.Habe ich das im Adapter übersehen?
-
@arnod Das ist tatsächlich nicht drin. Nur die festen positionen. Das mit links, rechts, usw. kann ich bestimmt einbauen.
-
@oelison
Das wäre super, Danke schon mal für deine Arbeit.
Wenn es dir hilft, hier mein Script wie ich es umgesetzt habe:'use strict'; //------------------------------------------------------------------------------------------------------ //++++++++++++++++++++++++++++++++++++++++++ USER ANPASSUNGEN +++++++++++++++++++++++++++++++++++++++++ const instanz = '0_userdata.0'; // Instanz Script Charge-Control let PfadEbene1 = 'Reolink'; // Pfad innerhalb der Instanz let PfadEbene2 = ['UserDaten','PTZ','Settings']; // Pfad innerhalb PfadEbene1 const KameraKanal = 0; //++++++++++++++++++++++++++++++++++++++++ ENDE USER ANPASSUNGEN +++++++++++++++++++++++++++++++++++++++ //------------------------------------------------------------------------------------------------------ //****************************************************************************************************** //**************************************** Deklaration Variablen *************************************** //****************************************************************************************************** // @ts-ignore const axios = require("axios").default; // @ts-ignore const https = require("https"); let KameraIP,User,Passwort,reolinkBaseURL,ptzDescription; ScriptStart() // Alle nötigen Objekt ID's anlegen async function CreateState(){ createStateAsync(`${instanz}.${PfadEbene1}.${PfadEbene2[0]}.IP_Adresse`, {'def':'192.168.xxx.xxx', 'name':'Ip Adresse der Kamera' , 'type':'string', 'role':'value', 'desc':'IP Adresse Reolink'}); createStateAsync(`${instanz}.${PfadEbene1}.${PfadEbene2[0]}.User`, {'def':'admin', 'name':'User Name' , 'type':'string', 'role':'value', 'desc':'User Name'}); createStateAsync(`${instanz}.${PfadEbene1}.${PfadEbene2[0]}.Passwort`, {'def':'admin', 'name':'Passwort' , 'type':'string', 'role':'value', 'desc':'Passwort'}); createStateAsync(`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.Stop`, {'def':false, 'name':'Wir solange = true ausgeführt' , 'type':'boolean', 'role':'State', 'desc':'PTZ Steuerung Reolink'}); createStateAsync(`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.Left`, {'def':false, 'name':'Wir solange = true ausgeführt' , 'type':'boolean', 'role':'State', 'desc':'PTZ Steuerung Reolink'}); createStateAsync(`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.Right`, {'def':false, 'name':'Wir solange = true ausgeführt' , 'type':'boolean', 'role':'State', 'desc':'PTZ Steuerung Reolink'}); createStateAsync(`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.Up`, {'def':false, 'name':'Wir solange = true ausgeführt' , 'type':'boolean', 'role':'State', 'desc':'PTZ Steuerung Reolink'}); createStateAsync(`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.Down`, {'def':false, 'name':'Wir solange = true ausgeführt' , 'type':'boolean', 'role':'State', 'desc':'PTZ Steuerung Reolink'}); createStateAsync(`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.LeftUp`, {'def':false, 'name':'Wir solange = true ausgeführt' , 'type':'boolean', 'role':'State', 'desc':'PTZ Steuerung Reolink'}); createStateAsync(`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.LeftDown`, {'def':false, 'name':'Wir solange = true ausgeführt' , 'type':'boolean', 'role':'State', 'desc':'PTZ Steuerung Reolink'}); createStateAsync(`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.RightUp`, {'def':false, 'name':'Wir solange = true ausgeführt' , 'type':'boolean', 'role':'State', 'desc':'PTZ Steuerung Reolink'}); createStateAsync(`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.RightDown`, {'def':false, 'name':'Wir solange = true ausgeführt' , 'type':'boolean', 'role':'State', 'desc':'PTZ Steuerung Reolink'}); createStateAsync(`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.ZoomDec`, {'def':false, 'name':'Wir solange = true ausgeführt' , 'type':'boolean', 'role':'State', 'desc':'PTZ Steuerung Reolink'}); createStateAsync(`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.ZoomInc`, {'def':false, 'name':'Wir solange = true ausgeführt' , 'type':'boolean', 'role':'State', 'desc':'PTZ Steuerung Reolink'}); createStateAsync(`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.Auto`, {'def':false, 'name':'Wenn = true wird Automatisch geschwenkt' , 'type':'boolean', 'role':'State', 'desc':'PTZ Steuerung Reolink'}); createStateAsync(`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.StartPatrol`, {'def':false, 'name':'Wir solange = true ausgeführt' , 'type':'boolean', 'role':'State', 'desc':'PTZ Steuerung Reolink'}); createStateAsync(`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.StopPatrol`, {'def':false, 'name':'Wir solange = true ausgeführt' , 'type':'boolean', 'role':'State', 'desc':'PTZ Steuerung Reolink'}); createStateAsync(`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.ToPos`, {'def':false, 'name':'Wir solange = true ausgeführt' , 'type':'boolean', 'role':'State', 'desc':'PTZ Steuerung Reolink'}); createStateAsync(`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.Patrol_ID`, {'def':0, 'name':'Positions ID' , 'type':'number', 'role':'value', 'desc':'PTZ Steuerung Reolink'}); createStateAsync(`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.Speed`, {'def':0, 'name':'Geschwindigkeit von 0-64' , 'type':'number', 'role':'value', 'desc':'PTZ Steuerung Reolink'}); createStateAsync(`${instanz}.${PfadEbene1}.${PfadEbene2[2]}.SwitchLed`, {'def':false, 'name':'LED Ein/Aus-schalten' , 'type':'boolean', 'role':'State', 'desc':'LED Ein/Aus-schalten'}); } const sID_IP_Adresse =`${instanz}.${PfadEbene1}.${PfadEbene2[0]}.IP_Adresse`; const sID_User =`${instanz}.${PfadEbene1}.${PfadEbene2[0]}.User`; const sID_Passwort =`${instanz}.${PfadEbene1}.${PfadEbene2[0]}.Passwort`; const sID_Stopp =`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.Stop`; const sID_Links =`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.Left`; const sID_Rechts =`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.Right`; const sID_Rauf =`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.Up`; const sID_Runter =`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.Down`; const sID_Links_Runter =`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.LeftDown`; const sID_Links_Rauf =`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.LeftUp`; const sID_Rechts_Runter =`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.RightDown`; const sID_Rechts_Rauf =`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.RightUp`; const sID_Zoom_in =`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.ZoomDec`; const sID_Zoom_out =`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.ZoomInc`; const sID_Auto =`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.Auto`; const sID_StartPatrol =`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.StartPatrol`; const sID_StoppPatrol =`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.StopPatrol`; const sID_ToPos =`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.ToPos`; const sID_Patrol_ID =`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.Patrol_ID`; const sID_Speed =`${instanz}.${PfadEbene1}.${PfadEbene2[1]}.Speed`; const sID_SwitchLed =`${instanz}.${PfadEbene1}.${PfadEbene2[2]}.SwitchLed`; const arrayID_Parameter1 = [sID_Stopp,sID_Links,sID_Rechts,sID_Rauf,sID_Runter,sID_Links_Runter,sID_Links_Rauf,sID_Rechts_Runter,sID_Rechts_Rauf,sID_Zoom_in,sID_Zoom_out] async function ScriptStart(){ await CreateState(); log(`-==== alle Objekt ID\'s angelegt ====- `); KameraIP = (await getStateAsync(sID_IP_Adresse)).val; User = (await getStateAsync(sID_User)).val; Passwort = (await getStateAsync(sID_Passwort)).val; reolinkBaseURL = axios.create({baseURL: `https://${KameraIP}`,timeout: 5000,responseType: "json",responseEncoding: "binary",httpsAgent: new https.Agent({rejectUnauthorized: false,})}); } async function postReolink(cmdObject) { try { const antwort = await reolinkBaseURL.post(`/api.cgi?user=${User}&password=${Passwort}`, cmdObject); //log(JSON.stringify(antwort.data)); } catch(error) { log(`Fehler = ${error}`,`warn`); } } // Triggern wenn sich an Einstellung PTZ was ändert on({id: arrayID_Parameter1, change: "ne"}, async function (obj) { if(obj.state.val){ let ID = (await getStateAsync(sID_Patrol_ID)).val; let Speed = (await getStateAsync(sID_Speed)).val; let Richtung = obj.id.split('.')[4] ptzDescription = [{"cmd":"PtzCtrl","param":{"channel":KameraKanal,"id":ID,"op":Richtung,"speed":Speed}}]; postReolink(ptzDescription); }else{ ptzDescription = [{"cmd":"PtzCtrl","param":{"channel":KameraKanal,"op":'Stop'}}]; postReolink(ptzDescription); } });
-
Bei meiner Kamera habe ich festgestellt, dass man das Licht nur ein/ausschalten kann, wenn man als admin angemeldet ist.
Ansonsten ist deine Annahme richtig, dass nur "switchLed" auf "true" gesetzt werden muss. -
@arnod Vielen Dank für den Hinweis! Jetzt funktioniert es.
-
Hallo habe gerade die neue 1.0.2 vom Git installiert.
bekomme folgende Fehlermeldung:reolink.1 2023-12-28 11:27:22.782 info terminating reolink.1 2023-12-28 11:27:33.136 info starting. Version 1.0.2 (non-npm: aendue/ioBroker.reolink#d2e00f9aa8a64b4eff6048c1e47dbb07490e7a5a) in /opt/iobroker/node_modules/iobroker.reolink, node: v18.19.0, js-controller: 5.0.17 reolink.1 2023-12-28 11:27:33.186 info Reolink adapter has started reolink.1 2023-12-28 11:27:33.192 info Current IP: 192.168.188.74 reolink.1 2023-12-28 11:27:36.735 error TypeError: Cannot read properties of undefined (reading 'DevInfo'): undefined
Passwort wurde neu gesetzt, jedoch ohne Erfolg.
EDIT: Jetzt läufts, keine Ahnung was los war
Gruß
Michael -
@oelison Hmm, update nochmal gemacht, Kennwort gesetzt, jetzt geht es. Das mit dem Kennwort hatte ich allerdings beim letzten mal auch schon probiert, das hatte ja jemand hier schon mal geschrieben.
Aber egal, das Ergebnis zählt, Adapter läuft.Gruß
Matze -
Ich steh irgendwie auf dem Schlauch.
Ich habe meine Reolink Kameras bisher über meine Synology Diskstation eingebunden. Nun sind es inzwischen ein paar mehr geworden und ich möchte diesen Umweg aus verschiedenen Gründen (u.a. Lizenzgebühren) nicht mehr gehen. Wie binde ich die Kameras über den Adapter in Lovelace ein. Dazu habe ich leider nichts gefunden. Steuern ist mir nicht wichtig. Nur Anzeige. Danke Euch! -
Hallo
ich habe eine E1 Outdoor, die Installation ist gelaufen PTZ geht, aber bei der Erkennung von Fahrzeugen oder Personen sehe ich in den Objekten keine Reaktion. Ich habe die entsprechenden DP's in einem Script eingebunden, selbst bei kurzfristiger Statusänderung müsste diese in meiner VIS gesichtet werden. Anbei das entsprechende Script.const id_detekt = "0_userdata.0.Events.Detekt" const id_mensch = "reolink.0.sensor.people.state" const id_car = "reolink.0.sensor.vehicle.state" setState(id_detekt, 0) const auslöser = [id_mensch, id_car]; on({ id: auslöser, change: 'ne', val: true }, function (dp) { log("Auslöser Ankunft: " + dp.common.name) var name = dp.name; log(dp.name) switch (name) { case 'Mensch': setState(id_detekt, 1) break; case 'Auto': setState(id_detekt, 2) break; } });
Muß ich evtl. noch irgendwas in der Reolink App berücksichtigen?
Michael -
Hallo,
Ich mache mir etwas Gedanken über POE und die Netzwerk Ausrüstung..
Betreibt hier jemand ne Reo NVR?
Kommen die API Funktionen bei NVR Einsatz genau so im Adapter an wie ohne NVR?
Habe mitbekommen das bei NVR Einsatz einige Funktionen in der App nich vorhanden sind, die sonst also direkt im Netzwerk eingebunden, in der App verfügbar sind.Gruß
-
@dan11hh sagte in [Neuer Adapter] Reolink Kamera:
Ich steh irgendwie auf dem Schlauch.
Ich habe meine Reolink Kameras bisher über meine Synology Diskstation eingebunden. Nun sind es inzwischen ein paar mehr geworden und ich möchte diesen Umweg aus verschiedenen Gründen (u.a. Lizenzgebühren) nicht mehr gehen. Wie binde ich die Kameras über den Adapter in Lovelace ein. Dazu habe ich leider nichts gefunden. Steuern ist mir nicht wichtig. Nur Anzeige. Danke Euch!Niemand?