Sofar G3 + chint DTSU666 - odczyt danych przez logger ModbusTCP

Tak też zrobiłem, porobiłem sensory, były troszeczkę inaczej niż u Ciebie, ale wszystko się pojawiło :slight_smile:, HA napisał mi że muszę poczekać około 2h żeby statystyki się pojawily, więc wszystko zostawiłem. Sprawdzałem też coś na twoim Flow w którym brakowało jednego Noda, Flow był wylaczony, ale okazało się że node red się przez to zatrzymał i statystyki się nie porobiły. Więc muszę jeszcze poczekać żeby sprawdzić czy wszystko ok.

–edit–
Wszystko ładnie się zaczytuje do HA :slight_smile:
Dane w HA mam od dzisiaj, jest może jakiś sposób żeby zaczytać dane historyczne, które mam w influxdb?

@RobinI30 Czym mierzysz “Moc promieniowania”?

Sensor ze stacji pogodowej.

Czy da się w Node-Red zapamiętać ostatnią wysłaną wartość z falownika jakiegoś parametru i później ją wysłać jeszcze raz o określonej godzinie?

Można …
https://nodered.org/docs/user-guide/writing-functions
rozdział “Przechowywanie danych” jeśli zrozumiesz mechanizm to można to robić również np. nodem change.

Dzięki, rzeczywiście prosta sprawa :slight_smile:

Ale dzisiaj pojawił się problem przestała mi działać funkcja F_Solar_Out
var prev = flow.get(‘Solar_Out’) || -1;

if (prev == -1) {

flow.set('Solar_Out', msg.payload);

return null;

}

var pom = parseFloat(msg.payload);

var prod = parseFloat(msg.payload) - parseFloat(prev);

// zakładam że falownik o mocy 10kW nie może wyprodukować w ciągu 1 min

// więcej niż 170 Wh i ten pomiar pomijam

// i nowy pomiar musi być >= do poprzedniego

if ((pom < prev) || (prod > 2.0) || (prod == 0)){

msg.prod = prod;    //na potrzeby debug

msg.prev = prev;    //na potrzeby debug

msg.pom = pom;    //na potrzeby debug  

msg.payload = prev;

return msg; // pomiar jest prawdopodobni błędni i będzie odrzucony

}

flow.set(‘Solar_Out’, msg.payload);

node.status({ fill: “green”, shape: “ring”, text: 'prev: ’ + prev + ’ pom: ’ + pom+ ’ prod: '+prod });

return msg;


dostaje zamiast wartości dzisiejszej produkcji (debug59) timestamp (debug60)
i nie bardzo wiem o co chodzi, przejrzałem wszystko, na wejściu funkcji jest to co trzeba a na wyjściu już nie :frowning:

Debug60 pokaż jako kompletny obiekt - jakie są wartości msg.prod , msg.prev, msg.pom?
Kod wklejaj jako </>

17.01.2023, 11:08:09node: msg.prod
SolarProduction_Today : msg.prod : number
-1673935766614.46
17.01.2023, 11:08:09node: msg.prev
SolarProduction_Today : msg.prev : number
1673935766617
17.01.2023, 11:08:09node: msg.pom
SolarProduction_Today : msg.pom : number
2.54
17.01.2023, 11:08:29node: msg.prod
SolarProduction_Today : msg.prod : number
-1673935766614.45
17.01.2023, 11:08:29node: msg.prev
SolarProduction_Today : msg.prev : number
1673935766617
17.01.2023, 11:08:29node: msg.pom
SolarProduction_Today : msg.pom : number
2.5500000000000003

hmmm skąd się wziął w wartości prev timestamp?

Musisz usunąć zmienną ‘Solar_Out’, powieważ przetrzymuje jakieś głupoty
del
Nie ustawiasz warunków początkowych dodaj
flows (42).json (481 bajtów)

Usunąłem zmienną solar_out dodałem ten flow co mi dałeś na wejściu funkcji, uruchomiłem go i dalej ładuje tam timestamp.

-edit-
jeszcze raz usunąłem solar_out i zadziałało :slight_smile:
jak zabezpieczyć tą funkcję żeby się coś takiego nie zdarzyło w przyszłości?

pomogło na chwilę, znowu w prev mam timestamp

Nie bardzo to widzę? - miałeś tylko te dwa nody dodać solo.

Zasadniczo ta funkcją została dopisana z powodu pików w odczytach produkcji po wifi.
Używasz modbus, więc ją w ogóle pomiń i obserwuj historię odczytów - później się będziemy marwić

aaaa, ok

ok, tak zrobiłem

@RobinI30 Dołożyłem jeszcze jeden licznik do monitoringu zużycia energii przez grzałki CWU i po tej operacji elfin wiesza się co jakiś czas i w node-red dostaję dużo błędów Modbus flex read time out. Czy coś trzeba pozmieniać w ustawieniach elfina żeby to pracowało stabilniej przy 3 urządzeniach slave?
Co do zwiech elfina to są one dość dziwne, bo nie czyta modbus’a, nie można się do niego zalogować, ale można pingować, więc czasem mija kilka godziny zanim się zorientuje że jest coś nie tak. Dzisiaj się powiesił tak że czytał modbus liczników ale falownika już nie.

Te wszystkie urządzenie nadzoruje jeden proces na raz, czy rozbiłeś to na różne?
Jaki masz ustawiony MaxAccept w protocoll setings

MaxAccept jest ustawiony na 3

Powinno wystarczyć.
W statusie powinien być wykaz aktualnie podłączonych IP Klientów - powinien być tylko jeden.
Jeśli jest więcej tnz. ,że źle utworzyłeś proces. Najogólniej - każda sesja odczytu wymaga nienakładającego okna czasowego, jeśli zdarzy się że będziesz odczytywał w tym samem czasie dwa slave to się to posypie.
SlaveID oczywiście różne dla urządzeń?

Niestety nie jest jeden, są dwa.

czyli trzeba użyć opóźnienia między odczytem każdego slave, jakie minimalne opóźnienie powinno być?

Tak dla każdego z urządzeń jest inne id

Wiec masz źle zrobione odczyty… wprowadzenie timeout-ów nie wiele zmieni jak nie zapewnisz, że będzie używany tylko jeden master do odczytów.

Nie wiem jak to masz rozwiązane, więc nie wiem co radzić

do każdego gettera ma być ten sam serwer czy 3 różne?

Ma być jeden getter!!! … bo inaczej to każdy robi swoje w dowolnym momencie, nie zważając na stan drugiego.

no to wszystko jasne

Otrzymane odpowiedzi będziesz dodatkowo rozróżniał po unitid

MID