Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. [Neuer Adapter] Reolink Kamera

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Neuer Adapter] Reolink Kamera

    This topic has been deleted. Only users with topic management privileges can see it.
    • Axel Koeneke
      Axel Koeneke @mike2712 last edited by

      @mike2712 sagte in [Neuer Adapter] Reolink Kamera:

      @axel-koeneke

      oh mein Gott, ich habe 3 Kameras und nur eine lief, mit den anderen beiden hatte ich dieses Problem Problem.
      Vielen Dank.

      Kein Thema,
      @oelison : Bitte in die ToDo Liste aufnehmen 🙂
      VG
      Axel

      1 Reply Last reply Reply Quote 0
      • Michael Schumann
        Michael Schumann last edited by Michael Schumann

        Hallo,

        erstmal vielen Dank für diesen super Adapter.
        Könnte man noch eine Liste mit unterstützen Kameras in der Readme hinzufügen? Und Installationshinweise?

        Was ich bisher beim Durchlesen dieses (sehr langen) Threads herausgefunden habe:

        • Passwort sollte keine Sonderzeichen enthalten
        • Falls IP nicht funktioniert den FQDN (url) nehmen --> musst ich machen

        Kameras:

        • Reolink Lumus, E1, E1 Pro -> Funktionieren nicht, da kein http support (habe die Lumus selbst gehabt und deswegen zurückgehen lassen)

        • Reolink E1 Zoom: hat nur eingeschränkten http Support. Move detection geht, vieles andere aber nicht wie z.B. Sirene auslösen. Ist auch nicht via Software/Firmware lösbar sondern ein Hardware Problem (Info habe ich irgendwo im Internet gelesen, da hat jemand ein längeres Gespräch mit dem Support gehabt). Bei mir sieht die E1 Zoom so aus:
          ioBrokerReolink.png

        • Reolink E1 Outdoor: Wurde hier bereits getestet und soll funktionieren

        Weitere Kameras tbd, aber hier wurden ja schon einige andere genannt.

        1 Reply Last reply Reply Quote 0
        • B
          bommel_030 @oelison last edited by

          @oelison

          Wenn ich es richtig verstanden habe gibt die API aktuell keine Push-Möglichkeit und du holst "nur" den Motion-Teil per Polling. Wäre es möglich auch weitere Datenpunkte per Polling abzurufen? Mit geht es hier insbesondere um ptzPreset. ptzEnableGuard und switchLED wären auch relativ weit oben in der Liste.

          oelison 1 Reply Last reply Reply Quote 0
          • oelison
            oelison @bommel_030 last edited by

            @bommel_030 Ja, das ist richtig. Push ist über die API leider nicht vorgesehen. Die von Dir aufgeführten Datenpunkte sind unter Settings. Die können nur gesetzt werden. Die zugehörigen get Funktionen gibt es in der API, aber die geben nur die Konfiguration wieder und nicht den Status.

            B 1 Reply Last reply Reply Quote 0
            • B
              bommel_030 @oelison last edited by

              @oelison
              Alles klar, dann hab ich das falsch verstanden. Danke für die Rückmeldung.

              1 Reply Last reply Reply Quote 0
              • Michael Schumann
                Michael Schumann @skvarel last edited by

                @skvarel :
                Ist das eine normale E1 Outdoor bei dir oder eine E1 Outdoor Pro?
                Habe nun die E1 Zoom umgetauscht, da AudioAlarmPlay nicht verfügbar war und mir eine E1 Outdoor geholt in der Hoffnung, dass es dann im ioBroker bei mir genau so aussieht wie bei dir 🙂 Leider nein, wie man in meinem letzten Eintrag sieht, alle Werte bei Settings sind (null).
                Wenn ich die API direkt anspreche (z.B. via Python) bekomme ich statt "not supportet" wie bei der E1 Zoom ein "[{'cmd': 'AudioAlarmPlay', 'code': 1, 'error': {'detail': 'ability error', 'rspCode': -26}}]" zurück gemeldet 😢
                Weiß jemand was ein ability error ist? Muss ich vllt. nur etwas umkonfigurieren?

                Oder hat hier noch jemand eine E1 Outdoor erfolgreich eingebunden, mit allen Settings?

                B 1 Reply Last reply Reply Quote 0
                • Matzebhv
                  Matzebhv last edited by Matzebhv

                  Ich habe seit kurzem leider auch den Fehler "TypeError: Cannot read properties of undefined (reading 'DevInfo'): undefined". Der Adapter bleibt dabei auf gelb.
                  Der Adapter hat davor klaglos funktioniert.
                  Kamera: RLC-833A

                  Matze

                  Edit: die Version 0.1.2 läuft, die Versionen danach nicht mehr.

                  oelison 1 Reply Last reply Reply Quote 0
                  • oelison
                    oelison @Matzebhv last edited by

                    @matzebhv v1.0.2 sollte aber wieder gehen.

                    Matzebhv 1 Reply Last reply Reply Quote 0
                    • B
                      bommel_030 @Michael Schumann last edited by

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

                      Michael Schumann 1 Reply Last reply Reply Quote 0
                      • Matzebhv
                        Matzebhv @oelison last edited by

                        @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
                        
                        oelison 2 Replies Last reply Reply Quote 0
                        • Michael Schumann
                          Michael Schumann @bommel_030 last edited by Michael Schumann

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

                          1 Reply Last reply Reply Quote 0
                          • D
                            dadsche last edited by

                            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.

                            A 1 Reply Last reply Reply Quote 0
                            • A
                              ArnoD last edited by

                              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

                              oelison 1 Reply Last reply Reply Quote 0
                              • oelison
                                oelison @ArnoD last edited by

                                @arnod Hi. Weiterentwickelt wird der. Und PTZ steuerung geht schon. Bitte mal die API Befehle senden, die funktionieren und im Adapter nicht.

                                A 1 Reply Last reply Reply Quote 0
                                • oelison
                                  oelison @Matzebhv last edited by

                                  @matzebhv Bitte mal den Adapter in Debug umstellen. Es wäre mal interessant wie weit er kommt, befor er die Exeption schmeißt.

                                  1 Reply Last reply Reply Quote 0
                                  • oelison
                                    oelison @Matzebhv last edited by

                                    @matzebhv Und das passwort neu setzen!

                                    Matzebhv 1 Reply Last reply Reply Quote 0
                                    • A
                                      ArnoD @oelison last edited by

                                      @oelison

                                      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?

                                      oelison 1 Reply Last reply Reply Quote 0
                                      • oelison
                                        oelison @ArnoD last edited by

                                        @arnod Das ist tatsächlich nicht drin. Nur die festen positionen. Das mit links, rechts, usw. kann ich bestimmt einbauen.

                                        A 1 Reply Last reply Reply Quote 1
                                        • A
                                          ArnoD @oelison last edited by

                                          @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);
                                              }
                                             
                                          });
                                          
                                          1 Reply Last reply Reply Quote 0
                                          • A
                                            ArnoD @dadsche last edited by

                                            @dadsche

                                            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.

                                            D 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            464
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            kamera neuer adapter reolink testen
                                            153
                                            1028
                                            286764
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo