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

GunterB

#15
Versuche mal das:

attr K6_Konfig set36Data [{"cmd": "SetWhiteLed_Mode", "param": { "WhiteLed": {"bright" : 100, "channel": 0, "mode": $val, "state": 0}}}]
attr K6_Konfig set36Hint 1,2,3
attr K6_Konfig set36Name SetWhiteLed_Mode

attr K6_Konfig set37Data [{"cmd": "SetWhiteLed", "param": { "WhiteLed": {"bright" : 100, "channel": 0, "mode": 0, "state": $val}}}]
attr K6_Konfig set37Hint 0,1
attr K6_Konfig set37Name SetWhiteLed

## Ein
set K6_Konfig SetWhiteLed_Mode 1
set K6_Konfig SetWhiteLed 1

## Aus
set K6_Konfig SetWhiteLed_Mode 3
set K6_Konfig SetWhiteLed 0

ReneR1986

Scheint glaube ich noch etwas vertauscht zu sein.
Ich nehme an set36Name sollte SetWhiteLed_Mode heißen?

Beim Setzen von:
set K6_Konfig SetWhiteLed_Mode 1,2 oder 3 ändert sich nichts am Mode.

Beim Setzen von:
set K6_Konfig SetWhiteLed 0 ändert sich der Mode von "Aus" auf "Auto"

GunterB

Dann versuche mal raus zu bekommen, wie sich die LED einschalten lässt.
Ich würde jetzt mal versuchen, den Manual Mode zu setzen.
Und dann sollten die LEDs mit dem state ein und aus zuschalten sein.

attr K6_Konfig get36Data [{"cmd":"GetWhiteLed","action":0,"param":{}}]
attr K6_Konfig get36Name GetWhiteLed


attr K6_Konfig reading16Name WhiteLed_mode
attr K6_Konfig reading16JSON 01_value_WhiteLed_mode
attr K6_Konfig reading17Name WhiteLed_state
attr K6_Konfig reading17JSON 01_value_WhiteLed_state


ReneR1986

Das manuelle einschalten der LEDs geht doch mit:
set K6_Konfig SetWhiteLed 1

War zu hell draußen, deswegen konnte ich das eben nicht sehen..  ;D
Allerdings wird beim Einschalten dann auch automatisch der Mode auf "auto" gesetzt.
Ich habe nun den Wert bei mode auf 0 gesetzt. Jetzt lässt sich die LED ein- und ausschalten, ohne das es dann auf auto gesetzt wird.

Alt:
attr K6_Konfig set37Data [{"cmd": "SetWhiteLed", "param": { "WhiteLed": {"bright" : 100, "channel": 0, "mode": 1, "state": $val}}}]

Neu:
attr K6_Konfig set37Data [{"cmd": "SetWhiteLed", "param": { "WhiteLed": {"bright" : 100, "channel": 0, "mode": 0, "state": $val}}}]

WhyTea

Hallo
Ich spiele auch schon länger mit dem Gedanken Kameras anzuschaffen. Habe aber noch nichts passendes und bezahlbares gefunden.

Die Einbindung in Fhem wäre auf jeden Fall eine super Sache.

Kann mir einer sagen wie sich die Kameras der Argus Serie verhalten wenn man ihnen nach der Ersteinrichtung den Internet-Zugang verweigert?
Kann man dann noch lokal auf die Kameras zugreifen? Gehen dann die Push-Nachrichten noch im lokalen Netzwerk?

Gruß und Danke im voraus! ;-)
Daniel

GunterB

Die Kameras benötigen für die Erst-Einrichtung keinen Internetzugang.
Die App kann auch ohne Cloud genutzt werden, im LAN oder auch über VPN. Ich glaube nicht dass der Push gut funktioniert.
Die Cloud Anbindung kann man in der Kamera dekaktivieren (Transmit UUID).
Ebenso kann man den Inet Zugriff der Kamera blockieren.

WhyTea

Das klingt ja schon mal gut.

Wenn Du sagst das die Pushbenachrichtigung nicht gut funktioniert kann man da mithilfe von Fhem was alternatives bauen? z.B. Mit Pushover

Nobbynews

