# Query modbus registers for SMA Inverter without crash

**URL:** <https://discourse.nodered.org/t/query-modbus-registers-for-sma-inverter-without-crash/32788>\
**Category:** General\
**Created:** [12 September 2020 17:19 UTC](https://discourse.nodered.org/t/query-modbus-registers-for-sma-inverter-without-crash/32788 "2020-09-12T17:19:06Z")\
**Posts on this page:** 20\
**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:** [12 September 2020 17:19 UTC](https://discourse.nodered.org/t/query-modbus-registers-for-sma-inverter-without-crash/32788/1 "2020-09-12T17:19:07Z")

</div>

Hello,  
I´m trying to query my SMA Inverters.  
When I query 2-4 values, the modbus server crashes always (i tried both Inverters).  
the poll rate is 10s

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

I think the problem could be that nodered queries them all at once, can I set somehow that the values are queried one after the other ?

---

<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:** [12 September 2020 17:33 UTC](https://discourse.nodered.org/t/query-modbus-registers-for-sma-inverter-without-crash/32788/2 "2020-09-12T17:33:33Z")

</div>

the data sheet from SMA says that I cound query up to 125 values !  
I don´t know where the problem is 😪

---

<div class="post-metadata">

**Author:** ![Colin](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/colin/32/17040_2.png) [@Colin](https://discourse.nodered.org/u/Colin)\
**Post date:** [12 September 2020 20:21 UTC](https://discourse.nodered.org/t/query-modbus-registers-for-sma-inverter-without-crash/32788/3 "2020-09-12T20:21:03Z")

</div>

Which modbus node are you using? The flows site shows very many options.

Are you performing multiple small reads? When the data sheet says you can query 125 values I would expect that to be a single request for 125 values.

---

<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:** [12 September 2020 20:58 UTC](https://discourse.nodered.org/t/query-modbus-registers-for-sma-inverter-without-crash/32788/4 "2020-09-12T20:58:46Z")

</div>

i use "node-red-contrib-modbustcp".

the manual from the modbus inverter:

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

> [@Colin](#):
>
> Are you performing multiple small reads? When the data sheet says you can query 125 values I would expect that to be a single request for 125 values.

I don´t know ! I guess NodeRED makes multiple reads so that the Inverter Modbus Server crash.  
But how can I make a single request for 5-10 values ?

---

<div class="post-metadata">

**Author:** ![UnborN](https://avatars.discourse-cdn.com/v4/letter/u/4491bb/32.png) [@UnborN](https://discourse.nodered.org/u/UnborN)\
**Post date:** [12 September 2020 21:08 UTC](https://discourse.nodered.org/t/query-modbus-registers-for-sma-inverter-without-crash/32788/5 "2020-09-12T21:08:47Z")

</div>

Hi Becker,

Uninstall modbustcp node and use ' **node-red-contrib-modbus**' that has more advanced features.  
basically you use the **modbus-flex-getter** node with the following logic setup

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/a/d/ad7d08dab5b53e6ac6da879bd372822357d81c33.png)

your inject node will trigger every x amount of seconds the setup functions that will in turn send request to the Modbus Flex Getter. The request may be simultanious but this will be no problem since in the configuration of the Modbus Flex Getter you set an option to queue the commands. After the reply is then joined together based on topic with the join node.  
 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/5/2/52d061a272046aac0bc29db50f0ad69059675b51.png)

test flow :

```auto
[{"id":"8fc91da6.a9e6","type":"modbus-flex-getter","z":"6af7d61.65ee9a8","name":"","showStatusActivities":false,"showErrors":false,"logIOActivities":false,"server":"28c906aa.79aae2","useIOFile":false,"ioFile":"","useIOForPayload":false,"emptyMsgOnFail":false,"keepMsgProperties":false,"x":600,"y":1740,"wires":[["93b4c0bc.489ad"],[]]},{"id":"7012947b.acb93c","type":"function","z":"6af7d61.65ee9a8","name":"","func":"msg.payload = { \n 'fc': 4, \n 'unitid': 1, \n 'address': 0 , \n 'quantity': 2 \n}\nmsg.topic = 'myDevice1'\n\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","x":340,"y":1700,"wires":[["8fc91da6.a9e6"]]},{"id":"edeb5f19.a9fc3","type":"function","z":"6af7d61.65ee9a8","name":"","func":"msg.payload = { \n 'fc': 4, 'unitid': 1, \n 'address': 2 , \n 'quantity': 2 \n} \nmsg.topic = 'myDevice2'\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","x":340,"y":1780,"wires":[["8fc91da6.a9e6"]]},{"id":"88de8439.4ef9b8","type":"inject","z":"6af7d61.65ee9a8","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"5","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":130,"y":1740,"wires":[["7012947b.acb93c","edeb5f19.a9fc3"]]},{"id":"d39e43fb.43c888","type":"debug","z":"6af7d61.65ee9a8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":970,"y":1740,"wires":[]},{"id":"93b4c0bc.489ad","type":"join","z":"6af7d61.65ee9a8","name":"","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":true,"timeout":"","count":"2","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":790,"y":1740,"wires":[["d39e43fb.43c888"]]},{"id":"28c906aa.79aae2","type":"modbus-client","z":"","name":"TCP1","clienttype":"tcp","bufferCommands":true,"stateLogEnabled":false,"queueLogEnabled":false,"tcpHost":"192.168.1.66","tcpPort":"502","tcpType":"TPC-RTU-BUFFERED","serialPort":"/dev/ttyUSB","serialType":"RTU-BUFFERD","serialBaudrate":"9600","serialDatabits":"8","serialStopbits":"1","serialParity":"none","serialConnectionDelay":"100","unit_id":1,"commandDelay":200,"clientTimeout":1000,"reconnectOnTimeout":true,"reconnectTimeout":2000,"parallelUnitIdsAllowed":true}]

```

ps. **modify the function nodes based on your specific requirements**

---

<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:** [12 September 2020 21:34 UTC](https://discourse.nodered.org/t/query-modbus-registers-for-sma-inverter-without-crash/32788/6 "2020-09-12T21:34:17Z")

</div>

thank you, it seems to work, but I don´t get the value I should get:

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

I am not sure about the "fc" and "unitid".

This is what I should get for 30865:  
 ![grafik](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/e/6/e66ffccecaf5427058c7e03b33c7766a79a3dfd4.png)

I also have to delete the value for "0", I only need the value for "1" (see my other thread).

---

<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:** [12 September 2020 21:39 UTC](https://discourse.nodered.org/t/query-modbus-registers-for-sma-inverter-without-crash/32788/7 "2020-09-12T21:39:18Z")

</div>

sorry, now I got it right

---

<div class="post-metadata">

**Author:** ![UnborN](https://avatars.discourse-cdn.com/v4/letter/u/4491bb/32.png) [@UnborN](https://discourse.nodered.org/u/UnborN)\
**Post date:** [12 September 2020 21:39 UTC](https://discourse.nodered.org/t/query-modbus-registers-for-sma-inverter-without-crash/32788/8 "2020-09-12T21:39:34Z")

</div>

In your Simulator i see Device ID 3 !!  
in function you have unitid 1 .. i think you need to change to unitid 3 in function

---

<div class="post-metadata">

**Author:** ![UnborN](https://avatars.discourse-cdn.com/v4/letter/u/4491bb/32.png) [@UnborN](https://discourse.nodered.org/u/UnborN)\
**Post date:** [12 September 2020 21:39 UTC](https://discourse.nodered.org/t/query-modbus-registers-for-sma-inverter-without-crash/32788/9 "2020-09-12T21:39:56Z")

</div>

Its working ?

---

<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:** [12 September 2020 21:41 UTC](https://discourse.nodered.org/t/query-modbus-registers-for-sma-inverter-without-crash/32788/10 "2020-09-12T21:41:14Z")

</div>

yes!  
Now I need a way to extract only the value "1" from all my registers (topic arrays):  
 ![grafik](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/1/c/1c7bb8b5f5483b008d94809eca470c15552635f9.png)

---

<div class="post-metadata">

**Author:** ![UnborN](https://avatars.discourse-cdn.com/v4/letter/u/4491bb/32.png) [@UnborN](https://discourse.nodered.org/u/UnborN)\
**Post date:** [12 September 2020 21:44 UTC](https://discourse.nodered.org/t/query-modbus-registers-for-sma-inverter-without-crash/32788/11 "2020-09-12T21:44:29Z")

</div>

Try in function address **30866** if you dont need the '0' value and quantity '1'  
I dont know why it was giving error in previous modbustcp node .. but try with this new one

regarding getting the values from the message the way it is stuctured now ...  
try **msg.payload.Pbez[0]** if the above works or  
**msg.payload.Pbez[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:** [12 September 2020 21:55 UTC](https://discourse.nodered.org/t/query-modbus-registers-for-sma-inverter-without-crash/32788/12 "2020-09-12T21:55:52Z")

</div>

> [@UnborN](#):
>
> Try in function address **30866** if you dont need the '0' value and quantity '1'  
> I dont know why it was giving error in previous modbustcp node .. but try with this new one

I doesn´t work this way.

> [@UnborN](#):
>
> try **msg.payload.Pbez[0]** if the above works or  
> **msg.payload.Pbez[1]**

where can I chose [1] ? after "join" a new function ?

---

<div class="post-metadata">

**Author:** ![UnborN](https://avatars.discourse-cdn.com/v4/letter/u/4491bb/32.png) [@UnborN](https://discourse.nodered.org/u/UnborN)\
**Post date:** [12 September 2020 21:58 UTC](https://discourse.nodered.org/t/query-modbus-registers-for-sma-inverter-without-crash/32788/13 "2020-09-12T21:58:31Z")

</div>

> [@Becker](#):
>
> where can I chose [1] ? after "join" a new function ?

yes exactly .. the way you did it in a function node in previous topic 😉

---

<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:** [13 September 2020 07:52 UTC](https://discourse.nodered.org/t/query-modbus-registers-for-sma-inverter-without-crash/32788/14 "2020-09-13T07:52:29Z")

</div>

I dont work:  
 ![grafik](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/c/5/c54abba4e91dc4957d30d414cfa2af2f5662d0bb.png)

 ![grafik](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/5/0/503608841a307035ff19418333a248598b74f813.png)

I have to extract all the [1]-Data from the join node - but how ?

---

<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:** [13 September 2020 07:58 UTC](https://discourse.nodered.org/t/query-modbus-registers-for-sma-inverter-without-crash/32788/15 "2020-09-13T07:58:02Z")

</div>

the "-" was the problem.  
"Pbez" works

---

<div class="post-metadata">

**Author:** ![UnborN](https://avatars.discourse-cdn.com/v4/letter/u/4491bb/32.png) [@UnborN](https://discourse.nodered.org/u/UnborN)\
**Post date:** [13 September 2020 08:05 UTC](https://discourse.nodered.org/t/query-modbus-registers-for-sma-inverter-without-crash/32788/16 "2020-09-13T08:05:20Z")

</div>

You may find this article from the official documentation interesting  
**[Multiple Outputs](https://nodered.org/docs/user-guide/writing-functions#multiple-outputs)** (from function nodes)

so you can get all your values first and with the function having multiple outputs, send the appropriate value to the output you want  
 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/6/9/6924ca032816ffcaee65e1556e57b2410410d479.png)

```auto
var msg1 = { payload: msg.payload.Pbez[1]};
var msg2 = { payload: msg.payload.UL1[1]};
return [msg1, msg2];

```

---

<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:** [13 September 2020 08:19 UTC](https://discourse.nodered.org/t/query-modbus-registers-for-sma-inverter-without-crash/32788/17 "2020-09-13T08:19:27Z")

</div>

🧐 what advantage does it bring

seems to work:  
 ![grafik](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/c/c/ccd49fe755ac35cc90048513c015ddfbd0efde74.png)

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

some values need a extra treatment:

```auto
var temp = (msg.payload.UL1[1]) / 100
msg.payload = temp;
msg.payload = msg.payload.toFixed(1).replace('.', ',')
return msg;

```

---

<div class="post-metadata">

**Author:** ![UnborN](https://avatars.discourse-cdn.com/v4/letter/u/4491bb/32.png) [@UnborN](https://discourse.nodered.org/u/UnborN)\
**Post date:** [13 September 2020 08:25 UTC](https://discourse.nodered.org/t/query-modbus-registers-for-sma-inverter-without-crash/32788/18 "2020-09-13T08:25:48Z")

</div>

> [@Becker](#):
>
> what advantage does it bring

not much really .. maybe less clutter on the flow and a few less wires 😉

nice job .. looks good 👍🏻

---

<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:** [13 September 2020 09:51 UTC](https://discourse.nodered.org/t/query-modbus-registers-for-sma-inverter-without-crash/32788/19 "2020-09-13T09:51:38Z")

</div>

@UnborN  
there is something wrong with the Join Node:

 ![grafik](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/8/3/837b9e6db7393084a2c5c23da7b226320cef22ca.png)

 ![grafik](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/3/5/35b7cb245081099dec91fc3c518b1ce512f92522.png)

I can´t add two values, see: [Adding two values](https://discourse.nodered.org/t/adding-two-values/32784/2)

---

<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:** [27 September 2020 09:51 UTC](https://discourse.nodered.org/t/query-modbus-registers-for-sma-inverter-without-crash/32788/20 "2020-09-27T09:51:39Z")

</div>

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