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
Odczyt danych z falownika Afore
-
- Posts: 10024
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
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ępnedesaint 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
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ł.
-
- Posts: 447
- Joined: Thu Aug 17, 2017 2:24 pm
- Location: RJA
Dawno zaglądałem na forum i przeoczyłem wpis. Dane do falownika poszły na PW.
-
- Posts: 3
- Joined: Sat Oct 10, 2020 9:25 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.
Przykład 2: panele produkują 5kW-potrzeby własne 7 kW- przekaznik otwarty
Dysponuje licznikiem MEW 01 oraz arduino Leonardo.
-
- Posts: 19343
- Joined: Tue Jan 19, 2016 9:26 am
- Location: Paczków
Być może skryptami od Wojtka będziesz mógł to osiągnąć
-
- Posts: 4423
- Joined: Sat Dec 22, 2018 8:55 pm
- Location: Zielona Góra
Pozdrawiam
Robert Błaszczak
Moja prywatna strona: www.blaszczak.pl
Robert Błaszczak
Moja prywatna strona: www.blaszczak.pl
-
- Posts: 10024
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
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ć:
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
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");
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
-
- Posts: 19343
- Joined: Tue Jan 19, 2016 9:26 am
- Location: Paczków
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;
};