#22
Zitat von: GunterB am 13 Oktober 2022, 16:15:54
Die Cloud Anbindung kann man in der Kamera dekaktivieren (Transmit UUID).
Das geht bei der Argus 2 als Akku-Kamera (nicht mehr im Programm, Ersatzmodell) aber nicht.
Bei E1-Zoom, E1 Outdoor und der RLC-511W (Auslaufmodell und durch RLC-511WA ersetzt) kann UID deaktiviert werden.

curt

Auf Grund dieses Threads hatte ich mir eine Reolink-Kamera bestellt, ich fand die Solar-Idee schön. Also wurde es Reolink Argus Eco https://www.amazon.de/dp/B07QQNRWK2/
Ab ins Wlan und mit nmap geschaut: Alle Ports geschlossen. Das ist ja dumm. Auf den ersten Blick scheint es so, dass alle Akku-betriebenen Reolink-Kameras keine API haben. Das ist auch hier zu lesen: https://community.reolink.com/topic/1149/api-and-3rd-party-access-for-argus-2?lang=de&page=1
Den Stream kann man wohl mit einer Proxy-Lösung notfalls abgreifen, aber eben keine API: https://github.com/jdillenkofer/camera_proxy https://github.com/thirtythreeforty/neolink

Ehe ich nochmals danebengreife, bitte ich euch um eure Empfehlungen:
Reolink: Daten via Wlan, Strom via USB. 2K oder gar 4K muss gar nicht sein. Aber wegen FHEM-Integration schon API, gern dokumentierte API. Ich dachte an bis zu etwa 100 Euro. (Wenn die Empfehlung gleich ein Amazon-Link ist, wäre das sehr schön.)
RPI 4 - Jeelink HomeMatic Z-Wave

stoffel61

Hallo,

zuerst einmal vielen Dank an GunterB für die tolle Umsetzung.

Ich habe eine Reolink RLC-811A. Das Einschalten mit WhiteLed funktioniert tadellos,
allerdings schalten sich die LEDs nach ungefähr 2 Minuten wieder aus, wie es beim Modus
Auto mit Bewegungserkennung sein soll. Was muß ich machen, damit die LEDs permanent
eingeschaltet bleiben?

Viele Grüße,
Christoph

ReneR1986

Ich denke so...

Zitat von: ReneR1986 am 20 September 2022, 10:46:32
Das manuelle einschalten der LEDs geht doch mit:
set K6_Konfig SetWhiteLed 1

War zu hell draußen, deswegen konnte ich das eben nicht sehen..  ;D
Allerdings wird beim Einschalten dann auch automatisch der Mode auf "auto" gesetzt.
Ich habe nun den Wert bei mode auf 0 gesetzt. Jetzt lässt sich die LED ein- und ausschalten, ohne das es dann auf auto gesetzt wird.

Alt:
attr K6_Konfig set37Data [{"cmd": "SetWhiteLed", "param": { "WhiteLed": {"bright" : 100, "channel": 0, "mode": 1, "state": $val}}}]

Neu:
attr K6_Konfig set37Data [{"cmd": "SetWhiteLed", "param": { "WhiteLed": {"bright" : 100, "channel": 0, "mode": 0, "state": $val}}}]

stoffel61

Hallo Rene,

habe ich beides ausprobiert. Einschalten funktioniert, aber nach 2 Minuten werden
die LEDs wieder ausgeschaltet.

Hat das bei Dir so funktioniert?

Viele Grüße,
Christoph

ReneR1986

Hallo Christoph,

ich check das nochmal.

Gruß
René

ReneR1986

Zitat von: stoffel61 am 02 Dezember 2022, 12:37:14
Hallo Rene,

habe ich beides ausprobiert. Einschalten funktioniert, aber nach 2 Minuten werden
die LEDs wieder ausgeschaltet.

Hat das bei Dir so funktioniert?

Viele Grüße,
Christoph

Stimmt, ist bei mir auch so. Nach 2 Minuten gehen die LEDs wieder aus.

Umber

Anbei das Einschalten/Abschalten des Auto-Trackings und das Anstossen der Kalibrierung.
Funktioniert so bei meiner E1 Outdoor.
Beim Autotracking wird bei mir nur Person eingeschaltet -->  "people":1
Wenn man das Tracking fürs Auto benötigt ist dies zu ändern --> "vehicle":1

attr E1_Konfig get46Data [{"cmd":"GetAiCfg","action":0,"param":{"channel":0}}]
attr E1_Konfig get46Name AutoTracking_enabled
attr E1_Konfig get47Data [{"cmd":"GetPtzCheckState","action":0,"param":{"channel":0}}]
attr E1_Konfig get47Name GetPtzCheckState

