HTTPMOD/Device für Reolink Kameras

Begonnen von GunterB, 01 Juli 2021, 12:10:48

Vorheriges Thema - Nächstes Thema

GunterB

Ich habe ein paar Kameras von Reolink im Einsatz und bin nun endlich dazu gekommen, mir Interfaces für deren api zu basteln.
Hoffentlich ist der HTTPMOD eine gute Wahl dafür.

Folgendes wird per SET unterstützt:
Devicename setzen
Push, FTP und Record ein- und ausschalten.
PTZ Position anfahren
IrLights auf Off oder Auto schalten
PowerLED ein- bzw ausschalten

Reolink E1 Zoom, RLC-810A, RLC-511, RLC-410-5MP (Je nach Harwareausstattung sind div. Features wie z.B. "PowerLED" etc... nicht verfügbar.
defmod K6_Konfig HTTPMOD https://192.168.0.100/api.cgi?user=[usr]&password=[psw] 300
attr K6_Konfig get01Data [{"cmd":"GetDevName","param":{}}]
attr K6_Konfig get01Name DevName
attr K6_Konfig get01Poll 1
attr K6_Konfig get02Data [{"cmd":"GetTime"}]
attr K6_Konfig get02Name Time
attr K6_Konfig get03Data [{"cmd":"GetAlarm","action":0,"param":{"Alarm":{"channel":0,"type":"md"}}}]
attr K6_Konfig get03Name Alarm
attr K6_Konfig get04Data [{"cmd":"GetMask","action":0,"param":{"channel": 0}}]
attr K6_Konfig get04Name Mask
attr K6_Konfig get05Data [{"cmd":"GetDevInfo","param":{}}]
attr K6_Konfig get05Name DevInfo
attr K6_Konfig get06Data [{"cmd":"GetMdState","action":0,"param":{"channel": 0}}]
attr K6_Konfig get06Name MdState
attr K6_Konfig get06Poll 1
attr K6_Konfig get06PollDelay 2
attr K6_Konfig get07Data [{"cmd":"GetIrLights"}]
attr K6_Konfig get07Name IrLights
attr K6_Konfig get07Poll 1
attr K6_Konfig get08Data [{"cmd":"GetHddInfo"}]
attr K6_Konfig get08Name HddInfo
attr K6_Konfig get08Poll 1
attr K6_Konfig get08PollDelay 3600
attr K6_Konfig get09Data [{"cmd":"GetOnline"}]
attr K6_Konfig get09Name Online
attr K6_Konfig get10Data [{"cmd":"GetUser"}]
attr K6_Konfig get10Name User
attr K6_Konfig get11Data [{"cmd":"ExportCfg"}]
attr K6_Konfig get11Name Konfig
attr K6_Konfig get11URL https://192.168.0.100/api.cgi?cmd=ExportCfg&user=[usr]&password=[psw]
attr K6_Konfig get12Data [{"cmd":"GetPerformance"}]
attr K6_Konfig get12Name Performance
attr K6_Konfig get13Data [{"cmd":"GetOsd","action":0,"param":{"channel":0}}
attr K6_Konfig get13Name OSD
attr K6_Konfig get15Data [{"cmd":"GetCrop"}]
attr K6_Konfig get15Name Crop
attr K6_Konfig get16Data [{"cmd":"GetImage","action":0,"param":{"channel":0}}]
attr K6_Konfig get16Name Image
attr K6_Konfig get17Data [{"cmd":"GetFtp"}]
attr K6_Konfig get17Name FTP
attr K6_Konfig get17Poll 1
attr K6_Konfig get18Data [{"cmd":"GetRec","action":0,"param":{"channel":0}}]
attr K6_Konfig get18Name Rec
attr K6_Konfig get18Poll 1
attr K6_Konfig get19Data [{"cmd":"GetPush"}]
attr K6_Konfig get19Name Push
attr K6_Konfig get19Poll 1
attr K6_Konfig get30Data [{"cmd":"GetPtzPreset","action":0,"param":{"channel":0}}]
attr K6_Konfig get30Name PtzPreset
attr K6_Konfig get31Data [{"cmd":"GetPtzPatrol","action":0,"param":{"channel":0}}]
attr K6_Konfig get31Name PtzPatrol
attr K6_Konfig get32Data [{"cmd":"GetPowerLed","action":0,"param":{"channel":0}}]
attr K6_Konfig get32Name PowerLed
attr K6_Konfig get32Poll 1
attr K6_Konfig get34Data [{"cmd":"GetPtzSerial","action":0,"param":{"channel":0}}]
attr K6_Konfig get34Name PtzSerial
attr K6_Konfig get35Data [{"cmd":"GetAudioAlarm","action":0,"param":{}}]
attr K6_Konfig get35Name AudioAlarm_enabled
attr K6_Konfig reading01JSON 01_value_IrLights_state
attr K6_Konfig reading01Name IrLights
attr K6_Konfig reading02JSON 01_value_PowerLed_state
attr K6_Konfig reading02Name PowerLed_enabled
attr K6_Konfig reading03JSON 01_value_Push_schedule_enable
attr K6_Konfig reading03Name Push_enabled
attr K6_Konfig reading04JSON 01_value_Rec_schedule_enable
attr K6_Konfig reading04Name Rec_enabled
attr K6_Konfig reading05JSON 01_value_Ftp_schedule_enable
attr K6_Konfig reading05Name Ftp_enabled
attr K6_Konfig reading06JSON 01_value_DevName_name
attr K6_Konfig reading06Name DevName
attr K6_Konfig reading07JSON 01_value_state
attr K6_Konfig reading07Name MdState
attr K6_Konfig reading08JSON 01_value_HddInfo_01_capacity
attr K6_Konfig reading08Name HddCapacity
attr K6_Konfig reading09JSON 01_value_HddInfo_01_size
attr K6_Konfig reading09Name HddSize
attr K6_Konfig reading81JSON 01_cmd
attr K6_Konfig reading81Name 01_cmd
attr K6_Konfig reading82JSON 01_code
attr K6_Konfig reading82Name 01_code
attr K6_Konfig reading83JSON 01_error_detail
attr K6_Konfig reading83Name 01_error_detail
attr K6_Konfig reading84JSON 01_error_rspCode
attr K6_Konfig reading84Name 01_error_rspCode
attr K6_Konfig room Kamera
attr K6_Konfig set01Data [{"cmd":"SetDevName","action":0,"param":{"DevName":{"name":"$val"}}}]
attr K6_Konfig set01Name DevName
attr K6_Konfig set01TextArg 1
attr K6_Konfig set07Data [{"cmd":"SetIrLights","action":0,"param":{"IrLights":{"state":"$val"}}}]
attr K6_Konfig set07Header Content-Type: application/json
attr K6_Konfig set07Hint Auto,Off
attr K6_Konfig set07Name IrLights
attr K6_Konfig set07TextArg 1
attr K6_Konfig set17Data [{"cmd":"SetFtp","action":0,"param":{"Ftp":{"schedule":{"enable":$val}}}}]
attr K6_Konfig set17Hint 0,1
attr K6_Konfig set17Name FTP_enabled
attr K6_Konfig set19Data [{"cmd":"SetPush","action":0,"param":{"Push":{"schedule":{"enable":$val}}}}]
attr K6_Konfig set19Hint 0,1
attr K6_Konfig set19Name Push_enabled
attr K6_Konfig set20Data [{"cmd":"SetRec","action":0,"param":{"Rec":{"channel":0,"schedule":{"enable":$val}}}}]
attr K6_Konfig set20Hint 0,1
attr K6_Konfig set20Name Rec_enabled
attr K6_Konfig set30Data [{"cmd":"SetPtzPreset","action":0,"param":{"PtzPreset":{"id":"$val","enable":1}}}]
attr K6_Konfig set30Name PtzPreset
attr K6_Konfig set32Data [{"cmd":"SetPowerLed","action":0,"param":{"PowerLed":{"channel":0,"state":"$val"}}}]
attr K6_Konfig set32Hint On,Off
attr K6_Konfig set32Name PowerLed
attr K6_Konfig set32TextArg 1
attr K6_Konfig set33Data [{"cmd":"PtzCtrl","action":0,"param":{"channel":0,"op":"ToPos","speed":60,"id":$val}}]
attr K6_Konfig set33Name ToPos
attr K6_Konfig set35Data [{"cmd":"SetAudioAlarm","action":0,"param":{"Audio":{"schedule":{"enable":$val}}}}]
attr K6_Konfig set35Hint 0,1
attr K6_Konfig set35Name AudioAlarm_enabled
attr K6_Konfig stateFormat DevName Rec:Rec_enabled Push:Push_enabled FTP:Ftp_enabled (Pow:PowerLed_enabled IR:IrLights)

Viel Spaß damit!


Detection Aread und Zeitplan

GunterB

#1
Für die automatische Steuerung der PTZ Funktion in Kombination mit der Aufzeichnung habe ich folgendes umgesetzt:

    my $cam_num = $_;
            my $device = "K${cam_num}_Konfig";
            my $devrec = "${device}_rec";


Ausschalten, und 5s verzögert, nach dem Deaktivieren der Aufnahme die Kamera gegen die Wand / wegdrehen.
################## ANWESEND ##################
                fhem("set $device DevName K${cam_num}I");
                fhem("set $device IrLights Off");
                fhem("set $device PowerLed Off");
                fhem("set $device Push_enabled 0");
                fhem("set $device FTP_enabled 0");
                fhem("set $device Rec_enabled 0");

                ## Verzögerte Ausführung
                if (IsDevice("$devrec")) {
                    fhem("delete $devrec);
                }

                fhem("define $devrec at +00:00:05 set $device ToPos 64");
                fhem("attr $devrec room Kamera");
            }


Einschalten, und 15s verzögert, nach dem Beenden der PTZ Bewegung die Aufnahme aktivieren
################## ABWESEND##################
                fhem("set $device DevName K${cam_num}A");
                fhem("set $device ToPos 1");

                ## Verzögerte Ausführung
                if (IsDevice("$devrec")) {
                    fhem("delete $devrec");
                }
                fhem("define $devrec at +00:00:15 set $devrec IrLights Auto;;set $devrec PowerLed On;;set $devrec Push_enabled 1;;set $devrec FTP_enabled 1;;set $devrec Rec_enabled 1");
                fhem("attr $devrec room Kamera");


Ich bin mir aber noch unsicher, ob das Anlegen eines define so Syntaktisch voll in Ordnung ist...
Mir sind andere Hochsprachen geläufig, mit dem FHEM und Perl tue ich mir noch schwer.

Wer mich korrigieren möchte darf dies gerne tun.
@Otto123, Danke!

Otto123

#2
Hi,

ich bin mir nicht sicher wo der Code aus deinem letzten Post "steht" - aber die Zeile:
Zitatfhem("define $devrec at +05:00:15 {fhem('set $devrec IrLights Auto');;fhem('set $devrec PowerLed On');;fhem('set $devrec Push_enabled 1');;fhem('set $devrec FTP_enabled 1');;fhem('set $devrec Rec_enabled 1');;}");
würde ich einfacher nur mit FHEM Befehlen machen:
fhem("define $devrec at +05:00:15 set $devrec IrLights Auto;;set $devrec PowerLed On;;set $devrec Push_enabled 1;;set $devrec FTP_enabled 1;;set $devrec Rec_enabled 1");
Bitte auch beachten https://fhem.de/commandref_DE.html#command

Analog dazu auch die Zeile in ANWESEND.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

GunterB

Update für Bildparameter


attr K.*_Konfig get16Name Image
attr K.*_Konfig get16Data [{"cmd":"GetImage","action":0,"param":{"channel":0}}]

attr K.*_Konfig reading10Name img_bright
attr K.*_Konfig reading10JSON 01_value_Image_bright
attr K.*_Konfig reading11Name img_contrast
attr K.*_Konfig reading11JSON 01_value_Image_contrast
attr K.*_Konfig reading12Name img_hue
attr K.*_Konfig reading12JSON 01_value_Image_hue
attr K.*_Konfig reading13Name img_saturation
attr K.*_Konfig reading13JSON 01_value_Image_saturation
attr K.*_Konfig reading14Name img_sharpen
attr K.*_Konfig reading14JSON 01_value_Image_sharpen
attr K.*_Konfig reading15Name isp_mirroring
attr K.*_Konfig reading15JSON 01_value_Isp_mirroring
attr K.*_Konfig reading16Name isp_rotation
attr K.*_Konfig reading16JSON 01_value_Isp_rotation

attr K.*_Konfig set08Name img_bright
attr K.*_Konfig set08Data [{"cmd":"SetImage","action":0,"param":{"Image":{"channel":0,"bright":$val}}}]
attr K.*_Konfig set09Name img_contrast
attr K.*_Konfig set09Data [{"cmd":"SetImage","action":0,"param":{"Image":{"channel":0,"contrast":$val}}}]
attr K.*_Konfig set10Name img_hue
attr K.*_Konfig set10Data [{"cmd":"SetImage","action":0,"param":{"Image":{"channel":0,"hue":$val}}}]
attr K.*_Konfig set11Name img_saturation
attr K.*_Konfig set11Data [{"cmd":"SetImage","action":0,"param":{"Image":{"channel":0,"saturation":$val}}}]
attr K.*_Konfig set12Name img_sharpen
attr K.*_Konfig set12Data [{"cmd":"SetImage","action":0,"param":{"Image":{"channel":0,"sharpen":$val}}}]
attr K.*_Konfig set13Name img_defaults
attr K.*_Konfig set13Data [{"cmd":"SetImage","action":0,"param":{"Image":{"channel":0,"bright":128,"contrast":128,"hue":128,"saturation":128,"sharpen":128}}}]
attr K.*_Konfig set14Name isp_mirroring
attr K.*_Konfig set14Data [{"cmd":"SetIsp","action":0,"param":{"Isp":{"channel":0,"mirroring":$val}}}]
attr K.*_Konfig set14Hint 0,1
attr K.*_Konfig set15Name isp_rotation
attr K.*_Konfig set15Data [{"cmd":"SetIsp","action":0,"param":{"Isp":{"channel":0,"rotation":$val}}}]
attr K.*_Konfig set15Hint 0,1


Bloedschaf

DANKE!
Und das kann ich wirklich nicht groß genug schreiben!
Ich bin seit Tagen auf der Suche nach den korrekten Parametern für SetRec gewesen und hatte mehr oder weniger durch selbst testen zumindest die Abfrage gefunden. Doch immer gabe es beim setzen des Record parameter error. Vielleicht war mein Fehler das ich es mit dem token, den ich erfolgreich nach einem Login bekam, versuchte.
Auf jeden Fall 1000 Dank! Auch wenn ich die Anfragen in PHP umsetze und aktuell kein FHEM in Betrieb habe.  ;D

GunterB

Danke! Freut mich, wenn sich dadurch jemand Zeit spart ;)

teichtaucher

Hallo,
ich habe zwei Reolink RLC-410W mit 5MP am Laufen. Zudem habe ich seit neuestem zwei Bewegungsmelder die über einen Shelly i3 das Event an FHEM schicken. Da die Bewegungserkennung bei jeder Fliege auslöst würde ich gern die Reolink-interne Bewegungserkennung ausschalten und das Event vom Bewegungsmelder verwenden. Mein FHEM läuft schon länger aber ich selbst bin nicht so erfahren. Daher meine Fragen:
1) Kann ich das Einrichten der Kameras (aus dem ersten Post) irgenwie als einen Schritt machen oder muss ich Zeile für Zeile in FHEM eingeben?
2) Wie würde das Kommando aussehen das eine Aufnahme auf dem internen Speicher auslöst? Und wie wäre das Stop Kommando?

