NEWS
[Neuer Adapter] Reolink Kamera
-
@wendy2702 Danke,
aber jetzt habe ich leider immer noch keine Empfehlung, welche Kamera für mein Vorhaben am ehesten zutreffend wäre.
Die CX810 mit POE? -
@ben1983 Ich hatte mal HikVision und Trendnet, wegen der besseren Nachtsicht und weil ich nur noch einen Hersteller haben wollte bin ich zu Reolink gewechselt.
Habe aktuell 4x CX810 und 1x CX410 im Einsatz.
Wie bereits erwähnt derzeit mit Frigate zur Objekterkennung, möchte aber wenn es gut funktioniert auf die interne umstellen... sobald ich wieder auf eine Leiter darf um auch eine SD Karte zu installieren.
Einen Link mit Vergleich der Bilder hatte @Gonzokalle schon gepostet.
Hier noch ein weiterer: https://forum.iobroker.net/topic/72110/empfehlung-erfahrung-ip-kamera-mit-farb-nachtsicht/19?_=1745562834537
-
Doch hast du.
Reolink mit POE Anschluss generell.
Der Vergleich sollte dir doch weiter helfen.
Bei beiden werden Personen erkannt. Es kann aber nicht unter Personen unterschieden werden.Die CX810 mit Fabe in der Nacht. Bei schlechten Licht können Geisterbilder entstehen.
Die RLC-810A mit Infrarot bzw. S/W in der Nacht.
-
@ben1983 sagte in [Neuer Adapter] Reolink Kamera:
@wendy2702 Mein Vorhaben ist im Einfachsten Sinne:
Kamera auf Pool gerichtet. Wird eine Person erkannt (Nicht spezifisch, sondern einfach nur irgendeine Person),
dann wäre es schön über den Adapter einen Datenpukt gesetzt zu bekommen.
Geht das irgendwie?
Und Optional Aufzeichnung über Netzwerk auf NAS.Was könnt ihr mir da Empfehlen?
Mögliche Kameras hast du ja jetzt. Diese liefern einen entsprechenden Datenpunkt person_detected als bool. Du brauchst also für den Use Case ke8n frigate oä. Den DP kannst du zb via Blockly auswerten, und via rtsp ein Bild ziehen oder ein Video und entsprechend weiterverarbeiten. Ich schicke mir für meine Haustür bei Detection sofort ein Bild und nehme zusätzlich noch ein Video auf. Beides schicke ich mir per Telegram. Wenn du im reolink Adapter den Abfragezyklus auf 1 stelltst, klappt das gut mit sofortiger Benachrichtigung.
Hier meine Blocklys (ich habe mir Funktionen für Bild/ Video geschrieben, die ich verwenden kann). Das Bild/ Video wird unter /opt/iobroker/… temp. gespeichert und nach Verwendung gelöscht. Den Ziel-Unterordner musst du anlegen.
Trigger Personenerkennung: <block xmlns="https://developers.google.com/blockly/xml" type="on" id="uuz$N*O37(GIt3L;|W,}" x="-1888" y="-128"> <field name="OID">reolink.0.sensor.people.state</field> <field name="CONDITION">true</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="controls_if" id="dF$sT|2X(V+]B`g3IQ8l"> <value name="IF0"> <block type="logic_compare" id="#Z$ww+GTV,y;~1k~a8)^"> <field name="OP">GT</field> <value name="A"> <block type="math_arithmetic" id="LS:]$a.1mBO5=~n2;8xr"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="lu!qJ9/RycKkMtPVDoyu"> <field name="NUM">1</field> </shadow> <block type="time_get" id=")D:qa2zsxK)]g]y)Yh)7"> <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation> <field name="OPTION">object</field> </block> </value> <value name="B"> <shadow type="math_number" id="}duth#L-rZjmX9{VARn|"> <field name="NUM">1</field> </shadow> <block type="get_value" id=":bDq^SoFSvWOy3h19dge"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.EigeneDatenpunkte.Sicherheit.HaustuerLetzterAlarm</field> </block> </value> </block> </value> <value name="B"> <block type="math_number" id="^D9d^X/PE(GSW3sa9%}`"> <field name="NUM">180000</field> </block> </value> </block> </value> <statement name="DO0"> <block type="telegram" id="2e}?TZmnO-$81$jl$5FH"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">default</field> <field name="ESCAPING">FALSE</field> <field name="DISABLE_WEB_PAGE_PREVIEW">FALSE</field> <value name="MESSAGE"> <shadow type="text" id="Ay7o1YPRHx%^/vY]u:-?"> <field name="TEXT">Bewegung Haustuere erkannt!</field> </shadow> <block type="text" id="OTh(H#q:)PwET+Up{]-^"> <field name="TEXT">Bewegung Haustüre erkannt: Person/en</field> </block> </value> <next> <block type="debug" id="5rD}Pawz6])4pf^h`6k_"> <field name="Severity">info</field> <value name="TEXT"> <shadow type="text" id="C1UVogP=14,aAc?{8w0{"> <field name="TEXT">-HausInfos- Bewegung an Haustüre erkannt!</field> </shadow> <block type="text_join" id="^$hbaQieBtOV+y2oA.Fe"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="P,HXb+hM1zI()Ed)Sxo1"> <field name="TEXT">-HausInfos- Bewegung Haustüre erkannt: Person/en</field> </block> </value> </block> </value> <next> <block type="update" id=":%Z!4W+?#v`4v;ti#vH^"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.EigeneDatenpunkte.Sicherheit.HaustuerLetzterAlarm</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="get_value" id="F^@,^WdCJ+g3)1Dn$DO_"> <field name="ATTR">ts</field> <field name="OID">reolink.0.sensor.motion</field> </block> </value> <next> <block type="procedures_callnoreturn" id="p4lNhcd_%*NuGTeu0PG)"> <mutation name="HaustuerBilderSchicken"></mutation> <next> <block type="procedures_callnoreturn" id="@S~s;54ZH+uI%vHQMMY+"> <mutation name="HaustuereVideoSchicken"></mutation> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </statement> </block>
Bild schicken:
<block xmlns="https://developers.google.com/blockly/xml" type="procedures_defnoreturn" id="31W4)co*hfllBmNKD0j2" x="2713" y="-113"> <field name="NAME">HaustuerBilderSchicken</field> <comment pinned="false" h="80" w="160">holt ein Bild vom der Cam und schickt es per Telegram</comment> <statement name="STACK"> <block type="controls_if" id="A6cOkP*h,n}ZilH7=u]+"> <mutation else="1"></mutation> <value name="IF0"> <block type="get_value" id="2xz7D/{7Cr;$%oJ]Qkn-"> <field name="ATTR">val</field> <field name="OID">reolink.0.network.connected</field> </block> </value> <statement name="DO0"> <block type="comment" id="dUWhgD..@x7NToA81J~x"> <field name="COMMENT">http://192.168.253.9:8085</field> <next> <block type="http_get" id="P^;u4LBNv`?U^}YD(64+"> <field name="TIMEOUT">2000</field> <field name="UNIT">ms</field> <field name="TYPE">arraybuffer</field> <value name="URL"> <shadow type="text" id="H]!+Lf(Nc%5_V~fo4v7O"> <field name="TEXT">http://192.168.253.148/cgi-bin/api.cgi?cmd=Snap&channel=0&rs=&user=admin&password=pw</field> </shadow> </value> <statement name="STATEMENT"> <block type="telegram" id="r8,YW-hqOMW(=su_.DVb"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">default</field> <field name="ESCAPING">FALSE</field> <field name="DISABLE_WEB_PAGE_PREVIEW">FALSE</field> <value name="MESSAGE"> <shadow type="text" id="9eq;NDr4^eD/Qs0(3wN5"> <field name="TEXT">text</field> </shadow> <block type="http_response_tofile" id="!:Ngwi;@%%gZV,lT;T,x"> <value name="FILENAME"> <shadow type="text" id="tO6FZSDjDBqC[fXo`v+?"> <field name="TEXT">temp.jpg</field> </shadow> </value> </block> </value> </block> </statement> </block> </next> </block> </statement> <statement name="ELSE"> <block type="telegram" id="Ov9ho$a#M2b#*oVML:(|"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">default</field> <field name="ESCAPING">FALSE</field> <field name="DISABLE_WEB_PAGE_PREVIEW">FALSE</field> <value name="MESSAGE"> <shadow type="text" id="]ynKN#t)%{I1c=V__Q(U"> <field name="TEXT">Kamera Haustüre nicht erreichbar!</field> </shadow> </value> </block> </statement> </block> </statement> </block>
Video schicken
<block xmlns="https://developers.google.com/blockly/xml" type="procedures_defnoreturn" id=":u%-]}+:Oq#$%z.*G/X`" x="1897" y="-321"> <field name="NAME">HaustuereVideoSchicken</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> <statement name="STACK"> <block type="comment" id="=;Hz#?O{6CO(;J.tKZ}z"> <field name="COMMENT">h264Preview_01_ext</field> <next> <block type="variables_set" id="CSw$Oh|zU}or7j|W4sSn"> <field name="VAR" id="fJUJCIN5HrB8Akm?Xu?R">Befehl</field> <value name="VALUE"> <block type="text_join" id="D6.783^7hR8$?`tMsiG~"> <mutation items="3"></mutation> <value name="ADD0"> <block type="text" id="GKb14HP_!Jd~d|6;SWTH"> <field name="TEXT">ffmpeg -y -i rtsp://admin:pw@192.168.253.148:554/h264Preview_01_main -t </field> </block> </value> <value name="ADD1"> <block type="math_number" id="M_4$tL0mfoUN(A`|pHri"> <field name="NUM">30</field> </block> </value> <value name="ADD2"> <block type="text" id="Wj-o%7;;v,y(I~6-t*bK"> <field name="TEXT"> -f mp4 -vcodec libx264 -pix_fmt yuv420p -an -vf scale=1024:768 -r 15 /opt/iobroker/CamSnapshots/Haustuere.mp4</field> </block> </value> </block> </value> <next> <block type="exec" id="]Mmgt=)}fsMT=2m/c0ub"> <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="true"></mutation> <field name="WITH_STATEMENT">TRUE</field> <field name="LOG"></field> <value name="COMMAND"> <shadow type="text" id="e.P0Y4sWi?jQvW0Ikv9n"> <field name="TEXT">text</field> </shadow> <block type="variables_get" id="qF?QeOdsvtvtsgYP][Aq"> <field name="VAR" id="fJUJCIN5HrB8Akm?Xu?R">Befehl</field> </block> </value> <statement name="STATEMENT"> <block type="telegram" id="Ch~%tXvQ*FvZheza+M.o"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">default</field> <field name="ESCAPING">FALSE</field> <field name="DISABLE_WEB_PAGE_PREVIEW">FALSE</field> <value name="MESSAGE"> <shadow type="text" id="`}*6Z.:`6}.?55h*`(Nb"> <field name="TEXT">/opt/iobroker/AlarmCam/ImouFlur.jpg</field> </shadow> <block type="text" id="Mp89tz^y0ft*:zf$N__P"> <field name="TEXT">/opt/iobroker/CamSnapshots/Haustuere.mp4</field> </block> </value> <next> <block type="timeouts_wait" id="gDyq4a]Em:EvTOg?ONqG"> <field name="DELAY">10</field> <field name="UNIT">sec</field> <next> <block type="exec" id="N64}k!dt^P+9a7-86D//"> <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation> <field name="WITH_STATEMENT">FALSE</field> <field name="LOG"></field> <value name="COMMAND"> <shadow type="text" id="e.P0Y4sWi?jQvW0Ikv9n"> <field name="TEXT">text</field> </shadow> <block type="text" id="^([ZI#zcti8E-p5%1bvt"> <field name="TEXT">rm /opt/iobroker/CamSnapshots/Haustuere.mp4</field> </block> </value> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </statement> </block>
-
@mading kannst du mir mal zeigen wie du die Bewegungserkennung in der Kamera eingestellt hast.
-
@wendy2702 sagte in [Neuer Adapter] Reolink Kamera:
@mading kannst du mir mal zeigen wie du die Bewegungserkennung in der Kamera eingestellt hast.
z.B. über das Web Interface kannst du unter Alarm Settings ein paar Einstellungen durchführen (in welchem Zeitraum etc.).
Ich habe die Erkennung so eingestellt, dass keine vorbei fahrenden Fahrzeuge auf der Kreisstrasse triggern
-
Hallo zusammen, Ich bräuchte mal nen Tipp. Ich versuche grad das Bild einer Kamera per Telegram zu verschicken. Da http-get am Certifikat scheitert, dachte ich mir ich nutze die eingebaute Funktion des Adapters.
sendTo("reolink.0",{action: "snap"}, function(result){ sendTo("telegram.0",{text:result}); });
Leider scheint Telegram das aber nicht als Bild zu erkennen.
sendTo("reolink.0",{action: "snap"}, function(result){ const buffer =Buffer.from(result.base64, "base64"); sendTo("telegram.0",{text:buffer}); });
die Fehler sind Wahlweise
Failed sending [chatId - 995414256]: Error: ETELEGRAM: 413 Request Entity Too Large Failed sending [chatId - 995414256]: Error: ETELEGRAM: 400 Bad Request: message text is empty
Hat jemand nen Tipp?
-
@dominic151617 warum nicht das fertige Blockly von z.B. hier nutzen:
-
@wendy2702 Dank für die schnelle Antwort. Das war auch mein Startpunkt. Leider bekomme ich da den Fehler
script.js.Kamera.Reolink_Haustür: httpGet(url=http://192.168.178.123/cgi-bin/api.cgi?cmd=Snap&channel=0&rs=&user=admin&password=geheim, error=self-signed certificate)
Darüber ist @Ringo-66 auch schon weiter oben gestolpert. Leider konnte ich im weiteren Verlauf keine Lösung dafür finden. Daher habe ich einen anderen Ansatz gewählt. Ansicht macht es ja auch wengig sinn, das Bild erst auf die Platte zu schreiben und dann wieder einzulesen.
-
@dominic151617 hast du denn „http“ in der Kamera aktiv?
-
@dominic151617 Probier ersteinmal wie telegram das Bild haben will:
sendTo("telegram.0",{file:{type:"image/png",base64:"iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACmSURBVFhH7ZdhCoAgDEZnd9D737T8xJkNNY1Ef+yB2LTcC1qWOT20kCBgjIkh0WwfmeuIxyGYnRzIPElgFSqgAvsKOOdCzeZ1y7EcZzDG16HvwtckihLdA4xxk3HeGGttc17Cc+lN6Ds/dlO6w6/ItQHn7H4GcDK3Em/zNboE5KKjcQstQxVQARVYLlDdC2YzvBfMQgVUYB8BlMWfn2E1ZJ7Fv+dEF0UZoNhXp9NnAAAAAElFTkSuQmCC"}});
oder
sendTo("telegram.0",{file:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACmSURBVFhH7ZdhCoAgDEZnd9D737T8xJkNNY1Ef+yB2LTcC1qWOT20kCBgjIkh0WwfmeuIxyGYnRzIPElgFSqgAvsKOOdCzeZ1y7EcZzDG16HvwtckihLdA4xxk3HeGGttc17Cc+lN6Ds/dlO6w6/ItQHn7H4GcDK3Em/zNboE5KKjcQstQxVQARVYLlDdC2YzvBfMQgVUYB8BlMWfn2E1ZJ7Fv+dEF0UZoNhXp9NnAAAAAElFTkSuQmCC"});
Im Reolink adapter ist auch ein Beispiel für Matrix (Synapse, Elements)
sendTo("reolink.0",{action: "snap"}, function(result){ sendTo("matrix-org.0",{file:result}); });
-
@wendy2702
ich glaube da habe ich vergessen auf speichern zu klicken. Leider stolpere ich damit in den nächsten Fehler. Ich bekomme nur den Pfad und nicht das Bild. Wenn ich Terminal schaue, ist die Datei aber vorhanden. Ich lege das Thema für heute erstmal zur Seite. Besten Dank schon mal.
-
So, hab es jetzt doch hinbekommen. Danke noch mal an @wendy2702 und @oelison. Ich spar mir mal, über welche Fehlversuche ich zur Löung gekommen bin. Im Endefekt muss der Buffer als
{"type":"Buffer","data":[255,216,255,219,0,132,0,10,7,7,8,7 (hier fehlt ne Menge)]}
vorliegen. Was jetzt funktioniert ist:
sendTo("reolink.0",{action: "snap"}, function(result){ const buffer =Buffer.from(result.base64, "base64"); sendTo('telegram.0', { text: buffer, type: "photo", caption: 'A wonderful adapter' }); });
-
@gonzokalle Hi. Habe die CX810 nun hier. Auch in der APP, aber komme mit dem Adapter nicht online, bzw. der link auf github zur API, macht bei mir nichts. muss ich noch was beachten?
Edit: Habe es schon gefunden und in der APP https aktiviert.
-
@dominic151617 Danke. Ich habe das jetzt auch in die Readme.md kopiert.