High voltage hybrid inverter (GW6000-EH) with EV battery (Chevy Volt)

apr

New member
Joined
Apr 11, 2021
Messages
16
So now i have the goodwe inverter with one PV string, and a 300V battery charging and discharging and look what i have found:

1620077316989.png


The PV is generating 0,8kW and the battery is charging 1,35kW.... where's the extra energy coming from? House is zero?? and grid is 20W??

My other PV string is still pumping solar energy through it's dedicated grid tie inverter to the house. The goodwe inverter is charging the battery with that extra energy too! The goodwe is always trying to zero out the grid meter, in either direction!

So there's no need to plug the solar panels to the goodwe inverter, it can act as a standalone battery inverter charging and discharging the battery in a continuous effort to zero out the grid meter readings.
 

apr

New member
Joined
Apr 11, 2021
Messages
16
With a simple node-red flow all the monitoring data is requested at once from the inverter every 10seconds.

The request: 120 registers starting from register 35100
Code:
f7 03 89 1c 00 78 ba e4


1620164069962.png

The code to import to node-red, only need to adjust the goodwe inverter IP and mqtt/emoncms servers:

Code:
[{"id":"53deaa97.dc54d4","type":"udp in","z":"ad27c33e.22c658","name":"","iface":"","port":"8899","ipv":"udp4","multicast":"false","group":"","datatype":"buffer","x":100,"y":1100,"wires":[["c87fdbb6.c021d8","a970b4ba.9a1428"]]},{"id":"a970b4ba.9a1428","type":"debug","z":"ad27c33e.22c658","name":"","active":false,"console":"false","complete":"true","x":250,"y":1160,"wires":[]},{"id":"6471bc3d.8d6744","type":"udp out","z":"ad27c33e.22c658","name":"","addr":"","iface":"","port":"8899","ipv":"udp4","outport":"8899","base64":false,"multicast":"false","x":650,"y":980,"wires":[]},{"id":"108de66.72b1e9a","type":"function","z":"ad27c33e.22c658","name":"Request","func":"msg.payload = Buffer.from(\"f703891c0078bae4\", \"hex\");\nreturn msg;\n\n","outputs":1,"noerr":0,"x":360,"y":980,"wires":[["6471bc3d.8d6744"]]},{"id":"51e8bd17.fe18ec","type":"inject","z":"ad27c33e.22c658","name":"10s","topic":"","payload":"","payloadType":"date","repeat":"10","crontab":"","once":false,"x":110,"y":980,"wires":[["108de66.72b1e9a"]]},{"id":"c87fdbb6.c021d8","type":"function","z":"ad27c33e.22c658","name":"Parse data","func":"\nvar data =  {};\n\ndata.PV1_V                = msg.payload.readInt16BE(11) / 10;\ndata.PV1_I                = msg.payload.readInt16BE(13) / 10;\ndata.PV1_P                = msg.payload.readInt32BE(15);\n// data.PV2_V                = msg.payload.readInt16BE(19) / 10;\n// data.PV2_I                = msg.payload.readInt16BE(21) / 10;\n// data.PV2_P                = msg.payload.readInt32BE(23);\n// data.PV3_V                = msg.payload.readInt16BE(27) / 10;\n// data.PV3_I                = msg.payload.readInt16BE(29) / 10;\n// data.PV3_P                = msg.payload.readInt32BE(31);\n// data.PV4_V                = msg.payload.readInt16BE(35) / 10;\n// data.PV4_I                = msg.payload.readInt16BE(37) / 10;\n// data.PV4_P                = msg.payload.readInt32BE(39);\ndata.PV_MODE              = msg.payload.readInt16BE(43);\n// data.UNKNOWN              = msg.payload.readInt16BE(45);\ndata.V_L1                 = msg.payload.readInt16BE(47) / 10;\ndata.I_L1                 = msg.payload.readInt16BE(49) / 10;\ndata.F_GRID_R             = msg.payload.readInt16BE(51) / 100;\ndata.POWER_L1             = msg.payload.readInt32BE(53);\n// data.V_L2                 = msg.payload.readInt16BE(57) / 10;\n// data.I_L2                 = msg.payload.readInt16BE(59) / 10;\n// data.F_GRID_S             = msg.payload.readInt16BE(61) / 100;\n// data.P_L2                 = msg.payload.readInt32BE(63);\n// data.V_L3                 = msg.payload.readInt16BE(67) / 10;\n// data.I_L3                 = msg.payload.readInt16BE(69) / 10;\n// data.F_GRID_T             = msg.payload.readInt16BE(71) / 100;\n// data.P_L3                 = msg.payload.readInt32BE(73);\ndata.GRID_MODE            = msg.payload.readInt16BE(77);\ndata.TOTAL_INV_POWER      = msg.payload.readInt32BE(79);\ndata.AC_ACTIVE_POWER      = msg.payload.readInt32BE(83);\ndata.AC_REACTIVE_POWER    = msg.payload.readInt32BE(87); //???\ndata.AC_APPARENT_POWER    = msg.payload.readInt32BE(91); //???\ndata.BACK_UP_V_LOAD_R     = msg.payload.readInt16BE(95);\ndata.BACK_UP_I_LOAD_R     = msg.payload.readInt16BE(97);\ndata.BACK_UP_F_LOAD_R     = msg.payload.readInt16BE(99);\ndata.LOAD_MODE_R          = msg.payload.readInt16BE(101);\ndata.BACK_UP_P_LOAD_R     = msg.payload.readInt32BE(103);\ndata.BACK_UP_V_LOAD_S     = msg.payload.readInt16BE(107);\ndata.BACK_UP_I_LOAD_S     = msg.payload.readInt16BE(109);\ndata.BACK_UP_F_LOAD_S     = msg.payload.readInt16BE(111);\ndata.LOAD_MODE_S          = msg.payload.readInt16BE(113);\ndata.BACK_UP_P_LOAD_S     = msg.payload.readInt32BE(115);\ndata.BACK_UP_V_LOAD_T     = msg.payload.readInt16BE(119);\ndata.BACK_UP_I_LOAD_T     = msg.payload.readInt16BE(121);\ndata.BACK_UP_F_LOAD_T     = msg.payload.readInt16BE(123);\ndata.LOAD_MODE_T          = msg.payload.readInt16BE(125);\ndata.BACK_UP_P_LOAD_T     = msg.payload.readInt32BE(127);\ndata.P_LOAD_R             = msg.payload.readInt32BE(131);\ndata.P_LOAD_S             = msg.payload.readInt32BE(135);\ndata.P_LOAD_T             = msg.payload.readInt32BE(139);\ndata.TOTAL_BACK_UP_LOAD   = msg.payload.readInt32BE(143);\ndata.TOTAL_LOAD_POWER     = msg.payload.readInt32BE(147);\ndata.UPS_LOAD_PERCENT     = msg.payload.readInt16BE(151);\n\ndata.AIR_TEMPERATURE      = msg.payload.readInt16BE(153) / 10;\ndata.MODULE_TEMPERATURE   = msg.payload.readInt16BE(155) / 10;\ndata.RADIATOR_TEMPERATURE = msg.payload.readInt16BE(157) / 10;\n\ndata.FUNCTION_BIT_VALUE   = msg.payload.readInt16BE(159);\n\ndata.BUS_VOLTAGE          = msg.payload.readInt16BE(161) / 10;\ndata.NBUS_VOLTAGE         = msg.payload.readInt16BE(163);\n\ndata.V_BATTERY1           = msg.payload.readInt16BE(165) / 10;\ndata.I_BATTERY1           = msg.payload.readInt16BE(167) / 10;\ndata.P_BATTERY1           = msg.payload.readInt32BE(169);\n\ndata.BATTERY_MODE         = msg.payload.readInt16BE(173);\ndata.WARNING_CODE         = msg.payload.readInt16BE(175);\ndata.SAFETY_COUNTRY       = msg.payload.readInt16BE(177);\ndata.WORK_MODE            = msg.payload.readInt16BE(179);\ndata.OPERATION_MODE       = msg.payload.readInt16BE(181);\ndata.INV_ERR_H            = msg.payload.readInt16BE(183);\ndata.INV_ERR_L            = msg.payload.readInt16BE(185);\n\ndata.PV_E_TOTAL           = msg.payload.readInt32BE(187) / 10;\ndata.PV_E_DAY             = msg.payload.readInt32BE(191) / 10;\ndata.E_TOTAL              = msg.payload.readInt32BE(195) / 10;\n\ndata.H_TOTAL              = msg.payload.readInt32BE(199) / 10;\ndata.E_DAY_SELL           = msg.payload.readInt16BE(203) / 10;\ndata.E_TOTAL_BUY          = msg.payload.readInt32BE(205) / 10;\ndata.E_DAY_BUY            = msg.payload.readInt16BE(209) / 10;\ndata.E_TOTAL_LOAD         = msg.payload.readInt32BE(211) / 10;\ndata.E_LOAD_DAY           = msg.payload.readInt16BE(215) / 10;\ndata.E_BATTERY_CHARGE     = msg.payload.readInt32BE(217) / 10;\ndata.E_CHARGE_DAY         = msg.payload.readInt16BE(221) / 10;\ndata.E_BATTERY_DISCHARGE  = msg.payload.readInt32BE(223) / 10;\ndata.E_DISCHARGE_DAY      = msg.payload.readInt16BE(227) / 10;\n\ndata.BATT_STRINGS         = msg.payload.readInt16BE(229);\ndata.CPLD_WARNING_CODE    = msg.payload.readInt16BE(231);\ndata.W_CHARGER_CTRL_FLAG  = msg.payload.readInt16BE(233);\ndata.DERATE_FLAG          = msg.payload.readInt16BE(235);\ndata.DERATE_FROZEN_POWER  = msg.payload.readInt16BE(237);\ndata.DIAG_STATUS_H        = msg.payload.readInt16BE(239);\ndata.DIAG_STATUS_L        = msg.payload.readInt16BE(241);\n\nmsg.payload = data;\nmsg.topic = \"goodwedata\";\nmsg.nodegroup = \"goodwedata\";\n\nreturn msg;","outputs":1,"noerr":0,"x":370,"y":1100,"wires":[["35d6e082.5d68c8","2941a42.2eb1edc","1506434.3749e3d"]]},{"id":"35d6e082.5d68c8","type":"mqtt out","z":"ad27c33e.22c658","name":"","topic":"","qos":"","retain":"","broker":"13b7e580.da6483","x":590,"y":1040,"wires":[]},{"id":"2941a42.2eb1edc","type":"emoncms","z":"ad27c33e.22c658","name":"Emoncms Push","emonServer":"ca9051bf.f69eb8","nodegroup":"","datatype":"legacy","x":620,"y":1100,"wires":[]},{"id":"1506434.3749e3d","type":"debug","z":"ad27c33e.22c658","name":"","active":false,"console":"false","complete":"false","x":610,"y":1160,"wires":[]},{"id":"13b7e580.da6483","type":"mqtt-broker","z":"","broker":"","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"15","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthPayload":""},{"id":"ca9051bf.f69eb8","type":"emoncms-server","z":"","server":"","name":"emoncms"}]


@yasko i've used your excel sheet to get the names of the registers there's a significant percentage of them that give some strange values but the most important ones are OK.
 

yasko

Member
Joined
Nov 10, 2017
Messages
67
@apr, Nice setup with node-red. I don't have an original MODBUS specification, so I can't guarantee its accuracy. The description is extracted from these files.
I'm glad to hear that your inverter is working. Did you notice some extra consumption from the grid when the inverter charges the battery from PV panels?
 
Last edited:

apr

New member
Joined
Apr 11, 2021
Messages
16
Hi @yasko i have a external AC energy meter connected to the AC side of the inverter and a DC current sensor on the battery pack so i have that information. Fortunately last night i finally routed all PV to the goodwe so today is the first time i can check how the goodwe interact with the grid.

1620314018992.png


The graph above shows that the PV energy is being stored in the battery pack and most of the time also being fed to the grid to cover the house consumption. You can see the inverter being maxed out @~13h.

The next graph shows how much the inverter is consuming from the grid:

1620314217984.png


not bad :)


If i navigate the graph to yesterday the goodwe inverter was consuming from the grid, but that's only the surplus PV energy that was being generated from another grid tie inverter:
1620314764072.png



The more i explore this inverter the more i like it.


@yasko did you explore the offgrid output of the inverter? i made some grid disconnect tests but the offgrid turned off too. I have both offgrid options enabled on the APP. Are you aware of any CAN message that enables this offgrid funcionality? I read somewhere on the documentation that only a subset of supported packs provide this feature.
 

yasko

Member
Joined
Nov 10, 2017
Messages
67
@apr, thanks for the data. I will write about this later.
Regarding the off-grid output of the inverter, I'm still not using it ( the grid is relatively stable here). But it's working as expected, and I've only enabled it via the app. I also have some initial problems with it because I forgot to connect the PE wire of the backup port. After joining PE to system ground, everything worked OK. Check the inverter manual because there is some particularity for the PE wire of backup output.
 

apr

New member
Joined
Apr 11, 2021
Messages
16
Hi @yasko , you are correct (as always :) )