attr E1_Konfig reading46JSON 01_value_aiTrack
attr E1_Konfig reading46Name AutoTracking_enabled

attr E1_Konfig set46Data [{"cmd":"SetAiCfg","action":0,"param":{"aiTrack":$val,"channel":0,"type":{"people":1,"vehicle":0}}}]
attr E1_Konfig set46Hint 0,1
attr E1_Konfig set46Name AutoTracking_enabled
attr E1_Konfig set47Data [{"cmd": "PtzCheck","action":$val,"param":{"channel":0}}]
attr E1_Konfig set47Hint 1
attr E1_Konfig set47Name StartKalibrierung



Harox

Hallo Gunter,
erstmal vielen Dank für deine Vorarbeit mit der Reolink Kamera. Ich habe eine RLC-810A gerade zum testen. Hast du eigentlich eine Lösung gefunden, wenn die Kamera eine Personen, Auto- oder Tiererkennung hat, dass man diesen Alert auch als Push Meldung in die Fhem bekommt.
Du hast geschrieben, dass der Push nicht gut funktioniert. Wenn ich die Push Nachrichten aus der App ansehe, sehen die gar nicht so schlecht aus.
Ich verstehe nur nicht wie die Push Nachrichten in die Fhem kommen. Mit dem HTTPMOD kommst das Event aus der Fhem Richtung, das sollte ja bei Push anders herum sein.
Kannst du mir hierzu bitte ein Tipp geben, ich stehe an der Stelle auf dem Schlauch.

Danke dir.

Gruß Harald

ReneR1986

Hallo Harox,

ich habe meine Reolinks mit meiner Synology über Surveillance Station verbunden.
Dort kann man Auslöser/Aktionen definieren z.B. Erkennung von Fahrzeugen oder Personen. Als Aktion rufe ich dann einen Webhook (HTTP Request an FHEM) auf, der einen Dummy schaltet.
Das wird wiederum von einem DOIF abgefangen und es wird über Pushover eine Nachricht gesendet.
Eine Möglichkeit das über HTTPMOD zu machen sehe ich nicht, wie du ja schon beschrieben hast ist die Richtung hier eine andere.

Gruß
René

Harox

Hallo René,

danke dir für deinen Vorschlag. Allerdings ist mir das ein bisschen zu indirekt. Das ist eigentlich schade, die Kameras gefallen mir richtig gut. Nur der fehlende Alert ist für mich ein kritischer Punkt.

Gruß Harald

privat58

Hallo, ich habe mir zwei reolink e1 outdoor gekauft und komme mit der Einrichtung nicht klar.
Hat sich bei der Anmeldung wieder etwas geändert?
Danke für eine Hilfe
mvh

Maista

Zitat von: privat58 am 16 September 2023, 08:05:50Hallo, ich habe mir zwei reolink e1 outdoor gekauft und komme mit der Einrichtung nicht klar.
Hat sich bei der Anmeldung wieder etwas geändert?
Danke für eine Hilfe
mvh
Einrichtung bei FHEM oder wo?

privat58

Sorry, nicht eindeutig.
Ja es geht um die Einrichtung in fhem per HTTPMOD.
Es scheint sich bei der Anmeldung der Kameras geändert zu haben.
Bei mir kommt im log "Reolink1: Read callback: Error: start_SSL https://192.168.0.200:443 timed out"
mvh

ReneR1986

#36
Bei mir funktioniert es noch.
Allerdings habe ich auch kein https, sondern nur http.
Firmwareversion ist: v3.1.0.1318_22091311_v1.0.0.30

sparkiie

Zitat von: privat58 am 17 September 2023, 09:45:35Sorry, nicht eindeutig.
Ja es geht um die Einrichtung in fhem per HTTPMOD.
Es scheint sich bei der Anmeldung der Kameras geändert zu haben.
Bei mir kommt im log "Reolink1: Read callback: Error: start_SSL https://192.168.0.200:443 timed out"
mvh

Hast du hier eine Lösung gefunden?

Ich habe aktuell das selbe Problem mit einer RLC-810WA.

privat58

Ich habe es nicht weiter verfolgt, da ich in https://github.com/berfenger/cam2mqtt erst einmal eine Lösung gefunden habe und die Kamera als "Bewegungsmelder" missbrauche.

