# DS18B20 smoothing and PID tuning

**URL:** <https://discourse.nodered.org/t/ds18b20-smoothing-and-pid-tuning/1015>\
**Category:** General\
**Created:** [22 June 2018 22:57 UTC](https://discourse.nodered.org/t/ds18b20-smoothing-and-pid-tuning/1015 "2018-06-22T22:57:42Z")\
**Posts on this page:** 1\
**Showing post:** 2

<div class="post-metadata">

**Author:** ![Andrei](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/andrei/32/10446_2.png) [@Andrei](https://discourse.nodered.org/u/Andrei)\
**Post date:** [23 June 2018 04:16 UTC](https://discourse.nodered.org/t/ds18b20-smoothing-and-pid-tuning/1015/2 "2018-06-23T04:16:42Z")

</div>

Hi, one of the good things about Node-Red is that it offers capabilities (core nodes) that lessen the amount of programming (JavaScript ) required to perform the task at hand.

In your case, we can take advantage of the node JOIN that has a reduce capability built in. This is how the configuration of this node looks like (the help in the node explains exactly this very same use case):

![s-03](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/1X/ee8f38e4ce280aec66809acf20092157638510e5.PNG)

What we have to do before sending messages to the JOIN node is to slipt the flow in such a way that the reading for each sensor takes a different path (assuming there are several sensors active), therefore the use of a switch node.

This is how the flow looks like (for 3 sensors):

![s-02](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/1X/b5d364ac91f360ef6ac7df668b2ec72a976b3b5d.PNG)

Another assumption for this flow to work properly is that the temperature reading is in the form:

msg.topic -\> has the sensor ID  
msg.payload -\_ temperature reading

![s-01](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/1X/a5aeb01df889ffe4f5b85e077212e03067934a01.PNG)

I used in the flow a function node with the only purpose of generating random temperature readings.

The batch node groups the temperature readings each 5 seconds (configurable as you wish).

Flow to import and test:

```auto
[{"id":"17ddefb0.b444c","type":"tab","label":"DS18B20 temperature probes","disabled":false,"info":""},{"id":"cb2c2667.60a828","type":"inject","z":"17ddefb0.b444c","name":"","topic":"sensor1","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":158.0999984741211,"y":85.00000095367432,"wires":[["37f436ae.42a18a"]]},{"id":"37f436ae.42a18a","type":"function","z":"17ddefb0.b444c","name":"Format sensor output","func":"let value = msg.payload%100;\nmsg.payload = value;\nnode.status({text:value});\nreturn msg;","outputs":1,"noerr":0,"x":416.1000747680664,"y":128.00000190734863,"wires":[["15017a37.21a4f6","7bcc6e87.b6812"]]},{"id":"3c31e369.eb1a1c","type":"inject","z":"17ddefb0.b444c","name":"","topic":"sensor2","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":161.99999237060547,"y":130.9999885559082,"wires":[["37f436ae.42a18a"]]},{"id":"e0dc5d43.2940d","type":"inject","z":"17ddefb0.b444c","name":"","topic":"sensor3","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":157.99999237060547,"y":181.00000190734863,"wires":[["37f436ae.42a18a"]]},{"id":"7234c85c.daea08","type":"debug","z":"17ddefb0.b444c","name":"Average Sensor 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":882.0000534057617,"y":241.00000476837158,"wires":[]},{"id":"15017a37.21a4f6","type":"switch","z":"17ddefb0.b444c","name":"","property":"topic","propertyType":"msg","rules":[{"t":"cont","v":"sensor1","vt":"str"},{"t":"cont","v":"sensor2","vt":"str"},{"t":"cont","v":"sensor3","vt":"str"}],"checkall":"true","repair":false,"outputs":3,"x":400.10010147094727,"y":263.9999952316284,"wires":[["9292c17b.430b7"],["17a50.34fa45b0d"],["8531688e.337048"]]},{"id":"9292c17b.430b7","type":"batch","z":"17ddefb0.b444c","name":"","mode":"interval","count":10,"overlap":0,"interval":"5","allowEmptySequence":false,"topics":[],"x":584.1001014709473,"y":243.00000476837158,"wires":[["bd5ae1a.a41ad2"]]},{"id":"bd5ae1a.a41ad2","type":"join","z":"17ddefb0.b444c","name":"","mode":"reduce","build":"string","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"","count":"","reduceRight":false,"reduceExp":"$A+payload","reduceInit":"0","reduceInitType":"num","reduceFixup":"$A/$N","x":712.1000556945801,"y":241.0000057220459,"wires":[["7234c85c.daea08"]]},{"id":"c28b755d.76d118","type":"debug","z":"17ddefb0.b444c","name":"Average Sensor 2","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":880.0000419616699,"y":292.99999141693115,"wires":[]},{"id":"17a50.34fa45b0d","type":"batch","z":"17ddefb0.b444c","name":"","mode":"interval","count":10,"overlap":0,"interval":"5","allowEmptySequence":false,"topics":[],"x":582.1000900268555,"y":294.99999141693115,"wires":[["6df2759a.4df60c"]]},{"id":"6df2759a.4df60c","type":"join","z":"17ddefb0.b444c","name":"","mode":"reduce","build":"string","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"","count":"","reduceRight":false,"reduceExp":"$A+payload","reduceInit":"0","reduceInitType":"num","reduceFixup":"$A/$N","x":710.1000442504883,"y":292.99999237060547,"wires":[["c28b755d.76d118"]]},{"id":"a868298b.c152c8","type":"debug","z":"17ddefb0.b444c","name":"Average Sensor 3","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":880.0000419616699,"y":343.99999141693115,"wires":[]},{"id":"8531688e.337048","type":"batch","z":"17ddefb0.b444c","name":"","mode":"interval","count":10,"overlap":0,"interval":"5","allowEmptySequence":false,"topics":[],"x":582.1000900268555,"y":345.99999141693115,"wires":[["d7342bfb.7fc4e8"]]},{"id":"d7342bfb.7fc4e8","type":"join","z":"17ddefb0.b444c","name":"","mode":"reduce","build":"string","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"","count":"","reduceRight":false,"reduceExp":"$A+payload","reduceInit":"0","reduceInitType":"num","reduceFixup":"$A/$N","x":710.1000442504883,"y":343.99999237060547,"wires":[["a868298b.c152c8"]]},{"id":"7bcc6e87.b6812","type":"debug","z":"17ddefb0.b444c","name":"Sensor Reading","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":663.0000076293945,"y":127.00000190734863,"wires":[]}]

```

Testing four readings with sensor2. The average is 44.25

![s-04](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/1X/f06e6d6afffbc7fb9c98bbe3c9a652507e4ededa.PNG)

---

_[View the full topic](https://discourse.nodered.org/t/ds18b20-smoothing-and-pid-tuning/1015)._
