Odczyt danych z falownika Afore

Masz pomysł na funkcjonalność lub koncepcję na rozwój projektu. Opisz wszystko tutaj.
desaint
Posty: 36
Rejestracja: pn maja 27, 2019 9:46 am

wt paź 06, 2020 9:55 am

Tez mam Afore, ma modbusa, po html to jakis status tylko i to nie wiele danych, i trzeba odswiezac co chwile. to nie tak dziala. falownik (firmware) wysyla dane do chumry, gdzies do chinczykow.
Mozna zdebugowac co jest wysylane (jakie dane) i na tej podstwie napisac jakis reader do tego. w konfiguracji mozna tez podac alternatywny serwer, ale nie testowalem tego i nie wiem czy wysyla do 2 czy tylko do jednego...
od biedy mozna przeforwardowac ip chumry chinczykow na jakis swoj ktory bedzie te dae obrabial :D
Awatar użytkownika
klew
Posty: 1293
Rejestracja: czw cze 27, 2019 12:16 pm

wt paź 06, 2020 10:57 am

desaint pisze:
wt paź 06, 2020 9:55 am
Tez mam Afore, ma modbusa, po html to jakis status tylko i to nie wiele danych, i trzeba odswiezac co chwile. to nie tak dziala. falownik (firmware) wysyla dane do chumry, gdzies do chinczykow.
Mozna zdebugowac co jest wysylane (jakie dane) i na tej podstwie napisac jakis reader do tego. w konfiguracji mozna tez podac alternatywny serwer, ale nie testowalem tego i nie wiem czy wysyla do 2 czy tylko do jednego...
od biedy mozna przeforwardowac ip chumry chinczykow na jakis swoj ktory bedzie te dae obrabial :D
Z tego co widziałem to jest tam aktualna produkowana moc oraz całkowita produkcja w kWh. Można powiedzieć, że najbardziej podstawowe dane są dostępne :)

Jeśli masz ochotę i możliwości, aby wystawić dostęp do Twojego falownika na jakimś publiczym adresie ip, abym mógł się podłączyć i spróbować pobrać te dane do Supli, to prześlij mi namiary na priv. artur_n na razie się nie odezwał, więc temat leży i czeka na "dawcę falownika" :)

Nie jestem zbyt dobry w debugowaniu szyfrowanych połączeń ;). Prędzej bym się do tego modbusa dorwał.
Awatar użytkownika
artur_n
Posty: 95
Rejestracja: czw sie 17, 2017 2:24 pm

pt paź 09, 2020 6:03 am

Dawno zaglądałem na forum i przeoczyłem wpis. Dane do falownika poszły na PW.
energetyka@onet.pl
Posty: 3
Rejestracja: sob paź 10, 2020 9:25 pm

sob paź 10, 2020 10:02 pm

Cześć. Jeśli jesteśmy przy falownikach to mam inne pytanie. Mam solar sofar 8kW, i chciałbym zbudować "inteligentny przekaznik". Froniusy maja go w Standardzie( ustawia się zadana moc i gdy ją osiagnie zamyka styki przekaznika). Ja mam trochę inny pomysł. Chciałbym aby przekaznik się zamykał gdy energia będzie oddawana do sieci. Przyklad 1: panele produkują 5kW- potrzeby własne 4kW- przekaznik się zamyka
Przykład 2: panele produkują 5kW-potrzeby własne 7 kW- przekaznik otwarty
Dysponuje licznikiem MEW 01 oraz arduino Leonardo.
Awatar użytkownika
pzygmunt
Posty: 9386
Rejestracja: wt sty 19, 2016 9:26 am
Lokalizacja: Paczków
Kontaktowanie:

sob paź 10, 2020 10:47 pm

Być może skryptami od Wojtka będziesz mógł to osiągnąć
energetyka@onet.pl
Posty: 3
Rejestracja: sob paź 10, 2020 9:25 pm

ndz paź 11, 2020 12:14 pm

pzygmunt pisze:
sob paź 10, 2020 10:47 pm
Być może skryptami od Wojtka będziesz mógł to osiągnąć
A gdzie te skrypty ?
energetyka@onet.pl
Posty: 3
Rejestracja: sob paź 10, 2020 9:25 pm

ndz paź 11, 2020 12:16 pm