1620379203917.png



Regarding the grid consumption i've been thinking about what you have posted earlier and i also find that there is import and export on the connection to the grid and on my graphs, where i average import and export the result is very close to zero watts. However if the export to the grid is not accounted and the import has to be bought from the utility, as it is in my country, the import energy has a positive value, according to my short records, about 0,4kWh in one day.

I think this comes down to how every AC battery works, in a reactive behavior:
The load start -> the meter detects -> grid import while the inverter is adjusting
The load stops -> the meter detects -> grid export while the inverter is adjusting

Still no import happens due to inverter consumption as i showed in the graphs on my last post.
 

apr

New member
Joined
Apr 11, 2021
Messages
16
I've captured the data from the APP and it keeps polling the inverter with the following requests, every 3 seconds:

Code:
aa 55 c0 7f 01 02 00 02 41
f7 03 88 b8 00 21 3a c1
f7 03 b9 99 00 02 25 ee
f7 03 b9 90 00 01 b5 ed
f7 03 90 8a 00 08 5c 70
f7 03 89 1c 00 7d 7a e7
f7 03 8c a0 00 11 bb e2
f7 03 90 88 00 0b bd b1
f7 03 b0 c0 00 07 36 62

Also i've charged the battery by changing to economical mode and the following write registers were sent:

