I'm fairly new to NR
I have an MQTT input in the form:
object
endpoint: object
serial_number: "a4c138101b95ec05"
payload: object
temperature: object
temperature: 18.209999
I've created a number 'helper' in Home Assistant. I think it's just a float.
If I try to sent that payload to my helper I get an error:
Call-service error. required key not provided @ data['value']
I'm guessing I just need to parse the object and extract the value and then change it to say data: value
What nodes would you guys use to extract that number?
Edited to add: The formatting I put in disappeared on post.
Yes, unfortunately that makes it impossible to give you a straight answer. To post code or data in the forum you have to use the </> button. It wraps the code between two lines each containing 3 back ticks.
The debug node has a "Copy path" button at the right of your data. Use a change node to move this path (msg.payload.temperature.temperature, or whatever) to msg.payload.
What is a "Number helper?"
Home assistant does seem weird the phrase "call-service" gives no hint what it does
Yes the documentation for helpers is quite poor. I use “toggle” helpers and they are just booleans that can easily be displayed in the dashboard. This is my first experiment with numbers. I’m not even sure it’s a float and not an integer. There are more types of “helper” than basic data types so their must be some overlap. I think they maybe display differently but I haven’t experimented.
Any idea what this means:
Call-service error. required key not provided @ data['value']
With a change node I now have the number in msg.payload. Thanks to your tip I found it was at "payload.payload.temperature.temperature". Never would have guessed there were 2 payloads but still get an error. Have tried moving it to msg.payload.data
Maybe it is a string that looks like a float and I need to change it?
Assuming your MQTT input is in a JSON format and the payload structure looks like:
{
"endpoint": {
"serial_number": "a4c138101b95ec05"
},
"payload": {
"temperature": 18.209999
}
}
You can use the following nodes in Node-RED:
Use an MQTT input node to receive the MQTT messages.
Add a JSON node to parse the incoming payload. Set the "Property" field to payload if the MQTT payload is stored in the payload property.
Add a Change node to extract the temperature value. Set it up as follows:
Set msg.payload to msg.payload.temperature.
Use a Home Assistant Out node to send the extracted value to your number helper. Set the "Action" to "Call Service," select your Home Assistant service, and configure the "Service Data" to send the value to your number helper.
Thanks, I actually have it figure out, but the post of the solution and my reply thanking them has disappeared so it looks like I am still stuck.
Turned out I had to format it with a “‘value’:msg.payload” in the last node after shuffling the data around with a change node because the number was in msg.payload.payload.temperature.temperature. Essentially it couldn’t see the number where it was and needed it to be called value rather than temperature
No I don’t build the message. It’s an MQTT in node and there has been no coding at any point. And the key was just changing the numbers name to “value” rather than just sending a number in to that node. That was the only thing needed to make it work.
I don't understand your explanantion "it needed to be called value rather than temperature" but certainly msg.payload.payload.temperature.temperature is a bit unusual.