Vielen Dank für Eure Antworten und sorry für diese Dummy-Fragen. Ich hoffe die Antworten helfen noch dem nächsten Unerfahrenen ;-)

GunterB

#7
Hallo,
der geamte Definition kannst du mit dem Style F18 und dem + (Pluszeichen) neben der Commandoleiste hinzufügen.

Ein externes Starten der kamerinternen Record-Funktion ist mir nicht bekannt.
Es gibt auf dem Webinterface auch keine Möglichkeit die Aufzeichnung zu starten.

GunterB

Ich bin gerade dabei, das HTTPMOD für die RLC-810A (IPC_523128M8MP) und RLC-820A (IPC_523128M8MP) zu erstellen, da Abfragen wie z.B. GetRec  nicht mehr zu funktionieren scheinen:
         "detail" : "not support",
         "rspCode" : -9


Authentication Token (IP 0.100, YYYYY, XXXXX müssen angepasst werden):
defmod K5_Konfig HTTPMOD https://192.168.0.100/api.cgi?token=$sid 300
attr K5_Konfig reAuthRegex .*please login first.*
attr K5_Konfig sid1Data [{"cmd":"Login","action":0,"param":{"User":{"userName":"XXXXX","password":"YYYYY"}}}]
attr K5_Konfig sid1Header01 Content-Type: application/json
attr K5_Konfig sid1IdJSON 01_value_Token_name
attr K5_Konfig sid1IgnoreRedirects 1
attr K5_Konfig sid1URL https://192.168.0.100/api.cgi?cmd=Login&token=null

GunterB

#9
Anbei das Update für die 8MP Megapixel-Reihe (RLC-810A (IPC_523128M8MP) und RLC-820A (IPC_523128M8MP)) :

attr K1_Konfig get18Data  [{"cmd":"GetRecV20","param":{"channel":0}}]
attr K1_Konfig reading04JSON  01_value_Rec_enable
attr K1_Konfig set20Data [{"cmd":"SetRec","action":0,"param":{"Rec":{"channel":0,"enable":$val}}}]

attr K1_Konfig get19Data [{"cmd":"GetPushV20"}]
attr K1_Konfig reading03JSON 01_value_Push_enable
attr K1_Konfig set19Data [{"cmd":"SetPush","action":0,"param":{"Push":{"enable":$val}}}]

attr K1_Konfig get17Data [{"cmd":"GetFtpV20"}]
attr K1_Konfig reading05JSON 01_value_Ftp_enable
attr K1_Konfig set17Data [{"cmd":"SetFtpV20","action":0,"param":{"Ftp":{"enable":$val}}}]

attr K1_Konfig reading32Encode PowerLed UTF-8


Und noch einen Teil für alle Kamera-Typen:
attr K.*_Konfig stateFormat DevName (model) Rec:Rec_enabled Push:Push_enabled FTP:Ftp_enabled (Pow:PowerLed_enabled IR:IrLights) HddCapacity_2
attr K.*_Konfig userReadings HddCapacity_2:HddCapacity.* {sprintf("%.0fGB",ReadingsVal($name,"HddCapacity",0)/1024.0)}

