# Function not working

**URL:** <https://discourse.nodered.org/t/function-not-working/22473>\
**Category:** General\
**Created:** [2 March 2020 07:34 UTC](https://discourse.nodered.org/t/function-not-working/22473 "2020-03-02T07:34:52Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![debouttek](https://avatars.discourse-cdn.com/v4/letter/d/848f3c/32.png) [@debouttek](https://discourse.nodered.org/u/debouttek)\
**Post date:** [2 March 2020 07:34 UTC](https://discourse.nodered.org/t/function-not-working/22473/1 "2020-03-02T07:34:52Z")

</div>

Why is my function not working? If I input 10 lines it works.

```auto
[{"id":"bc74df63.d1433","type":"function","z":"698281a9.1e1108","name":"Tabel","func":"m = msg.payload;\nif(m === 0 ){\n msg.payload=0;\n} \nif(m == 1 ){\n msg.payload=4;\n}\nif(m == 2 ){\n msg.payload=12;\n}\nif(m == 3 ){\n msg.payload=22;\n}\nif(m == 4 ){\n msg.payload=33;\n}\nif(m == 5 ){\n msg.payload=46;\n}\nif(m == 6 ){\n msg.payload=61;\n}\nif(m == 7 ){\n msg.payload=77;\n}\nif(m == 8 ){\n msg.payload=93;\n}\nif(m == 9 ){\n msg.payload=111;\n}\nif(m == 10 ){\n msg.payload=130;\n}\nif(m == 11 ){\n msg.payload=149;\n}\nif(m == 12 ){\n msg.payload=170;\n}\nif(m == 13 ){\n msg.payload=191;\n}\nif(m == 14 ){\n msg.payload=213;\n}\nif(m == 15 ){\n msg.payload=236;\n}\nif(m == 16 ){\n msg.payload=259;\n}\nif(m == 17 ){\n msg.payload=283;\n}\nif(m == 18 ){\n msg.payload=307;\n}\nif(m == 19 ){\n msg.payload=332;\n}\nif(m == 20 ){\n msg.payload=358;\n}\nif(m == 21 ){\n msg.payload=384;\n}\nif(m == 22 ){\n msg.payload=411;\n}\nif(m == 23 ){\n msg.payload=438;\n}\nif(m == 24 ){\n msg.payload=466;\n}\nif(m == 25 ){\n msg.payload=494;\n}\nif(m == 26 ){\n msg.payload=522;\n}\nif(m == 27 ){\n msg.payload=551;\n}\nif(m == 28 ){\n msg.payload=580;\n}\nif(m == 29 ){\n msg.payload=610;\n}\nif(m == 30 ){\n msg.payload=640;\n}\nif(m == 31 ){\n msg.payload=670;\n}\nif(m == 32 ){\n msg.payload=701;\n}\nif(m == 33 ){\n msg.payload=732;\n}\nif(m == 34 ){\n msg.payload=764;\n}\nif(m == 35 ){\n msg.payload=795;\n}\nif(m == 36 ){\n msg.payload=827;\n}\nif(m == 37 ){\n msg.payload=859;\n}\nif(m == 38 ){\n msg.payload=892;\n}\nif(m == 39 ){\n msg.payload=924;\n}\nif(m == 40 ){\n msg.payload=957;\n}\nif(m == 41 ){\n msg.payload=990;\n}\nif(m == 42 ){\n msg.payload=1024;\n}\nif(m == 43 ){\n msg.payload=1057;\n}\nif(m == 44 ){\n msg.payload=1091;\n}\nif(m == 45 ){\n msg.payload=1125;\n}\nif(m == 46 ){\n msg.payload=1159;\n}\nif(m == 47 ){\n msg.payload=1193;\n}\nif(m == 48 ){\n msg.payload=1228;\n}\nif(m == 49 ){\n msg.payload=1262;\n}\nif(m == 50 ){\n msg.payload=1297;\n} \nif(m == 51 ){\n msg.payload=1332;\n}\nif(m == 52 ){\n msg.payload=1367;\n}\nif(m == 53 ){\n msg.payload=1402;\n}\nif(m == 54 ){\n msg.payload=1437;\n}\nif(m == 55 ){\n msg.payload=1472;\n}\nif(m == 56 ){\n msg.payload=1507;\n}\nif(m == 57 ){\n msg.payload=1543;\n}\nif(m == 58 ){\n msg.payload=1578;\n}\nif(m == 59 ){\n msg.payload=1614;\n}\nif(m == 60 ){\n msg.payload=1649;\n} \nif(m == 61 ){\n msg.payload=1685;\n}\nif(m == 62 ){\n msg.payload=1720;\n}\nif(m == 63 ){\n msg.payload=1756;\n}\nif(m == 64 ){\n msg.payload=1791;\n}\nif(m == 65 ){\n msg.payload=1827;\n}\nif(m == 66 ){\n msg.payload=1862;\n}\nif(m == 67 ){\n msg.payload=1898;\n}\nif(m == 68 ){\n msg.payload=1933;\n}\nif(m == 69 ){\n msg.payload=1969;\n}\nif(m == 70 ){\n msg.payload=2004;\n}\nif(m == 71 ){\n msg.payload=2040;\n}\nif(m == 72 ){\n msg.payload=2075;\n}\nif(m == 73 ){\n msg.payload=2110;\n}\nif(m == 74 ){\n msg.payload=2145;\n}\nif(m == 75 ){\n msg.payload=2180;\n}\nif(m == 76 ){\n msg.payload=2215;\n}\nif(m == 77 ){\n msg.payload=2250;\n}\nif(m == 78 ){\n msg.payload=2285;\n}\nif(m == 79 ){\n msg.payload=2319;\n}\nif(m == 80 ){\n msg.payload=2354;\n}\nelse msg.payload=\"fout\"\nreturn msg;","outputs":1,"noerr":0,"x":1050,"y":100,"wires":[["3f485885.cf3978"]]}]

```

---

<div class="post-metadata">

**Author:** ![knolleary](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/knolleary/32/3_2.png) [@knolleary](https://discourse.nodered.org/u/knolleary)\
**Post date:** [2 March 2020 07:55 UTC](https://discourse.nodered.org/t/function-not-working/22473/2 "2020-03-02T07:55:44Z")

</div>

Whilst sharing the full export is helpful it does mean we have to import it to see your Function node code. Plus consider sharing the code (if it isn't too long...) as well.

You also need to explain what you expect the function to do and what about it isn't working. Other wise we don't know where to start.

---

<div class="post-metadata">

**Author:** ![homeplayer](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/homeplayer/32/12388_2.png) [@homeplayer](https://discourse.nodered.org/u/homeplayer)\
**Post date:** [2 March 2020 12:21 UTC](https://discourse.nodered.org/t/function-not-working/22473/3 "2020-03-02T12:21:16Z")

</div>

m = msg.payload;

msg.payload = "fout";  
the rest of your if statements

or something like this

```auto
m = msg.payload;
if (m > 80) {
    msg.payload = "fout";
    return msg;
}

var data = [0,4,12,22..... and the rest of them];

msg.payload = data[m];

return msg;

```

---

<div class="post-metadata">

**Author:** ![zenofmud](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/zenofmud/32/316_2.png) [@zenofmud](https://discourse.nodered.org/u/zenofmud)\
**Post date:** [2 March 2020 13:23 UTC](https://discourse.nodered.org/t/function-not-working/22473/4 "2020-03-02T13:23:14Z")

</div>

Look at your code. What happens if msg.payload = 4 and what do you expect to happen?

Put a debug on the output of the function node and look at what comes out and ask yourself:

"Why did I get this result?"

then go look at your code again.

---

<div class="post-metadata">

**Author:** ![debouttek](https://avatars.discourse-cdn.com/v4/letter/d/848f3c/32.png) [@debouttek](https://discourse.nodered.org/u/debouttek)\
**Post date:** [2 March 2020 20:26 UTC](https://discourse.nodered.org/t/function-not-working/22473/5 "2020-03-02T20:26:52Z")

</div>

I always love the way you try to help. Not given the solution but let us search the solution! Love it.

I removed the last line  
else msg.payload="fout"  
and now it's working.

---

<div class="post-metadata">

**Author:** ![debouttek](https://avatars.discourse-cdn.com/v4/letter/d/848f3c/32.png) [@debouttek](https://discourse.nodered.org/u/debouttek)\
**Post date:** [2 March 2020 20:33 UTC](https://discourse.nodered.org/t/function-not-working/22473/6 "2020-03-02T20:33:12Z")

</div>

I have a gasoline tank and I measure with a MQTT device the centimeters of gasoline left in the tank.  
From the MQTT device (esp8266) I get the height in centimeters in my node red.  
I know that 1 cm of gasoline is 4 liter, 2 cm is 12 liter, 3cm is 22 liter and so on...  
I would like to display in my dashboard the liters and not the centimeters height.

With the code below I always get "fout"

My function below:

m = msg.payload;  
if(m === 0 ){  
msg.payload=0;  
}  
if(m == 1 ){  
msg.payload=4;  
}  
if(m == 2 ){  
msg.payload=12;  
}  
if(m == 3 ){  
msg.payload=22;  
}  
if(m == 4 ){  
msg.payload=33;  
}  
if(m == 5 ){  
msg.payload=46;  
}  
if(m == 6 ){  
msg.payload=61;  
}  
if(m == 7 ){  
msg.payload=77;  
}  
if(m == 8 ){  
msg.payload=93;  
}  
if(m == 9 ){  
msg.payload=111;  
}  
if(m == 10 ){  
msg.payload=130;  
}  
if(m == 11 ){  
msg.payload=149;  
}  
if(m == 12 ){  
msg.payload=170;  
}  
if(m == 13 ){  
msg.payload=191;  
}  
if(m == 14 ){  
msg.payload=213;  
}  
if(m == 15 ){  
msg.payload=236;  
}  
if(m == 16 ){  
msg.payload=259;  
}  
if(m == 17 ){  
msg.payload=283;  
}  
if(m == 18 ){  
msg.payload=307;  
}  
if(m == 19 ){  
msg.payload=332;  
}  
if(m == 20 ){  
msg.payload=358;  
}  
if(m == 21 ){  
msg.payload=384;  
}  
if(m == 22 ){  
msg.payload=411;  
}  
if(m == 23 ){  
msg.payload=438;  
}  
if(m == 24 ){  
msg.payload=466;  
}  
if(m == 25 ){  
msg.payload=494;  
}  
if(m == 26 ){  
msg.payload=522;  
}  
if(m == 27 ){  
msg.payload=551;  
}  
if(m == 28 ){  
msg.payload=580;  
}  
if(m == 29 ){  
msg.payload=610;  
}  
if(m == 30 ){  
msg.payload=640;  
}  
if(m == 31 ){  
msg.payload=670;  
}  
if(m == 32 ){  
msg.payload=701;  
}  
if(m == 33 ){  
msg.payload=732;  
}  
if(m == 34 ){  
msg.payload=764;  
}  
if(m == 35 ){  
msg.payload=795;  
}  
if(m == 36 ){  
msg.payload=827;  
}  
if(m == 37 ){  
msg.payload=859;  
}  
if(m == 38 ){  
msg.payload=892;  
}  
if(m == 39 ){  
msg.payload=924;  
}  
if(m == 40 ){  
msg.payload=957;  
}  
if(m == 41 ){  
msg.payload=990;  
}  
if(m == 42 ){  
msg.payload=1024;  
}  
if(m == 43 ){  
msg.payload=1057;  
}  
if(m == 44 ){  
msg.payload=1091;  
}  
if(m == 45 ){  
msg.payload=1125;  
}  
if(m == 46 ){  
msg.payload=1159;  
}  
if(m == 47 ){  
msg.payload=1193;  
}  
if(m == 48 ){  
msg.payload=1228;  
}  
if(m == 49 ){  
msg.payload=1262;  
}  
if(m == 50 ){  
msg.payload=1297;  
}  
if(m == 51 ){  
msg.payload=1332;  
}  
if(m == 52 ){  
msg.payload=1367;  
}  
if(m == 53 ){  
msg.payload=1402;  
}  
if(m == 54 ){  
msg.payload=1437;  
}  
if(m == 55 ){  
msg.payload=1472;  
}  
if(m == 56 ){  
msg.payload=1507;  
}  
if(m == 57 ){  
msg.payload=1543;  
}  
if(m == 58 ){  
msg.payload=1578;  
}  
if(m == 59 ){  
msg.payload=1614;  
}  
if(m == 60 ){  
msg.payload=1649;  
}  
if(m == 61 ){  
msg.payload=1685;  
}  
if(m == 62 ){  
msg.payload=1720;  
}  
if(m == 63 ){  
msg.payload=1756;  
}  
if(m == 64 ){  
msg.payload=1791;  
}  
if(m == 65 ){  
msg.payload=1827;  
}  
if(m == 66 ){  
msg.payload=1862;  
}  
if(m == 67 ){  
msg.payload=1898;  
}  
if(m == 68 ){  
msg.payload=1933;  
}  
if(m == 69 ){  
msg.payload=1969;  
}  
if(m == 70 ){  
msg.payload=2004;  
}  
if(m == 71 ){  
msg.payload=2040;  
}  
if(m == 72 ){  
msg.payload=2075;  
}  
if(m == 73 ){  
msg.payload=2110;  
}  
if(m == 74 ){  
msg.payload=2145;  
}  
if(m == 75 ){  
msg.payload=2180;  
}  
if(m == 76 ){  
msg.payload=2215;  
}  
if(m == 77 ){  
msg.payload=2250;  
}  
if(m == 78 ){  
msg.payload=2285;  
}  
if(m == 79 ){  
msg.payload=2319;  
}  
if(m == 80 ){  
msg.payload=2354;  
}

else msg.payload="fout"  
return msg;

---

<div class="post-metadata">

**Author:** ![afelix](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/afelix/32/9743_2.png) [@afelix](https://discourse.nodered.org/u/afelix)\
**Post date:** [2 March 2020 20:45 UTC](https://discourse.nodered.org/t/function-not-working/22473/7 "2020-03-02T20:45:21Z")

</div>

For this situation, take a look at the Javascript `switch`:

> **[switch](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch)**
>
> The switch statement evaluates an expression, matching the expression's value to a case clause, and executes statements associated with that case, as well as statements in cases that follow the matching case.

Also, think carefully about what `if (condition) {...} else {...}` means, and see if you can work out why you always get `fout` returned.

---

<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:** [2 March 2020 20:47 UTC](https://discourse.nodered.org/t/function-not-working/22473/8 "2020-03-02T20:47:24Z")

</div>

or a table lookup with a function node...

```auto
const table = {
    "0" : 0,
    "1" : 4,
    "2" : 12,
    "3" : 22,
    "4" : 33,
    "5" : 46,
    "6" : 61,
    "7" : 77,
    "8" : 93,
    "9" : 111,
};

msg.payload= table[msg.payload];

return msg;

```

---

<div class="post-metadata">

**Author:** ![zenofmud](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/zenofmud/32/316_2.png) [@zenofmud](https://discourse.nodered.org/u/zenofmud)\
**Post date:** [2 March 2020 21:02 UTC](https://discourse.nodered.org/t/function-not-working/22473/9 "2020-03-02T21:02:56Z")

</div>

So what happend if all the if statements are false??  
Start by - after setting m = msg.payload, set msg.payload = "fout" then run your if statements, if any are true it will replace "fout" with a value...

However I like @Andrei idea better - more concise - I would add a slight modificaton and change  
`msg.payload= table[msg.payload]`  
to  
`msg.payload= table[msg.payload]||"fout";`  
so if the lookup fails it will set msg.payloud to "fout"

---

<div class="post-metadata">

**Author:** ![dceejay](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/dceejay/32/38_2.png) [@dceejay](https://discourse.nodered.org/u/dceejay)\
**Post date:** [2 March 2020 21:28 UTC](https://discourse.nodered.org/t/function-not-working/22473/10 "2020-03-02T21:28:29Z")

</div>

... but `table[msg.payload] || "fout";` will also return "fout' when the payload is 0 - so you need to handle that separately.

---

<div class="post-metadata">

**Author:** ![debouttek](https://avatars.discourse-cdn.com/v4/letter/d/848f3c/32.png) [@debouttek](https://discourse.nodered.org/u/debouttek)\
**Post date:** [3 March 2020 17:40 UTC](https://discourse.nodered.org/t/function-not-working/22473/11 "2020-03-03T17:40:33Z")

</div>

> [@zenofmud](#):
>
> msg.payload= table[msg.payload]||"fout";

This works.

---

<div class="post-metadata">

**Author:** ![debouttek](https://avatars.discourse-cdn.com/v4/letter/d/848f3c/32.png) [@debouttek](https://discourse.nodered.org/u/debouttek)\
**Post date:** [3 March 2020 17:40 UTC](https://discourse.nodered.org/t/function-not-working/22473/12 "2020-03-03T17:40:56Z")

</div>

That's no problem. When tank is lower then x liter there is a telegram send to me.

Thanks all

---

<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 March 2020 17:40 UTC](https://discourse.nodered.org/t/function-not-working/22473/13 "2020-03-17T17:40:58Z")

</div>

Closed on 17 March 2020 17:40 UTC

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