In that case I suggest also putting a value in the timeout field in the Join node. Maybe 2 seconds. Then if one of the values does not arrive, or maybe you start node-red in the middle of the sequence of three messages so one gets lost, then it will send them when the 2 seconds has elapsed. Then in the function node you can check that all three are there and decide what to do if one or more are missing.
Im doing the same from a shelly EM3 ussing the shelly node and just pushing it through the function block and in to InfluxDB. It gives you every thing you need In Json format with time stamp too.
Function =
msg.payload =
{
"Power1":msg.payload.emeters[0].power,
"Voltage1":msg.payload.emeters[0].voltage,
"Total_Power1":msg.payload.emeters[0].total,
"Current1":msg.payload.emeters[0].current,
"PF1":msg.payload.emeters[0].pf,
"Power2":msg.payload.emeters[1].power,
"Voltage2":msg.payload.emeters[1].voltage,
"Total_Power2":msg.payload.emeters[1].total,
"Current2":msg.payload.emeters[1].current,
"PF2":msg.payload.emeters[1].pf,
"Power3":msg.payload.emeters[2].power,
"Voltage3":msg.payload.emeters[2].voltage,
"Total_Power3":msg.payload.emeters[2].total,
"Current3":msg.payload.emeters[2].current,
"PF3":msg.payload.emeters[2].pf,
"Total_Active_Power":msg.status.total_power,
"Total_Active_Current":msg.payload.emeters[0].current+msg.payload.emeters[1].current+msg.payload.emeters[2].current,
"Total_Power":msg.payload.emeters[0].total+msg.payload.emeters[1].total+msg.payload.emeters[2].total,
}
msg.topic = "Em3 demo";
return msg;
I will monitor it and consider that solution. Currently I was only testing on one phase. Now I have to wait for an electrician to install it to all three phases in the house electricity box