Ando em círculos a tentar criar alguns sensores de energia para tensão, potência (watts) e corrente que funcionam através de payloads de MQTT do Node Red para o HA.
Tenho o seguinte function node no Node Red :
const dps = msg.payload.dps;
let state = null;
let power = null;
let voltage = null;
let current = null;
if ("1" in dps) {
state = (dps['1']) ? "ON" : "OFF";
}
msg.payload = {
state: state,
attributes: {power: "0 W",current:"0 mA",voltage:"0 V"}
};
if ("18" in dps) {
msg.payload.attributes.current = (dps['18']).toString() + " mA";
if (dps['18'] > 0) {
msg.payload.state = "ON"
}
}
if ("19" in dps) {
msg.payload.attributes.power = (dps['19']/10).toString() + " W";
if (dps['19'] > 0) {
msg.payload.state = "ON"
}
}
if ("20" in dps) {
msg.payload.attributes.voltage = (dps['20'] /10).toString() + " V";
}
if (msg.payload.state === null) {
delete msg.payload.state;
}
msg.topic = "tuya/" + msg.data.name + "/status"
return msg;
No HA tenho o tópico MQTT da seguinte forma :
- platform: mqtt
state_topic: 'tuya/switch_1/status'
name: switch1 status
value_template: '{{ value_json.attributes | tojson }}'
Isto dá-me o seguinte output do sensor.switch1_status :
{"current": "0 mA", "power": "0 W", "voltage": "235.9 V"}
O meu objectivo é ter sensores separados da seguinte maneira:
sensor.voltage
sensor.power
sensor.current
Qual é a melhor maneira de fazer isso? Devo editar o meu function node para enviar uma payload diferente do sensor para cada parâmetro ou devo converter esses atributos de status em sensores ?
De qualquer maneira, não sei como faze-lo para nenhuma das opções.
Alguém me pode esclarecer e dar um exemplo de como alcançar o que estou a tentar fazer?
Obrigado!