# Ring MQTT -\> Base64 -\> Telegram

**URL:** <https://discourse.nodered.org/t/ring-mqtt-base64-telegram/64948>\
**Category:** General\
**Tags:** telegram\
**Created:** [11 July 2022 13:40 UTC](https://discourse.nodered.org/t/ring-mqtt-base64-telegram/64948 "2022-07-11T13:40:18Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![joeblack2k](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/joeblack2k/32/64457_2.png) [@joeblack2k](https://discourse.nodered.org/u/joeblack2k)\
**Post date:** [11 July 2022 13:40 UTC](https://discourse.nodered.org/t/ring-mqtt-base64-telegram/64948/1 "2022-07-11T13:40:18Z")

</div>

Hey Guys,

Question:

for the past 3 day's i'm trying to figure out how to get a mqtt base64 img to a telegram channel so i get a picture if someone rights the bell

i think i'm pretty far although i also think it can be more efficiënt.

this is my flow as of now:

 ![Screenshot 2022-07-11 at 15.31.52](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/a/b/abca9636a712dc8dc863d7a903e79251f0a1f234.jpeg)

The MQTT message gets encoded by the base64 then gets written on disk by "write"

it gets pickup when someone rings the doorbell by the "load image" and send picture contains:

> msg.payload.chatId=-100170xx49x220  
> msg.payload.type= 'photo';  
> msg.payload.caption= "Caption"  
> msg.payload.content= msg.payload  
> return msg;

i copied that from another user here on the forum and edited my chatid

this is the flow:

```auto
[
    {
        "id": "52910ba9d857f29e",
        "type": "base64",
        "z": "09d4dd0351a92c23",
        "name": "",
        "action": "",
        "property": "payload",
        "x": 340,
        "y": 780,
        "wires": [
            [
                "9291282e83a46ed7",
                "c1340dd4b1952e22"
            ]
        ]
    },
    {
        "id": "c1340dd4b1952e22",
        "type": "image viewer",
        "z": "09d4dd0351a92c23",
        "name": "",
        "width": 160,
        "data": "payload",
        "dataType": "msg",
        "active": true,
        "x": 750,
        "y": 620,
        "wires": [
            []
        ]
    },
    {
        "id": "9291282e83a46ed7",
        "type": "jimp-image",
        "z": "09d4dd0351a92c23",
        "name": "",
        "data": "payload",
        "dataType": "msg",
        "ret": "img",
        "parameter1": "/data/node-red-256.png",
        "parameter1Type": "str",
        "parameter2": "",
        "parameter2Type": "msg",
        "parameter3": "",
        "parameter3Type": "msg",
        "parameter4": "",
        "parameter4Type": "msg",
        "parameter5": "",
        "parameter5Type": "msg",
        "parameter6": "",
        "parameter6Type": "msg",
        "parameter7": "",
        "parameter7Type": "msg",
        "parameter8": "",
        "parameter8Type": "msg",
        "sendProperty": "payload",
        "sendPropertyType": "msg",
        "parameterCount": 1,
        "jimpFunction": "write",
        "selectedJimpFunction": {
            "name": "write",
            "fn": "write",
            "description": "Write to file. NOTE: You can specify an alternative file extension type to change the type. Currently support types are jpg, png, bmp.",
            "parameters": [
                {
                    "name": "filename",
                    "type": "str",
                    "required": true,
                    "hint": "Name of the file",
                    "defaultType": "str"
                }
            ]
        },
        "x": 610,
        "y": 820,
        "wires": [
            []
        ]
    },
    {
        "id": "12902d544a65b520",
        "type": "switch",
        "z": "09d4dd0351a92c23",
        "name": "",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "ON",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "OFF",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 250,
        "y": 960,
        "wires": [
            [
                "110674a7fb87820a",
                "0303f5f02dc57c56",
                "82ef1ec6644c5519",
                "a0158dde9de70598"
            ],
            []
        ]
    },
    {
        "id": "a41a7223779bc470",
        "type": "telegram sender",
        "z": "09d4dd0351a92c23",
        "name": "",
        "bot": "9199505571c7bbde",
        "haserroroutput": false,
        "outputs": 1,
        "x": 840,
        "y": 860,
        "wires": [
            [
                "692390b113e4e004"
            ]
        ]
    },
    {
        "id": "a0158dde9de70598",
        "type": "file in",
        "z": "09d4dd0351a92c23",
        "name": "load image",
        "filename": "/data/node-red-256.png",
        "format": "",
        "chunk": false,
        "sendError": false,
        "encoding": "none",
        "allProps": false,
        "x": 470,
        "y": 960,
        "wires": [
            [
                "bf924d9bde8ac67c"
            ]
        ]
    },
    {
        "id": "3fd182b208be2475",
        "type": "sonos-universal",
        "z": "09d4dd0351a92c23",
        "confignode": "ad4f73545a13e1ce",
        "command": "group.play.notification",
        "state": "http://patatje.net/dingdong.mp3",
        "stateType": "str",
        "avoidCheckPlayerAvailability": false,
        "name": "Overloop Ding Dong",
        "x": 380,
        "y": 860,
        "wires": [
            []
        ]
    },
    {
        "id": "0303f5f02dc57c56",
        "type": "sonos-universal",
        "z": "09d4dd0351a92c23",
        "confignode": "3bbcc44335742592",
        "command": "group.play.notification",
        "state": "http://patatje.net/dingdong.mp3",
        "stateType": "str",
        "avoidCheckPlayerAvailability": false,
        "name": "Keuken Ding Dong",
        "x": 630,
        "y": 880,
        "wires": [
            []
        ]
    },
    {
        "id": "82ef1ec6644c5519",
        "type": "api-current-state",
        "z": "09d4dd0351a92c23",
        "name": "AppleTV Woonkamer is playing",
        "server": "51041573183f2685",
        "version": 3,
        "outputs": 2,
        "halt_if": "Playing",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "entity_id": "media_player.woonkamer_tv",
        "state_type": "str",
        "blockInputOverrides": false,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "entity"
            }
        ],
        "for": "0",
        "forType": "num",
        "forUnits": "minutes",
        "override_topic": false,
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "x": 230,
        "y": 1080,
        "wires": [
            [
                "886c43c6cbf703ee"
            ],
            []
        ]
    },
    {
        "id": "886c43c6cbf703ee",
        "type": "api-call-service",
        "z": "09d4dd0351a92c23",
        "name": "Pause AppleTV",
        "server": "51041573183f2685",
        "version": 5,
        "debugenabled": false,
        "domain": "media_player",
        "service": "media_play_pause",
        "areaId": [
            "woonkamer"
        ],
        "deviceId": [
            "d25c0aee46e67579ff3bb3cbbc5c3f6f"
        ],
        "entityId": [
            "media_player.woonkamer_tv"
        ],
        "data": "",
        "dataType": "jsonata",
        "mergeContext": "",
        "mustacheAltTags": false,
        "outputProperties": [],
        "queue": "none",
        "x": 320,
        "y": 1120,
        "wires": [
            []
        ]
    },
    {
        "id": "692390b113e4e004",
        "type": "debug",
        "z": "09d4dd0351a92c23",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 950,
        "y": 780,
        "wires": []
    },
    {
        "id": "bf924d9bde8ac67c",
        "type": "function",
        "z": "09d4dd0351a92c23",
        "name": "send picture",
        "func": "msg.payload.chatId=-00000\nmsg.payload.type= 'photo';\nmsg.payload.caption= \"Caption\"\nmsg.payload.content= msg.payload\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 670,
        "y": 960,
        "wires": [
            [
                "a41a7223779bc470"
            ]
        ]
    },
    {
        "id": "3899e466c719ea88",
        "type": "comment",
        "z": "09d4dd0351a92c23",
        "name": "Ring creates a new snapshot every 3 seconds",
        "info": "",
        "x": 230,
        "y": 700,
        "wires": []
    },
    {
        "id": "ae69b7afd5e1b59f",
        "type": "comment",
        "z": "09d4dd0351a92c23",
        "name": "Write image to file",
        "info": "Write image to file",
        "x": 590,
        "y": 760,
        "wires": []
    },
    {
        "id": "ea0e5854176486bf",
        "type": "comment",
        "z": "09d4dd0351a92c23",
        "name": "Pickup writed file",
        "info": "",
        "x": 480,
        "y": 1020,
        "wires": []
    },
    {
        "id": "9199505571c7bbde",
        "type": "telegram bot",
        "botname": "@Pic0Bot",
        "usernames": "xxx",
        "chatids": "-xx",
        "baseapiurl": "",
        "updatemode": "polling",
        "pollinterval": "300",
        "usesocks": false,
        "sockshost": "",
        "socksport": "6667",
        "socksusername": "anonymous",
        "sockspassword": "",
        "bothost": "",
        "botpath": "",
        "localbotport": "8443",
        "publicbotport": "8443",
        "privatekey": "",
        "certificate": "",
        "useselfsignedcertificate": false,
        "sslterminated": false,
        "verboselogging": false
    },
    {
        "id": "ad4f73545a13e1ce",
        "type": "sonos-config",
        "name": "Overloop Sonos",
        "serialnum": "",
        "ipaddress": "10.0.1.10"
    },
    {
        "id": "3bbcc44335742592",
        "type": "sonos-config",
        "name": "Keuken",
        "serialnum": "",
        "ipaddress": "10.0.1.8"
    },
    {
        "id": "51041573183f2685",
        "type": "server",
        "name": "Home Assistant",
        "version": 2,
        "addon": false,
        "rejectUnauthorizedCerts": true,
        "ha_boolean": "y|yes|true|on|home|open",
        "connectionDelay": true,
        "cacheJson": true,
        "heartbeat": false,
        "heartbeatInterval": "30"
    }
]

```

i wonder what i'm doing wrong but i also wonder why i cant directly send the base64 to telegram without having to save it first.

i hope anyone can help!

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [11 July 2022 14:13 UTC](https://discourse.nodered.org/t/ring-mqtt-base64-telegram/64948/2 "2022-07-11T14:13:08Z")

</div>

You could save the image to flow context (in memory) then recall it from flow context upon `DingDong`

---

<div class="post-metadata">

**Author:** ![joeblack2k](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/joeblack2k/32/64457_2.png) [@joeblack2k](https://discourse.nodered.org/u/joeblack2k)\
**Post date:** [11 July 2022 14:24 UTC](https://discourse.nodered.org/t/ring-mqtt-base64-telegram/64948/3 "2022-07-11T14:24:48Z")

</div>

Wait.. how? i forgot to mention this is my first flow ever created lol.. i'm learning allot by reading your answers on different forum post but i keep bumping against unknowns like when i edit the "write" node and edit it to say "save to buffer" it doesnt work and i dont know why because in my mind thats correct right?

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [11 July 2022 14:36 UTC](https://discourse.nodered.org/t/ring-mqtt-base64-telegram/64948/4 "2022-07-11T14:36:36Z")

</div>

> [@joeblack2k](#):
>
> "save to buffer" it doesnt work and i dont know why because in my mind thats correct right?

It you attach a debug to the image node when set as "to buffer" and "none" for the operation, then you will see the output is a `buffer`.

therefore, if you use a change node AFTER the image node you can store that buffer in `flow.door_image` then you can use another change node to "set `msg.payload` to the value of `flow.door_image`" instead of the `file read` node.

Like this...

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/0/0/004207dd1c4de75c1906f8f0fdee8ac1d102a4d3.png)

Nodes I changed here...

```auto
[{"id":"b9abc24ee4d2c689","type":"mqtt in","z":"d8bcc25e815f0bc3","name":"mqtt set to return buffer","topic":"door_image","qos":"2","datatype":"buffer","broker":"1dd4851e.412ce3","nl":false,"rap":true,"rh":0,"inputs":0,"x":1160,"y":1400,"wires":[["9291282e83a46ed7"]]},{"id":"9291282e83a46ed7","type":"jimp-image","z":"d8bcc25e815f0bc3","name":"","data":"payload","dataType":"msg","ret":"buf","parameter1":"/data/node-red-256.png","parameter1Type":"str","parameter2":"","parameter2Type":"msg","parameter3":"","parameter3Type":"msg","parameter4":"","parameter4Type":"msg","parameter5":"","parameter5Type":"msg","parameter6":"","parameter6Type":"msg","parameter7":"","parameter7Type":"msg","parameter8":"","parameter8Type":"msg","sendProperty":"payload","sendPropertyType":"msg","parameterCount":0,"jimpFunction":"none","selectedJimpFunction":{"name":"none","fn":"none","description":"Just loads the image.","parameters":[]},"x":1350,"y":1400,"wires":[["fa48ec9f64be014e"]]},{"id":"fa48ec9f64be014e","type":"change","z":"d8bcc25e815f0bc3","name":"store image data in flow.door_image","rules":[{"t":"set","p":"door_image","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1590,"y":1400,"wires":[["c1340dd4b1952e22"]]},{"id":"c1340dd4b1952e22","type":"image viewer","z":"d8bcc25e815f0bc3","name":"","width":160,"data":"payload","dataType":"msg","active":true,"x":1850,"y":1400,"wires":[[]]},{"id":"293e3c3885d06ebb","type":"change","z":"d8bcc25e815f0bc3","name":"get flow.door_image","rules":[{"t":"set","p":"payload","pt":"msg","to":"door_image","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":1370,"y":1580,"wires":[["bf924d9bde8ac67c"]]},{"id":"bf924d9bde8ac67c","type":"function","z":"d8bcc25e815f0bc3","name":"prepare telegram","func":"\nmsg.payload = {\n chatId: -0,\n type: 'photo',\n caption: \"Caption\",\n content: msg.payload,\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1590,"y":1580,"wires":[["a41a7223779bc470"]]},{"id":"1dd4851e.412ce3","type":"mqtt-broker","name":"test.mosquitto.org","broker":"test.mosquitto.org","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]

```

## important note...

When using images, try not to branch off as this will create clones of the image - images are HEAVY work for nodejs. See how i have single wires only where the image travels 👆

---

<div class="post-metadata">

**Author:** ![joeblack2k](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/joeblack2k/32/64457_2.png) [@joeblack2k](https://discourse.nodered.org/u/joeblack2k)\
**Post date:** [11 July 2022 15:03 UTC](https://discourse.nodered.org/t/ring-mqtt-base64-telegram/64948/5 "2022-07-11T15:03:36Z")

</div>

Awesome! it works!

So we converted the base64 to image using the image node and then converted the image to a buffer named flow.door\_image and then grabbed the buffer converted it to msg.payload and send it to telegram

that means we can create buffers (temp. variables) using the change node? that would be a new insight in creating other flows.

thank you for this lesson 🙂

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [11 July 2022 15:09 UTC](https://discourse.nodered.org/t/ring-mqtt-base64-telegram/64948/6 "2022-07-11T15:09:02Z")

</div>

> [@joeblack2k](#):
>
> that means we can create buffers (temp. variables) using the change node

In simplest form - yes, that is correct

> [@joeblack2k](#):
>
> that would be a new insight in creating other flows.

Just dont get carried away. 🙂 - some gotchas...

- context is NOT a database (is held in memory)
- if 2 messages arrive in quick succession, you can get odd effects (context being overwriten by 2nd msg while first message is using it)

The best solutions are almost always event based and store necessary data for processing in the msg (and not necessarily just in `msg.payload` - you can store data in `msg.here`, `msg.there` and `msg.any_where_your_heart_desires`) for use in nodes further downstream.

---

<div class="post-metadata">

**Author:** ![joeblack2k](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/joeblack2k/32/64457_2.png) [@joeblack2k](https://discourse.nodered.org/u/joeblack2k)\
**Post date:** [11 July 2022 15:17 UTC](https://discourse.nodered.org/t/ring-mqtt-base64-telegram/64948/7 "2022-07-11T15:17:21Z")

</div>

haha noted! thank you for the insight

---

<div class="post-metadata">

**Author:** ![dceejay](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/dceejay/32/38_2.png) [@dceejay](https://discourse.nodered.org/u/dceejay)\
**Post date:** [11 July 2022 15:17 UTC](https://discourse.nodered.org/t/ring-mqtt-base64-telegram/64948/8 "2022-07-11T15:17:39Z")

</div>

just my 2c and probably haven't understood totally... - in the top flow - you are taking the image and converting it to base64 - so now it looks like you are going mqtt (buffer) -\> base64 -\> image -\> buffer... are you sure that the original isn't just a buffer you can use to start with ?

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [11 July 2022 15:21 UTC](https://discourse.nodered.org/t/ring-mqtt-base64-telegram/64948/9 "2022-07-11T15:21:26Z")

</div>

> [@dceejay](#):
>
> so now it looks like you are going mqtt (buffer) -\> base64 -\> image -\> buffer... are you sure that the original isn't just a buffer you can use to start with ?

Quite possibly, but I didnt raise it since I was unsure of incoming format (it was working for the OP) so just stay shtum 🤫

@joeblack2k as Dave rightly points out, you can likely just do `mqtt (output buffer)` --\> `change node (store in context)` and skip the other stuff (though it does depend on the msg format and image format - it may or may not work - as the image node does do some _magic_ on odd images with missing type info and missing mime types)

YMMV

---

<div class="post-metadata">

**Author:** ![joeblack2k](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/joeblack2k/32/64457_2.png) [@joeblack2k](https://discourse.nodered.org/u/joeblack2k)\
**Post date:** [11 July 2022 17:03 UTC](https://discourse.nodered.org/t/ring-mqtt-base64-telegram/64948/10 "2022-07-11T17:03:08Z")

</div>

Nice, i could indeed remove the image node and just go directly

even cleaner setup! thanks!

 ![Screenshot 2022-07-11 at 19.02.25](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/4/b/4b8c9a707b2d5ce44b4d8b97c85c9412aec88fab.jpeg)

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/1X/d073cd938eafa2e558d7c2cd59003b3ef4963033.png) [@system](https://discourse.nodered.org/u/system)\
**Post date:** [9 September 2022 17:04 UTC](https://discourse.nodered.org/t/ring-mqtt-base64-telegram/64948/11 "2022-09-09T17:04:00Z")

</div>

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.
