# Query SMA Energy Meter / Home Manager by UDP in

**URL:** <https://discourse.nodered.org/t/query-sma-energy-meter-home-manager-by-udp-in/42983>\
**Category:** General\
**Created:** [22 March 2021 07:00 UTC](https://discourse.nodered.org/t/query-sma-energy-meter-home-manager-by-udp-in/42983 "2021-03-22T07:00:45Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![Becker](https://avatars.discourse-cdn.com/v4/letter/b/c77e96/32.png) [@Becker](https://discourse.nodered.org/u/Becker)\
**Post date:** [22 March 2021 07:00 UTC](https://discourse.nodered.org/t/query-sma-energy-meter-home-manager-by-udp-in/42983/1 "2021-03-22T07:00:45Z")

</div>

Hi,  
I came across the possibility to query my home manager directly in Node Red with UDP in:

> **[SMA Energy Meter in Home Assistant](https://community.home-assistant.io/t/sma-energy-meter-in-home-assistant/47482/73)**
>
> Here is a way to get the data directly from the SMA Energy Meter or from the SMA Home Manager 2.0 by using Node Red. Why Node Red? It has all we need to intercept the udp multicast messages the Energy Meter sends out every second. I assume a hass.io...

```auto
[{"id":"a14c0e39.6a108","type":"udp in","z":"4726af68.c62a98","name":"Home Manager","iface":"","port":"9522","ipv":"udp4","multicast":"true","group":"239.12.255.254","datatype":"buffer","x":310,"y":440,"wires":[["124446eb.e14ff9"]]},{"id":"76a01c62.9a89b4","type":"debug","z":"4726af68.c62a98","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":670,"y":440,"wires":[]},{"id":"124446eb.e14ff9","type":"function","z":"4726af68.c62a98","name":"","func":"var count = context.get('count')||0;\ncount += 1;\n\n\nvar msg1 = { payload:\"actual consumption\" };\nvar msg2 = { payload:\"actual gridfeed\" };\nvar msg3 = { payload:\"consumption counter\" };\nvar msg4 = { payload:\"gridfeed counter\" };\n\n\n/* to get the actual grid consumption in W we need the offset 0.1.4.0 */\noffset = msg.payload.indexOf(\"00010400\", 0, \"hex\")+ 4;\nvar consumption = parseInt((msg.payload[offset+0]*0x1000000 + \n msg.payload[offset+1]*0x10000 + \n msg.payload[offset+2]*0x100 +\n msg.payload[offset+3]) / 10);\n\n/* to get the actual grid consumption counter in Wh we need the offset 0.1.8.0 */\noffset = msg.payload.indexOf(\"00010800\", 0, \"hex\")+ 4;\nvar consumption_c = parseInt((msg.payload[offset+0]*0x100000000000000 + \n msg.payload[offset+1]*0x1000000000000 + \n msg.payload[offset+2]*0x10000000000 +\n msg.payload[offset+3]*0x100000000 +\n msg.payload[offset+4]*0x1000000 + \n msg.payload[offset+5]*0x10000 + \n msg.payload[offset+6]*0x100 +\n msg.payload[offset+7]) / 3600);\n\n/* to get the actual grid feed in W we need the offset 0.2.4.0 */\noffset = msg.payload.indexOf(\"00020400\", 0, \"hex\")+ 4;\nvar gridfeed = parseInt((msg.payload[offset+0]*0x1000000 + \n msg.payload[offset+1]*0x10000 + \n msg.payload[offset+2]*0x100 +\n msg.payload[offset+3]) / 10);\n\n/* to get the actual grid feed counter in Wh we need the offset 0.2.8.0 */\noffset = msg.payload.indexOf(\"00020800\", 0, \"hex\")+ 4;\nvar gridfeed_c = parseInt((msg.payload[offset+0]*0x100000000000000 + \n msg.payload[offset+1]*0x1000000000000 + \n msg.payload[offset+2]*0x10000000000 +\n msg.payload[offset+3]*0x100000000 +\n msg.payload[offset+4]*0x1000000 + \n msg.payload[offset+5]*0x10000 + \n msg.payload[offset+6]*0x100 +\n msg.payload[offset+7]) / 3600);\n\n\nif (consumption >= 0 && consumption < 100000 ) {\n msg1.payload = consumption.toString(); \n} else msg1 = null;\n\nif (consumption_c >= 0 && consumption_c < 50000000 ) {\n msg2.payload = consumption_c.toString(); \n} else msg2 = null;\n\nif (gridfeed >= 0 && gridfeed < 100000 ) {\n msg3.payload = gridfeed.toString(); \n} else msg3 = null;\n\nif (gridfeed_c >= 0 && gridfeed_c < 5000000 ) {\n msg4.payload = gridfeed_c.toString(); \n} else msg4 = null;\n\n\nreturn [msg1, msg2, msg3, msg4];","outputs":1,"noerr":0,"initialize":"","finalize":"","x":500,"y":440,"wires":[["76a01c62.9a89b4"]]}]

```

to get the raw data is very easy, but to extract all the values is difficult. The example flow doesn´t work correct.

Here is an explanation of what is queried:  
[http://www.eb-systeme.de/wp-content/uploads/2019/12/EMETER-Protokoll-TI-de-10.pdf](http://www.eb-systeme.de/wp-content/uploads/2019/12/EMETER-Protokoll-TI-de-10.pdf)

this query program also works:

> **[datenschuft/SMA-EM](https://github.com/datenschuft/SMA-EM)**
>
> SMA Energymeter measurement. Contribute to datenschuft/SMA-EM development by creating an account on GitHub.

[SMA-EM/speedwiredecoder.py at master · datenschuft/SMA-EM · GitHub](https://github.com/datenschuft/SMA-EM/blob/master/speedwiredecoder.py) (decoder)  
 ![grafik](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/4/1/411115b6d8d73af6df913e49d6fdfd0c312cc7cd.png)

I would like to decrypt all data and output it every second, for this I need a tip on how I can proceed in principle, as @Steve-Mcl showed me the buffer parser for the Modbus query back then.

Maybe a Buffer Parser could work ?

This is the raw input vom UDP in:

```auto
[83,77,65,0,0,4,2,160,0,0,0,1,2,76,0,16,96,105,1,116,113,89,181,228,88,186,142,41,0,1,4,0,0,0,0,74,0,1,8,0,0,0,0,6,140,178,168,168,0,2,4,0,0,0,0,0,0,2,8,0,0,0,0,7,253,178,78,24,0,3,4,0,0,0,0,0,0,3,8,0,0,0,0,0,16,235,94,240,0,4,4,0,0,0,22,30,0,4,8,0,0,0,0,12,168,135,222,48,0,9,4,0,0,0,22,30,0,9,8,0,0,0,0,12,28,154,227,224,0,10,4,0,0,0,0,0,0,10,8,0,0,0,0,9,97,63,42,104,0,13,4,0,0,0,0,13,0,14,4,0,0,0,195,82,0,21,4,0,0,0,0,0,0,21,8,0,0,0,0,3,125,229,248,40,0,22,4,0,0,0,5,89,0,22,8,0,0,0,0,7,95,110,238,0,0,23,4,0,0,0,0,0,0,23,8,0,0,0,0,0,25,7,4,144,0,24,4,0,0,0,10,18,0,24,8,0,0,0,0,4,201,201,10,64,0,29,4,0,0,0,0,0,0,29,8,0,0,0,0,5,52,51,139,248,0,30,4,0,0,0,11,103,0,30,8,0,0,0,0,7,216,157,153,232,0,31,4,0,0,0,6,73,0,32,4,0,0,3,136,221,0,33,4,0,0,0,1,213,0,41,4,0,0,0,6,77,0,41,8,0,0,0,0,2,143,16,39,40,0,42,4,0,0,0,0,0,0,42,8,0,0,0,0,0,212,170,232,136,0,43,4,0,0,0,0,0,0,43,8,0,0,0,0,0,11,51,114,184,0,44,4,0,0,0,5,74,0,44,8,0,0,0,0,2,21,225,52,240,0,49,4,0,0,0,8,58,0,49,8,0,0,0,0,3,115,86,47,64,0,50,4,0,0,0,0,0,0,50,8,0,0,0,0,0,229,93,153,200,0,51,4,0,0,0,4,5,0,52,4,0,0,3,139,244,0,53,4,0,0,0,2,254,0,61,4,0,0,0,0,0,0,61,8,0,0,0,0,1,193,39,152,200,0,62,4,0,0,0,0,170,0,62,8,0,0,0,0,1,11,3,142,8,0,63,4,0,0,0,0,0]

```

full debug:

```auto
{"payload":[83,77,65,0,0,4,2,160,0,0,0,1,2,76,0,16,96,105,1,116,113,89,181,228,88,187,136,25,0,1,4,0,0,0,0,0,0,1,8,0,0,0,0,6,140,178,168,168,0,2,4,0,0,0,0,92,0,2,8,0,0,0,0,7,253,178,79,128,0,3,4,0,0,0,0,0,0,3,8,0,0,0,0,0,16,235,94,240,0,4,4,0,0,0,22,5,0,4,8,0,0,0,0,12,168,136,108,56,0,9,4,0,0,0,0,0,0,9,8,0,0,0,0,12,28,155,35,40,0,10,4,0,0,0,22,5,0,10,8,0,0,0,0,9,97,63,121,40,0,13,4,0,0,0,0,16,0,14,4,0,0,0,195,86,0,21,4,0,0,0,0,0,0,21,8,0,0,0,0,3,125,229,248,40,0,22,4,0,0,0,5,230,0,22,8,0,0,0,0,7,95,111,18,144,0,23,4,0,0,0,0,0,0,23,8,0,0,0,0,0,25,7,4,144,0,24,4,0,0,0,10,13,0,24,8,0,0,0,0,4,201,201,74,240,0,29,4,0,0,0,0,0,0,29,8,0,0,0,0,5,52,51,139,248,0,30,4,0,0,0,11,167,0,30,8,0,0,0,0,7,216,157,227,8,0,31,4,0,0,0,6,105,0,32,4,0,0,3,135,98,0,33,4,0,0,0,1,250,0,41,4,0,0,0,6,64,0,41,8,0,0,0,0,2,143,16,79,240,0,42,4,0,0,0,0,0,0,42,8,0,0,0,0,0,212,170,232,136,0,43,4,0,0,0,0,0,0,43,8,0,0,0,0,0,11,51,114,184,0,44,4,0,0,0,5,70,0,44,8,0,0,0,0,2,21,225,86,176,0,49,4,0,0,0,8,46,0,49,8,0,0,0,0,3,115,86,100,176,0,50,4,0,0,0,0,0,0,50,8,0,0,0,0,0,229,93,153,200,0,51,4,0,0,0,4,5,0,52,4,0,0,3,139,30,0,53,4,0,0,0,2,252,0,61,4,0,0,0,0,0,0,61,8,0,0,0,0,1,193,39,152,200,0,62,4,0,0,0,0,182,0,62,8,0,0,0,0,1,11,3,147,168,0,63,4,0,0,0,0,0,0,63,8,0,0,0,0,0,11,43,32,64,0,64,4,0,0,0,6,177,0,64,8,0,0,0,0,5,231,88,0,96,0,69,4,0,0,0,0,0,0,69,8,0,0,0,0,6,18,102,145,104,0,70,4,0,0,0,6,187,0,70,8,0,0,0,0,1,52,69,76,192,0,71,4,0,0,0,3,201,0,72,4,0,0,3,132,175,0,73,4,0,0,0,0,106,144,0,0,0,2,6,6,82,0,0,0,0],"fromip":"192.168.168.23:58874","ip":"192.168.168.23","port":58874,"_msgid":"b43d1ee5.26a5f"}

```

greetings

---

<div class="post-metadata">

**Author:** ![Becker](https://avatars.discourse-cdn.com/v4/letter/b/c77e96/32.png) [@Becker](https://discourse.nodered.org/u/Becker)\
**Post date:** [22 March 2021 08:19 UTC](https://discourse.nodered.org/t/query-sma-energy-meter-home-manager-by-udp-in/42983/2 "2021-03-22T08:19:27Z")

</div>

here is the explanation in English:  
[https://translate.google.com/translate?sl=de&tl=en&u=http://www.eb-systeme.de/?page\_id%3D3005](https://translate.google.com/translate?sl=de&tl=en&u=http://www.eb-systeme.de/?page_id%3D3005)

---

<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:** [22 March 2021 12:48 UTC](https://discourse.nodered.org/t/query-sma-energy-meter-home-manager-by-udp-in/42983/3 "2021-03-22T12:48:46Z")

</div>

that manual is terrible - not nearly enough info to decode that protocol.

Fortunately, the python code gave me plenty of clues.

I was going to give you clues and pointers but TBF, this was a fun challenge so I did the lions share. It may not be 100% complete (or even accurate) but it should be close enough to progress...

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/4/c/4ccc685a0e8bbcf4d1f1ebacfbadf925c04dec38.png)

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/2/e/2e75fa04d0acdaba03f7fe45647573256abdee3b.png)

```auto
[{"id":"9763dc2c.40756","type":"inject","z":"b872cb4b.5a6448","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":300,"y":580,"wires":[["97dec846.ffc208"]]},{"id":"97dec846.ffc208","type":"function","z":"b872cb4b.5a6448","name":"fake udp msg","func":"return { \n \"payload\": Buffer.from([83, 77, 65, 0, 0, 4, 2, 160, 0, 0, 0, 1, 2, 76, 0, 16, 96, 105, 1, 116, 113, 89, 181, 228, 88, 186, 142, 41, 0, 1, 4, 0, 0, 0, 0, 74, 0, 1, 8, 0, 0, 0, 0, 6, 140, 178, 168, 168, 0, 2, 4, 0, 0, 0, 0, 0, 0, 2, 8, 0, 0, 0, 0, 7, 253, 178, 78, 24, 0, 3, 4, 0, 0, 0, 0, 0, 0, 3, 8, 0, 0, 0, 0, 0, 16, 235, 94, 240, 0, 4, 4, 0, 0, 0, 22, 30, 0, 4, 8, 0, 0, 0, 0, 12, 168, 135, 222, 48, 0, 9, 4, 0, 0, 0, 22, 30, 0, 9, 8, 0, 0, 0, 0, 12, 28, 154, 227, 224, 0, 10, 4, 0, 0, 0, 0, 0, 0, 10, 8, 0, 0, 0, 0, 9, 97, 63, 42, 104, 0, 13, 4, 0, 0, 0, 0, 13, 0, 14, 4, 0, 0, 0, 195, 82, 0, 21, 4, 0, 0, 0, 0, 0, 0, 21, 8, 0, 0, 0, 0, 3, 125, 229, 248, 40, 0, 22, 4, 0, 0, 0, 5, 89, 0, 22, 8, 0, 0, 0, 0, 7, 95, 110, 238, 0, 0, 23, 4, 0, 0, 0, 0, 0, 0, 23, 8, 0, 0, 0, 0, 0, 25, 7, 4, 144, 0, 24, 4, 0, 0, 0, 10, 18, 0, 24, 8, 0, 0, 0, 0, 4, 201, 201, 10, 64, 0, 29, 4, 0, 0, 0, 0, 0, 0, 29, 8, 0, 0, 0, 0, 5, 52, 51, 139, 248, 0, 30, 4, 0, 0, 0, 11, 103, 0, 30, 8, 0, 0, 0, 0, 7, 216, 157, 153, 232, 0, 31, 4, 0, 0, 0, 6, 73, 0, 32, 4, 0, 0, 3, 136, 221, 0, 33, 4, 0, 0, 0, 1, 213, 0, 41, 4, 0, 0, 0, 6, 77, 0, 41, 8, 0, 0, 0, 0, 2, 143, 16, 39, 40, 0, 42, 4, 0, 0, 0, 0, 0, 0, 42, 8, 0, 0, 0, 0, 0, 212, 170, 232, 136, 0, 43, 4, 0, 0, 0, 0, 0, 0, 43, 8, 0, 0, 0, 0, 0, 11, 51, 114, 184, 0, 44, 4, 0, 0, 0, 5, 74, 0, 44, 8, 0, 0, 0, 0, 2, 21, 225, 52, 240, 0, 49, 4, 0, 0, 0, 8, 58, 0, 49, 8, 0, 0, 0, 0, 3, 115, 86, 47, 64, 0, 50, 4, 0, 0, 0, 0, 0, 0, 50, 8, 0, 0, 0, 0, 0, 229, 93, 153, 200, 0, 51, 4, 0, 0, 0, 4, 5, 0, 52, 4, 0, 0, 3, 139, 244, 0, 53, 4, 0, 0, 0, 2, 254, 0, 61, 4, 0, 0, 0, 0, 0, 0, 61, 8, 0, 0, 0, 0, 1, 193, 39, 152, 200, 0, 62, 4, 0, 0, 0, 0, 170, 0, 62, 8, 0, 0, 0, 0, 1, 11, 3, 142, 8, 0, 63, 4, 0, 0, 0, 0, 0]),\n \"fromip\": \"192.168.168.23:58874\", \"ip\": \"192.168.168.23\", \"port\": 58874, \"_msgid\": \"b43d1ee5.26a5f\" \n }\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":460,"y":580,"wires":[["d31802c3.e2aef"]]},{"id":"d31802c3.e2aef","type":"buffer-parser","z":"b872cb4b.5a6448","name":"","data":"payload","dataType":"msg","specification":"spec","specificationType":"ui","items":[{"type":"string","name":"sma","offset":0,"length":3,"offsetbit":0,"scale":"1","mask":""},{"type":"uint32be","name":"Tag=>Tag0","offset":4,"length":1,"offsetbit":0,"scale":">> 4","mask":"0xff0"},{"type":"uint32be","name":"Tag=>Version","offset":4,"length":1,"offsetbit":0,"scale":"0","mask":"0xf"},{"type":"uint32be","name":"Group","offset":8,"length":1,"offsetbit":0,"scale":"0","mask":""},{"type":"uint32be","name":"item10","offset":25,"length":1,"offsetbit":0,"scale":">> 4","mask":"0xFFF0"},{"type":"uint16be","name":"ProtocolID","offset":16,"length":1,"offsetbit":0,"scale":"0","mask":""},{"type":"uint32be","name":"meter_identifier=>SusyID","offset":18,"length":1,"offsetbit":0,"scale":">> 4","mask":"0xFFF0"},{"type":"uint32be","name":"meter_identifier=>SerNo","offset":21,"length":1,"offsetbit":0,"scale":">> 4","mask":"0xFFF0"},{"type":"buffer","name":"data","offset":28,"length":-1,"offsetbit":0,"scale":"1","mask":""}],"swap1":"","swap2":"","swap3":"","swap1Type":"swap","swap2Type":"swap","swap3Type":"swap","msgProperty":"payload","msgPropertyType":"str","resultType":"keyvalue","resultTypeType":"output","multipleResult":false,"fanOutMultipleResult":false,"setTopic":true,"outputs":1,"x":650,"y":580,"wires":[["6c5f3651.e1e838"]]},{"id":"6c5f3651.e1e838","type":"buffer-parser","z":"b872cb4b.5a6448","name":"","data":"payload.data","dataType":"msg","specification":"spec","specificationType":"ui","items":[{"type":"int16be","name":"measurement","offset":0,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"uint8","name":"datatype","offset":2,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"buffer","name":"data","offset":0,"length":-1,"offsetbit":0,"scale":"1","mask":""}],"swap1":"","swap2":"","swap3":"","swap1Type":"swap","swap2Type":"swap","swap3Type":"swap","msgProperty":"payload","msgPropertyType":"str","resultType":"keyvalue","resultTypeType":"output","multipleResult":false,"fanOutMultipleResult":false,"setTopic":true,"outputs":1,"x":310,"y":680,"wires":[["35f7b433.19293c"]]},{"id":"35f7b433.19293c","type":"switch","z":"b872cb4b.5a6448","name":"8-counter, 4-actual, 0-version, other","property":"payload.datatype","propertyType":"msg","rules":[{"t":"eq","v":"8","vt":"num"},{"t":"eq","v":"4","vt":"num"},{"t":"eq","v":"0","vt":"num"},{"t":"else"}],"checkall":"true","repair":false,"outputs":4,"x":560,"y":680,"wires":[["99493b53.093878"],["701afb7c.a29b14"],["2518624f.84d29e"],["2518624f.84d29e"]]},{"id":"701afb7c.a29b14","type":"buffer-parser","z":"b872cb4b.5a6448","name":"","data":"payload.data","dataType":"msg","specification":"spec","specificationType":"ui","items":[{"type":"uint32be","name":"value","offset":4,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"buffer","name":"data","offset":8,"length":-1,"offsetbit":0,"scale":"1","mask":""}],"swap1":"","swap2":"","swap3":"","swap1Type":"swap","swap2Type":"swap","swap3Type":"swap","msgProperty":"payload2","msgPropertyType":"str","resultType":"keyvalue","resultTypeType":"output","multipleResult":false,"fanOutMultipleResult":false,"setTopic":true,"outputs":1,"x":830,"y":700,"wires":[["fa42d9d5.faa708"]]},{"id":"99493b53.093878","type":"buffer-parser","z":"b872cb4b.5a6448","name":"","data":"payload.data","dataType":"msg","specification":"spec","specificationType":"ui","items":[{"type":"biguint64be","name":"value","offset":4,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"buffer","name":"data","offset":12,"length":-1,"offsetbit":0,"scale":"1","mask":""}],"swap1":"","swap2":"","swap3":"","swap1Type":"swap","swap2Type":"swap","swap3Type":"swap","msgProperty":"payload2","msgPropertyType":"str","resultType":"keyvalue","resultTypeType":"output","multipleResult":false,"fanOutMultipleResult":false,"setTopic":true,"outputs":1,"x":830,"y":660,"wires":[["fa42d9d5.faa708"]]},{"id":"fa42d9d5.faa708","type":"function","z":"b872cb4b.5a6448","name":"more data available?","func":"var sma_units = {\n \"W\": 10,\n \"VA\": 10,\n \"VAr\": 10,\n \"kWh\": 3600000,\n \"kVAh\": 3600000,\n \"kVArh\": 3600000,\n \"A\": 1000,\n \"V\": 1000,\n \"°\": 1000,\n \"Hz\": 1000,\n};\nvar sma_channels = {\n //# totals\n 1: ['pconsume', 'W', 'kWh'],\n 2: ['psupply', 'W', 'kWh'],\n 3: ['qconsume', 'VAr', 'kVArh'],\n 4: ['qsupply', 'VAr', 'kVArh'],\n 9: ['sconsume', 'VA', 'kVAh'],\n 10: ['ssupply', 'VA', 'kVAh'],\n 13: ['cosphi', '°'],\n 14: ['frequency', 'Hz'],\n //# phase 1\n 21: ['p1consume', 'W', 'kWh'],\n 22: ['p1supply', 'W', 'kWh'],\n 23: ['q1consume', 'VAr', 'kVArh'],\n 24: ['q1supply', 'VAr', 'kVArh'],\n 29: ['s1consume', 'VA', 'kVAh'],\n 30: ['s1supply', 'VA', 'kVAh'],\n 31: ['i1', 'A'],\n 32: ['u1', 'V'],\n 33: ['cosphi1', '°'],\n //# phase 2\n 41: ['p2consume', 'W', 'kWh'],\n 42: ['p2supply', 'W', 'kWh'],\n 43: ['q2consume', 'VAr', 'kVArh'],\n 44: ['q2supply', 'VAr', 'kVArh'],\n 49: ['s2consume', 'VA', 'kVAh'],\n 50: ['s2supply', 'VA', 'kVAh'],\n 51: ['i2', 'A'],\n 52: ['u2', 'V'],\n 53: ['cosphi2', '°'],\n //# phase 3\n 61: ['p3consume', 'W', 'kWh'],\n 62: ['p3supply', 'W', 'kWh'],\n 63: ['q3consume', 'VAr', 'kVArh'],\n 64: ['q3supply', 'VAr', 'kVArh'],\n 69: ['s3consume', 'VA', 'kVAh'],\n 70: ['s3supply', 'VA', 'kVAh'],\n 71: ['i3', 'A'],\n 72: ['u3', 'V'],\n 73: ['cosphi3', '°'],\n //# common\n 36864: ['speedwire-version', ''],\n};\n\nmsg.result = msg.result || {};\n\nfunction decode_item_header(datatype, measurement) {\n if (datatype == 4)\n return 'actual'\n else if (datatype == 8)\n return 'counter';\n else if (datatype == 0 && measurement == 36864)\n return 'version'\n else\n return 'unknown_' + measurement;\n}\n\n// @ts-ignore\nvar pl2 = msg.payload2;\nvar pl = msg.payload;\n\nvar measurement = pl.measurement;\nvar datatype = pl.datatype;\nvar ch = sma_channels[measurement] || [];\nvar valuename = ch[0], unit = ch[1];\n\nvar hasValue = pl2.hasOwnProperty('value');\nif (valuename && hasValue) {\n var value = pl2.value;\n var typeName = decode_item_header(datatype, measurement);\n msg.result[valuename] = msg.result[valuename] || {};\n msg.result[valuename][typeName] = {};\n if (typeName == \"actual\"){\n msg.result[valuename][typeName].unit = unit;\n }\n var t = typeof value;\n if (t===\"number\") {\n msg.result[valuename][typeName].value = value / (sma_units[unit] || 1);\n } else if (t === \"bigint\") {\n msg.result[valuename][typeName].value = value / BigInt(sma_units[unit] || 1);\n } else {\n msg.result[valuename][typeName].value = value;\n }\n}\n\n\n/** @type {Buffer} */ var buf = pl2.data;\nif (buf && buf.length >= 8) {\n msg.payload = {\n data: pl2.data\n };\n return [msg,null];\n}\nmsg.payload = msg.result;\nreturn [null, msg];\n","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1060,"y":700,"wires":[["4924e0b.c55cc2"],["214e43d8.b9817c"]]},{"id":"2518624f.84d29e","type":"buffer-parser","z":"b872cb4b.5a6448","name":"","data":"payload.data","dataType":"msg","specification":"spec","specificationType":"ui","items":[{"type":"buffer","name":"data","offset":8,"length":-1,"offsetbit":0,"scale":"1","mask":""}],"swap1":"","swap2":"","swap3":"","swap1Type":"swap","swap2Type":"swap","swap3Type":"swap","msgProperty":"payload2","msgPropertyType":"str","resultType":"keyvalue","resultTypeType":"output","multipleResult":false,"fanOutMultipleResult":false,"setTopic":true,"outputs":1,"x":830,"y":740,"wires":[["fa42d9d5.faa708"]]},{"id":"197fcf94.b189b","type":"link in","z":"b872cb4b.5a6448","name":"","links":["4924e0b.c55cc2"],"x":175,"y":680,"wires":[["6c5f3651.e1e838"]]},{"id":"4924e0b.c55cc2","type":"link out","z":"b872cb4b.5a6448","name":"","links":["197fcf94.b189b"],"x":1215,"y":700,"wires":[]},{"id":"214e43d8.b9817c","type":"debug","z":"b872cb4b.5a6448","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1130,"y":760,"wires":[]}]

```

---

<div class="post-metadata">

**Author:** ![Becker](https://avatars.discourse-cdn.com/v4/letter/b/c77e96/32.png) [@Becker](https://discourse.nodered.org/u/Becker)\
**Post date:** [22 March 2021 15:28 UTC](https://discourse.nodered.org/t/query-sma-energy-meter-home-manager-by-udp-in/42983/4 "2021-03-22T15:28:43Z")

</div>

best man on earth Steve!

I don´t understand your flow, but it works.

I would like to minimize it to the payloads.  
the units in each object are **not** necessary.

---

<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:** [22 March 2021 16:04 UTC](https://discourse.nodered.org/t/query-sma-energy-meter-home-manager-by-udp-in/42983/5 "2021-03-22T16:04:10Z")

</div>

> [@Becker](#):
>
> I would like to minimize it to the payloads.  
> the units in each object are **not** necessary.

Just tweak the "more data avail" function.

Example...

```auto
[{"id":"188e0eac.1b7f21","type":"inject","z":"b872cb4b.5a6448","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":280,"y":840,"wires":[["363953ea.936d8c"]]},{"id":"363953ea.936d8c","type":"function","z":"b872cb4b.5a6448","name":"fake udp msg","func":"return { \n \"payload\": Buffer.from([83, 77, 65, 0, 0, 4, 2, 160, 0, 0, 0, 1, 2, 76, 0, 16, 96, 105, 1, 116, 113, 89, 181, 228, 88, 186, 142, 41, 0, 1, 4, 0, 0, 0, 0, 74, 0, 1, 8, 0, 0, 0, 0, 6, 140, 178, 168, 168, 0, 2, 4, 0, 0, 0, 0, 0, 0, 2, 8, 0, 0, 0, 0, 7, 253, 178, 78, 24, 0, 3, 4, 0, 0, 0, 0, 0, 0, 3, 8, 0, 0, 0, 0, 0, 16, 235, 94, 240, 0, 4, 4, 0, 0, 0, 22, 30, 0, 4, 8, 0, 0, 0, 0, 12, 168, 135, 222, 48, 0, 9, 4, 0, 0, 0, 22, 30, 0, 9, 8, 0, 0, 0, 0, 12, 28, 154, 227, 224, 0, 10, 4, 0, 0, 0, 0, 0, 0, 10, 8, 0, 0, 0, 0, 9, 97, 63, 42, 104, 0, 13, 4, 0, 0, 0, 0, 13, 0, 14, 4, 0, 0, 0, 195, 82, 0, 21, 4, 0, 0, 0, 0, 0, 0, 21, 8, 0, 0, 0, 0, 3, 125, 229, 248, 40, 0, 22, 4, 0, 0, 0, 5, 89, 0, 22, 8, 0, 0, 0, 0, 7, 95, 110, 238, 0, 0, 23, 4, 0, 0, 0, 0, 0, 0, 23, 8, 0, 0, 0, 0, 0, 25, 7, 4, 144, 0, 24, 4, 0, 0, 0, 10, 18, 0, 24, 8, 0, 0, 0, 0, 4, 201, 201, 10, 64, 0, 29, 4, 0, 0, 0, 0, 0, 0, 29, 8, 0, 0, 0, 0, 5, 52, 51, 139, 248, 0, 30, 4, 0, 0, 0, 11, 103, 0, 30, 8, 0, 0, 0, 0, 7, 216, 157, 153, 232, 0, 31, 4, 0, 0, 0, 6, 73, 0, 32, 4, 0, 0, 3, 136, 221, 0, 33, 4, 0, 0, 0, 1, 213, 0, 41, 4, 0, 0, 0, 6, 77, 0, 41, 8, 0, 0, 0, 0, 2, 143, 16, 39, 40, 0, 42, 4, 0, 0, 0, 0, 0, 0, 42, 8, 0, 0, 0, 0, 0, 212, 170, 232, 136, 0, 43, 4, 0, 0, 0, 0, 0, 0, 43, 8, 0, 0, 0, 0, 0, 11, 51, 114, 184, 0, 44, 4, 0, 0, 0, 5, 74, 0, 44, 8, 0, 0, 0, 0, 2, 21, 225, 52, 240, 0, 49, 4, 0, 0, 0, 8, 58, 0, 49, 8, 0, 0, 0, 0, 3, 115, 86, 47, 64, 0, 50, 4, 0, 0, 0, 0, 0, 0, 50, 8, 0, 0, 0, 0, 0, 229, 93, 153, 200, 0, 51, 4, 0, 0, 0, 4, 5, 0, 52, 4, 0, 0, 3, 139, 244, 0, 53, 4, 0, 0, 0, 2, 254, 0, 61, 4, 0, 0, 0, 0, 0, 0, 61, 8, 0, 0, 0, 0, 1, 193, 39, 152, 200, 0, 62, 4, 0, 0, 0, 0, 170, 0, 62, 8, 0, 0, 0, 0, 1, 11, 3, 142, 8, 0, 63, 4, 0, 0, 0, 0, 0]),\n \"fromip\": \"192.168.168.23:58874\", \"ip\": \"192.168.168.23\", \"port\": 58874, \"_msgid\": \"b43d1ee5.26a5f\" \n }\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":440,"y":840,"wires":[["77d070b3.56a4d"]]},{"id":"77d070b3.56a4d","type":"buffer-parser","z":"b872cb4b.5a6448","name":"","data":"payload","dataType":"msg","specification":"spec","specificationType":"ui","items":[{"type":"string","name":"sma","offset":0,"length":3,"offsetbit":0,"scale":"1","mask":""},{"type":"uint32be","name":"Tag=>Tag0","offset":4,"length":1,"offsetbit":0,"scale":">> 4","mask":"0xff0"},{"type":"uint32be","name":"Tag=>Version","offset":4,"length":1,"offsetbit":0,"scale":"0","mask":"0xf"},{"type":"uint32be","name":"Group","offset":8,"length":1,"offsetbit":0,"scale":"0","mask":""},{"type":"uint32be","name":"item10","offset":25,"length":1,"offsetbit":0,"scale":">> 4","mask":"0xFFF0"},{"type":"uint16be","name":"ProtocolID","offset":16,"length":1,"offsetbit":0,"scale":"0","mask":""},{"type":"uint32be","name":"meter_identifier=>SusyID","offset":18,"length":1,"offsetbit":0,"scale":">> 4","mask":"0xFFF0"},{"type":"uint32be","name":"meter_identifier=>SerNo","offset":21,"length":1,"offsetbit":0,"scale":">> 4","mask":"0xFFF0"},{"type":"buffer","name":"data","offset":28,"length":-1,"offsetbit":0,"scale":"1","mask":""}],"swap1":"","swap2":"","swap3":"","swap1Type":"swap","swap2Type":"swap","swap3Type":"swap","msgProperty":"payload","msgPropertyType":"str","resultType":"keyvalue","resultTypeType":"output","multipleResult":false,"fanOutMultipleResult":false,"setTopic":true,"outputs":1,"x":630,"y":840,"wires":[["37ba08ed.6e5ca8"]]},{"id":"37ba08ed.6e5ca8","type":"buffer-parser","z":"b872cb4b.5a6448","name":"","data":"payload.data","dataType":"msg","specification":"spec","specificationType":"ui","items":[{"type":"int16be","name":"measurement","offset":0,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"uint8","name":"datatype","offset":2,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"buffer","name":"data","offset":0,"length":-1,"offsetbit":0,"scale":"1","mask":""}],"swap1":"","swap2":"","swap3":"","swap1Type":"swap","swap2Type":"swap","swap3Type":"swap","msgProperty":"payload","msgPropertyType":"str","resultType":"keyvalue","resultTypeType":"output","multipleResult":false,"fanOutMultipleResult":false,"setTopic":true,"outputs":1,"x":290,"y":940,"wires":[["d4c97129.71892"]]},{"id":"d4c97129.71892","type":"switch","z":"b872cb4b.5a6448","name":"8-counter, 4-actual, 0-version, other","property":"payload.datatype","propertyType":"msg","rules":[{"t":"eq","v":"8","vt":"num"},{"t":"eq","v":"4","vt":"num"},{"t":"eq","v":"0","vt":"num"},{"t":"else"}],"checkall":"true","repair":false,"outputs":4,"x":540,"y":940,"wires":[["d9cf07f4.4a1338"],["f7179628.d22528"],["552bc3cc.e73e9c"],["552bc3cc.e73e9c"]]},{"id":"f7179628.d22528","type":"buffer-parser","z":"b872cb4b.5a6448","name":"","data":"payload.data","dataType":"msg","specification":"spec","specificationType":"ui","items":[{"type":"uint32be","name":"value","offset":4,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"buffer","name":"data","offset":8,"length":-1,"offsetbit":0,"scale":"1","mask":""}],"swap1":"","swap2":"","swap3":"","swap1Type":"swap","swap2Type":"swap","swap3Type":"swap","msgProperty":"payload2","msgPropertyType":"str","resultType":"keyvalue","resultTypeType":"output","multipleResult":false,"fanOutMultipleResult":false,"setTopic":true,"outputs":1,"x":810,"y":960,"wires":[["6afaa888.d96168"]]},{"id":"d9cf07f4.4a1338","type":"buffer-parser","z":"b872cb4b.5a6448","name":"","data":"payload.data","dataType":"msg","specification":"spec","specificationType":"ui","items":[{"type":"biguint64be","name":"value","offset":4,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"buffer","name":"data","offset":12,"length":-1,"offsetbit":0,"scale":"1","mask":""}],"swap1":"","swap2":"","swap3":"","swap1Type":"swap","swap2Type":"swap","swap3Type":"swap","msgProperty":"payload2","msgPropertyType":"str","resultType":"keyvalue","resultTypeType":"output","multipleResult":false,"fanOutMultipleResult":false,"setTopic":true,"outputs":1,"x":810,"y":920,"wires":[["6afaa888.d96168"]]},{"id":"6afaa888.d96168","type":"function","z":"b872cb4b.5a6448","name":"more data available?","func":"var sma_units = {\n \"W\": 10,\n \"VA\": 10,\n \"VAr\": 10,\n \"kWh\": 3600000,\n \"kVAh\": 3600000,\n \"kVArh\": 3600000,\n \"A\": 1000,\n \"V\": 1000,\n \"°\": 1000,\n \"Hz\": 1000,\n};\nvar sma_channels = {\n //# totals\n 1: ['pconsume', 'W', 'kWh'],\n 2: ['psupply', 'W', 'kWh'],\n 3: ['qconsume', 'VAr', 'kVArh'],\n 4: ['qsupply', 'VAr', 'kVArh'],\n 9: ['sconsume', 'VA', 'kVAh'],\n 10: ['ssupply', 'VA', 'kVAh'],\n 13: ['cosphi', '°'],\n 14: ['frequency', 'Hz'],\n //# phase 1\n 21: ['p1consume', 'W', 'kWh'],\n 22: ['p1supply', 'W', 'kWh'],\n 23: ['q1consume', 'VAr', 'kVArh'],\n 24: ['q1supply', 'VAr', 'kVArh'],\n 29: ['s1consume', 'VA', 'kVAh'],\n 30: ['s1supply', 'VA', 'kVAh'],\n 31: ['i1', 'A'],\n 32: ['u1', 'V'],\n 33: ['cosphi1', '°'],\n //# phase 2\n 41: ['p2consume', 'W', 'kWh'],\n 42: ['p2supply', 'W', 'kWh'],\n 43: ['q2consume', 'VAr', 'kVArh'],\n 44: ['q2supply', 'VAr', 'kVArh'],\n 49: ['s2consume', 'VA', 'kVAh'],\n 50: ['s2supply', 'VA', 'kVAh'],\n 51: ['i2', 'A'],\n 52: ['u2', 'V'],\n 53: ['cosphi2', '°'],\n //# phase 3\n 61: ['p3consume', 'W', 'kWh'],\n 62: ['p3supply', 'W', 'kWh'],\n 63: ['q3consume', 'VAr', 'kVArh'],\n 64: ['q3supply', 'VAr', 'kVArh'],\n 69: ['s3consume', 'VA', 'kVAh'],\n 70: ['s3supply', 'VA', 'kVAh'],\n 71: ['i3', 'A'],\n 72: ['u3', 'V'],\n 73: ['cosphi3', '°'],\n //# common\n 36864: ['speedwire-version', ''],\n};\n\nmsg.result = msg.result || {};\n\nfunction decode_item_header(datatype, measurement) {\n if (datatype == 4)\n return 'actual'\n else if (datatype == 8)\n return 'counter';\n else if (datatype == 0 && measurement == 36864)\n return 'version'\n else\n return 'unknown_' + measurement;\n}\n\n// @ts-ignore\nvar pl2 = msg.payload2;\nvar pl = msg.payload;\n\nvar measurement = pl.measurement;\nvar datatype = pl.datatype;\nvar ch = sma_channels[measurement] || [];\nvar valuename = ch[0], unit = ch[1];\n\nvar hasValue = pl2.hasOwnProperty('value');\nif (valuename && hasValue) {\n var value = pl2.value;\n var typeName = decode_item_header(datatype, measurement);\n //msg.result[valuename] = msg.result[valuename] || {};\n //msg.result[valuename][typeName] = {};\n //msg.result[valuename][typeName].unit = unit;\n var t = typeof value;\n if (t===\"number\") {\n msg.result[valuename + \"_\" + typeName] = value / (sma_units[unit] || 1)\n } else if (t === \"bigint\") {\n msg.result[valuename + \"_\" + typeName] = value / BigInt(sma_units[unit] || 1)\n } else {\n msg.result[valuename + \"_\" + typeName] = value / BigInt(sma_units[unit] || 1)\n }\n}\n\n\n/** @type {Buffer} */ var buf = pl2.data;\nif (buf && buf.length >= 8) {\n msg.payload = {\n data: pl2.data\n };\n return [msg,null];\n}\nmsg.payload = msg.result;\nreturn [null, msg];\n","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1040,"y":960,"wires":[["561b29e6.13e888"],["f11f82ad.11629"]]},{"id":"552bc3cc.e73e9c","type":"buffer-parser","z":"b872cb4b.5a6448","name":"","data":"payload.data","dataType":"msg","specification":"spec","specificationType":"ui","items":[{"type":"buffer","name":"data","offset":8,"length":-1,"offsetbit":0,"scale":"1","mask":""}],"swap1":"","swap2":"","swap3":"","swap1Type":"swap","swap2Type":"swap","swap3Type":"swap","msgProperty":"payload2","msgPropertyType":"str","resultType":"keyvalue","resultTypeType":"output","multipleResult":false,"fanOutMultipleResult":false,"setTopic":true,"outputs":1,"x":810,"y":1000,"wires":[["6afaa888.d96168"]]},{"id":"f185b99c.b81488","type":"link in","z":"b872cb4b.5a6448","name":"","links":["561b29e6.13e888"],"x":155,"y":940,"wires":[["37ba08ed.6e5ca8"]]},{"id":"561b29e6.13e888","type":"link out","z":"b872cb4b.5a6448","name":"","links":["f185b99c.b81488"],"x":1195,"y":960,"wires":[]},{"id":"f11f82ad.11629","type":"debug","z":"b872cb4b.5a6448","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1110,"y":1020,"wires":[]}]

```

Another Example...

```auto
[{"id":"9763dc2c.40756","type":"inject","z":"b872cb4b.5a6448","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":300,"y":580,"wires":[["97dec846.ffc208"]]},{"id":"97dec846.ffc208","type":"function","z":"b872cb4b.5a6448","name":"fake udp msg","func":"return { \n \"payload\": Buffer.from([83, 77, 65, 0, 0, 4, 2, 160, 0, 0, 0, 1, 2, 76, 0, 16, 96, 105, 1, 116, 113, 89, 181, 228, 88, 186, 142, 41, 0, 1, 4, 0, 0, 0, 0, 74, 0, 1, 8, 0, 0, 0, 0, 6, 140, 178, 168, 168, 0, 2, 4, 0, 0, 0, 0, 0, 0, 2, 8, 0, 0, 0, 0, 7, 253, 178, 78, 24, 0, 3, 4, 0, 0, 0, 0, 0, 0, 3, 8, 0, 0, 0, 0, 0, 16, 235, 94, 240, 0, 4, 4, 0, 0, 0, 22, 30, 0, 4, 8, 0, 0, 0, 0, 12, 168, 135, 222, 48, 0, 9, 4, 0, 0, 0, 22, 30, 0, 9, 8, 0, 0, 0, 0, 12, 28, 154, 227, 224, 0, 10, 4, 0, 0, 0, 0, 0, 0, 10, 8, 0, 0, 0, 0, 9, 97, 63, 42, 104, 0, 13, 4, 0, 0, 0, 0, 13, 0, 14, 4, 0, 0, 0, 195, 82, 0, 21, 4, 0, 0, 0, 0, 0, 0, 21, 8, 0, 0, 0, 0, 3, 125, 229, 248, 40, 0, 22, 4, 0, 0, 0, 5, 89, 0, 22, 8, 0, 0, 0, 0, 7, 95, 110, 238, 0, 0, 23, 4, 0, 0, 0, 0, 0, 0, 23, 8, 0, 0, 0, 0, 0, 25, 7, 4, 144, 0, 24, 4, 0, 0, 0, 10, 18, 0, 24, 8, 0, 0, 0, 0, 4, 201, 201, 10, 64, 0, 29, 4, 0, 0, 0, 0, 0, 0, 29, 8, 0, 0, 0, 0, 5, 52, 51, 139, 248, 0, 30, 4, 0, 0, 0, 11, 103, 0, 30, 8, 0, 0, 0, 0, 7, 216, 157, 153, 232, 0, 31, 4, 0, 0, 0, 6, 73, 0, 32, 4, 0, 0, 3, 136, 221, 0, 33, 4, 0, 0, 0, 1, 213, 0, 41, 4, 0, 0, 0, 6, 77, 0, 41, 8, 0, 0, 0, 0, 2, 143, 16, 39, 40, 0, 42, 4, 0, 0, 0, 0, 0, 0, 42, 8, 0, 0, 0, 0, 0, 212, 170, 232, 136, 0, 43, 4, 0, 0, 0, 0, 0, 0, 43, 8, 0, 0, 0, 0, 0, 11, 51, 114, 184, 0, 44, 4, 0, 0, 0, 5, 74, 0, 44, 8, 0, 0, 0, 0, 2, 21, 225, 52, 240, 0, 49, 4, 0, 0, 0, 8, 58, 0, 49, 8, 0, 0, 0, 0, 3, 115, 86, 47, 64, 0, 50, 4, 0, 0, 0, 0, 0, 0, 50, 8, 0, 0, 0, 0, 0, 229, 93, 153, 200, 0, 51, 4, 0, 0, 0, 4, 5, 0, 52, 4, 0, 0, 3, 139, 244, 0, 53, 4, 0, 0, 0, 2, 254, 0, 61, 4, 0, 0, 0, 0, 0, 0, 61, 8, 0, 0, 0, 0, 1, 193, 39, 152, 200, 0, 62, 4, 0, 0, 0, 0, 170, 0, 62, 8, 0, 0, 0, 0, 1, 11, 3, 142, 8, 0, 63, 4, 0, 0, 0, 0, 0]),\n \"fromip\": \"192.168.168.23:58874\", \"ip\": \"192.168.168.23\", \"port\": 58874, \"_msgid\": \"b43d1ee5.26a5f\" \n }\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":460,"y":580,"wires":[["d31802c3.e2aef"]]},{"id":"d31802c3.e2aef","type":"buffer-parser","z":"b872cb4b.5a6448","name":"","data":"payload","dataType":"msg","specification":"spec","specificationType":"ui","items":[{"type":"string","name":"sma","offset":0,"length":3,"offsetbit":0,"scale":"1","mask":""},{"type":"uint32be","name":"Tag=>Tag0","offset":4,"length":1,"offsetbit":0,"scale":">> 4","mask":"0xff0"},{"type":"uint32be","name":"Tag=>Version","offset":4,"length":1,"offsetbit":0,"scale":"0","mask":"0xf"},{"type":"uint32be","name":"Group","offset":8,"length":1,"offsetbit":0,"scale":"0","mask":""},{"type":"uint32be","name":"item10","offset":25,"length":1,"offsetbit":0,"scale":">> 4","mask":"0xFFF0"},{"type":"uint16be","name":"ProtocolID","offset":16,"length":1,"offsetbit":0,"scale":"0","mask":""},{"type":"uint32be","name":"meter_identifier=>SusyID","offset":18,"length":1,"offsetbit":0,"scale":">> 4","mask":"0xFFF0"},{"type":"uint32be","name":"meter_identifier=>SerNo","offset":21,"length":1,"offsetbit":0,"scale":">> 4","mask":"0xFFF0"},{"type":"buffer","name":"data","offset":28,"length":-1,"offsetbit":0,"scale":"1","mask":""}],"swap1":"","swap2":"","swap3":"","swap1Type":"swap","swap2Type":"swap","swap3Type":"swap","msgProperty":"payload","msgPropertyType":"str","resultType":"keyvalue","resultTypeType":"output","multipleResult":false,"fanOutMultipleResult":false,"setTopic":true,"outputs":1,"x":650,"y":580,"wires":[["6c5f3651.e1e838"]]},{"id":"6c5f3651.e1e838","type":"buffer-parser","z":"b872cb4b.5a6448","name":"","data":"payload.data","dataType":"msg","specification":"spec","specificationType":"ui","items":[{"type":"int16be","name":"measurement","offset":0,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"uint8","name":"datatype","offset":2,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"buffer","name":"data","offset":0,"length":-1,"offsetbit":0,"scale":"1","mask":""}],"swap1":"","swap2":"","swap3":"","swap1Type":"swap","swap2Type":"swap","swap3Type":"swap","msgProperty":"payload","msgPropertyType":"str","resultType":"keyvalue","resultTypeType":"output","multipleResult":false,"fanOutMultipleResult":false,"setTopic":true,"outputs":1,"x":310,"y":680,"wires":[["35f7b433.19293c"]]},{"id":"35f7b433.19293c","type":"switch","z":"b872cb4b.5a6448","name":"8-counter, 4-actual, 0-version, other","property":"payload.datatype","propertyType":"msg","rules":[{"t":"eq","v":"8","vt":"num"},{"t":"eq","v":"4","vt":"num"},{"t":"eq","v":"0","vt":"num"},{"t":"else"}],"checkall":"true","repair":false,"outputs":4,"x":560,"y":680,"wires":[["99493b53.093878"],["701afb7c.a29b14"],["2518624f.84d29e"],["2518624f.84d29e"]]},{"id":"701afb7c.a29b14","type":"buffer-parser","z":"b872cb4b.5a6448","name":"","data":"payload.data","dataType":"msg","specification":"spec","specificationType":"ui","items":[{"type":"uint32be","name":"value","offset":4,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"buffer","name":"data","offset":8,"length":-1,"offsetbit":0,"scale":"1","mask":""}],"swap1":"","swap2":"","swap3":"","swap1Type":"swap","swap2Type":"swap","swap3Type":"swap","msgProperty":"payload2","msgPropertyType":"str","resultType":"keyvalue","resultTypeType":"output","multipleResult":false,"fanOutMultipleResult":false,"setTopic":true,"outputs":1,"x":830,"y":700,"wires":[["fa42d9d5.faa708"]]},{"id":"99493b53.093878","type":"buffer-parser","z":"b872cb4b.5a6448","name":"","data":"payload.data","dataType":"msg","specification":"spec","specificationType":"ui","items":[{"type":"biguint64be","name":"value","offset":4,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"buffer","name":"data","offset":12,"length":-1,"offsetbit":0,"scale":"1","mask":""}],"swap1":"","swap2":"","swap3":"","swap1Type":"swap","swap2Type":"swap","swap3Type":"swap","msgProperty":"payload2","msgPropertyType":"str","resultType":"keyvalue","resultTypeType":"output","multipleResult":false,"fanOutMultipleResult":false,"setTopic":true,"outputs":1,"x":830,"y":660,"wires":[["fa42d9d5.faa708"]]},{"id":"fa42d9d5.faa708","type":"function","z":"b872cb4b.5a6448","name":"more data available?","func":"var sma_units = {\n \"W\": 10,\n \"VA\": 10,\n \"VAr\": 10,\n \"kWh\": 3600000,\n \"kVAh\": 3600000,\n \"kVArh\": 3600000,\n \"A\": 1000,\n \"V\": 1000,\n \"°\": 1000,\n \"Hz\": 1000,\n};\nvar sma_channels = {\n //# totals\n 1: ['pconsume', 'W', 'kWh'],\n 2: ['psupply', 'W', 'kWh'],\n 3: ['qconsume', 'VAr', 'kVArh'],\n 4: ['qsupply', 'VAr', 'kVArh'],\n 9: ['sconsume', 'VA', 'kVAh'],\n 10: ['ssupply', 'VA', 'kVAh'],\n 13: ['cosphi', '°'],\n 14: ['frequency', 'Hz'],\n //# phase 1\n 21: ['p1consume', 'W', 'kWh'],\n 22: ['p1supply', 'W', 'kWh'],\n 23: ['q1consume', 'VAr', 'kVArh'],\n 24: ['q1supply', 'VAr', 'kVArh'],\n 29: ['s1consume', 'VA', 'kVAh'],\n 30: ['s1supply', 'VA', 'kVAh'],\n 31: ['i1', 'A'],\n 32: ['u1', 'V'],\n 33: ['cosphi1', '°'],\n //# phase 2\n 41: ['p2consume', 'W', 'kWh'],\n 42: ['p2supply', 'W', 'kWh'],\n 43: ['q2consume', 'VAr', 'kVArh'],\n 44: ['q2supply', 'VAr', 'kVArh'],\n 49: ['s2consume', 'VA', 'kVAh'],\n 50: ['s2supply', 'VA', 'kVAh'],\n 51: ['i2', 'A'],\n 52: ['u2', 'V'],\n 53: ['cosphi2', '°'],\n //# phase 3\n 61: ['p3consume', 'W', 'kWh'],\n 62: ['p3supply', 'W', 'kWh'],\n 63: ['q3consume', 'VAr', 'kVArh'],\n 64: ['q3supply', 'VAr', 'kVArh'],\n 69: ['s3consume', 'VA', 'kVAh'],\n 70: ['s3supply', 'VA', 'kVAh'],\n 71: ['i3', 'A'],\n 72: ['u3', 'V'],\n 73: ['cosphi3', '°'],\n //# common\n 36864: ['speedwire-version', ''],\n};\n\nmsg.result = msg.result || {};\n\nfunction decode_item_header(datatype, measurement) {\n if (datatype == 4)\n return 'actual'\n else if (datatype == 8)\n return 'counter';\n else if (datatype == 0 && measurement == 36864)\n return 'version'\n else\n return 'unknown_' + measurement;\n}\n\n// @ts-ignore\nvar pl2 = msg.payload2;\nvar pl = msg.payload;\n\nvar measurement = pl.measurement;\nvar datatype = pl.datatype;\nvar ch = sma_channels[measurement] || [];\nvar valuename = ch[0], unit = ch[1];\n\nvar hasValue = pl2.hasOwnProperty('value');\nif (valuename && hasValue) {\n var value = pl2.value;\n var typeName = decode_item_header(datatype, measurement);\n msg.result[valuename] = msg.result[valuename] || {};\n msg.result[valuename][typeName] = {};\n //msg.result[valuename][typeName].unit = unit;\n var t = typeof value;\n if (t===\"number\") {\n msg.result[valuename][typeName] = value / (sma_units[unit] || 1)\n } else if (t === \"bigint\") {\n msg.result[valuename][typeName] = value / BigInt(sma_units[unit] || 1)\n } else {\n msg.result[valuename][typeName] = value / BigInt(sma_units[unit] || 1)\n }\n}\n\n\n/** @type {Buffer} */ var buf = pl2.data;\nif (buf && buf.length >= 8) {\n msg.payload = {\n data: pl2.data\n };\n return [msg,null];\n}\nmsg.payload = msg.result;\nreturn [null, msg];\n","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1060,"y":700,"wires":[["4924e0b.c55cc2"],["214e43d8.b9817c"]]},{"id":"2518624f.84d29e","type":"buffer-parser","z":"b872cb4b.5a6448","name":"","data":"payload.data","dataType":"msg","specification":"spec","specificationType":"ui","items":[{"type":"buffer","name":"data","offset":8,"length":-1,"offsetbit":0,"scale":"1","mask":""}],"swap1":"","swap2":"","swap3":"","swap1Type":"swap","swap2Type":"swap","swap3Type":"swap","msgProperty":"payload2","msgPropertyType":"str","resultType":"keyvalue","resultTypeType":"output","multipleResult":false,"fanOutMultipleResult":false,"setTopic":true,"outputs":1,"x":830,"y":740,"wires":[["fa42d9d5.faa708"]]},{"id":"197fcf94.b189b","type":"link in","z":"b872cb4b.5a6448","name":"","links":["4924e0b.c55cc2"],"x":175,"y":680,"wires":[["6c5f3651.e1e838"]]},{"id":"4924e0b.c55cc2","type":"link out","z":"b872cb4b.5a6448","name":"","links":["197fcf94.b189b"],"x":1215,"y":700,"wires":[]},{"id":"214e43d8.b9817c","type":"debug","z":"b872cb4b.5a6448","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1130,"y":760,"wires":[]}]

```

---

<div class="post-metadata">

**Author:** ![Becker](https://avatars.discourse-cdn.com/v4/letter/b/c77e96/32.png) [@Becker](https://discourse.nodered.org/u/Becker)\
**Post date:** [22 March 2021 17:33 UTC](https://discourse.nodered.org/t/query-sma-energy-meter-home-manager-by-udp-in/42983/6 "2021-03-22T17:33:37Z")

</div>

happy birthday by the way. 🥳

I´ve translated it for me in german, sorry:

 ![grafik](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/9/7/9748f857efba0d1ce5c2ec4cf84f6f51824509e6.png)

the counters are not correct, the have to be devides :360.000  
I think they should be devided : 3 600 000 in the function ? but they do not

 ![grafik](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/b/7/b723f88faeecdfbe141f59e8eb6846b100be5764.png)

P Verbrauch Zähler: 2813049756 --\> 7.814,02kWh is right.

the actually values are correct 👍

the 36864: ['speedwire-version', ''], is missing in debug

---

<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:** [22 March 2021 17:56 UTC](https://discourse.nodered.org/t/query-sma-energy-meter-home-manager-by-udp-in/42983/7 "2021-03-22T17:56:56Z")

</div>

Like I said, it's not a complete solution. There are some bits for you to do.

> [@Becker](#):
>
> happy birthday by the way. 🥳

Thank you.

---

<div class="post-metadata">

**Author:** ![Becker](https://avatars.discourse-cdn.com/v4/letter/b/c77e96/32.png) [@Becker](https://discourse.nodered.org/u/Becker)\
**Post date:** [22 March 2021 18:07 UTC](https://discourse.nodered.org/t/query-sma-energy-meter-home-manager-by-udp-in/42983/8 "2021-03-22T18:07:20Z")

</div>

yeah I want !

```auto
    var t = typeof value;
    if (t==="number") {
        msg.result[valuename + " " + typeName] = value / (sma_units[unit] || 1)
    } else if (t === "bigint") {
        msg.result[valuename + " " + typeName] = value / BigInt(sma_units[unit] || 1)
    } else {
        msg.result[valuename + " " + typeName] = value / BigInt(sma_units[unit] || 1)

```

I think this part is responsible for dividing the counter value by 3600000 - but it does´t, only for the actually values.  
Because a BigInt can´t be divided ? I need some help here.

* * *

the next question is: I want to show the values in the dashboard, but it don´t like BigInt.

How can I convert all actually values to "number" in a 2nd function ?  
Like this:  
msg.payload = Number(msg.payload["P Verbrauch momentan"]);  
return msg;

---

<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:** [22 March 2021 19:22 UTC](https://discourse.nodered.org/t/query-sma-energy-meter-home-manager-by-udp-in/42983/9 "2021-03-22T19:22:30Z")

</div>

> [@Becker](#):
>
> Because a BigInt can´t be divided

Yes it can...  
 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/4/2/42a4fb26b57343f5e3b8e293fe8604c4fa25d030.png)

> [@Becker](#):
>
> I want to show the values in the dashboard, but it don´t like BigInt.

BitInt is not widely supported. To avoid loss of precision, wrap the whole equation with `Number(equation)` e.g...

```auto
    var t = typeof value;
    if (t==="number") {
        msg.result[valuename + "_" + typeName] = value / (sma_units[unit] || 1)
    } else if (t === "bigint") {
        msg.result[valuename + "_" + typeName] = Number(value / BigInt(sma_units[unit] || 1));
    } else {
        msg.result[valuename + "_" + typeName] = value 
    }

```

PS, I recommend you avoid spaces in object property names (just makes things difficult).

> [@Becker](#):
>
> I think this part is responsible for dividing the counter value by 3600000 - but it does´t, only for the actually values.

Are the counters supposed to be divided by 3600000?

If so, then you need to split that calc out. e.g...

```auto
    var t = typeof value;
    if(typeName == "counter") {
        if (t==="number") {
            msg.result[valuename + "_" + typeName] = value / 3600000; 
        } else if (t === "bigint") {
            msg.result[valuename + "_" + typeName] = Number(value / 3600000n);
        } else {
            msg.result[valuename + "_" + typeName] = value; 
        }
    } else {
        if (t==="number") {
            msg.result[valuename + "_" + typeName] = value / (sma_units[unit] || 1);
        } else if (t === "bigint") {
            msg.result[valuename + "_" + typeName] = Number(value / BigInt(sma_units[unit] || 1));
        } else {
            msg.result[valuename + "_" + typeName] = value ;
        }
    }

```

---

<div class="post-metadata">

**Author:** ![Becker](https://avatars.discourse-cdn.com/v4/letter/b/c77e96/32.png) [@Becker](https://discourse.nodered.org/u/Becker)\
**Post date:** [22 March 2021 21:59 UTC](https://discourse.nodered.org/t/query-sma-energy-meter-home-manager-by-udp-in/42983/10 "2021-03-22T21:59:58Z")

</div>

number is running 👍

* * *

I think we're talking past each other with the counter values:  
I can type in whatever I want here (yellow), the counter output values always remain the same.

 ![grafik](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/4/1/41953c14e84636f9ef75693bf12787603907b6fc.png)

![grafik](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/7/3/73034341d20fcbb1f2eaad5caf3fca0ee5887f27.png)

there must be a fault inside the function, so that the factor is being ignored.

* * *

is it possible to delete the unnecessary part with 0-version & other ?

 ![grafik](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/1/c/1cc15dcdfdb6a35d8e43e621e73cfad0e554d398.png)

* * *

I also would like to unterstand the loop and all the buffers with strange things like length -1:

 ![grafik](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/a/f/af1b40ed93b43292d054fbea5317cdd9e76e54f2.png)  
I don't even begin to see what this is all about. 🥴😨

maybe after your birthday you have some time & pleasure for explanation 🤓

---

<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:** [22 March 2021 22:03 UTC](https://discourse.nodered.org/t/query-sma-energy-meter-home-manager-by-udp-in/42983/11 "2021-03-22T22:03:05Z")

</div>

What are the counter values supposed to be?

Are they supposed to be divided by the same unit divisor? or divided by 3600000? Like I said, that manual was terrible.

> [@Becker](#):
>
> I don't even begin to see what this is all about. 🥴 😨

They are reading and converting the bytes from the data buffer into usable values.

> [@Becker](#):
>
> I also would like to unterstand the loop and all the buffers with strange things like length -1:

The -1 means read to the end of the buffer.  
the loop is designed to reduce the buffer by the size of each found record (otherwise it would loop forever)

---

<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:** [22 March 2021 22:05 UTC](https://discourse.nodered.org/t/query-sma-energy-meter-home-manager-by-udp-in/42983/12 "2021-03-22T22:05:03Z")

</div>

> [@Becker](#):
>
> there must be a fault inside the function, so that the factor is being ignored.

Did you try the modified function?

```auto
    var t = typeof value;
    if(typeName == "counter") {
        if (t==="number") {
            msg.result[valuename + "_" + typeName] = value / 3600000; 
        } else if (t === "bigint") {
            msg.result[valuename + "_" + typeName] = Number(value / 3600000n);
        } else {
            msg.result[valuename + "_" + typeName] = value; 
        }
    } else {
        if (t==="number") {
            msg.result[valuename + "_" + typeName] = value / (sma_units[unit] || 1);
        } else if (t === "bigint") {
            msg.result[valuename + "_" + typeName] = Number(value / BigInt(sma_units[unit] || 1));
        } else {
            msg.result[valuename + "_" + typeName] = value ;
        }
    }

```

↑ that would replace ↓

> [@Becker](#):
>
> ```auto
> var t = typeof value;
> if (t==="number") {
> msg.result[valuename + " " + typeName] = value / (sma_units[unit] || 1)
> } else if (t === "bigint") {
> msg.result[valuename + " " + typeName] = value / BigInt(sma_units[unit] || 1)
> } else {
> msg.result[valuename + " " + typeName] = value / BigInt(sma_units[unit] ||
> 
> ```

---

<div class="post-metadata">

**Author:** ![Becker](https://avatars.discourse-cdn.com/v4/letter/b/c77e96/32.png) [@Becker](https://discourse.nodered.org/u/Becker)\
**Post date:** [22 March 2021 22:23 UTC](https://discourse.nodered.org/t/query-sma-energy-meter-home-manager-by-udp-in/42983/13 "2021-03-22T22:23:36Z")

</div>

> [@Steve-Mcl](#):
>
> What are the counter values supposed to be?
> 
> Are they supposed to be divided by the same unit divisor? or divided by 3600000? Like I said, that manual

they should be divided by the number shown here, just like the actually values:  
 ![grafik](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/8/7/87ddc5ee51d27f682cadf7cd7838c1aad0930959.png)

If I change "W" or "VA" or "A" or "V" or "Hz" to 50 or 25, the output is wrong, as the way it should be...

If I change "kWh" to 1 or 360000 - it is always the same output.

/360000 is right.

> [@Steve-Mcl](#):
>
> Did you try the modified function?

yes, but there comes an error with BigInt at line

```auto
Number(value / 3600000n);

```

 ![grafik](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/4/9/49329c43b1252af0f8e4378857a5ea85fb1fb46f.png)

---

<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:** [22 March 2021 23:04 UTC](https://discourse.nodered.org/t/query-sma-energy-meter-home-manager-by-udp-in/42983/14 "2021-03-22T23:04:33Z")

</div>

> [@Becker](#):
>
> yes, but there comes an error with BigInt at line
> 
> ```auto
> Number(value / 3600000n);
> 
> ```
> 
> ![grafik](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/4/9/49329c43b1252af0f8e4378857a5ea85fb1fb46f.png)

That is not an error. The ace editor is just not "up to speed" - ignore it.

  

> [@Becker](#):
>
> If I change "kWh" to 1 or 360000 - it is always the same output.

I missed a slight difference when translating the python code.

this is the updated function code (with english descriptions - you will have to replace those)...

```auto
var sma_units = {
    "W": 10,
    "VA": 10,
    "VAr": 10,
    "kWh": 3600000,
    "kVAh": 3600000,
    "kVArh": 3600000,
    "A": 1000,
    "V": 1000,
    "°": 1000,
    "Hz": 1000,
};
var sma_channels = {
    //# totals
    1: ['pconsume', 'W', 'kWh'],
    2: ['psupply', 'W', 'kWh'],
    3: ['qconsume', 'VAr', 'kVArh'],
    4: ['qsupply', 'VAr', 'kVArh'],
    9: ['sconsume', 'VA', 'kVAh'],
    10: ['ssupply', 'VA', 'kVAh'],
    13: ['cosphi', '°'],
    14: ['frequency', 'Hz'],
    //# phase 1
    21: ['p1consume', 'W', 'kWh'],
    22: ['p1supply', 'W', 'kWh'],
    23: ['q1consume', 'VAr', 'kVArh'],
    24: ['q1supply', 'VAr', 'kVArh'],
    29: ['s1consume', 'VA', 'kVAh'],
    30: ['s1supply', 'VA', 'kVAh'],
    31: ['i1', 'A'],
    32: ['u1', 'V'],
    33: ['cosphi1', '°'],
    //# phase 2
    41: ['p2consume', 'W', 'kWh'],
    42: ['p2supply', 'W', 'kWh'],
    43: ['q2consume', 'VAr', 'kVArh'],
    44: ['q2supply', 'VAr', 'kVArh'],
    49: ['s2consume', 'VA', 'kVAh'],
    50: ['s2supply', 'VA', 'kVAh'],
    51: ['i2', 'A'],
    52: ['u2', 'V'],
    53: ['cosphi2', '°'],
    //# phase 3
    61: ['p3consume', 'W', 'kWh'],
    62: ['p3supply', 'W', 'kWh'],
    63: ['q3consume', 'VAr', 'kVArh'],
    64: ['q3supply', 'VAr', 'kVArh'],
    69: ['s3consume', 'VA', 'kVAh'],
    70: ['s3supply', 'VA', 'kVAh'],
    71: ['i3', 'A'],
    72: ['u3', 'V'],
    73: ['cosphi3', '°'],
    //# common
    36864: ['speedwire-version', ''],
};

msg.result = msg.result || {};

function decode_item_header(datatype, measurement) {
    if (datatype == 4)
        return 'actual'
    else if (datatype == 8)
        return 'counter';
    else if (datatype == 0 && measurement == 36864)
        return 'version'
    else
        return 'unknown_' + measurement;
}

// @ts-ignore
var pl2 = msg.payload2;
var pl = msg.payload;

var measurement = pl.measurement;
var datatype = pl.datatype;
var ch = sma_channels[measurement] || [];
var valuename = ch[0], unit = ch[1], unitForCounter = ch[2];

var hasValue = pl2.hasOwnProperty('value');
if (valuename && hasValue) {
    var value = pl2.value;
    var typeName = decode_item_header(datatype, measurement);
    var t = typeof value;
    var divisor = 1;
    if (typeName == "counter" && unitForCounter ) {
        divisor = sma_units[unitForCounter] || 1;
        msg.result[valuename + "_" + typeName + "_unit"] = unitForCounter;
    } else {
        divisor = sma_units[unit] || 1;
        msg.result[valuename + "_" + typeName + "_unit"] = unit;
    }
    
    if (t === "number") {
        msg.result[valuename + "_" + typeName] = value / divisor;
    } else if (t === "bigint") {
        msg.result[valuename + "_" + typeName] = Number(value / BigInt(divisor));
    } else {
        msg.result[valuename + "_" + typeName] = value;
    }
}

/** @type {Buffer} */ var buf = pl2.data;
if (buf && buf.length >= 8) {
    msg.payload = {
        data: pl2.data
    };
    return [msg,null];
}
msg.payload = msg.result;
return [null, msg];

```

This is the output - does it look better?

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/8/9/89db178f16c1e33ec7aeda1b1e1e9cb59a5a2e91.png)

---

<div class="post-metadata">

**Author:** ![Becker](https://avatars.discourse-cdn.com/v4/letter/b/c77e96/32.png) [@Becker](https://discourse.nodered.org/u/Becker)\
**Post date:** [23 March 2021 06:57 UTC](https://discourse.nodered.org/t/query-sma-energy-meter-home-manager-by-udp-in/42983/15 "2021-03-23T06:57:37Z")

</div>

yeah you did it 👍 😀

this is my "german" function:

```auto
var sma_units = {
    "W": 10,
    "VA": 10,
    "var": 10,
    "kWh": 3600000,
    "kVAh": 3600000,
    "kvarh": 3600000,
    "A": 1000,
    "V": 1000,
    "-": 1000,
    "Hz": 1000,
};
var sma_channels = {
    //# gesamt
    1: ['P Bezug', 'W', 'kWh'],
    2: ['P Einspeisung', 'W', 'kWh'],
    3: ['Q induktiv', 'var', 'kvarh'],
    4: ['Q kapazitiv', 'var', 'kvarh'],
    9: ['S Bezug', 'VA', 'kVAh'],
    10: ['S Einspeisung', 'VA', 'kVAh'],
    13: ['cosphi', '-'],
    14: ['Frequenz', 'Hz'],
    //# L1
    21: ['P1 Bezug', 'W', 'kWh'],
    22: ['P1 Einspeisung', 'W', 'kWh'],
    23: ['Q1 ind.', 'var', 'kvarh'],
    24: ['Q1 kap.', 'var', 'kvarh'],
    29: ['S1 Bezug', 'VA', 'kVAh'],
    30: ['S1 Einspeisung', 'VA', 'kVAh'],
    31: ['I L1', 'A'],
    32: ['U L1', 'V'],
    33: ['cosphi L1', '-'],
    //# L2
    41: ['P2 Bezug', 'W', 'kWh'],
    42: ['P2 Einspeisung', 'W', 'kWh'],
    43: ['Q2 ind.', 'var', 'kvarh'],
    44: ['Q2 kap.', 'var', 'kvarh'],
    49: ['S2 Bezug', 'VA', 'kVAh'],
    50: ['S2 Einspeisung', 'VA', 'kVAh'],
    51: ['I L2', 'A'],
    52: ['U L2', 'V'],
    53: ['cosphi L2', '-'],
    //# L3
    61: ['P3 Bezug', 'W', 'kWh'],
    62: ['P3 Einspeisung', 'W', 'kWh'],
    63: ['Q3 ind.', 'var', 'kvarh'],
    64: ['Q3 kap.', 'var', 'kvarh'],
    69: ['S3 Bezug', 'VA', 'kVAh'],
    70: ['S3 Einspeisung', 'VA', 'kVAh'],
    71: ['I L3', 'A'],
    72: ['U L3', 'V'],
    73: ['cosphi L3', '-'],
};

msg.result = msg.result || {};

function decode_item_header(datatype, measurement) {
    if (datatype == 4)
        return 'momentan'
    else if (datatype == 8)
        return 'Zähler';
}

var pl2 = msg.payload2;
var pl = msg.payload;

var measurement = pl.measurement;
var datatype = pl.datatype;
var ch = sma_channels[measurement] || [];
var valuename = ch[0], unit = ch[1]; unitForCounter = ch[2];

var hasValue = pl2.hasOwnProperty('value');
if (valuename && hasValue) {
    var value = pl2.value;
    var typeName = decode_item_header(datatype, measurement);
    var t = typeof value;
    var divisor = 1;
    if (typeName == "Zähler" && unitForCounter ) {
        divisor = sma_units[unitForCounter] || 1;
        msg.result[valuename + " " + typeName + "_unit"] = unitForCounter;
    } else {
        divisor = sma_units[unit] || 1;
        msg.result[valuename + " " + typeName + "_unit"] = unit;
    }
    
    if (t === "number") {
        msg.result[valuename + "_" + typeName] = value / divisor;
    } else if (t === "bigint") {
        msg.result[valuename + "_" + typeName] = Number(value / BigInt(divisor));
    } else {
        msg.result[valuename + "_" + typeName] = value;
    }
}

/** @type {Buffer} */ var buf = pl2.data;
if (buf && buf.length >= 8) {
    msg.payload = {
        data: pl2.data
    };
    return [msg,null];
}
msg.payload = msg.result;
return [null, msg];

```

how can I disable the output of the units ?

---

<div class="post-metadata">

**Author:** ![hominidae](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/hominidae/32/4174_2.png) [@hominidae](https://discourse.nodered.org/u/hominidae)\
**Post date:** [23 March 2021 07:17 UTC](https://discourse.nodered.org/t/query-sma-energy-meter-home-manager-by-udp-in/42983/16 "2021-03-23T07:17:28Z")

</div>

...I conjured up another version, not as fancy as the one from @Steve-Mcl ...still not complete, only splitting the parts into different messages for now.

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/8/8/889def883bd997aa8430ebc31c13d7ab932dcd54.png)

```auto
[{"id":"51f68a48.7e6574","type":"tab","label":"SMA Decode","disabled":false,"info":""},{"id":"b62d475a.7bcb58","type":"inject","z":"51f68a48.7e6574","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":120,"y":60,"wires":[["7d873b83.e74644"]]},{"id":"7d873b83.e74644","type":"function","z":"51f68a48.7e6574","name":"fake udp msg","func":"return { \n \"payload\": Buffer.from([83,77,65,0,0,4,2,160,0,0,0,1,2,76,0,16,96,105,1,116,113,89,181,228,88,187,136,25,0,1,4,0,0,0,0,0,0,1,8,0,0,0,0,6,140,178,168,168,0,2,4,0,0,0,0,92,0,2,8,0,0,0,0,7,253,178,79,128,0,3,4,0,0,0,0,0,0,3,8,0,0,0,0,0,16,235,94,240,0,4,4,0,0,0,22,5,0,4,8,0,0,0,0,12,168,136,108,56,0,9,4,0,0,0,0,0,0,9,8,0,0,0,0,12,28,155,35,40,0,10,4,0,0,0,22,5,0,10,8,0,0,0,0,9,97,63,121,40,0,13,4,0,0,0,0,16,0,14,4,0,0,0,195,86,0,21,4,0,0,0,0,0,0,21,8,0,0,0,0,3,125,229,248,40,0,22,4,0,0,0,5,230,0,22,8,0,0,0,0,7,95,111,18,144,0,23,4,0,0,0,0,0,0,23,8,0,0,0,0,0,25,7,4,144,0,24,4,0,0,0,10,13,0,24,8,0,0,0,0,4,201,201,74,240,0,29,4,0,0,0,0,0,0,29,8,0,0,0,0,5,52,51,139,248,0,30,4,0,0,0,11,167,0,30,8,0,0,0,0,7,216,157,227,8,0,31,4,0,0,0,6,105,0,32,4,0,0,3,135,98,0,33,4,0,0,0,1,250,0,41,4,0,0,0,6,64,0,41,8,0,0,0,0,2,143,16,79,240,0,42,4,0,0,0,0,0,0,42,8,0,0,0,0,0,212,170,232,136,0,43,4,0,0,0,0,0,0,43,8,0,0,0,0,0,11,51,114,184,0,44,4,0,0,0,5,70,0,44,8,0,0,0,0,2,21,225,86,176,0,49,4,0,0,0,8,46,0,49,8,0,0,0,0,3,115,86,100,176,0,50,4,0,0,0,0,0,0,50,8,0,0,0,0,0,229,93,153,200,0,51,4,0,0,0,4,5,0,52,4,0,0,3,139,30,0,53,4,0,0,0,2,252,0,61,4,0,0,0,0,0,0,61,8,0,0,0,0,1,193,39,152,200,0,62,4,0,0,0,0,182,0,62,8,0,0,0,0,1,11,3,147,168,0,63,4,0,0,0,0,0,0,63,8,0,0,0,0,0,11,43,32,64,0,64,4,0,0,0,6,177,0,64,8,0,0,0,0,5,231,88,0,96,0,69,4,0,0,0,0,0,0,69,8,0,0,0,0,6,18,102,145,104,0,70,4,0,0,0,6,187,0,70,8,0,0,0,0,1,52,69,76,192,0,71,4,0,0,0,3,201,0,72,4,0,0,3,132,175,0,73,4,0,0,0,0,106,144,0,0,0,2,6,6,82,0,0,0,0]),\n \"fromip\": \"192.168.168.23:58874\", \"ip\": \"192.168.168.23\", \"port\": 58874, \"_msgid\": \"b43d1ee5.26a5f\" \n }","outputs":1,"noerr":0,"initialize":"","finalize":"","x":320,"y":60,"wires":[["e96481ab.71bcc"]]},{"id":"d5e9a03c.b188b","type":"buffer-parser","z":"51f68a48.7e6574","name":"OBIS-Codes","data":"payload.rest","dataType":"msg","specification":"spec","specificationType":"ui","items":[{"type":"byte","name":"OBIS-B","offset":0,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"byte","name":"OBIS-C","offset":1,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"byte","name":"OBIS-D","offset":2,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"byte","name":"OBIS-E","offset":3,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"buffer","name":"rest","offset":4,"length":-1,"offsetbit":0,"scale":"1","mask":""}],"swap1":"","swap2":"","swap3":"","swap1Type":"swap","swap2Type":"swap","swap3Type":"swap","msgProperty":"payload","msgPropertyType":"str","resultType":"keyvalue","resultTypeType":"output","multipleResult":false,"fanOutMultipleResult":false,"setTopic":true,"outputs":1,"x":290,"y":220,"wires":[["7129c8e7.e61be8"]]},{"id":"1dfc498c.4c83a6","type":"switch","z":"51f68a48.7e6574","name":"OBIS-D","property":"payload.OBIS-D","propertyType":"msg","rules":[{"t":"else"},{"t":"eq","v":"4","vt":"str"},{"t":"eq","v":"8","vt":"str"}],"checkall":"true","repair":false,"outputs":3,"x":460,"y":380,"wires":[["7cda1812.c38d78"],["21f425a5.5bf23a"],["3f524c46.e2e104"]]},{"id":"e0428357.2af8f","type":"debug","z":"51f68a48.7e6574","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":850,"y":320,"wires":[]},{"id":"78e9b1e8.5429b","type":"debug","z":"51f68a48.7e6574","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":863,"y":500,"wires":[]},{"id":"7cda1812.c38d78","type":"debug","z":"51f68a48.7e6574","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":630,"y":320,"wires":[]},{"id":"21f425a5.5bf23a","type":"buffer-parser","z":"51f68a48.7e6574","name":"Messwert 4","data":"payload.rest","dataType":"msg","specification":"spec","specificationType":"ui","items":[{"type":"uint32be","name":"messwert","offset":0,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"buffer","name":"rest","offset":4,"length":-1,"offsetbit":0,"scale":"1","mask":""}],"swap1":"","swap2":"","swap3":"","swap1Type":"swap","swap2Type":"swap","swap3Type":"swap","msgProperty":"payload","msgPropertyType":"str","resultType":"keyvalue","resultTypeType":"output","multipleResult":false,"fanOutMultipleResult":false,"setTopic":true,"outputs":1,"x":690,"y":380,"wires":[["e0428357.2af8f","4e34675c.15f9e8"]]},{"id":"3f524c46.e2e104","type":"buffer-parser","z":"51f68a48.7e6574","name":"Zähler 8","data":"payload.rest","dataType":"msg","specification":"spec","specificationType":"ui","items":[{"type":"biguint64be","name":"zaehlerwert","offset":0,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"buffer","name":"rest","offset":8,"length":-1,"offsetbit":0,"scale":"1","mask":""}],"swap1":"","swap2":"","swap3":"","swap1Type":"swap","swap2Type":"swap","swap3Type":"swap","msgProperty":"payload","msgPropertyType":"str","resultType":"keyvalue","resultTypeType":"output","multipleResult":false,"fanOutMultipleResult":false,"setTopic":true,"outputs":1,"x":688,"y":440,"wires":[["78e9b1e8.5429b","4e34675c.15f9e8"]]},{"id":"e96481ab.71bcc","type":"buffer-parser","z":"51f68a48.7e6574","name":"Header","data":"payload","dataType":"msg","specification":"spec","specificationType":"ui","items":[{"type":"buffer","name":"Kopf","offset":0,"length":28,"offsetbit":0,"scale":"1","mask":""},{"type":"buffer","name":"rest","offset":28,"length":-1,"offsetbit":0,"scale":"1","mask":""}],"swap1":"","swap2":"","swap3":"","swap1Type":"swap","swap2Type":"swap","swap3Type":"swap","msgProperty":"payload","msgPropertyType":"str","resultType":"keyvalue","resultTypeType":"output","multipleResult":false,"fanOutMultipleResult":false,"setTopic":true,"outputs":1,"x":500,"y":60,"wires":[["f3665edf.5a785","d5e9a03c.b188b"]]},{"id":"f3665edf.5a785","type":"debug","z":"51f68a48.7e6574","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":690,"y":60,"wires":[]},{"id":"da62e3c1.a4d4d","type":"change","z":"51f68a48.7e6574","name":"setze OBIS-C","rules":[{"t":"move","p":"payload.OBIS-C","pt":"msg","to":"OBIS-C","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":260,"y":380,"wires":[["1dfc498c.4c83a6"]]},{"id":"4e34675c.15f9e8","type":"change","z":"51f68a48.7e6574","name":"lösche OBIS-C","rules":[{"t":"delete","p":"OBIS-C","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":893,"y":409,"wires":[["fe456fba.8915c"]]},{"id":"7129c8e7.e61be8","type":"switch","z":"51f68a48.7e6574","name":"OBIS-B","property":"payload.OBIS-B","propertyType":"msg","rules":[{"t":"else"},{"t":"eq","v":"144","vt":"str"},{"t":"eq","v":"0","vt":"str"}],"checkall":"true","repair":false,"outputs":3,"x":470,"y":220,"wires":[["1c4cac0b.c56ae4"],["a2601093.8ba6f"],["da62e3c1.a4d4d"]]},{"id":"1c4cac0b.c56ae4","type":"debug","z":"51f68a48.7e6574","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":630,"y":140,"wires":[]},{"id":"a2601093.8ba6f","type":"buffer-parser","z":"51f68a48.7e6574","name":"Software-Version","data":"payload.rest","dataType":"msg","specification":"spec","specificationType":"ui","items":[{"type":"int16be","name":"Major","offset":0,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16be","name":"Minor","offset":2,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16be","name":"Build","offset":4,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16be","name":"Revision","offset":6,"length":1,"offsetbit":0,"scale":"1","mask":""}],"swap1":"","swap2":"","swap3":"","swap1Type":"swap","swap2Type":"swap","swap3Type":"swap","msgProperty":"payload","msgPropertyType":"str","resultType":"keyvalue","resultTypeType":"output","multipleResult":false,"fanOutMultipleResult":false,"setTopic":true,"outputs":1,"x":690,"y":220,"wires":[["9fda010a.8a328"]]},{"id":"9fda010a.8a328","type":"debug","z":"51f68a48.7e6574","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":930,"y":220,"wires":[]},{"id":"fe456fba.8915c","type":"link out","z":"51f68a48.7e6574","name":"","links":["b419ce11.5f9e1"],"x":1028,"y":400,"wires":[]},{"id":"b419ce11.5f9e1","type":"link in","z":"51f68a48.7e6574","name":"","links":["fe456fba.8915c"],"x":95,"y":220,"wires":[["d5e9a03c.b188b"]]}]

```

Edit: @Becker : I also copied the full message from your initial post (608 bytes buffer) into the fake/dummy ...now the software version shows as well, as it is at the end of the buffer (OBIS-Channel/OBIS-B with value "144").  
Also the Documentation in the PDF is misleading, as normally the Channel for these OBIS-Codes should be "1", but the dump here [SMA Homemanager 2.0 \>= 2.03.4.R – smart charging + smart home + smart tesla](http://www.eb-systeme.de/?page_id=3005) clearly shows, that they are zero/"0"....as in your demo/captured mesg.  
The OBIS-Index/OBIS-C is the one to determine on how to further manipulate the value (divert by 1000, 360000, ...) and to determine the unit.

---

<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:** [6 April 2021 07:17 UTC](https://discourse.nodered.org/t/query-sma-energy-meter-home-manager-by-udp-in/42983/17 "2021-04-06T07:17:29Z")

</div>

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