# Smarter programming with subflow and sensors

**URL:** <https://discourse.nodered.org/t/smarter-programming-with-subflow-and-sensors/95945>\
**Category:** General\
**Tags:** function-node, mqtt\
**Created:** [12 March 2025 13:04 UTC](https://discourse.nodered.org/t/smarter-programming-with-subflow-and-sensors/95945 "2025-03-12T13:04:50Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![MrX](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/mrx/32/74473_2.png) [@MrX](https://discourse.nodered.org/u/MrX)\
**Post date:** [12 March 2025 13:04 UTC](https://discourse.nodered.org/t/smarter-programming-with-subflow-and-sensors/95945/1 "2025-03-12T13:04:51Z")

</div>

I want to use one common subflow for many types of sensors to get the sensors value.  
The sensors value is received from the MQTT message with "msg.topic" = "tele/xxx/SENSOR", sent with TELEPERIOD interval.  
A "Environment Variables" is used to configure the sensor type to the subflow.  
I use the "mqtt node in"-node to get the MQTT message to the "Function"-node.

The solution below works, in a "Function node", but there must be a smarter way to avoid all these hardcoded If-conditions (= less code).

```auto
if (msg.topic === "tele/" + env.get("MQTTTopic") + "/SENSOR") 
    {
    if (env.get("Sensor") === "DS18B20.Temperature") { indata = msg.payload.DS18B20.Temperature }
	if (env.get("Sensor") === "DS18B20_1.Temperature") { indata = msg.payload.DS18B20_1.Temperature }
	if (env.get("Sensor") === "DS18B20_2.Temperature") { indata = msg.payload.DS18B20_2.Temperature }
	if (env.get("Sensor") === "DS18B20_3.Temperature") { indata = msg.payload.DS18B20_3.Temperature }
	if (env.get("Sensor") === "DS18B20_4.Temperature") { indata = msg.payload.DS18B20_4.Temperature }
	if (env.get("Sensor") === "DS18B20_5.Temperature") { indata = msg.payload.DS18B20_5.Temperature }
	if (env.get("Sensor") === "DS18B20_6.Temperature") { indata = msg.payload.DS18B20_6.Temperature }
	if (env.get("Sensor") === "DS18B20_7.Temperature") { indata = msg.payload.DS18B20_7.Temperature }
	if (env.get("Sensor") === "DS18B20_8.Temperature") { indata = msg.payload.DS18B20_8.Temperature }
	if (env.get("Sensor") === "ANALOG.Temperature1") { indata = msg.payload.ANALOG.Temperature1 }
	if (env.get("Sensor") === "ANALOG.Temperature2") { indata = msg.payload.ANALOG.Temperature2 }
	if (env.get("Sensor") === "ANALOG.Temperature3") { indata = msg.payload.ANALOG.Temperature3 }
	if (env.get("Sensor") === "ANALOG.Temperature4") { indata = msg.payload.ANALOG.Temperature4 }
	if (env.get("Sensor") === "ANALOG.Temperature5") { indata = msg.payload.ANALOG.Temperature5 }
	if (env.get("Sensor") === "ANALOG.Temperature6") { indata = msg.payload.ANALOG.Temperature6 }
	if (env.get("Sensor") === "ANALOG.Temperature7") { indata = msg.payload.ANALOG.Temperature7 }
	if (env.get("Sensor") === "ANALOG.Temperature8") { indata = msg.payload.ANALOG.Temperature8 }
	if (env.get("Sensor") === "DHT11.Temperature") { indata = msg.payload.DHT11.Temperature }
	if (env.get("Sensor") === "DHT12.Temperature") { indata = msg.payload.DHT12.Temperature }
	if (env.get("Sensor") === "HTU21.Temperature") { indata = msg.payload.HTU21.Temperature }
	if (env.get("Sensor") === "SHT1X.Temperature") { indata = msg.payload.SHT1X.Temperature }
	if (env.get("Sensor") === "SHT30.Temperature") { indata = msg.payload.SHT30.Temperature }
	if (env.get("Sensor") === "SHT4X.Temperature") { indata = msg.payload.SHT4X.Temperature }
	if (env.get("Sensor") === "BME280.Humidity") { indata = msg.payload.BME280.Humidity }
	if (env.get("Sensor") === "BME280.Pressure") { indata = msg.payload.BME280.Pressure }
.
.
    }

```

---

<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:** [12 March 2025 13:43 UTC](https://discourse.nodered.org/t/smarter-programming-with-subflow-and-sensors/95945/2 "2025-03-12T13:43:17Z")

</div>

Assuming the env value always exactly matches the property names in the payload, you can use

```auto
const prop = env.get('sensor')
indata = RED.util.getObjectProperty(msg.payload,prop);
...

```

* * *

PS: About your post formatting:

In order to make code readable and usable it is necessary to surround your code with three backticks (also known as a left quote or backquote `````)

````auto
``` 
   code goes here 
```

````

You can edit and correct your post by clicking the pencil ✏ icon.

See this post for more details - [How to share code or flow json](https://discourse.nodered.org/t/how-to-share-code-or-flow-json/506)

---

<div class="post-metadata">

**Author:** ![E1cid](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/e1cid/32/77971_2.png) [@E1cid](https://discourse.nodered.org/u/E1cid)\
**Post date:** [12 March 2025 13:55 UTC](https://discourse.nodered.org/t/smarter-programming-with-subflow-and-sensors/95945/3 "2025-03-12T13:55:56Z")

</div>

Further to Steve's info, here is where you can find more api modules [Node-RED](https://nodered.org/docs/api/modules/v/1.3/@node-red_util_util.html)

---

<div class="post-metadata">

**Author:** ![jbudd](https://avatars.discourse-cdn.com/v4/letter/j/5f8ce5/32.png) [@jbudd](https://discourse.nodered.org/u/jbudd)\
**Post date:** [12 March 2025 14:44 UTC](https://discourse.nodered.org/t/smarter-programming-with-subflow-and-sensors/95945/4 "2025-03-12T14:44:06Z")

</div>

What does an unaltered incoming MQTT message look like?  
Use a debug node showing the complete message object to grab the value.

---

<div class="post-metadata">

**Author:** ![MrX](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/mrx/32/74473_2.png) [@MrX](https://discourse.nodered.org/u/MrX)\
**Post date:** [12 March 2025 15:29 UTC](https://discourse.nodered.org/t/smarter-programming-with-subflow-and-sensors/95945/5 "2025-03-12T15:29:41Z")

</div>

Great ! It works 😉

---

<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:** [26 March 2025 15:30 UTC](https://discourse.nodered.org/t/smarter-programming-with-subflow-and-sensors/95945/6 "2025-03-26T15:30:00Z")

</div>

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