Podmieniłem dzisiaj inwerter na Huawei sun2000 6ktl m1 i jedyne co mi w nim brakuje to modbusa TCP.
Niby jest TCP ale tylko przy podłaczeniu p2p przez wifi falownika, a to jest nieprzydatne.
Pytanie czy ktoś może stosował jakiś konwerter rs485 na lan z tym inwerterm tak aby uzyskać modbus TCP?
Dzięki.
Wczoraj testowałem właśnie przez LAN i niestety mi się nie udało nic wyciągnać z tego inwertera. Z Froniusa bez problemu mi działało. Później doczytałem się, że przy połaczeniu przez wifi inwertera tylko działa i faktycznie działało.
Wieczorem sprawdzę soft, może to kwestia aktualizacji.
Nie wiem czym pobierasz przez LAN, ale oprócz firmware w SMART DONGLE powyżej 120 (nie falownik) to jeszcze trzeba zaznaczyć slave address: 1.
Dzięki za pomoc.
Faktycznie wersja softu dongla była 119. Zaktualizowałem do najnowszej 136.
Jeszcze prośba o podpowiedź gdzie zmienić adres modbus. Znalazłem tylko taką opcję w zakładce komunikacji 485 i tam mam 1. Ale nadal nie mogę nic wyciągnąć z rejestrów modbus. Adres IP i port mam wpisany poprawny, także domyślam się, że może być problem z adresem modbus slave w huawei.
Jeszcze raz napiszę, że nie chodzi o wersję softu w falowniku a w Smart Dongle, Tam najnowsza wersja ma końcówkę 123. Czym próbujesz pobierać te dane, masz jakiś specjalny program czy w pythonie?
Dane pobieram systemem automatyki domowej, który jest mega prosty. W parametach komunikacji podaję ip i port oraz nr slave modbus.
IP adres mam ustawiony stały, a portu modbus 502 chyba jest wpisany fabryznie. Slave mam ustawiony na 1, ale w komunikacji RS485. Chyba, że gdzieś jeszcze trzeba to zrobić. Drugi inwerter froniusa mam ustawiony na 2. Także nie ma kolizji.
W danych podaję typ rejestru, numer rejestru i typ zmiennej. Działa to mi z pracującym froniusem i wcześniejszym z sma.
Jeszcze spróbuję zrestartować po aktualizacjach, być może to rozwiąże problem.
Próbuję uruchomić modbus dla Sun2000 i wifi dongle (najnowszy firmware na obu, aktualnie nie mam profilu instalatora na nim, ale przed uruchomieniem w paz'21 zaktualizowałem do najnowszych ..). Wtedy w konfiguracji widziałem opcję modbus na RS486 (i była włączona), ale nie było czegoś takiego dla wifi.. Urządzenie jest online, dane dostępne w FusionSolar i wysyłane do chmury, odpowiada lokalnie na ping, widzę otwarty port 502/tcp, mogę się z nim połączyć netcat, ale mbpoll zwraca błędy..
* Jakie powinny być parametry tej komunikacji ? Jakaś autoryzacja ?
* Względnie, czy łatwiej podejść do tematu po RS486 lub po ethernet zamiast wifi ?
Docelowo chcę to zintegrować z Openhab, ale moduł modbus i skrypty dla OH też bez powodzenia .. logi poniżej.
[rt.modbus.internal.ModbusManagerImpl] - Try 1 out of 3 failed when executing request (ModbusReadRequestBlueprint@6be33655[slaveId=1,functionCode=READ_MULTIPLE_REGISTERS,start=40122,length=6,maxTries=3]). Will try again soon. Error was I/O error, so reseting the connection. Error details: net.wimpi.modbus.ModbusIOException I/O exception: ModbusIOException Premature end of stream (Header truncated). [operation ID c08ef938-306c-4d3a-9be1-5f520cbbd3db]
Nie ma zadnej autentykacji. W najnowszym sofcie dongla działa i po WiFi i przez Ethernet.
Podłącz się pod wifi falownika i sprawdź aplikacja sun2000 ustawienia połączenia równoległego rs485, czy jest włączone, jaki masz bitrate. Tam są ze 4 parametry tylko.
Panowie,
Doszedłem do miejsca w fusion solar gdzie zaktualizować firmware w donglu (nie falowniku) ale jest tam tylko opcja instalacji z pliku. Skąd pobrać firmware w wersji 123? Na stronie huawei logując się jako instalator mam do ściągnięcia tylko wersje 110 A dongle ma obecnie wersje 115
Edit: Ok, udało mi się zaktualizować firmware. Falownik SUN2000-5KTL-M0 - firmware SPC139, dongle firmware SPC124. Sytuacja wygląda tak, że komunikacja Modbus nie działa w żadnym wypadku, ani po Ethernecie, ani przy połączeniu Wifi z routerem, ani poprzez AP udostępniany przez dongle. Różnica jest tylko taka, że poprzez AP z dongla dostaję informację, że port 502 jest otwarty (przy Ethernet lub Wifi z routera już nie), ale nie dostaję żadnej odpowiedzi zwrotnej na zapytanie o Read register. Czy w ustawieniach falownika trzeba gdzieś włączyć dostępność Modbus?
Walczyłem z tematem ze 2 tygodnie, bez skutku. SDongle ma FW SmartMBusV100R001C00SPC300, falownik też była aktualizowany na początku października. Dzięki gmacko za pomoc i konsultacje !
Finalnie dzisiaj udało mi sie uruchomić kod https://gitlab.com/Emilv2/huawei-solar.gitpo wifi wystawionym przez falownik SSID=SUN2000-**** oraz domyslne haslo=Changeme. Ten sam kod odpalony na sdongle po WLAN rzuca błędami "braku" połączenia.
Originalny kod z repozytorium (klasa HuaweiSolar.py) wymaga niestety kilku poprawek (brak typowania) i przynajmniej u mnie na Python3 i Debianie się to sypało. Ttrochę naprawiłem, ale dalej są błędy (np. zmienne alarm_* lub state_*). Wrzucam w załączniku. Wymagane są pakiety pymodbus oraz pytz (timezone).
W pliku run.py znajdziesz listę rejestrów oraz IP falownika (chyba ma być 192.168.200.1) i odkomentuj sobie te rejestry, które Cię interesują.
Pilotażowo postawię raspberry i po wifi zapnę się do falownika po SUN2000-***, a po ethernet do infrastruktury w domu, ale to dodatkowe urządzenie do utrzymywania ..
Jeśli ktoś z Forum ma wiedzę co ustawić w konfiguracji falownika, aby to zaczęło działać po sdongle, to chętnie skorzystam.
Przypuszczam że może być zablokowana komunikacja w tym firmware podobnie jak jest to w wersjach z końcówką mniejszą niż spc120. Do ustawiania komunikacji w menu falownika jest tam naprawdę niewiele opcji (przynajmniej u mnie). Próbowałeś może testować również na slave=2 lub wyżej? Ostatnio jedna osoba też nie mogła odpalić po sdongle a miała go przepiętego z innego falownika i zmiana na 2 pomogła. U ciebie ta wersja firmware też jest jakaś nietypowa, jaki to model falownika? Sdongle ma wyjście na kabelek sieciowy? Jeśli tak to testowałeś komunikację poprzez LAN? Ogólnie dane z mojego falownika 8ktl zczytuje już od ponad 1,5 roku i przy połączeniu do wbudowanego AP nigdy nie miałem żadnych błędów i problemów z niestabilnym działaniem. Przy podłączeniu do sdongle komunikację miałem dużo wolniejszą i czasem zdarzały się przekłamania w odczytach.
Czy z poziomu portalu https://eu5.fusionsolar.huawei.com/pvmswebsite/assets/build/index.html#/settings/device/pv widać klucz sprzętowy smart dongle? Bo logując się bezpośrednio do falownika nie pokazuje jego wersji, przynajmniej u mnie. Ja odczytuje dane przy pomocy integracji z poziomu Home Assistant, działa zarówno integracja MODBUS (czyli czytanie poszczególnych rejestrów), jak również od Emilv2.
Z poziomu portalu (zalogowany jako instalator) nie mam widocznych żadnych urządzeń.
Kontekst:
*początkowo monter instalacji nie skonfigurował mi falownika (było po zmroku), poprosił o skonfigurowanie wifi z pomocą appki FusionSolar; aby tego dokonać musiałem przejść przez ekran konfiguracji 'firmy' i na huawei mam chyba taki właśnie profil z użyciem adresu email1; nie przechodziłem na nim jednak żadnej weryfikacji jako podmiot-firma
* następnie ekipa monterska dokonała zdalnie rekonfiguracji falownika, wysłała mi zaproszenie do konta użytkownika (na mój dodatkowy adres email2)
* na moją prośbę pozostawili mi profil instalatora na koncie email1
* appki FusionSolar używam z adresem email2 (użytkownik) - mam dostępne wszystkie funkcje w aplikacji
* do falownika FusionHome loguję się na konto email1 (instalator)
Pomijając te w/w przygody, przed przekazaniem falownika do monterów (poczytawszy to i inne fora), zaktualizowałem firmware falownika oraz sdongle-a do najnowszych, w których modbus tcp miał być wspierany i poustawiałem w konfiguracji komunikacji zgodnie ze screen-ami.
Czy wobec tego powinienem coś weryfikować z ekipą monterską ? Czy oni mogą widzieć/ mieć inną konfigurację tego samego urządzenia?
W takim razie w jaki sposób aktualizowałeś sdongle i w jaki sposób sprawdzasz jaki jest firmware wgrane. Bo wydaje mi się że to z końcówką spc130 to nie jest sdongle. Po wypięciu tego sdongle z falownika i wpięciu go ponownie na działającym falowniku powinna się ukazać nowa sieć wifi która działa przez kilka minut do której łączymy się w podobny sposób jak do wbudowanego AP w falownik i tam można sprawdzić wersję firmware sdongle.
Pisałeś że firma utworzyła ci konto użytkownika, więc dostałeś od nich login i hasło które używasz do połączenia się z
https://eu5.fusionsolar.huawei.com/ i tam nie potrzeba mieć uprawnień administratora aby widzieć swoje urządzenia.
Chyba naprowadziłeś mnie na źródło problemu:
* sdongle - po wyjęciu i ponownym podpięciu do falownika AP sie pojawia, ale z pomocą FusionHome nie udaje mi sie zalogować ani domyślnym 00000a ani moim hasłem instalatora; po http pod IP 192.168.200.1 nie ma żadnej usługi
* patrząc na moje screen-y z upgrade-u widzę, że zaktualizowałem FW magistrali MBUS do ver. SPC300 oraz główny FW falownika do ver. SPC135
* najwyraźniej NIE(?) zaktualizowałem FW dongle-a (nie widziałem takiej opcji, chociaż od początku był on wpięty w falowniku i aktywny) i chyba mylnie założyłem (lub raczej wyczytałem gdzieś), że do uruchomienia modbus to TCP to jest ta aktualizacja, którą należy wykonać
* będąc podpietym do AP falownika (SUN2000-**) w podmenu Upgrade device mam dostępne 2 opcje - Inverter upgrade oraz PLC upgrade. Czy w tym miejscu powinien być również sdongle?
Czy mam jeszcze możliwość coś zdziałać sam zanim pójdę do monterów?
OK - po pelnej weryfikacji konta dotarlem do info w portalu: dongle ma FW V100R001C00SPC119; szukam jak go podniesc
Z tego co pamiętam nie ma informacji o wersji oraz możliwości aktualizacji firmware dongle. Jednie łącząc się bezpośrednio do sdongle lub za pomocą portalu z uprawnieniami instalatora można dokonać takiej aktualizacji. Próbowałeś może aplikacji sun2000 do łączenia się z tym sdongle?
1. Podniosłem FW SDongle do V100R001C00 SPC124 2. Na falowniku mam: V100R001C00 SPC135; tego nie ruszam na razie
3. Wykonałem power cycle falownika (zdjęte DC i AC), odczekałem ze 30sek przed ponownym uruchomieniem.
4. Po restarcie, według portalu wersje FW są takie jak chciałem
5. Wylogowalem sie z portalu i powylaczalem appki mobilne; w teorii nic nie powinno być do falownika podpięte (bo gdzieś czytałem, że nie obsługuje dwóch klientów na raz)
6. IP SDongla w WLAN to 192.168.105.50; odpowiada na pingi
7. Dla Android 11 w Play Store jest dostepna archaiczna wersja Sun2000 w wersji 2.2.00.050; życzliwy uczestnik forum pokazał mi, że jest nowsza 3.2.00.015. Nie widzę jej do pobrania z https://solar.huawei.com/eu/Services#downloadcenter . Jest natomiast FusionSolar i to z niej korzystam. Modyfikacja parametrów RS485 z jej użyciem (jakkolwiek wprowadzona w aplikacji bez błędów), nie ma zastosowania w praktyce (np. zmiana baud z 9600 na 19200 lub protokołu z modbus na sunspec), gdyż po zapisaniu i przelogowaniu do aplikacji jak bumerang wraca default w postaci modbus/9600/1.
pi@rmn:/opt/sun2000/huawei-solar $ python3 run.py
HuaweiSolar init 192.168.105.50 port= 502 tout= 5 wait= 2 slave= 1
failed to connect to device, is the host correct?
Traceback (most recent call last):
File "/opt/sun2000/huawei-solar/src/huawei_solar/huawei_solar.py", line 305, in read_register
register, length, unit=self._slave
File "/usr/lib/python3/dist-packages/pymodbus/client/common.py", line 114, in read_holding_registers
return self.execute(request)
File "/usr/lib/python3/dist-packages/pymodbus/client/sync.py", line 107, in execute
raise ConnectionException("Failed to connect[%s]" % (self.__str__()))
pymodbus.exceptions.ConnectionException: Modbus Error: [Connection] Failed to connect[ModbusTcpClient(192.168.105.50:502)]
Traceback (most recent call last):
File "/opt/sun2000/huawei-solar/src/huawei_solar/huawei_solar.py", line 305, in read_register
register, length, unit=self._slave
File "/usr/lib/python3/dist-packages/pymodbus/client/common.py", line 114, in read_holding_registers
return self.execute(request)
File "/usr/lib/python3/dist-packages/pymodbus/client/sync.py", line 107, in execute
raise ConnectionException("Failed to connect[%s]" % (self.__str__()))
pymodbus.exceptions.ConnectionException: Modbus Error: [Connection] Failed to connect[ModbusTcpClient(192.168.105.50:502)]
Pomyślałem więc, że może po LAN będzie lepiej. Po skrętce dostał IP = 192.168.1.20 (inna podsieć), ale zachowuje się tak samo jak po wifi.
Na poniższym forum ktoś napisał, że zadziałało mu na SPC123. Więc zrobiłem downgrade FW. I tu niespodzianka - mbpoll wrócił do pierwszego błędu (conn reset by peer), zaś kod Emilv2 rzuca generyczny błąd braku połączenia..
[..]
src.huawei_solar.huawei_solar.ReadException: could not read register value, is an other device already connected?
Czy wobec tego ktoś z Was mógłby podesłać kompletną konfigurację poszczególnych elementów firmware-u, względnie parametrów wywołania klasy HuaweiSolar (t/out, wait, slave) ? Wygląda trochę tak, jakby nowsze wersje nie do końca były lepszym wyborem..
Moja rada aby testować na sprawdzonym już spc123, osobiście nie aktualizowałem do spc124 ale jedna oosoba pisała mi że po aktualizacji do 124 miała problemy i wróciła do 123.
Co do samej komunikacji możesz spróbować tak:
sudo pip3 install huawei-solar==1.1.0
python3
import huawei_solar
inverter = huawei_solar.HuaweiSolar('192.168.105.50',502,5,3,1)
inverter.get("model_name")
Oczywiście wersja 1.1.0 jest starsza ale ostatnio co chwilę się coś zmienia a na tej raczej powinno działać. Tak z ciekawości jaka była wcześniej wersja firmware w sdongle?
Skoro działa po LAN więc powinno również działać po wlan na spc123. Możliwe że coś jednak przyblokowało port i proponuję restart falownika i wtedy sprawdzić. Zaraz zainstaluję najnowszy pakiet z repo i dam znać jak to wygląda u mnie. Ogólnie jeśli chodzi o smart dongle to wszędzie w huawei używany jest ten sam model i wydaje mi się że rodzaj falownika nie powinien mieć to znaczenia i jeśli jednemu działa to innemu powinno również.
edit:
sprawdziłem u siebie połączenie ze smart dongle po wifi na spc123 i nowszej bibliotece, poniżej wynik z terminala windows;
PS C:\Users\Legion> py -m pip install huawei-solar
Collecting huawei-solar
Downloading huawei_solar-1.2.0-py3-none-any.whl (13 kB)
Collecting pytz>=2019.3
Downloading pytz-2021.3-py2.py3-none-any.whl (503 kB)
|████████████████████████████████| 503 kB 1.6 MB/s
Collecting pymodbus<3.0,>=2.4.0
Downloading pymodbus-2.5.3-py2.py3-none-any.whl (154 kB)
|████████████████████████████████| 154 kB ...
Collecting pyserial>=3.4
Using cached pyserial-3.5-py2.py3-none-any.whl (90 kB)
Collecting six>=1.15.0
Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Installing collected packages: six, pyserial, pytz, pymodbus, huawei-solar
WARNING: The scripts pyserial-miniterm.exe and pyserial-ports.exe are installed in 'C:\Python39\Scripts' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
WARNING: The scripts pymodbus.console.exe and pymodbus.server.exe are installed in 'C:\Python39\Scripts' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed huawei-solar-1.2.0 pymodbus-2.5.3 pyserial-3.5 pytz-2021.3 six-1.16.0
PS C:\Users\Legion> py
Python 3.9.7 (tags/v3.9.7:1016ef3, Aug 30 2021, 20:19:38) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import huawei_solar
>>> inverter = huawei_solar.HuaweiSolar('192.168.5.34',502,5,3,1)
>>> inverter.get("model_name")
Result(value='SUN2000-8KTL-M0', unit=None)
>>>
To co udało mi się ustalić na moim
inwerterze Huawei SUN2000-10KTL-M1 wersja softu V100R001C00SPC135
SDongleA-05 wersja softu V100R001C00SPC123
Wygląda na to że w sieci LAN (FE i WiFi) falownik ma unit-id =1 a nie 0 jak to czytałem w wielu postach.
# !!!!!!!! chwyt polega na wpisaniu unit_id=1 nie w funkcji ModbusClient() ale w funkcji czytania rejestrów client.read_holding_registers()
poniżej przykład kodu w Python do weryfikacji tezy. Działa zarówno po FE LAN jak i po WiFi domowym ( nie tym z AP z Inwertera)
#!/usr/bin/python
from pymodbus.client.sync import ModbusTcpClient as ModbusClient
import time
#your inverter ip
ip_inverter=‘192.168.XXX.XXX’
client = ModbusClient(ip_inverter, port=502)
client.connect()
time.sleep(1)
if client.connect():
request = client.read_holding_registers(address=40000,count= 2, unit=1)
print (request.registers[0])
print (request.registers[1])
else:
print (‘if you are conected via LAN something is wrong with IP or port’)