prints the number with 3 digits behind it, but it doesn't send the number to the emoncms
for example number1 = 2000
number 2 = 123
then:
number3 = (number1 + (number2/1000) + 0.001);
should produce 2000.124
it does print this 1 time with Serial.print
but doesn't send anything to the emoncms, and the next time it Serial.prints the number when there was a pulse count, it stil is 2000.124 instead of 2000.125 and 2000.126 etc.. it doesn't count up.
it doesn't send the data to emoncms, probably because it is declared with a floating point, wich is apparently not correct
it reads 2000.123 from the feed, and the next time the number is still 200.123 what it reads from the feed, it doesn't update the data...
This is almost definitely a problem with mismatched data types.
One thing you'll find out quickly with FP numbers is that they aren't very accurate. The storage technique that holds that number in memory is susceptible to errors, which is why you will get beaten severely by any employer or instructor that catches you using floating point number to calculate money. So that might be what's going wrong when you add 0.001 to a value. It might not always end up exactly what you expect it to be. There's nothing you can do about that.
Next, when you feed this value to the print routines, function overloading will examine the data type you give it and behave accordingly. This is a C++ thing, and it's really convenient, but it can lead you to the false assumption that it always works like that. It doesn't. So, when you pass a FP number to another function, it may (probably will) get truncated to an integer (goodbye to the decimal point and everything after it) unless the function specifically deals with FP input.
So how to get around this? One, you can work in what's called "fixed point decimal", which basically amounts us to scaling up your unit of measure such that the 1s place in an integer value equates to some other place of significance other than one. One of the most common examples is dealing with money in cents. One dollar would be 100 cents in fixed-point decimal math. Ten dollars would be 1000 cents. So on and so forth. So, to have a number with 3 significant digits beyond the decimal, just multiply all your numbers by 1000 and then just add them together like any other integer. Beware though, you'll be closer to the maximum value that can be held in small integers, so you might want to stick to uint32_t or unsigned long as a data type. (And of course, any function you use has to be built to handle these large types as well. No free lunch.)
Forgot to point out that your status() function takes a device name (char array, aka string) and a BYTE value (otherwise known as char, or uint8_t, or an 8-bit unsigned integer). That means, when you pass a floating point value to it, it will not only be truncated to an integer (2000.123 would end up as 2000), but you're limited to a number that can be stored in 8 bits, which tops out at 255. When you truncate 2000.123 to an 8-bit integer, you get 208 (the lower 8 bits of the 16-bit integer encoding for 2000, which is binary 000 0111 1101 0000.)