# Convert status "on"/"off" to 0/1

**URL:** <https://discourse.nodered.org/t/convert-status-on-off-to-0-1/67075>\
**Category:** General\
**Created:** [29 August 2022 16:18 UTC](https://discourse.nodered.org/t/convert-status-on-off-to-0-1/67075 "2022-08-29T16:18:38Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![lessi](https://avatars.discourse-cdn.com/v4/letter/l/c37758/32.png) [@lessi](https://discourse.nodered.org/u/lessi)\
**Post date:** [29 August 2022 16:18 UTC](https://discourse.nodered.org/t/convert-status-on-off-to-0-1/67075/1 "2022-08-29T16:18:38Z")

</div>

Hi,  
I am want to us the switch state of a shelly relay in a grafana time series. The status is coming in as "on" or "off". I would like to convert to a number (int/float whatever) so that Grafana can process it, but I get an error in Node-Red. I have the following setup:

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

And tried this in function:

```auto
if (msg.payload = "off") {
    msg.payload = 0
};
if (msg.payload = "on") {
    msg.payload = 1
};
return msg;

```

-\> I received following output in Node-Red including an error messages:

29.8.2022, 18:11:46[node: debug 5]relay 0 : msg.payload : string[2]  
"on"

29.8.2022, 18:11:46[node: debug 4]relay 0 : msg.payload : number  
1

29.8.2022, 18:11:46[node: Shelly 1 Europiccola]  
msg : error  
"Error: A 400 Bad Request error occurred: {"error":"partial write: field type conflict: input field "value" on measurement "europiccola\_ext\_relay" is type float, already exists as type string dropped=1"}↵"

Any idea?

---

<div class="post-metadata">

**Author:** ![dynamicdave](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/dynamicdave/32/96_2.png) [@dynamicdave](https://discourse.nodered.org/u/dynamicdave)\
**Post date:** [29 August 2022 16:24 UTC](https://discourse.nodered.org/t/convert-status-on-off-to-0-1/67075/2 "2022-08-29T16:24:45Z")

</div>

> [@lessi](#):
>
> ```auto
> if (msg.payload = "off") {
> msg.payload = 0
> };
> if (msg.payload = "on") {
> msg.payload = 1
> };
> return msg;
> 
> ```

You are performing an assignment on line-1 and line-4, try changing it to a test for equality like this...

```auto
if (msg.payload == "off") {
    msg.payload = 0
}
if (msg.payload == "on") {
    msg.payload = 1
}
return msg;

```

The semicolons aren't needed on line-3 and line-6

If that's all you want to do, you could shorten the code to this...

```auto
if (msg.payload == "off") msg.payload = 0

if (msg.payload == "on") msg.payload = 1

return msg;

```

If you wanted to only react to incoming "on" or "off" (and ignore everything else), you could do this...

```auto
if (msg.payload == "off") {
    msg.payload = 0;
    return msg;
}
else if (msg.payload == "on") {
    msg.payload = 1;
    return msg;
}
return null;

```

---

<div class="post-metadata">

**Author:** ![Sean-McG](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/sean-mcg/32/54677_2.png) [@Sean-McG](https://discourse.nodered.org/u/Sean-McG)\
**Post date:** [29 August 2022 16:33 UTC](https://discourse.nodered.org/t/convert-status-on-off-to-0-1/67075/3 "2022-08-29T16:33:37Z")

</div>

> [@lessi](#):
>
> "Error: A 400 Bad Request error occurred: {"error":"partial write: field type conflict: input field "value" on measurement "europiccola\_ext\_relay" is type float, already exists as type string dropped=1"}↵"

Your database already has some entries which are string eg on / off, so you cannot now save numbers to that.

You could drop the measurement and then recreate.

---

<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:** [29 August 2022 16:34 UTC](https://discourse.nodered.org/t/convert-status-on-off-to-0-1/67075/4 "2022-08-29T16:34:19Z")

</div>

Hallo @lessi, Is this a La Pavoni Europiccola / Node-red project?

My vintage europiccola has it's own Node-red dashboard too.

---

<div class="post-metadata">

**Author:** ![lessi](https://avatars.discourse-cdn.com/v4/letter/l/c37758/32.png) [@lessi](https://discourse.nodered.org/u/lessi)\
**Post date:** [29 August 2022 19:19 UTC](https://discourse.nodered.org/t/convert-status-on-off-to-0-1/67075/5 "2022-08-29T19:19:13Z")

</div>

How can I do that?

---

<div class="post-metadata">

**Author:** ![lessi](https://avatars.discourse-cdn.com/v4/letter/l/c37758/32.png) [@lessi](https://discourse.nodered.org/u/lessi)\
**Post date:** [29 August 2022 19:20 UTC](https://discourse.nodered.org/t/convert-status-on-off-to-0-1/67075/6 "2022-08-29T19:20:40Z")

</div>

Sorry, my code was pretty bad. I rushed it. But anyway it does not fix the node-red error

---

<div class="post-metadata">

**Author:** ![lessi](https://avatars.discourse-cdn.com/v4/letter/l/c37758/32.png) [@lessi](https://discourse.nodered.org/u/lessi)\
**Post date:** [29 August 2022 19:22 UTC](https://discourse.nodered.org/t/convert-status-on-off-to-0-1/67075/7 "2022-08-29T19:22:21Z")

</div>

Yes, it is. I implemented a two-point temperature controller with a shelly (Boiler temperature and relay switching). Doesn't work too good though. What are you measuring?

---

<div class="post-metadata">

**Author:** ![lessi](https://avatars.discourse-cdn.com/v4/letter/l/c37758/32.png) [@lessi](https://discourse.nodered.org/u/lessi)\
**Post date:** [29 August 2022 19:43 UTC](https://discourse.nodered.org/t/convert-status-on-off-to-0-1/67075/8 "2022-08-29T19:43:54Z")

</div>

I tried dropping it, but it keeps showing up:

```auto
root@18d5af1764d:/app# influx
Connected to http://localhost:8086 version 1.8.10
InfluxDB shell version: 1.8.10
> show databases
name: databases
name
----
raspberry
_internal
shelly_database
> use shelly_database
Using database shelly_database
> show measurements
name: measurements
name
----
europiccola_ext_relay
europiccola_ext_temperatur_0
europiccola_ext_temperatur_boiler
europiccola_ext_temperatur_bruehgruppe
europiccola_ext_temperatur_frei
europiccola_ext_temperatur_relay
phase_0_power
phase_1_power
phase_2_power
> drop measurement europiccola_ext_relay
> drop measurement europiccola_temperature_0
> show measurements
name: measurements
name
----
europiccola_ext_relay
europiccola_ext_temperatur_0
europiccola_ext_temperatur_boiler
europiccola_ext_temperatur_bruehgruppe
europiccola_ext_temperatur_frei
europiccola_ext_temperatur_relay
phase_0_power
phase_1_power
phase_2_power

```

---

<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:** [29 August 2022 19:52 UTC](https://discourse.nodered.org/t/convert-status-on-off-to-0-1/67075/9 "2022-08-29T19:52:34Z")

</div>

Presumably something is adding data to them as soon as you drop them.

What do you see if you  
`select * from europiccola_temperature_0`

---

<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:** [29 August 2022 19:55 UTC](https://discourse.nodered.org/t/convert-status-on-off-to-0-1/67075/10 "2022-08-29T19:55:13Z")

</div>

> [@lessi](#):
>
> ```auto
> > drop measurement europiccola_temperature_0
> > show measurements
> ...
> europiccola_ext_temperatur_0
> 
> ```

It may help if you spell it correctly. Missing `ext` and `e` on the end

---

<div class="post-metadata">

**Author:** ![lessi](https://avatars.discourse-cdn.com/v4/letter/l/c37758/32.png) [@lessi](https://discourse.nodered.org/u/lessi)\
**Post date:** [29 August 2022 20:07 UTC](https://discourse.nodered.org/t/convert-status-on-off-to-0-1/67075/11 "2022-08-29T20:07:42Z")

</div>

That was the reason! Everything works now! Thx

---

<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:** [29 August 2022 20:37 UTC](https://discourse.nodered.org/t/convert-status-on-off-to-0-1/67075/12 "2022-08-29T20:37:25Z")

</div>

My La Pavoni is plugged into a smart plug with power monitoring.  
I can turn it on from the Node-red dashboard and it turns off again after 30 minutes.  
The power consumption data (from switch-on to the pressurestat cutting off the power) is used to estimate the current boiler fill level; it refuses to turn on if the estimate is too low.

 ![Untitled 2](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/b/3/b336a32e0338bf89d3e35940b7e40f781da45082.jpeg)

I did experiment with an IR temperature sensor to plot the boiler temperature too but it wasn't reliable because of the shiny chrome.

I am currently tweeking in Node-red so that in cold weather it uses the last of the cheaper overnight electricity to warm the boiler.

---

<div class="post-metadata">

**Author:** ![lessi](https://avatars.discourse-cdn.com/v4/letter/l/c37758/32.png) [@lessi](https://discourse.nodered.org/u/lessi)\
**Post date:** [30 August 2022 20:30 UTC](https://discourse.nodered.org/t/convert-status-on-off-to-0-1/67075/13 "2022-08-30T20:30:01Z")

</div>

I didn't know that a dashboard can be create in Node-red. I am currently using grafana to display all data. Even though I am not sure whether I could implement a button there.  
I am not (yet) interested in the power consumption of the Europiccola. Currently I am more focused on the correct temperature for the perfect capuccino. I am using a shelly 1 and the temperature add on. Unfortunately the sensors are little too big and as I do not want to drill into the machine, the measurements can only be a rough guide.

---

<div class="post-metadata">

**Author:** ![bakman2](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/bakman2/32/6207_2.png) [@bakman2](https://discourse.nodered.org/u/bakman2)\
**Post date:** [31 August 2022 05:45 UTC](https://discourse.nodered.org/t/convert-status-on-off-to-0-1/67075/14 "2022-08-31T05:45:39Z")

</div>

> I didn't know that a dashboard can be create in Node-red.

You can install the node-red-dashboard node that will open up a whole world of possibilities (and sometimes complexities)

---

<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:** [30 October 2022 05:46 UTC](https://discourse.nodered.org/t/convert-status-on-off-to-0-1/67075/15 "2022-10-30T05:46:09Z")

</div>

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