pzygmunt pisze:
sob paź 10, 2020 10:47 pm
Być może skryptami od Wojtka będziesz mógł to osiągnąć
A gdzie znajde te skrypty ?
Awatar użytkownika
Robert Błaszczak
Posty: 1407
Rejestracja: sob gru 22, 2018 8:55 pm
Lokalizacja: Zielona Góra
Kontaktowanie:

ndz paź 11, 2020 12:17 pm

Pozdrawiam
Robert Błaszczak

Strona prywatna: https://www.blaszczak.pl
Jakość powietrza: https://robert.aqi.eco
Awatar użytkownika
klew
Posty: 1293
Rejestracja: czw cze 27, 2019 12:16 pm

śr paź 21, 2020 12:49 pm

Dodałem odczytywanie danych z licznika Afore do biblioteki SuplaDevice na Arduino IDE. Testowałem z Arduino Mega i z Wemosa D1 R1.
Na Arduino są problemy z pamięcią - będę dodawał inne poprawki, aby to normalnie chodziło.

Należy pobrać najnowszą bibliotekę z https://github.com/klew/arduino
Następnie w programie dodać:

Kod: Zaznacz cały

#include <supla/pv/afore.h>

// w setup
new Supla::PV::Afore(IPAddress(192, 168, xyz, zyx), port, "LOGIN I HASŁO zapisane w base64");
Do "LOGIN I HASŁO" trzeba wpisać swój "username:password" (bez " i z : pomiędzy) zakodowane w base64. Domyślnie nie ma w arduino biblioteki do kodowania base64, a nie chciałem dodawać kolejnej dependencji do zewnętrznej biblioteki.
Możecie w swoim Arduino doinstalować jakąś bibliotekę do base64 i konwertować to w programie, albo wrzućcie do jakiegoś online'owego toola do konwersji i skopiujcie rezultat.

Supla::PV::Afore używa licznika jednofazowego i pokazuje ilość "pobranej" energii, oraz aktualną moc. Zastanawiam się czy nie przerzucić tego na "oddaną" energię", ale też mi to do końca nie pasuje. Dajcie znać, co bardziej by odpowiadało, to mogę przerobić.
Afore daje tylko informację o całkowitej mocy i produkcji (bez podziału na fazy), więc dlatego użyłem licznika jednofazowego.

Testowane na dwóch inwerterach - dzięki @Enriquez i @artur_n za dostęp.
Jeszcze pozostaje otwarta kwestia jak traktować nocne wyłączenie falownika. Aktualnie po 3 nieudanych próbach połączenia, będzie do Supli przekazywana ostatnia znana produkcja, oraz moc = 0 W.

Czekam na feedback :)
Awatar użytkownika
pzygmunt
Posty: 9386
Rejestracja: wt sty 19, 2016 9:26 am
Lokalizacja: Paczków
Kontaktowanie:

śr paź 21, 2020 1:43 pm

Jakbyś chciał zaimplementować base-a to możesz przerobić poniższy kod. Nie ma tego dużo.

Kod: Zaznacz cały

             
AnsiString __fastcall __NAMESPACE__::Base64encode(unsigned char const* bytes_to_encode, DWORD in_len, bool HTTP)
{

 static const char *base64_chars =   
             "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
             "abcdefghijklmnopqrstuvwxyz"
             "0123456789+/";
             
  AnsiString ret;
  int i = 0;
  int j = 0;
  unsigned char char_array_3[3];
  unsigned char char_array_4[4];

  while (in_len--) {
    char_array_3[i++] = *(bytes_to_encode++);
    if (i == 3) {
      char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
      char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
      char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
      char_array_4[3] = char_array_3[2] & 0x3f;

      for(i = 0; (i <4) ; i++)
        ret += base64_chars[char_array_4[i]];
      i = 0;
    }
  }

  if (i)
  {
    for(j = i; j < 3; j++)
      char_array_3[j] = '\0';

    char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
    char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
    char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
    char_array_4[3] = char_array_3[2] & 0x3f;

    for (j = 0; (j < i + 1); j++)
      ret += base64_chars[char_array_4[j]];

    while((i++ < 3))
      ret += '=';

  }

  if ( HTTP ) ret = StringReplace(ret, "+", "%2B", TReplaceFlags() << rfReplaceAll);

  return ret;

};
ODPOWIEDZ

Wróć do „Pomysły i koncepcje”