attr K\d+_Konfig reading40JSON 01_value_DevInfo_model
attr K\d+_Konfig reading40Name model
attr K\d+_Konfig reading40MaxAge 86400
attr K\d+_Konfig reading40MaxAgeReplacement ???
attr K\d+_Konfig reading40MaxAgeReplacementMode text

attr K\d+_Konfig reading41JSON 01_value_DevInfo_hardVer
attr K\d+_Konfig reading41Name hardVer
attr K\d+_Konfig reading41MaxAge 86400
attr K\d+_Konfig reading41MaxAgeReplacement ???
attr K\d+_Konfig reading41MaxAgeReplacementMode text

attr K\d+_Konfig reading42JSON 01_value_DevInfo_firmVer
attr K\d+_Konfig reading42Name firmVer
attr K\d+_Konfig reading42MaxAge 86400
attr K\d+_Konfig reading42MaxAgeReplacement ???
attr K\d+_Konfig reading42MaxAgeReplacementMode text

ReneR1986

Hallo zusammen,
ist es auch möglich über das Modul die Motion Detection der Kamera zu aktivieren bzw. zu deaktivieren?

VG

Amenophis86

Ich überlege gerade mir eine Reolink zu kaufen. Auf der Suche nach den Möglichkeiten der Kamera habe ich dieses Dokument gefunden (siehe Anhang). Vielleicht hilft es ja dem ein oder andere bei den Funktion. Was mir nicht ganz klar ist, ist wie mit dem Token umgegangen werden muss.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

ReneR1986

Ich denke da hat Gunter ja schon entsprechende Vorarbeit geleistet.
Die entsprechenden Befehle und Readings funktionieren jedenfalls bei meiner RLC-523WA wunderbar.
Ich habe auch schon versucht den ein oder anderen Befehl zu ergänzen (das Dokument hatte ich auch gefunden) z.B. das aktivieren des eingebauten LED Strahlers.
Leider bin ich noch nicht so fit, was HTTPMOD angeht...

GunterB

Die MotionDetection kann komplett eingestellt werden, Empfindlichkeit, Zonen, etc...

Sind die LEDs evtl. als PowerLED schaltbar?
Können diese per "Hand" über das Webinterface geschaltet werden?

ReneR1986

#14
Ja, die LEDs kann man auf "Automatik", "Ein nach Zeitplan" oder "manuell" schalten. Siehe Anhang.

Das müsste laut API Dokument von Reolink bei 3.10.6 SetWhiteLed beschrieben sein.

https://drive.google.com/drive/folders/19vQBJia0wKvzwscA-EpTDSFV5OfNYUL6