1620773417877.png


Code:
f7 06 b7 98 00 03 7b 06
f7 10 b9 97 00 02 04 00 01 00 00 98 f9    
f7 10 b9 9b 00 04 08 16 00 16 3b ff ce ff 7f  72 70
f7 06 b0 94 00 01 3b bf

The charging went OK but it's a bit awkward to set up charging like this, using the APP to change operation modes. I have to change back again when i'm done.

I already stop the inverter from discharging the battery futher into cheap tariff periods by setting the allowed discharge amps to zero in the CAN communication if the SOC is below a certain %. Now i'm tring to find a way to charge the battery on demand in a programatic way.
 
Last edited:

yasko

Member
Joined
Nov 10, 2017
Messages
67
@apr, I think that the key to charging the battery on demand lies in my previous post.
You can use register 47511 to switch the inverter to battery charge mode (value 11), then in register 47512, you can set desired power level.
The inverter first uses available PV power for charging, and if it's not enough, it starts to draw power from the grid. Obviously, during the night, the battery is charged only from the grid. That is my brief observations from the past days. Of course, remains a lot of things to test.
 
  • Like
Reactions: apr

apr

New member
Joined
Apr 11, 2021
Messages
16
Hi @yasko yes i saw your post but i was unsure about what messages to send to the inverter. FC06 single modbus register write did the trick!

I've tried and it works great,

1620859834375.png




Mode: Charge
Code:
f7 06 b9 97 00 0b 48 2B

Mode: Normal
Code:
f7 06 b9 97 00 01 c8 2c

Request 100W
Code:
f7 06 b9 98 00 64 38 04

Request 1000W
Code:
f7 06 b9 98 03 e8 39 51

Request 2500W
Code:
f7 06 b9 98 09 c4 3e 2c


an so on


The inverter responds instantly to the commands, really impressive!!
 
Top