sparkiie

Ich habe die Kamera noch einmal zurückgesetzt und alles neu eingebunden, nun geht es auch bei mir.

Noch ein paar Frage an die Profis  :)

Ist es möglich die Bewegungsrekennung insgesamt zu deaktivieren, also die Kamera in Standby zu setzen?

Was genau passiert bei get Image? Bei mir passiert nämlich gar nichts, er speichert weder ein Bild auf der SD Karte noch auf dem FTP.

Ich leite die Videos vom FTP per inotifywait an Telegram weiter. Dort habe ich das Probleme das die Videos beim Abspielen nur 1 Sekunde lang zu sein scheinen. Tatsächlich läuft das Video aber weiter.
Wenn also ein Video 30 Sekunden lang ist, dann zeigt der Fortsschrittsbalken im Player auch nur 1 Sekunde an und ist direkt am Ende. Das Video läuft aber weiter, lässt sich dadurch aber nicht spulen z.B.. Liegt das am Codec oder könnte das auch an den Video Einstellungen liegen?

ReneR1986

Hier ist die API Dokumentation.
Da sollte auch stehen, was genau z.B. getImage macht.

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

VG

René

sparkiie

Zitat von: ReneR1986 am 22 Dezember 2023, 10:06:56Hier ist die API Dokumentation.
Da sollte auch stehen, was genau z.B. getImage macht.

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

VG

René
Vielen Dank.

Dann habe ich das falsch interpretiert. Ich dachte getImage bedeutet, dass die Kamera ein Foto aufnimmt - so wie im IPCAM Modul...

GunterB

#42
Hallo zusammen,

ich habe mich mittlerweile weiter um die Konfiguration der Kameras kümmern können.
Es besteht jetzt die Möglichkeit, Aufnahmezeiten und die Detection Area zu verändern.
Zudem kann die aktuelle Detection Area als PNG gespeichert und auch wieder rückgelesen werden (Funktionen in der 99_myUtils).

Du darfst diesen Dateianhang nicht ansehen.

attr K1_Konfig reading51JSON 01_value_MdAlarm_scope_cols
attr K1_Konfig reading51Name MdAlarm_scope_cols
attr K1_Konfig reading52JSON 01_value_MdAlarm_scope_rows
attr K1_Konfig reading52Name MdAlarm_scope_rows
attr K1_Konfig reading53JSON 01_value_MdAlarm_scope_table
attr K1_Konfig reading53Name MdAlarm_scope_table

