NEWS
GELÖST: Base64 Bilddatei per Telegram senden?
-
Hallo Zusammen,
wie man grundsätzlich .JPG Bilder per Telegram versenden kann ist mir klar.
Nun habe ich den Unifi-Protect Adapter laufen der die Snapshots der Überwachungskamera als Base64 ala "data:image/png;base64 (Buchstabensalat)" Datei in einem Datenpunkt ablegt.
Wenn ich den Inhalt des DPs so an Telegram übergebe, sagt der, dass die Nachricht zu lang ist (ist sie auch).Weiß jemand wie man das versenden hinbekommt?
Ein möglicher Workaround wäre die Snapshots manuell zu triggern (Zeitgleich mit den automatischen) weil die manuellen in einem Ordner unter /vis.0/unifi-protect/manual/(Kameratoken)/(Timestamp).jpg abgelegt werden.
Das Problem was ich hier allerdings habe, dass Telegram aus diesem Ordner nichts versenden mag. Hier bekomme ich die Meldung "file must be non-empty"
Vermutlich keine Zugriffsrechte? Welche müsste man da geben?Viele Grüße
-
@900icard Bild umwandeln in png
let dateiname = '/jarvis/ffn.png' function savePNG(base64String){ const base64str = base64String.replace(/^data:image\/png;base64,/, ''); const base64data = Buffer.from(base64str, 'base64'); writeFile('0_userdata.0', dateiname, base64data, (err) => { if (!err) { console.info('File written'); } else { console.error(err); } }); }
-
@mcu sagte in Base64 Bilddatei per Telegram senden?:
let dateiname = '/jarvis/ffn.png' function savePNG(base64String){ const base64str = base64String.replace(/^data:image\/png;base64,/, ''); const base64data = Buffer.from(base64str, 'base64'); writeFile('0_userdata.0', dateiname, base64data, (err) => { if (!err) { console.info('File written'); } else { console.error(err); } }); }
Hallo @MCU,
Vielen Dank für das Script zum umwandeln. Leider bin ich im Bereich Javascript nicht bewandert und arbeite daher nur mit Blockly.
Könntest Du mir bitte das Script so anpassen, dass ich es verwenden kann.Der Datenpunkt in dem das base64 Bild drin liegt ist: unifi-protect.0.cameras.6749e0dc01b24a03e4000419.realTimeEvents.motion.snapshot
Der Datenpunkt wo dann das png landen soll wäre der: 0_userdata.0.Unifi.Kamera_png (Zeichenkette ok?)Wäre super wenn Du mir das darstellen könntest wie das angepasste Script dann aussehen müsste.
Vielen Dank schon mal. -
-
@mcu sagte in Base64 Bilddatei per Telegram senden?:
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="E%rN7q#/E24cC/v_IN@V">base64String</variable> <variable id="-Z^S#?atm^^T0LFTKkwL">dateiname</variable> </variables> <block type="procedures_defcustomnoreturn" id="1MPnr(os8hBSi|{}j|zA" x="63" y="13"> <mutation statements="false"> <arg name="base64String" varid="E%rN7q#/E24cC/v_IN@V"></arg> <arg name="dateiname" varid="-Z^S#?atm^^T0LFTKkwL"></arg> </mutation> <field name="NAME">saveBase64ToPNG</field> <field name="SCRIPT">Y29uc3QgYmFzZTY0c3RyID0gYmFzZTY0U3RyaW5nLnJlcGxhY2UoL15kYXRhOmltYWdlXC9wbmc7YmFzZTY0LC8sICcnKTsNCmNvbnN0IGJhc2U2NGRhdGEgPSBCdWZmZXIuZnJvbShiYXNlNjRzdHIsICdiYXNlNjQnKTsNCiAgICAgICANCiAgICB3cml0ZUZpbGUoJzBfdXNlcmRhdGEuMCcsIGRhdGVpbmFtZSwgYmFzZTY0ZGF0YSwgKGVycikgPT4gew0KICAgICAgICBpZiAoIWVycikgew0KICAgICAgICAgICAgY29uc29sZS5pbmZvKCdGaWxlIHdyaXR0ZW4nKTsNCiAgICAgICAgICAgIA0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpOw0KICAgICAgICAgICANCiAgICAgICAgfQ0KICAgIH0pOw0K</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="comment" id="
6I
,K68E_YjuJ4Bp3R" x="63" y="88"> <field name="COMMENT">Verzeichnis Unifi vorhanden unter 0_userdata.0 </field> <next> <block type="on_ext" id="BA7lZe|T]__C@mQ-7HdK"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="y2w*4dQTmCnVJfV!^v9P"> <field name="oid">ID auswählen</field> </shadow> <block type="text" id="so{7z(TL,$X=3{wEyo|~"> <field name="TEXT">unifi-protect.0.cameras.6749e0dc01b24a03e4000419.realTimeEvents.motion.snapshot</field> </block> </value> <statement name="STATEMENT"> <block type="procedures_callcustomnoreturn" id="N]XcZ
N*G9!|,t]jglN2"> <mutation name="saveBase64ToPNG"> <arg name="base64String"></arg> <arg name="dateiname"></arg> </mutation> <value name="ARG0"> <block type="on_source" id="v,63/0W-kYlZi[x8K!_e"> <field name="ATTR">state.val</field> </block> </value> <value name="ARG1"> <block type="text" id="PH1Pp)}:j[)x:OThOCB`"> <field name="TEXT">/Unifi/Kamera.png</field> </block> </value> </block> </statement> </block> </next> </block> </xml>Hallo @MCU,
Vielen Dank für die Schnelle Reaktion. Leider klappt es noch nicht ganz.
Das Script/die Funktion läuft durch und es kommt auch als Meldung im Log "File written". Im Datenpunkt steht allerdings nix drin.
Du hattest als Dateiname /Unifi/Kamera.png drin, das habe ich auf /Unifi/Kamera_png geändert so wie mein DP heißt, geht trotzdem nicht.
Ich habe auch schon einen DP direkt unter 0_userdata.0. als test angelegt und den Pfad nicht als Variable sondern fix im Script hinterlegt.
Läuft auch durch mit "File written" aber es kommt im DP nix an.
DP ist als String so wie der Originale auch.
Wo könnte ggf. noch ein Fehler sein? -
@900icard Es wird ein png Datei erstellt, die ist nicht im DP sondern unter Files / Dateien
Und da muss das Verzeichnis Unifi vorhanden sein. -
@mcu Aaaaaahhhh ... oh, mann wie peinlich. Das hätte ich ja checken müssen als ich den Punkt anstatt dem Unterstrich gesehen habe, tzzz
Super, danke. Das funktioniert natürlich.Jetzt habe ich nur noch das Problem, dass wenn ich das per telegram versenden will dann nur der Pfad und nicht das Bild versendet wird.
Weder damit /Unifi/Kamera.png noch damit /0_userdata.0/Unifi/Kamera.png funktioniert das.Bisher hatte ich Netatmo Presence Kameras im Einsatz und da habe ich die snapshots mit wget geholt und hier /home/iobroker/presence/last_snapshot.jpg abgespeichert.
Diese Pfadangabe mit dem Block "erstelle Text aus" schicken ging, da wurde das Bild gesendet.Am Dateiformat .png kanns nicht liegen oder?
Oder wie wäre die korrekte Pfadangabe auf 0_userdata.0/Unifi/....? -
-
@mcu Perfekt! So funktionierts.
Vielen, vielen Dank für Deine schnelle und umfangreiche Hilfe