Dodawanie wartości w Node-red

Jestem zielony, ale chciałbym dodać wartości z 3 sensorów Shelly PM3 w Node-Red
sensor.faza_3_energy_returned
sensor.faza_2_energy_returned
sensor.faza_1_energy_returned
Chciałbym nadać odpowiednią jednostkę oraz wysłać do MQTT (to akurat umiem ),
Mam takie rozwiązanie w HA sensor_templates lecz wykres historii jest nieczytelny
Kilka razy dziennie wykres spada do zera
shelly_wyslana:

    shelly_wyslana:
      friendly_name: "Energia wysłana"
      device_class: energy
      unit_of_measurement: "kWh"
      value_template: >-
        {{ (states('sensor.faza_1_energy_returned')|float(0) +states('sensor.faza_2_energy_returned')|float(0)+states('ssensor.faza_3_energy_returned')|float(0)) |round (2) }}

Nie bardzo potrafię to wykonać, czy ma ktoś z Was jakiś przykładowy Flow?
Z góry dziękuję

Hej, tak to jest u mnie.

    current_power_production_l1:
      value_template: '{{ ((states.sensor.envoy_1xxx_inverter_1yyy.state | float) + 
                           (states.sensor.envoy_1xxx_inverter_1yyy.state | float) + 
                           (states.sensor.envoy_1xxx_inverter_1yyy.state | float)) | round(0) }}'
      friendly_name: 'Current Power Production L1'
      unit_of_measurement: 'W'
      unique_id: current_power_production_l1```


A takie coś sprawdź u siebie

shelly_wyslana:
  friendly_name: "Energia wysłana"
  device_class: energy
  unit_of_measurement: "kWh"
  value_template: '{{ ((states.sensor.faza_1_energy_returned | float) +
                      (states.sensor.faza_2_energy_returned | float) + 
                      (states.sensor.faza_3_energy_returned | float)) | round (2) }}'      ```

Też mam problem z podłączeniem się shelly3em, dodam że już raz reklamowalem bo wifi całkiem padło.Teraz się rozpaczą co jakiś czas na chwilę.Sygnal wifi silny 4m od routera.

Dlatego szukam rozwiązania w Node-Red tak żeby pokazywał wartość poprzednią a nie float(0)
ale na razie szukam
:slight_smile:

Temat zer był poruszany na forum wielokrotnie np.
Panel Energia - wskazania produkcji PV - #55 przez _kamil”, było też w temacie licznik Tauron.
Trzeba zastosować warunki if albo available_template.

Funkcja porównuje wartość obecną z poprzednią.
Wartość mierzona w msg.payload.
Jeśli wartość bezwzględna porównania jest większa od 2 to zakładamy, że coś jest nie tak z pomiarem (wartość należy dobrać dla własnych potrzeb).
Zwraca w payload “prawidłową” wartość poprzednią lub prawidłową obecną.
Sprawdzi się to w przypadku pomiarów energii, które zawsze rosną i ich max przyrost między pomiarami łatwo oszacować

var last = flow.get('lastVal') || 0;
if (last == 0){
    last = msg.payload;
    flow.set('lastVal',msg.payload);
    return null;
}

var dif =Math.abs(msg.payload - last);
#2 to granica o ile może znienić wartość pomiędzy pomiarami
if (dif < 2) {                   
  flow.set('lastVal',msg.payload)
  return msg;
}
msg.payload = last;
return msg;

Wartość pojawi się po drugim odczycie.

U mnie to raczej problem z sieciowy coś z Wi-Fi bo giną pakiety i brak możliwości zalogowania się na licznik po adresie ip.

Sytuacja wielce prawdopodobna i “integracja” powinna to przewidzieć.

a nie robiłeś @rakon ostatnio aktualizacji shelly ?
brzydki wykres to jedno :slight_smile: a brak możliwości zalogowania po lan to co innego
Uwaga na soft shelly version: 20220209-094824/v1.11.8-g8c7bb8d po nim na jednym z liczników miałem ten sam problem. na innych w tej samej sieci nie.

Proszę o pomoc mam ShellyEM3, niestety licznik ma delikatny odchył.
W templates wykonałem sensor i obliczenia są prawidłowe,

   # Energia pobrana z zakładu energetycznego PGE
    pobrana_pge:
      device_class: energy
      friendly_name: "Energia pobrana z PGE"
      value_template: >-
        {{ ((states('sensor.faza_1_energy')|float + states('sensor.faza_2_energy')|float + states('sensor.faza_3_energy')|float) /1.029797961990057) |float(0)|round(2) }}
      unit_of_measurement: "kWh"

Niestety każdorazowe zawirowanie z WiFi zniekształca wykres histri (głupata ale denerwuje )
W node-red zrobiłem flow, ale nie ogarniam Twojej podpowiedzi.

var last = flow.get('lastVal') || 0;
if (last == 0){
    last = msg.payload;
    flow.set('lastVal',msg.payloada);
    return null;
}
var dif =Math.abs(msg.payload - last);
if (dif < 0.10) {                   
  flow.set('lastVal',msg.payload)
  return msg;
}
msg.payload = last;
return msg;

Załączam flow.json Proszę zobacz jak znajdziesz chwilę co spiep…łem.
Dziękuję

nie załączełeś .json :wink:
Daj jeszcze linka do noda “sumowanie…” poczytam jakdziała

flows dod.json (10,2 KB)

Dzięki …
I taki mam zryty łeb :slight_smile:

Ten nod "sum " to jakiś dziwny wynalazek

Nie wiadomo jak to ustawić i po sumowaniu trzeba resetować.
Zrób to po ludzku… “join” i funkcja sumująca 3 wartości po topic.
Dodatkowo, nody “event:state” nie zapewnią “jednoczesności” danych z 3 faz, lepiej zastosować “current:state”

flows dodawanie.json (683 bajty)
Spójrz proszę czy warunek stabilizacji wykresu zadziała?

Nic nie przesłałeś.
W poprzednie wersji jest literówka
flow.set(‘lastVal’,msg.payloada);

flows (1).json (10,2 KB)

to co teraz przesyłam działa i wyniki są ok
natomiast jak dodam

var last = flow.get('lastVal') || 0;
if (last == 0){
    last = msg.payload;
    flow.set('lastVal',msg.payloada);
    return null;
}
var dif =Math.abs(msg.payload - last);
if (dif < 1) {                   
  flow.set('lastVal',msg.payload)
  return msg;
}
msg.payload = last;
return msg;

To niestety brak wysyłu do Mqtt

payload, a nie payloada dlatego zawsze wykonuje się return null;