attr K1_Konfig userReadings HddCapacity_2:HddCapacity.* {sprintf("%.0fGB%s", ReadingsVal($name,"HddCapacity",0)/1024.0, ReadingsVal($name,"HddCapacity",0) == 0 ? "🔴" : "")},\
newSens1:newSens-1[\s\S]* {my $v = ReadingsVal($name,"newSens-1","0");;;; fhem("deletereading $name newSens-1");;;; $v =~ s/\s//g;;;; $v},\
newSens2:newSens-2[\s\S]* {my $v = ReadingsVal($name,"newSens-2","0");;;; fhem("deletereading $name newSens-2");;;; $v =~ s/\s//g;;;; $v},\
newSens3:newSens-3[\s\S]* {my $v = ReadingsVal($name,"newSens-3","0");;;; fhem("deletereading $name newSens-3");;;; $v =~ s/\s//g;;;; $v},\
newSens4:newSens-4[\s\S]* {my $v = ReadingsVal($name,"newSens-4","0");;;; fhem("deletereading $name newSens-4");;;; $v =~ s/\s//g;;;; $v}

attr K1_Konfig get36Data [{"cmd":"GetMdAlarm","action":0,"param":{"channel":0}}]
attr K1_Konfig get36Name MdAlarm
attr K1_Konfig get36Poll 1

attr K1_Konfig set51Name api
attr K1_Konfig set51TextArg 1

Verwendung der Funktionen:
                my $wl_dev = "K${cam_num}_Konfig_Scope_${set}";
                if (IsDevice($wl_dev)) {
                    my $set_path = InternalVal($wl_dev, "LINK", "");
                    my ($cols, $rows, $binstring) = png_to_binstring("/opt/${set_path}");
                   
                    if (length($binstring)) {
                        my $MdAlarmJSON = "";
                        $MdAlarmJSON .= "[";
                        $MdAlarmJSON .= "{\"cmd\":\"SetMdAlarm\",\"action\":0,\"param\":{";
                        $MdAlarmJSON .= "\"MdAlarm\":{";
                        $MdAlarmJSON .= "\"channel\":0,";
                        ##--------------------------------------------
                        ## scope
                        $MdAlarmJSON .= "\"scope\":{\"cols\":${cols},\"rows\":${rows},\"table\":\"${binstring}\"}";
                        ##--------------------------------------------
                        $MdAlarmJSON .= "}}}]";
                        fhem("set $device api $MdAlarmJSON");
                    } else {
                        $message .= "no binstring\n";
                    }
                } else {
                    $message .= "no device ${wl_dev}\n";
                }

Code (99_myUtils.pm) Auswählen
...
#####################################################
#####################################################
## apt-get install libgd-perl
## binstring    String with Binary 0 1 characters
## name         Name of picture
## col          Columns / Spalten
## row          Row / Zeilen
sub binstring_to_png ($$$$) {
    use strict;
    use warnings;
    use GD;
    my ($p_binstring,$filename,$col,$row) = @_;
    my $SELF = "binstring_to_png";
    if (length($p_binstring) <= 0) { return "no binstring";}
    if ($col <= 0) { return "col";}
    if ($row <= 0) { return "row";}
    my $BitMap = GD::Image->new($col,$row);
   
    Log3($SELF, 4, "${SELF}: Filename: $filename");
    Log3($SELF, 4, "${SELF}: $col $row");

    my $white = $BitMap->colorAllocate(255,255,255);
    my $blue = $BitMap->colorAllocate(130,182,245);      ## ausgeblendet

    # Frame the BitMap
    ##$BitMap->rectangle(0,0,$col-1,$row-1,$blue);
    # Transparent image, white background color
    $BitMap->transparent($white);

    ### plot some, just to show it works #
    ##for my $x (0..100) {
    ##   for my $y (0 .. 100) {
    ##      $BitMap->setPixel(250+100*sin($x)-$y,150+125*cos($x)+$y,$blue);
    ##   }
    ##}
   
    for (my $i = 0; $i < length($p_binstring); $i++) {
        my $act_val = substr($p_binstring, $i, 1);
        if ($act_val eq "0") {
            my $x = $i % $col;
            my $y = POSIX::floor($i / $col);
            Log3($SELF, 4, "${SELF}: set x y: $x $y");
            $BitMap->setPixel($x,$y,$blue);
        }
    }

    # write png-format to file
    open my $fh,">","$filename" or die "$!";
    binmode $fh;
    print $fh $BitMap->png;
    close($fh);
    return 1;
}

#####################################################
#####################################################
## apt-get install libgd-perl
## Filename         Path/Name of picture
sub png_to_binstring ($) {
    use strict;
    use warnings;
    use GD;
    my ($filename) = @_;
    my $SELF = "png_to_binstring";
    my $p_binstring = "";
   
    ##Log3($SELF, 4, "${SELF}: Filename: $filename");

    my $img = GD::Image->new( $filename );
    my( $w, $h ) = $img->getBounds;
    ##print "$SELF: The image '$filename' is $w x $h pixels.\n";

    ##printf "The color of the pixel in the middle is: [0x%02x:0x%02x:0x%02x
    ##+].\n",
    ##$img->rgb( $img->getPixel( $w/2, $h/2 ) );
   
   
    for (my $y = 0; $y < $h; $y++) {
        for (my $x = 0; $x < $w; $x++) {
            my ($r,$g,$b) = $img->rgb( $img->getPixel( $x, $y ) );
            $p_binstring .= $r == 255 ? "1" : "0";
            ##if ($y == 0) {
            ##    printf "%s: x%d, y%d: [%d, %d,%d].\n", $SELF, $x, $y, $r, $g, $b;
            ##}
        }
    }
   
    return ($w, $h, $p_binstring);
}
...


Code (NTFY_Kx_Scope) Auswählen
define NTFY_Kx_Scope notify K[1-9]_Konfig.*:MdAlarm_scope_table.* {\
my $dev = $NAME;;\
\
my $binstring = ReadingsVal($dev,"MdAlarm_scope_table", "");;\
my $cols = ReadingsVal($dev,"MdAlarm_scope_cols", 0);;\
my $rows = ReadingsVal($dev,"MdAlarm_scope_rows", 0);;\
\
\
##Log3($SELF, 3, "${SELF}/${NAME}: $cols $rows");;\
\
binstring_to_png($binstring, "www/snapshots/${dev}.png", $cols, $rows);;\
my ($cols_back, $rows_back, $binstring_back) = png_to_binstring("www/snapshots/${dev}.png");;\
fhem("deletereading $dev MdAlarm_scope_.*");;\
\
if ($binstring ne $binstring_back) {\
    fhem("setreading $SELF ${NAME}_bin_error bin strings not equal");;\
}\
\
##fhem("setreading $SELF ${dev}_to $binstring");;\
##fhem("setreading $SELF ${dev}_from $binstring_back");;\
\
my $wl_dev = "${dev}_Scope";;\
my $ctrl_v = "0.03";;\
\
my ($a, $b, $c, $d, $e, $f) = (return_elements());;\
fhem("setreading $SELF a $a");;\
fhem("setreading $SELF b $b");;\
fhem("setreading $SELF e $e");;\
fhem("setreading $SELF f $f");;\
\
if (!IsDevice("$wl_dev")) {\
    ##fhem("define ${wl_dev} weblink htmlCode <img src=\"log/${dev}.png\" >");;\
    fhem("define ${wl_dev} weblink image /");;\
}\
\
if (IsDevice("$wl_dev")) {\
    my $dummy_v = AttrVal($wl_dev, "ctrl_v", "");;\
    if ($ctrl_v ne $dummy_v) {\
        fhem("defmod ${wl_dev} weblink image /fhem/www/snapshots/${dev}.png");;\
        fhem("attr ${wl_dev} room Kamera");;\
        fhem("attr ${wl_dev} userattr ctrl_by ctrl_v");;\
        fhem("attr ${wl_dev} ctrl_by $SELF");;\
        fhem("attr ${wl_dev} ctrl_v $ctrl_v");;\
    }\
}\
\
return 0;;\
}

Beispiel um für alle Kameras die Sonnenaufgangs und Sonnenuntergangszeiten als Zeitplan mit unterschiedlichen Empfindlichkeitsstufen zu hinterlegen.
Bei Bewölkung wird die Empfindlichkeit zusätzlich runter gesetzt, um gegenüber Hell/Dunkel- Wechseln unempfindlicher zu werden.
Code (dailyKamera_Configuration) Auswählen
define dailyKamera_Configuration at *23:50 {\
## dailyKamera_Configuration\
my $message = "#$SELF\n";;\
my $Twilight_Dev = "Sonnenstand";;\
my $PROPLANTA_Dev = "myProPlanta";;\
my $msgChatId = "#Telegram_Gruppe";;\
\
my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime(gettimeofday());;\
\
my $fc = "1";;\
if ($hour < 23) {$fc = "0";;}\
$message .= "Verwende Vorhersage: fc${fc}\n";;\
\
my $tw_sr_weather = ReadingsVal($Twilight_Dev, "sr_weather", "-1:-2");;\
my $tw_ss_weather = ReadingsVal($Twilight_Dev, "ss_weather", "-3:-4");;\
my $pp_fcX_cloud06 = ReadingsVal($PROPLANTA_Dev, "fc${fc}_cloud06", -1);;\
my $pp_fcX_cloud09 = ReadingsVal($PROPLANTA_Dev, "fc${fc}_cloud09", -1);;\
my $pp_fcX_cloud12 = ReadingsVal($PROPLANTA_Dev, "fc${fc}_cloud12", -1);;\
my $pp_fcX_cloud15 = ReadingsVal($PROPLANTA_Dev, "fc${fc}_cloud15", -1);;\
my $pp_fcX_cloud18 = ReadingsVal($PROPLANTA_Dev, "fc${fc}_cloud18", -1);;\
my $pp_fcX_solar_rad = ReadingsVal($PROPLANTA_Dev, "fc${fc}_solar_rad", -1);;\
\
my @Kameras = devspec2array("K[1-99]+.*_Konfig");;\
##my @Params;;\
\
    \
## Range 1=Low, 26= Medium, 50=High\
my $low_sens = 12;;      ## cloudy and sunny\
my $high_sens = 26;;     ##\
my $std_sens = 26;;      ## Medium (at night)\
my $cur_sens;;\
\
##if ( ($pp_fcX_cloud09 > 30 || $pp_fcX_cloud12 > 30 || $pp_fcX_cloud15 > 30) && $pp_fcX_solar_rad >= 1.4) {\
if ( ($pp_fcX_cloud09 > 30 || $pp_fcX_cloud12 > 30 || $pp_fcX_cloud15 > 30) ) {\
    $cur_sens = $low_sens;;\
} else {\
    $cur_sens = $high_sens;;        \
}\
   \
$message .= "Kameraempfindlichkeit auf ${cur_sens} gesetzt (1=Low,26=Med,50=High)\n";;\
\
my $daylight_sens = -$cur_sens+51;; \
$message .= "newSens wird auf ${daylight_sens} gesetzt\n";;\
\
my $json1;;\
foreach(@Kameras){\
    my $cam_dev = $_;;\
    ##my $kamera_model = ReadingsVal($_,"model",0);;\
    ##my $kamera_firmVer = ReadingsVal($_,"firmVer",0);;\
    ##my $kamera_model_rdsage = ReadingsAge($_,"model", -1);;\
    ##my $kamera_hardVer = ReadingsVal($_,"hardVer",0);;\
    ##push(@Params, [$_, $kamera_model, $kamera_firmVer, Format_Seconds_Age($kamera_model_rdsage), $kamera_hardVer])\
    \
    \
\
    ##.----------------------------------------------------------------.\
    ##|                             CONFIG                             |\
    ##.----------------------------------------------------------------.\
   \
    my $add_scope = 0;;\
    my $add_sens = 0;;\
    \
    \
    my $MdAlarmJSON = "";;\
    $MdAlarmJSON .= "[";;\
    $MdAlarmJSON .= "{\"cmd\":\"SetMdAlarm\",\"action\":0,\"param\":{";;\
    $MdAlarmJSON .= "\"MdAlarm\":{";;\
    $MdAlarmJSON .= "\"channel\":0,";;\
    ##--------------------------------------------\
    ## scope\
    if ($add_scope) {\
        $MdAlarmJSON .= "\"scope\":{\"cols\":80,\"rows\":60,\"table\":\"\"},";;\
    }\
    ##--------------------------------------------\
    \
    $MdAlarmJSON .= "\"useNewSens\":1,";;\
\
    ##--------------------------------------------\
    ## sens\
    if ($add_sens) {\
        $MdAlarmJSON .= "\"sens\":[";;\
        \
        $MdAlarmJSON .= "{\"beginHour\":0,\"beginMin\":0,\"endHour\":6,\"endMin\":0,\"id\":0,\"sensitivity\":15}";;\
        $MdAlarmJSON .= ",";;\
        $MdAlarmJSON .= "{\"beginHour\":6,\"beginMin\":0,\"endHour\":12,\"endMin\":0,\"id\":2,\"sensitivity\":15}";;\
        $MdAlarmJSON .= ",";;\
        $MdAlarmJSON .= "{\"beginHour\":12,\"beginMin\":0,\"endHour\":18,\"endMin\":0,\"id\":2,\"sensitivity\":15}";;\
        $MdAlarmJSON .= ",";;\
        $MdAlarmJSON .= "{\"beginHour\":18,\"beginMin\":0,\"endHour\":23,\"endMin\":59,\"id\":3,\"sensitivity\":15}";;\
        \
        ##for (my $id = 0;; $id <= 3;; $id++) {\
        ##    $MdAlarmJSON .= "{\"beginHour\":0,\"beginMin\":0,\"endHour\":6,\"endMin\":0,\"id\":0,\"sensitivity\":10}";;\
        ##    if ($id < 3) {\
        ##        $MdAlarmJSON .= ",";;\
        ##    }\
        ##}\
        $MdAlarmJSON .= "],";;\
    }\
    ##--------------------------------------------\
\
    ##--------------------------------------------\
    ## newSens\
    $MdAlarmJSON .= "\"newSens\":{\"sens\":[";;\
 \
    my $tw = "${tw_sr_weather} ${tw_ss_weather}";;\
    my ($sr_hh, $sr_mm, $ss_hh, $ss_mm) = $tw =~ /^0*([1-9][0-9]*|0):0*([1-9][0-9]*|0):\d{2} 0*([1-9][0-9]*|0):0*([1-9][0-9]*|0):\d{2}$/;;\
    my $hh1 = 0;;\
    my $mm1 = 0;;\
    my $hh2 = 0;;\
    my $mm2 = 0;;\
    my $newSensID0 = "{\"enable\":1,\"beginHour\":${sr_hh},\"beginMin\":${sr_mm},\"endHour\":${ss_hh},\"endMin\":${ss_mm},\"id\":0,\"priority\":2,\"sensitivity\":${daylight_sens}}";;\
    my $newSensID1 = "{\"enable\":0,\"beginHour\":${hh1},\"beginMin\":${mm1},\"endHour\":${hh2},\"endMin\":${mm2},\"id\":2,\"priority\":4,\"sensitivity\":${daylight_sens}}";;\
    my $newSensID2 = "{\"enable\":0,\"beginHour\":${hh1},\"beginMin\":${mm1},\"endHour\":${hh2},\"endMin\":${mm2},\"id\":2,\"priority\":4,\"sensitivity\":${daylight_sens}}";;\
    my $newSensID3 = "{\"enable\":0,\"beginHour\":${hh1},\"beginMin\":${mm1},\"endHour\":${hh2},\"endMin\":${mm2},\"id\":3,\"priority\":5,\"sensitivity\":${daylight_sens}}";;\
\
    $json1 = $newSensID0;;\
    \
    $MdAlarmJSON .= "${newSensID0}, ${newSensID1}, ${newSensID2}, ${newSensID3}";;\
    \
    ##for (my $id = 0;; $id <= 3;; $id++) {\
    ##    ##$enable\
    ##    ##$(hh1, mm1, hh2, mm2)\
    ##    ##$prio = $id + 2;;\
    ##    ##$sens\
    ##    $MdAlarmJSON .= "{\"enable\":${enable},\"beginHour\":${hh1},\"beginMin\":${mm1},\"endHour\":${hh2},\"endMin\":${mm2},\"id\":${id},\"priority\":${prio},\"sensitivity\":${sens}}";;\
    ##    if ($id % 3) then {\
    ##        $MdAlarmJSON .= ",";;\
    ##    }\
    ##}\
    $MdAlarmJSON .= "]";;\
    ##--------------------------------------------\
\
    $MdAlarmJSON .= ",\"sensDef\":${std_sens}}}}}";; ## sensitivity other period\
    \
    \
    #### Weitere Kommandos ....\
    #### [{"cmd":"GetAbility","action":0,"param":{"User":{"userName":"admin"}}},{"cmd":"GetDevInfo","action":0,"param":{}}]\
    ##$MdAlarmJSON .= "{\"cmd\":\"GetAbility\",\"action\":0,\"param\":{\"User\":{\"userName\":\"admin\"}}}";;\
    ##$MdAlarmJSON .= ",";;\
    ##\
    ##$MdAlarmJSON .= "{\"cmd\":\"GetDevInfo\",\"action\":0,\"param\":{}}";;\
    \
    ##--------------------------------------------\
    ## GetMdAlarm\
    $MdAlarmJSON .= ",{\"cmd\":\"GetMdAlarm\",\"action\":0,\"param\":{\"channel\":0}}";;\
    ##--------------------------------------------\
    \
\
    $MdAlarmJSON .= "]";;\
    \
    \
    fhem("set ${cam_dev} api $MdAlarmJSON");;\
    fhem("setreading ${cam_dev} api $MdAlarmJSON");;\
    \
}\
\
$message .= "JSON ID0: ${json1}\n";;\
fhem("set myTelegramBot _msg \@$msgChatId $message");;\
\
}




ReneR1986

Bei meiner Reolink kann man statt der Sirene auch eine kurze, individuelle Sprachaufnahme aufnehmen.
Das wird dann aber nur bei Bewegungserkennungen abgespielt.

Kann man die Sirene oder eben die Sprachaufnahme über die API auch "manuell" auslösen (ohne Bewegungserkennung)?


ReneR1986

OK, ich habe es hinbekommen...
Jetzt gibt die Kamera über den Lautsprecher meine Sprachaufnahme wieder  ;D

attr HofCam set38Data {"cmd":"AudioAlarmPlay","action":0,"param":{"alarm_mode":"times","manual_switch":0,"times":$val,"channel":0}}]
attr HofCam set38Name ManualAlarm
attr HofCam set38Hint 1,2,3