# Http endpoint from modbus

**URL:** <https://discourse.nodered.org/t/http-endpoint-from-modbus/47283>\
**Category:** Industrial\
**Created:** [17 June 2021 09:04 UTC](https://discourse.nodered.org/t/http-endpoint-from-modbus/47283 "2021-06-17T09:04:55Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![ketpa](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/ketpa/32/42496_2.png) [@ketpa](https://discourse.nodered.org/u/ketpa)\
**Post date:** [17 June 2021 09:04 UTC](https://discourse.nodered.org/t/http-endpoint-from-modbus/47283/1 "2021-06-17T09:04:55Z")

</div>

![obraz](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/a/e/ae6cc3b7a0b667e2f494d0765b01777efb432d33.png)  
How to create endpoint from this.

```auto
[{"id":"1cb4ba37.d45666","type":"http in","z":"a6893b09.aee2d8","name":"","url":"/setpoint","method":"get","upload":false,"swaggerDoc":"","x":90,"y":660,"wires":[["82cd602c.e8fbb"]]},{"id":"cab61139.cca8b","type":"http response","z":"a6893b09.aee2d8","name":"","statusCode":"","headers":{},"x":1167,"y":661,"wires":[]},{"id":"908f714b.063278","type":"template","z":"a6893b09.aee2d8","name":"","field":"payload","fieldType":"msg","format":"json","syntax":"mustache","template":"{{{payload}}}","output":"json","x":1037,"y":661,"wires":[["cab61139.cca8b"]]},{"id":"2b13900a.68e1a8","type":"json","z":"a6893b09.aee2d8","name":"","property":"payload","action":"","pretty":false,"x":907,"y":661,"wires":[["908f714b.063278","d487f215.7234f8"]]},{"id":"7bebe530.f78774","type":"modbus-flex-getter","z":"a6893b09.aee2d8","name":"","showStatusActivities":true,"showErrors":true,"logIOActivities":false,"server":"2a6356bf.4c0d8a","useIOFile":false,"ioFile":"","useIOForPayload":false,"emptyMsgOnFail":false,"keepMsgProperties":false,"x":700,"y":660,"wires":[[],["2b13900a.68e1a8"]]},{"id":"82cd602c.e8fbb","type":"function","z":"a6893b09.aee2d8","name":"17100-17157","func":"var fc=3;\nvar address=17100;\nvar quantity=57;\n//var slave_ip=msg.payload.slave_ip;\n//msg.slave_ip=\"192.168.1.31\";\n\n\nmsg.payload={\n value: msg.payload, \n 'fc': fc,\n 'unitid' : 255,\n 'address': address , \n 'quantity': quantity };\n \n msg.metadata = {\n\t\t\t//user defined\n\t\t\t'deviceType' : 'Radio Model X',\n\t\t\t'deviceId' : 'x001',\n\t\t\t'units' : 'Celcius',\n\t\t\t}\n\t\t\t\n \nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":480,"y":660,"wires":[["7bebe530.f78774"]]},{"id":"f7c337a1.07c8e8","type":"inject","z":"a6893b09.aee2d8","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"5","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":290,"y":720,"wires":[["82cd602c.e8fbb"]]},{"id":"d487f215.7234f8","type":"debug","z":"a6893b09.aee2d8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1160,"y":740,"wires":[]},{"id":"2a6356bf.4c0d8a","type":"modbus-client","name":"PLC150","clienttype":"tcp","bufferCommands":true,"stateLogEnabled":true,"queueLogEnabled":true,"tcpHost":"10.0.0.150","tcpPort":"502","tcpType":"DEFAULT","serialPort":"/dev/ttyUSB","serialType":"RTU-BUFFERD","serialBaudrate":"9600","serialDatabits":"8","serialStopbits":"1","serialParity":"none","serialConnectionDelay":"100","unit_id":"1","commandDelay":"1","clientTimeout":"1000","reconnectOnTimeout":true,"reconnectTimeout":"2000","parallelUnitIdsAllowed":true}]

```

---

<div class="post-metadata">

**Author:** ![pranavthakkar](https://avatars.discourse-cdn.com/v4/letter/p/e99b99/32.png) [@pranavthakkar](https://discourse.nodered.org/u/pranavthakkar)\
**Post date:** [17 June 2021 10:26 UTC](https://discourse.nodered.org/t/http-endpoint-from-modbus/47283/2 "2021-06-17T10:26:27Z")

</div>

what do you want to achieve with that?

---

<div class="post-metadata">

**Author:** ![ketpa](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/ketpa/32/42496_2.png) [@ketpa](https://discourse.nodered.org/u/ketpa)\
**Post date:** [17 June 2021 11:58 UTC](https://discourse.nodered.org/t/http-endpoint-from-modbus/47283/3 "2021-06-17T11:58:26Z")

</div>

Simple API.  
I want send values from modbus to http as json.  
From another service read this point.

---

<div class="post-metadata">

**Author:** ![pranavthakkar](https://avatars.discourse-cdn.com/v4/letter/p/e99b99/32.png) [@pranavthakkar](https://discourse.nodered.org/u/pranavthakkar)\
**Post date:** [17 June 2021 14:23 UTC](https://discourse.nodered.org/t/http-endpoint-from-modbus/47283/4 "2021-06-17T14:23:30Z")

</div>

just give msg.payload of modbus response to http response node. You can get the modbus response in to new function node and save it in to msg.payload.

---

<div class="post-metadata">

**Author:** ![ketpa](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/ketpa/32/42496_2.png) [@ketpa](https://discourse.nodered.org/u/ketpa)\
**Post date:** [18 June 2021 08:50 UTC](https://discourse.nodered.org/t/http-endpoint-from-modbus/47283/5 "2021-06-18T08:50:01Z")

</div>

I trying that but without success

 ![obraz](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/1/4/14b770cb326a56de5e40ed54765cfbb91a0d04b3.png)

```auto
[{"id":"ea2b1f34.82a73","type":"function","z":"af493244.24b478","name":"","func":"msg.payload = msg.payload.data;\n \nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":760,"y":1300,"wires":[["c7426cbe.265c5"]]},{"id":"ca4f6a35.9dfb","type":"function","z":"af493244.24b478","name":"17100-17157","func":"var fc=3;\nvar address=17100;\nvar quantity=57;\n//var slave_ip=msg.payload.slave_ip;\n//msg.slave_ip=\"192.168.1.31\";\n\n\nmsg.payload={\n value: msg.payload, \n 'fc': fc,\n 'unitid' : 255,\n 'address': address , \n 'quantity': quantity };\n \n msg.metadata = {\n\t\t\t//user defined\n\t\t\t'deviceType' : 'Radio Model X',\n\t\t\t'deviceId' : 'x001',\n\t\t\t'units' : 'Celcius',\n\t\t\t}\n\t\t\t\n \nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":340,"y":1300,"wires":[["3d1d0353.917a74"]]},{"id":"58c4d225.c9eb04","type":"inject","z":"af493244.24b478","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":160,"y":1400,"wires":[["ca4f6a35.9dfb"]]},{"id":"a4c5cebc.7e0ae","type":"debug","z":"af493244.24b478","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":810,"y":1340,"wires":[]},{"id":"3d1d0353.917a74","type":"modbus-flex-getter","z":"af493244.24b478","name":"","showStatusActivities":true,"showErrors":true,"logIOActivities":false,"server":"2a6356bf.4c0d8a","useIOFile":false,"ioFile":"","useIOForPayload":false,"emptyMsgOnFail":false,"keepMsgProperties":false,"x":560,"y":1300,"wires":[[],["ea2b1f34.82a73","a4c5cebc.7e0ae"]]},{"id":"2c9a4c3e.9107b4","type":"http in","z":"af493244.24b478","name":"","url":"/mod1","method":"get","upload":false,"swaggerDoc":"","x":130,"y":1300,"wires":[["ca4f6a35.9dfb"]]},{"id":"c7426cbe.265c5","type":"template","z":"af493244.24b478","name":"","field":"payload","fieldType":"msg","format":"html","syntax":"mustache","template":"<h1>This is the payload: {{payload}} !</h1>\n<p>to test</p>","output":"str","x":940,"y":1300,"wires":[["1659abd0.b26284","45c8a71d.2a262"]]},{"id":"1659abd0.b26284","type":"http response","z":"af493244.24b478","name":"","statusCode":"","headers":{},"x":1100,"y":1300,"wires":[]},{"id":"45c8a71d.2a262","type":"debug","z":"af493244.24b478","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1150,"y":1340,"wires":[]},{"id":"2a6356bf.4c0d8a","type":"modbus-client","name":"PLC150","clienttype":"tcp","bufferCommands":true,"stateLogEnabled":true,"queueLogEnabled":true,"tcpHost":"10.0.0.150","tcpPort":"502","tcpType":"DEFAULT","serialPort":"/dev/ttyUSB","serialType":"RTU-BUFFERD","serialBaudrate":"9600","serialDatabits":"8","serialStopbits":"1","serialParity":"none","serialConnectionDelay":"100","unit_id":"1","commandDelay":"1","clientTimeout":"1000","reconnectOnTimeout":true,"reconnectTimeout":"2000","parallelUnitIdsAllowed":true}]

```

---

<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:** [18 June 2021 11:51 UTC](https://discourse.nodered.org/t/http-endpoint-from-modbus/47283/6 "2021-06-18T11:51:08Z")

</div>

Hi Ketpa,

If you add a 'complete msg' Debug node after your Http in node, you will notice that additional information regarding **req** and **res** are present. These **MUST** arrive to your Http out node in order to complete the http request to your endpoint.

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

Now the issue is that the Modbus Flex Getter node doesnt preserve the original msg properties (req and res is lost and the chain to http out broken)

To be fair to the authors of the modbus nodes they do provide a property in order to pass on data from the original msg and that is the `value` property.

If we try to save the whole msg including the needed `req` and `res` to `value` in order to pass them on to http out .. unfortunately we get an error.

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

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

One workaround is to set and get Flow Context in functions before and after Modbus Flex  
(you can read more about Context [here](https://nodered.org/docs/user-guide/writing-functions#storing-data))

**Test Flow :**

```auto
[{"id":"ca4f6a35.9dfb","type":"function","z":"af25975e21b17ff4","name":"17100-17157","func":"var fc = 3;\nvar address = 17100;\nvar quantity = 57;\n//var slave_ip=msg.payload.slave_ip;\n//msg.slave_ip=\"192.168.1.31\";\n\nmsg.topic = \"modbus\"\n\n// store original http request in flow context \nflow.set(\"http\", msg)\n\nmsg.metadata = {\n //user defined\n 'deviceType': 'Radio Model X',\n 'deviceId': 'x001',\n 'units': 'Celcius',\n}\n\nmsg.payload = {\n // 'value': msg,\n 'fc': fc,\n 'unitid': 1,\n 'address': address,\n 'quantity': quantity\n};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":380,"y":200,"wires":[["3d1d0353.917a74"]]},{"id":"3d1d0353.917a74","type":"modbus-flex-getter","z":"af25975e21b17ff4","name":"","showStatusActivities":true,"showErrors":true,"logIOActivities":false,"server":"2a6356bf.4c0d8a","useIOFile":false,"ioFile":"","useIOForPayload":false,"emptyMsgOnFail":false,"keepMsgProperties":false,"x":600,"y":200,"wires":[["ec2527c2d09a7c4b","e57bb6f40b3532ff"],[]]},{"id":"2c9a4c3e.9107b4","type":"http in","z":"af25975e21b17ff4","name":"","url":"/mod1","method":"get","upload":false,"swaggerDoc":"","x":190,"y":200,"wires":[["ca4f6a35.9dfb","60a6dd0af9879f0b"]]},{"id":"c7426cbe.265c5","type":"template","z":"af25975e21b17ff4","name":"","field":"payload","fieldType":"msg","format":"html","syntax":"mustache","template":"<h1>This is the payload:!</h1>\n<pre> {{payload}} </pre>\n<p>to test</p>","output":"str","x":1000,"y":200,"wires":[["1659abd0.b26284","45c8a71d.2a262"]]},{"id":"1659abd0.b26284","type":"http response","z":"af25975e21b17ff4","name":"","statusCode":"","headers":{},"x":1160,"y":200,"wires":[]},{"id":"45c8a71d.2a262","type":"debug","z":"af25975e21b17ff4","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1210,"y":280,"wires":[]},{"id":"60a6dd0af9879f0b","type":"debug","z":"af25975e21b17ff4","name":"1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":310,"y":120,"wires":[]},{"id":"ec2527c2d09a7c4b","type":"debug","z":"af25975e21b17ff4","name":"2","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":770,"y":120,"wires":[]},{"id":"5e15431f262e1df5","type":"debug","z":"af25975e21b17ff4","name":"3","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":990,"y":120,"wires":[]},{"id":"e57bb6f40b3532ff","type":"function","z":"af25975e21b17ff4","name":"","func":"// retrieve original http request from flow context \nlet newMsg = flow.get('http')\nnewMsg.payload = msg.payload\n\nreturn newMsg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":820,"y":200,"wires":[["5e15431f262e1df5","c7426cbe.265c5"]]},{"id":"2a6356bf.4c0d8a","type":"modbus-client","name":"PLC150","clienttype":"tcp","bufferCommands":true,"stateLogEnabled":true,"queueLogEnabled":true,"tcpHost":"192.168.0.3","tcpPort":"502","tcpType":"DEFAULT","serialPort":"/dev/ttyUSB","serialType":"RTU-BUFFERD","serialBaudrate":"9600","serialDatabits":"8","serialStopbits":"1","serialParity":"none","serialConnectionDelay":"100","unit_id":"1","commandDelay":"1","clientTimeout":"1000","reconnectOnTimeout":true,"reconnectTimeout":"2000","parallelUnitIdsAllowed":true}]

```

ps. change the modbus configuration back to your ip

---

<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:** [18 June 2021 22:25 UTC](https://discourse.nodered.org/t/http-endpoint-from-modbus/47283/7 "2021-06-18T22:25:30Z")

</div>

Actually forget about the above post because there is an option in Modbus Flex Getter to actually pass the needed `req` and `res` properties to http in by enabling **Keep Msg Properties**

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

**new Test Flow :**

```auto
[{"id":"ca4f6a35.9dfb","type":"function","z":"af25975e21b17ff4","name":"17100-17157","func":"var fc = 3;\nvar address = 17100;\nvar quantity = 57;\n//var slave_ip=msg.payload.slave_ip;\n//msg.slave_ip=\"192.168.1.31\";\n\n\nmsg.metadata = {\n //user defined\n 'deviceType': 'Radio Model X',\n 'deviceId': 'x001',\n 'units': 'Celcius',\n}\n\nmsg.payload = {\n // 'value': \"test\",\n 'fc': fc,\n 'unitid': 1,\n 'address': address,\n 'quantity': quantity\n};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":380,"y":200,"wires":[["3d1d0353.917a74"]]},{"id":"3d1d0353.917a74","type":"modbus-flex-getter","z":"af25975e21b17ff4","name":"","showStatusActivities":true,"showErrors":true,"logIOActivities":false,"server":"2a6356bf.4c0d8a","useIOFile":false,"ioFile":"","useIOForPayload":false,"emptyMsgOnFail":false,"keepMsgProperties":true,"x":600,"y":200,"wires":[["ec2527c2d09a7c4b","c7426cbe.265c5"],[]]},{"id":"2c9a4c3e.9107b4","type":"http in","z":"af25975e21b17ff4","name":"","url":"/mod1","method":"get","upload":false,"swaggerDoc":"","x":190,"y":200,"wires":[["ca4f6a35.9dfb","60a6dd0af9879f0b"]]},{"id":"c7426cbe.265c5","type":"template","z":"af25975e21b17ff4","name":"","field":"payload","fieldType":"msg","format":"html","syntax":"mustache","template":"<h1>This is the payload:!</h1>\n<pre> {{payload}} </pre>\n<p>to test</p>","output":"str","x":860,"y":180,"wires":[["1659abd0.b26284","45c8a71d.2a262"]]},{"id":"1659abd0.b26284","type":"http response","z":"af25975e21b17ff4","name":"","statusCode":"","headers":{},"x":1030,"y":140,"wires":[]},{"id":"45c8a71d.2a262","type":"debug","z":"af25975e21b17ff4","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1050,"y":220,"wires":[]},{"id":"60a6dd0af9879f0b","type":"debug","z":"af25975e21b17ff4","name":"1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":310,"y":120,"wires":[]},{"id":"ec2527c2d09a7c4b","type":"debug","z":"af25975e21b17ff4","name":"2","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":730,"y":120,"wires":[]},{"id":"2a6356bf.4c0d8a","type":"modbus-client","name":"PLC150","clienttype":"tcp","bufferCommands":true,"stateLogEnabled":true,"queueLogEnabled":true,"tcpHost":"192.168.0.3","tcpPort":"502","tcpType":"DEFAULT","serialPort":"/dev/ttyUSB","serialType":"RTU-BUFFERD","serialBaudrate":"9600","serialDatabits":"8","serialStopbits":"1","serialParity":"none","serialConnectionDelay":"100","unit_id":"1","commandDelay":"1","clientTimeout":"1000","reconnectOnTimeout":true,"reconnectTimeout":"2000","parallelUnitIdsAllowed":true}]

```

---

<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:** [17 August 2021 22:26 UTC](https://discourse.nodered.org/t/http-endpoint-from-modbus/47283/8 "2021-08-17T22:26:26Z")

</div>

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