23.10.2023, 09:54
(22.10.2023, 19:28)Amelie Wrote:(19.10.2023, 10:00)fleeceable Wrote: I have established successfully communication with Goodwe GW10K-ET and battery pack BYD 22kWh . Gonna post script here. Since it is taken from backup you maybe need to modify a bit but it should work...
Code:ip = '192.168.1.179'
GroupAddresses = '32/1/'
require('luamodbus')
mb = luamodbus.tcp()
mb:open(ip, 502)
res, err = mb:connect()
mb:setslave(1) -- Inverter
Inverter_rated_power = mb:readregistervalue(35001,'uint16')
Grid_connection_status = mb:readregistervalue(35136,"uint16")
Total_INV_Power = mb:readregistervalue(35137,'int32')
AC_ActivePower = mb:readregistervalue(35139,'int32')
Total_Back_Up = mb:readregistervalue(35169,'int32')
Total_Load_power = mb:readregistervalue(35171,'int32')
Ups_Load_Percent = mb:readregistervalue(35173,'uint16')
Inverter_Internal_Temperature = mb:readregistervalue(35174,'int16')
Inverter_Unit_Temperature = mb:readregistervalue(35175,'int16')
Inverter_Heat_Sink_Temperature = mb:readregistervalue(35176,'int16')
Battery1_Mode = mb:readregistervalue(35184,'uint16')
Work_Mode = mb:readregistervalue(35187,'uint16')
Error_Message = mb:readregistervalue(35189,"uint32")
PV_E_Day = mb:readregistervalue(45224,'uint32')
E_Day_Sell = mb:readregistervalue(45230,'uint16')
E_Day_Buy = mb:readregistervalue(45231,'uint32')
Meter_L1_Active_Power = mb:readregistervalue(36019,'int32')
Meter_L2_Active_Power = mb:readregistervalue(36021,'int32')
Meter_L3_Active_Power = mb:readregistervalue(36023,'int32')
Meter_Total_Active_Power = mb:readregistervalue(36025,'int32')
E_Total_Sell = mb:readregistervalue(45226,'uint32')
E_Total_Buy = mb:readregistervalue(45231,'uint32')
Battery_Mode_PV_Charge_Enable = mb:readregistervalue(45278,'uint16')
App_Mode_Index = mb:readregistervalue(47000,'uint16')
Start_Charge_SOC = mb:readregistervalue(47531,'uint16')
Stop_Charge_SOC = mb:readregistervalue(47532,'uint16')
Fast_Charge_Enable = mb:readregistervalue(47545,'uint16')
Fast_Charge_Stop_SOC = mb:readregistervalue(47546,'uint16')
Battery_SOC = mb:readregistervalue(37007,'uint16')
EMSPowerMode = mb:readregistervalue(47511,'uint16')
EMSPowerSet = mb:readregistervalue(47512,'uint16')
--FeedPowerEnable = mb:readregistervalue(47509,'int16')
--log(FeedPowerEnable)
--FeedPowerPara = mb: readregistervalue(47510,'int16')
--log(FeedPowerPara)
--Model_Name = mb:readregistervalue(35182,'uint32')
--log(Model_Name)
--Model_Name2 = mb:readregisters(35012,1)
--log(Model_Name2)
--Model_Name3 = mb:readregisters(35013,1)
--log(Model_Name3)
--Model_Name4 = mb:readregisters(35014,1)
--log(Model_Name4)
--wBMSBatSOC = mb:readregistervalue(47908,'uint16')
BMS_Pack_Temperature = mb:readregistervalue(37003,'uint16')
mb:close()
grp.checkupdate(GroupAddresses .. '1', Inverter_rated_power)
grp.checkupdate(GroupAddresses .. '2', Grid_connection_status)
grp.checkupdate(GroupAddresses .. '3', Total_INV_Power/1000)
grp.checkupdate(GroupAddresses .. '4', AC_ActivePower/1000)
grp.checkupdate(GroupAddresses .. '5', Total_Back_Up/1000)
grp.checkupdate(GroupAddresses .. '6', Total_Load_power/1000)
grp.checkupdate(GroupAddresses .. '7', Ups_Load_Percent)
grp.checkupdate(GroupAddresses .. '8', Inverter_Internal_Temperature/10)
grp.checkupdate(GroupAddresses .. '9', Inverter_Unit_Temperature/10)
grp.checkupdate(GroupAddresses .. '10', Inverter_Heat_Sink_Temperature/10)
grp.checkupdate(GroupAddresses .. '11', Battery1_Mode)
grp.checkupdate(GroupAddresses .. '12', Work_Mode)
grp.checkupdate(GroupAddresses .. '13', Error_Message)
grp.checkupdate(GroupAddresses .. '14', PV_E_Day/10)
grp.checkupdate(GroupAddresses .. '15', E_Day_Sell/10)
grp.checkupdate(GroupAddresses .. '16', E_Day_Buy/10)
grp.checkupdate(GroupAddresses .. '17', Meter_Total_Active_Power/1000)
grp.checkupdate(GroupAddresses .. '18', E_Total_Sell/10)
grp.checkupdate(GroupAddresses .. '19', E_Total_Buy/10)
grp.checkupdate(GroupAddresses .. '20', Battery_Mode_PV_Charge_Enable)
grp.checkupdate(GroupAddresses .. '21', App_Mode_Index)
grp.checkupdate(GroupAddresses .. '22', Start_Charge_SOC)
grp.checkupdate(GroupAddresses .. '23', Stop_Charge_SOC)
grp.checkupdate(GroupAddresses .. '24', Fast_Charge_Enable)
grp.checkupdate(GroupAddresses .. '25', Fast_Charge_Stop_SOC)
grp.checkupdate(GroupAddresses .. '26', Battery_SOC)
grp.checkupdate(GroupAddresses .. '27', EMSPowerMode)
grp.checkupdate(GroupAddresses .. '28', EMSPowerSet)
grp.checkupdate(GroupAddresses .. '31', BMS_Pack_Temperature/10)
grp.checkupdate(GroupAddresses .. '32', Meter_L1_Active_Power/1000)
grp.checkupdate(GroupAddresses .. '33', Meter_L2_Active_Power/1000)
grp.checkupdate(GroupAddresses .. '34', Meter_L3_Active_Power/1000)
Maybe it helps
Thank you, it helped a lot. Now, I can force the inverted to load the battery by writing a value to register 'Stop_Charge_SOC' (register 47532). But, when I write the same value to 'Start_Charge_SOC' (register 47531), I thought that he wouldn't discharge. But, my thoughts were wrong. Do you have an idea to what register I have to write, to stop discharging the battery?
I want to load my battery, in winter when the electricity prices are low and discharge them when the prices are high.
I'm using these registers to control battery:
mb:writeregisters(47511, EMSPowerModeWrite) - 2 charge, 3 discharge, 1 auto/self use mode
mb:writeregisters(47512, EMSPowerSetWrite) - charging/discharging power (in watts)
Modes are described in attachment