Odczyt danych z falownika Afore

Masz pomysł na funkcjonalność lub koncepcję na rozwój projektu. Opisz wszystko tutaj.
desaint
Posts: 108
Joined: Mon May 27, 2019 9:46 am

Post

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
User avatar
klew
Posts: 10024
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

desaint wrote: Tue Oct 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ł.
User avatar
artur_n
Posts: 447
Joined: Thu Aug 17, 2017 2:24 pm
Location: RJA

Post

Dawno zaglądałem na forum i przeoczyłem wpis. Dane do falownika poszły na PW.
energetyka@onet.pl
Posts: 3
Joined: Sat Oct 10, 2020 9:25 pm

Post

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.
User avatar
pzygmunt
Posts: 19343
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków

Post

Być może skryptami od Wojtka będziesz mógł to osiągnąć
energetyka@onet.pl
Posts: 3
Joined: Sat Oct 10, 2020 9:25 pm

Post

pzygmunt wrote: Sat Oct 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
Posts: 3
Joined: Sat Oct 10, 2020 9:25 pm

Post

pzygmunt wrote: Sat Oct 10, 2020 10:47 pm Być może skryptami od Wojtka będziesz mógł to osiągnąć
A gdzie znajde te skrypty ?
User avatar
Robert Błaszczak
Posts: 4423
Joined: Sat Dec 22, 2018 8:55 pm
Location: Zielona Góra

Post

Pozdrawiam
Robert Błaszczak


Moja prywatna strona: www.blaszczak.pl
User avatar
klew
Posts: 10024
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

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ć:

Code: Select all

#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 :)
User avatar
pzygmunt
Posts: 19343
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków

Post

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

Code: Select all

             
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;

};

Return to “Pomysły i koncepcje”