Ajuda com sensores MQTT e Node Red

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!

Podes usar um sensor template para cada valor, algo deste género:

sensor:
  - platform: template
    sensors:
      solar_angle:
        friendly_name: "Sun Angle"
        unit_of_measurement: '°'
        value_template: "{{ '%+.1f'|format(state_attr('sun.sun', 'elevation')) }}"

Neste exemplo o valorelevation é retirado dos atributos de sun.sun para um novo sensor chamado solar_angle.

@j_assuncao obrigado, inicialmente tentei com template mas nao estava certo de como fazer o template para este caso em concreto com o sensor mqtt e tendo 3 atributos diferentes .

De qualquer forma e tendo em conta que tenho cerca de 12 tomadas talvez fosse mais eficiente enviar o atributo directamente como sensor através do Node Red ?

De momento tenho value_json.attributes | tojson no function node mas o ideal seria conseguir enviar cada um dos atributos separadamente (value_json.power, value_json.voltage etc) para cada dps do index (que nao sei como fazer mas que à partida nao é nada de muito complicado para quem souber js / json) .

A eficiência é relativa… Com um tópico por tomada tens 12 informações a sair do NR e 36 sensor templates no HA (48 “mensagens”), com três tópicos por cada tomada tens 36 informações a sair do NR e 36 sensor templates no HA (72 “mensagens”). A matemática não engana…

Estava a pensar em ter tudo num único function node para poupar o trabalho de criar 1 template separado para cada tomada :slight_smile:

Obrigado pela ajuda, entretanto descobri isto que me vai poupar uma enorme dor de cabeça :

Sempre sao menos 36 templates !

Espera lá, mas onde tens instalado o NR e que tipo de HA tens? Hassio, Raspassio…?

Tenho Ubuntassio a correr no RPI3 e o Node Red a correr numa Beelink GT1 com Amlogic . As coisas mais pesadas estou a correr todas na Beelink.

O Hassio tem um addon para Node-Red e não é pesado, corri tudo num Rpi 3B+ durante bastante tempo.

Sim eu sei, estava a correr o addon mas parecendo que nao eram cerca de 15% a 18% da memória RAM que ia ao ar e fazia-me falta.

Está tudo muito mais fluído agora que passei para a box android :slight_smile:

1 Like

Isso precisava de um NUCmox! :grin:

1 Like

Copyright © 2017-2020. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade