Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lookup tables for every(most) Solax Inverter #101

Open
adambogocz opened this issue Dec 20, 2022 · 7 comments
Open

Lookup tables for every(most) Solax Inverter #101

adambogocz opened this issue Dec 20, 2022 · 7 comments

Comments

@adambogocz
Copy link
Contributor

Hi @squishykid,
I have lookup tables to decode data for following models:

  • X1-Hybiyd/Fit
  • X1-Boost/Air/Mini
  • X3-Hybiyd/Fit
  • X3-20K/30K
  • X3-MIC/PRO
  • X1-Smart
  • X1-AC
  • A1-Hybrid
  • A1-Fit
  • A1-Grid
  • J1-ESS
  • X3-Hybrid-G4
  • X1-Hybrid-G4
  • X3-MIC/PRO-G2
  • X1-SPT
  • X1-Boost/Mini-G4
  • A1-HYB-G2
  • A1-AC-G2
  • A1-SMT-G2
  • X3-FTH
  • X3-MGA-G2
  • "Inverter with type 24"
  • "Inverter with type 100"
  • "Inverter with type 101"
  • "Inverter with type 102"

Let me know if you are interested in that, I didn't wanted to just dump it all here if you didn't wanted it.

@squishykid
Copy link
Owner

Yes, I am currently looking at how to refactor the library to make it much easier to add and manage inverters. If you could share your findings here I will be able to add them in. Thank you for reaching out!

@adambogocz
Copy link
Contributor Author

You are welcome :)

3 = {
    Yield_Today: { value: .1 * bit16(1, t[13])},
    Yield_Total: { value: .1 * bit32(1, t[11], t[12])},
    PowerDc1: { value: bit16(1, t[7])},
    PowerDc2: { value: bit16(1, t[8])},
    BAT_Power: { value: bit16(0, t[18])},
    feedInPower: { value: bit32(0, t[48], t[49])},
    GridAPower: { value: bit16(0, t[2])},
    FeedInEnergy: { value: .01 * bit32(1, t[50], t[51])},
    ConsumeEnergy: { value: .01 * bit32(1, t[52], t[53])},
    RunMode: { value: bit16(1, t[10])},
    EPSAPower: { value: bit16(0, t[43])},
    Vdc1: { value: .1 * bit16(1, t[3])},
    Vdc2: { value: .1 * bit16(1, t[4])},
    Idc1: { value: .1 * bit16(1, t[5])},
    Idc2: { value: .1 * bit16(1, t[6])},
    EPSAVoltage: { value: .1 * bit16(1, t[44])},
    EPSACurrent: { value: .1 * bit16(0, t[45])},
    BatteryCapacity: { value: bit16(1, t[20])},
    BatteryVoltage: { value: .01 * bit16(1, t[16])},
    BatteryTemperature: { value: bit16(0, t[19])},
    GridAVoltage: { value: .1 * bit16(1, t[0])},
    GridACurrent: { value: .1 * bit16(0, t[1])},
    FreqacA: { value: .01 * bit16(1, t[9])}
},
4 = {
    Yield_Today: { value: .1 * bit16(1, t[13])},
    Yield_Total: { value: .1 * bit32(1, t[11], t[12])},
    PowerDc1: { value: bit16(1, t[7])},
    PowerDc2: { value: bit16(1, t[8])},
    feedInPower: { value: bit32(0, t[48], t[49])},
    GridAPower: { value: bit16(0, t[2])},
    FeedInEnergy: { value: .01 * bit32(1, t[50], t[51])},
    ConsumeEnergy: { value: .01 * bit32(1, t[52], t[53])},
    RunMode: { value: bit16(1, t[10])},
    Vdc1: { value: .1 * bit16(1, t[3])},
    Vdc2: { value: .1 * bit16(1, t[4])},
    Idc1: { value: .1 * bit16(1, t[5])},
    Idc2: { value: .1 * bit16(1, t[6])},
    GridAVoltage: { value: .1 * bit16(1, t[0])},
    GridACurrent: { value: .1 * bit16(0, t[1])},
    FreqacA: { value: .01 * bit16(1, t[9])}
},
5 = {
    Yield_Today: { value: .1 * bit16(1, t[21])},
    Yield_Total: { value: .1 * bit32(1, t[19], t[20])},
    PowerDc1: { value: bit16(1, t[13])},
    PowerDc2: { value: bit16(1, t[14])},
    BAT_Power: { value: bit16(0, t[26])},
    feedInPower: { value: bit32(0, t[65], t[66])},
    GridAPower: { value: bit16(0, t[6])},
    GridBPower: { value: bit16(0, t[7])},
    GridCPower: { value: bit16(0, t[8])},
    FeedInEnergy: { value: .01 * bit32(1, t[67], t[68])},
    ConsumeEnergy: { value: .01 * bit32(1, t[69], t[70])},
    RunMode: { value: bit16(1, t[18])},
    EPSAPower: { value: bit16(0, t[60])},
    EPSBPower: { value: bit16(0, t[61])},
    EPSCPower: { value: bit16(0, t[62])},
    Vdc1: { value: .1 * bit16(1, t[9])},
    Vdc2: { value: .1 * bit16(1, t[10])},
    Idc1: { value: .1 * bit16(1, t[11])},
    Idc2: { value: .1 * bit16(1, t[12])},
    EPSAVoltage: { value: .1 * bit16(1, t[54])},
    EPSBVoltage: { value: .1 * bit16(1, t[55])},
    EPSCVoltage: { value: .1 * bit16(1, t[56])},
    EPSACurrent: { value: .1 * bit16(0, t[57])},
    EPSBCurrent: { value: .1 * bit16(0, t[58])},
    EPSCCurrent: { value: .1 * bit16(0, t[59])},
    BatteryCapacity: { value: bit16(1, t[28])},
    BatteryVoltage: { value: .01 * bit16(1, t[24])},
    BatteryTemperature: { value: bit16(0, t[27])},
    GridAVoltage: { value: .1 * bit16(1, t[0])},
    GridBVoltage: { value: .1 * bit16(1, t[1])},
    GridCVoltage: { value: .1 * bit16(1, t[2])},
    GridACurrent: { value: .1 * bit16(0, t[3])},
    GridBCurrent: { value: .1 * bit16(0, t[4])},
    GridCCurrent: { value: .1 * bit16(0, t[5])},
    FreqacA: { value: .01 * bit16(1, t[15])},
    FreqacB: { value: .01 * bit16(1, t[16])},
    FreqacC: { value: .01 * bit16(1, t[17])}
},
6 = {
    Yield_Today: { value: .1 * bit16(1, t[21])},
    Yield_Total: { value: .1 * bit32(1, t[19], t[20])},
    PowerDc1: { value: bit16(1, t[13])},
    PowerDc2: { value: bit16(1, t[14])},
    feedInPower: { value: bit32(0, t[73], t[74])},
    GridAPower: { value: bit16(0, t[6])},
    GridBPower: { value: bit16(0, t[7])},
    GridCPower: { value: bit16(0, t[8])},
    FeedInEnergy: { value: .01 * bit32(1, t[75], t[76])},
    ConsumeEnergy: { value: .01 * bit32(1, t[77], t[78])},
    RunMode: { value: bit16(1, t[18])},
    Vdc1: { value: .1 * bit16(1, t[9])},
    Vdc2: { value: .1 * bit16(1, t[10])},
    Idc1: { value: .1 * bit16(1, t[11])},
    Idc2: { value: .1 * bit16(1, t[12])},
    GridAVoltage: { value: .1 * bit16(1, t[0])},
    GridBVoltage: { value: .1 * bit16(1, t[1])},
    GridCVoltage: { value: .1 * bit16(1, t[2])},
    GridACurrent: { value: .1 * bit16(0, t[3])},
    GridBCurrent: { value: .1 * bit16(0, t[4])},
    GridCCurrent: { value: .1 * bit16(0, t[5])},
    FreqacA: { value: .01 * bit16(1, t[15])},
    FreqacB: { value: .01 * bit16(1, t[16])},
    FreqacC: { value: .01 * bit16(1, t[17])}
},
7 = {
    Yield_Today: { value: .1 * bit16(1, t[21])},
    Yield_Total: { value: .1 * bit32(1, t[19], t[20])},
    PowerDc1: { value: bit16(1, t[13])},
    PowerDc2: { value: bit16(1, t[14])},
    feedInPower: { value: bit32(0, t[74], t[75])},
    GridAPower: { value: bit16(0, t[6])},
    GridBPower: { value: bit16(0, t[7])},
    GridCPower: { value: bit16(0, t[8])},
    FeedInEnergy: { value: .01 * bit32(1, t[76], t[77])},
    ConsumeEnergy: { value: .01 * bit32(1, t[78], t[79])},
    RunMode: { value: bit16(1, t[18])},
    Vdc1: { value: .1 * bit16(1, t[9])},
    Vdc2: { value: .1 * bit16(1, t[10])},
    Idc1: { value: .1 * bit16(1, t[11])},
    Idc2: { value: .1 * bit16(1, t[12])},
    GridAVoltage: { value: .1 * bit16(1, t[0])},
    GridBVoltage: { value: .1 * bit16(1, t[1])},
    GridCVoltage: { value: .1 * bit16(1, t[2])},
    GridACurrent: { value: .1 * bit16(0, t[3])},
    GridBCurrent: { value: .1 * bit16(0, t[4])},
    GridCCurrent: { value: .1 * bit16(0, t[5])},
    FreqacA: { value: .01 * bit16(1, t[15])},
    FreqacB: { value: .01 * bit16(1, t[16])},
    FreqacC: { value: .01 * bit16(1, t[17])}
},
8 = {
    Yield_Today: { value: .1 * bit16(1, t[13])},
    Yield_Total: { value: .1 * bit32(1, t[11], t[12])},
    PowerDc1: { value: bit16(1, t[7])},
    PowerDc2: { value: bit16(1, t[8])},
    feedInPower: { value: bit32(0, t[48], t[49])},
    GridAPower: { value: bit16(0, t[2])},
    GridBPower: { value: 0},
    GridCPower: { value: 0},
    FeedInEnergy: { value: .01 * bit32(1, t[50], t[51])},
    ConsumeEnergy: { value: .01 * bit32(1, t[52], t[53])},
    RunMode: { value: bit16(1, t[10])},
    Vdc1: { value: .1 * bit16(1, t[3])},
    Vdc2: { value: .1 * bit16(1, t[4])},
    Idc1: { value: .1 * bit16(1, t[5])},
    Idc2: { value: .1 * bit16(1, t[6])},
    GridAVoltage: { value: .1 * bit16(1, t[0])},
    GridACurrent: { value: .1 * bit16(0, t[1])},
    FreqacA: { value: .01 * bit16(1, t[9])}
},
9 = {
    Yield_Today: { value: .1 * bit16(1, t[13])},
    Yield_Total: { value: .1 * bit32(1, t[11], t[12])},
    BAT_Power: { value: bit16(0, t[16])},
    feedInPower: { value: bit32(0, t[44], t[45])},
    GridAPower: { value: bit16(0, t[2])},
    GridBPower: { value: 0},
    GridCPower: { value: 0},
    FeedInEnergy: { value: .01 * bit32(1, t[46], t[47])},
    ConsumeEnergy: { value: .01 * bit32(1, t[48], t[49])},
    RunMode: { value: bit16(1, t[10])},
    BatteryCapacity: { value: bit16(1, t[18])},
    BatteryVoltage: { value: .01 * bit16(1, t[14])},
    BatteryTemperature: { value: bit16(0, t[17])},
    GridAVoltage: { value: .1 * bit16(1, t[0])},
    GridACurrent: { value: .1 * bit16(0, t[1])},
    FreqacA: { value: .01 * bit16(1, t[9])}
},
10,11,12 = {
    Yield_Today: { value: .1 * bit16(1, t[13])},
    Yield_Total: { value: .1 * bit32(1, t[11], t[12])},
    PowerDc1: { value: bit16(1, t[7])},
    PowerDc2: { value: bit16(1, t[8])},
    PowerDc3: { value: bit16(1, t[126])},
    PowerDc4: { value: bit16(1, t[127])},
    BAT_Power: { value: bit16(0, t[18])},
    feedInPower: { value: bit32(0, t[48], t[49])},
    GridAPower: { value: bit16(0, t[2])},
    FeedInEnergy: { value: .1 * bit32(1, t[50], t[51])},
    ConsumeEnergy: { value: .1 * bit32(1, t[52], t[53])},
    RunMode: { value: bit16(1, t[10])},
    EPSAPower: { value: bit16(0, t[43])},
    Vdc1: { value: .1 * bit16(1, t[3])},
    Vdc2: { value: .1 * bit16(1, t[4])},
    Vdc3: { value: .1 * bit16(1, t[122])},
    Vdc4: { value: .1 * bit16(1, t[123])},
    Idc1: { value: .1 * bit16(1, t[5])},
    Idc2: { value: .1 * bit16(1, t[6])},
    Idc3: { value: .1 * bit16(1, t[124])},
    Idc4: { value: .1 * bit16(1, t[125])},
    EPSAVoltage: { value: .1 * bit16(1, t[44])},
    EPSACurrent: { value: .1 * bit16(0, t[45])},
    BatteryCapacity: { value: bit16(1, t[20])},
    BatteryVoltage: { value: .01 * bit16(1, t[16])},
    BatteryTemperature: { value: bit16(0, t[19])},
    GridAVoltage: { value: .1 * bit16(1, t[0])},
    GridACurrent: { value: .1 * bit16(0, t[1])},
    FreqacA: { value: .01 * bit16(1, t[9])}
},
13 = {
    Yield_Today: { value: .1 * bit16(1, t[36])},
    Yield_Total: { value: .1 * bit32(1, t[34], t[35])},
    PowerDc1: { value: bit16(1, t[10])},
    PowerDc2: { value: bit16(1, t[13])},
    PowerDc3: { value: bit16(1, t[16])},
    BAT_Power: { value: bit16(0, t[105])},
    feedInPower: { value: bit16(0, t[29])},
    GridAPower: { value: bit16(0, t[2])},
    GridBPower: { value: bit16(0, t[5])},
    FeedInEnergy: { value: .01 * bit32(1, t[52], t[53])},
    ConsumeEnergy: { value: .01 * bit32(1, t[54], t[55])},
    RunMode: { value: bit16(1, t[17])},
    EPSAPower: { value: bit16(0, t[21])},
    EPSBPower: { value: bit16(0, t[25])},
    Vdc1: { value: .1 * bit16(1, t[8])},
    Vdc2: { value: .1 * bit16(1, t[11])},
    Vdc3: { value: .1 * bit16(1, t[14])},
    Idc1: { value: .1 * bit16(1, t[9])},
    Idc2: { value: .1 * bit16(1, t[12])},
    Idc3: { value: .1 * bit16(1, t[15])},
    EPSAVoltage: { value: .1 * bit16(1, t[19])},
    EPSBVoltage: { value: .1 * bit16(1, t[23])},
    EPSACurrent: { value: .1 * bit16(0, t[20])},
    EPSBCurrent: { value: .1 * bit16(0, t[24])},
    BatteryCapacity: { value: bit16(1, t[80])},
    BatteryVoltage: { value: .1 * bit16(0, t[106])},
    BatteryTemperature: { value: bit16(0, t[82])},
    GridAVoltage: { value: .1 * bit16(1, t[0])},
    GridBVoltage: { value: .1 * bit16(1, t[3])},
    GridACurrent: { value: .1 * bit16(0, t[1])},
    GridBCurrent: { value: .1 * bit16(0, t[4])},
    FreqacA: { value: .01 * bit16(1, t[7])}
},
14 = {
    Yield_Today: { value: .1 * bit16(1, t[70])},
    Yield_Total: { value: .1 * bit32(1, t[68], t[69])},
    PowerDc1: { value: bit16(1, t[14])},
    PowerDc2: { value: bit16(1, t[15])},
    BAT_Power: { value: bit16(0, t[41])},
    feedInPower: { value: bit32(0, t[34], t[35])},
    GridAPower: { value: bit16(0, t[6])},
    GridBPower: { value: bit16(0, t[7])},
    GridCPower: { value: bit16(0, t[8])},
    FeedInEnergy: { value: .01 * bit32(1, t[86], t[87])},
    ConsumeEnergy: { value: .01 * bit32(1, t[88], t[89])},
    RunMode: { value: bit16(1, t[19])},
    EPSAPower: { value: bit16(0, t[29])},
    EPSBPower: { value: bit16(0, t[30])},
    EPSCPower: { value: bit16(0, t[31])},
    Vdc1: { value: .1 * bit16(1, t[10])},
    Vdc2: { value: .1 * bit16(1, t[11])},
    Idc1: { value: .1 * bit16(1, t[12])},
    Idc2: { value: .1 * bit16(1, t[13])},
    EPSAVoltage: { value: .1 * bit16(1, t[23])},
    EPSBVoltage: { value: .1 * bit16(1, t[24])},
    EPSCVoltage: { value: .1 * bit16(1, t[25])},
    EPSACurrent: { value: .1 * bit16(0, t[26])},
    EPSBCurrent: { value: .1 * bit16(0, t[27])},
    EPSCCurrent: { value: .1 * bit16(0, t[28])},
    BatteryCapacity: { value: bit16(1, t[103])},
    BatteryVoltage: { value: .01 * bit32(1, t[169], t[170])},
    BatteryTemperature: { value: bit16(0, t[105])},
    GridAVoltage: { value: .1 * bit16(1, t[0])},
    GridBVoltage: { value: .1 * bit16(1, t[1])},
    GridCVoltage: { value: .1 * bit16(1, t[2])},
    GridACurrent: { value: .1 * bit16(0, t[3])},
    GridBCurrent: { value: .1 * bit16(0, t[4])},
    GridCCurrent: { value: .1 * bit16(0, t[5])},
    FreqacA: { value: .01 * bit16(1, t[16])},
    FreqacB: { value: .01 * bit16(1, t[17])},
    FreqacC: { value: .01 * bit16(1, t[18])}
},
15 = {
    Yield_Today: { value: .1 * bit16(1, t[13])},
    Yield_Total: { value: .1 * bit32(1, t[11], t[12])},
    PowerDc1: { value: bit16(1, t[8])},
    PowerDc2: { value: bit16(1, t[9])},
    BAT_Power: { value: bit16(0, t[16])},
    feedInPower: { value: bit32(0, t[32], t[33])},
    GridAPower: { value: bit16(0, t[2])},
    GridBPower: { value: 0},
    GridCPower: { value: 0},
    FeedInEnergy: { value: .01 * bit32(1, t[34], t[35])},
    ConsumeEnergy: { value: .01 * bit32(1, t[36], t[37])},
    RunMode: { value: bit16(1, t[10])},
    EPSAPower: { value: bit16(0, t[28])},
    Vdc1: { value: .1 * bit16(1, t[4])},
    Vdc2: { value: .1 * bit16(1, t[5])},
    Idc1: { value: .1 * bit16(1, t[6])},
    Idc2: { value: .1 * bit16(1, t[7])},
    EPSAVoltage: { value: .1 * bit16(1, t[29])},
    EPSACurrent: { value: .1 * bit16(0, t[30])},
    BatteryCapacity: { value: bit16(1, t[18])},
    BatteryVoltage: { value: .01 * bit16(1, t[14])},
    BatteryTemperature: { value: bit16(0, t[17])},
    GridAVoltage: { value: .1 * bit16(1, t[0])},
    GridACurrent: { value: .1 * bit16(0, t[1])},
    FreqacA: { value: .01 * bit16(1, t[3])}
},
16 = {
    Yield_Today: { value: .1 * bit16(1, t[24])},
    Yield_Total: { value: .1 * bit32(1, t[22], t[23])},
    PowerDc1: { value: bit16(1, t[15])},
    PowerDc2: { value: bit16(1, t[16])},
    PowerDc3: { value: bit16(1, t[17])},
    feedInPower: { value: bit32(0, t[72], t[73])},
    GridAPower: { value: bit16(0, t[6])},
    GridBPower: { value: bit16(0, t[7])},
    GridCPower: { value: bit16(0, t[8])},
    FeedInEnergy: { value: .01 * bit32(1, t[74], t[75])},
    ConsumeEnergy: { value: .01 * bit32(1, t[76], t[77])},
    RunMode: { value: bit16(1, t[21])},
    Vdc1: { value: .1 * bit16(1, t[9])},
    Vdc2: { value: .1 * bit16(1, t[10])},
    Vdc3: { value: .1 * bit16(1, t[11])},
    Idc1: { value: .1 * bit16(1, t[12])},
    Idc2: { value: .1 * bit16(1, t[13])},
    Idc3: { value: .1 * bit16(1, t[14])},
    GridAVoltage: { value: .1 * bit16(1, t[0])},
    GridBVoltage: { value: .1 * bit16(1, t[1])},
    GridCVoltage: { value: .1 * bit16(1, t[2])},
    GridACurrent: { value: .1 * bit16(0, t[3])},
    GridBCurrent: { value: .1 * bit16(0, t[4])},
    GridCCurrent: { value: .1 * bit16(0, t[5])},
    FreqacA: { value: .01 * bit16(1, t[18])},
    FreqacB: { value: .01 * bit16(1, t[19])},
    FreqacC: { value: .01 * bit16(1, t[20])}
},
17 = {
    Yield_Today: { value: .1 * bit16(1, t[36])},
    Yield_Total: { value: .1 * bit32(1, t[34], t[35])},
    PowerDc1: { value: bit16(1, t[10])},
    PowerDc2: { value: bit16(1, t[13])},
    PowerDc3: { value: bit16(1, t[16])},
    BAT_Power: { value: bit16(0, t[105])},
    feedInPower: { value: bit16(0, t[29])},
    GridAPower: { value: bit16(0, t[2])},
    GridBPower: { value: bit16(0, t[5])},
    FeedInEnergy: { value: .01 * bit32(1, t[52], t[53])},
    ConsumeEnergy: { value: .01 * bit32(1, t[54], t[55])},
    RunMode: { value: bit16(1, t[17])},
    EPSAPower: { value: bit16(0, t[21])},
    EPSBPower: { value: bit16(0, t[25])},
    Vdc1: { value: .1 * bit16(1, t[8])},
    Vdc2: { value: .1 * bit16(1, t[11])},
    Vdc3: { value: .1 * bit16(1, t[14])},
    Idc1: { value: .1 * bit16(1, t[9])},
    Idc2: { value: .1 * bit16(1, t[12])},
    Idc3: { value: .1 * bit16(1, t[15])},
    EPSAVoltage: { value: .1 * bit16(1, t[19])},
    EPSBVoltage: { value: .1 * bit16(1, t[23])},
    EPSACurrent: { value: .1 * bit16(0, t[20])},
    EPSBCurrent: { value: .1 * bit16(0, t[24])},
    BatteryCapacity: { value: bit16(1, t[80])},
    BatteryVoltage: { value: .1 * bit16(0, t[106])},
    BatteryTemperature: { value: bit16(0, t[82])},
    GridAVoltage: { value: .1 * bit16(1, t[0])},
    GridBVoltage: { value: .1 * bit16(1, t[3])},
    GridACurrent: { value: .1 * bit16(0, t[1])},
    GridBCurrent: { value: .1 * bit16(0, t[4])},
    FreqacA: { value: .01 * bit16(1, t[7])}
},
18,22 = {
    Yield_Today: { value: .1 * bit16(1, t[21])},
    Yield_Total: { value: .1 * bit32(1, t[19], t[20])},
    PowerDc1: { value: bit16(1, t[13])},
    PowerDc2: { value: bit16(1, t[14])},
    feedInPower: { value: bit32(0, t[72], t[73])},
    GridAPower: { value: bit16(0, t[3])},
    FeedInEnergy: { value: .01 * bit32(1, t[74], t[75])},
    ConsumeEnergy: { value: .01 * bit32(1, t[76], t[77])},
    RunMode: { value: bit16(1, t[10])},
    Vdc1: { value: .1 * bit16(1, t[4])},
    Vdc2: { value: .1 * bit16(1, t[5])},
    Idc1: { value: .1 * bit16(1, t[8])},
    Idc2: { value: .1 * bit16(1, t[9])},
    GridAVoltage: { value: .1 * bit16(1, t[0])},
    GridACurrent: { value: .1 * bit16(0, t[1])},
    FreqacA: { value: .01 * bit16(1, t[2])}
},
19,20,21 = {
    Yield_Today: { value: .1 * bit16(1, t[43])},
    Yield_Total: { value: .1 * bit32(1, t[41], t[42])},
    PowerDc1: { value: bit16(1, t[19])},
    PowerDc2: { value: bit16(1, t[20])},
    PowerDc3: { value: bit16(1, t[21])},
    BAT_Power: { value: bit16(0, t[91])},
    feedInPower: { value: bit32(0, t[28], t[29])},
    GridAPower: { value: bit16(0, t[6])},
    FeedInEnergy: { value: .1 * bit32(1, t[33], t[34])},
    ConsumeEnergy: { value: .1 * bit32(1, t[35], t[36])},
    RunMode: { value: bit8low(1, t[10])},
    EPSAPower: { value: bit16(0, t[27])},
    Vdc1: { value: .1 * bit16(1, t[11])},
    Vdc2: { value: .1 * bit16(1, t[12])},
    Vdc3: { value: .1 * bit16(1, t[13])},
    Idc1: { value: .1 * bit16(1, t[15])},
    Idc2: { value: .1 * bit16(1, t[16])},
    Idc3: { value: .1 * bit16(1, t[17])},
    EPSAVoltage: { value: .1 * bit16(1, t[24])},
    EPSACurrent: { value: .1 * bit16(0, t[25])},
    BatteryCapacity: { value: bit16(1, t[93])},
    BatteryVoltage: { value: .01 * bit16(1, t[89])},
    BatteryTemperature: { value: bit16(0, t[92])},
    GridAVoltage: { value: .1 * bit16(1, t[4])},
    GridACurrent: { value: .1 * bit16(0, t[5])},
    FreqacA: { value: .01 * bit16(1, t[7])},
    ParallelStatus: { value: bit16(1, t[80])},
    SlaverNum: { value: bit16(1, t[81])},
    ParallelOnlineStatus: { value: bit16(1, t[82])}
},
23 = {
    Yield_Today: { value: .1 * bit16(1, t[13])},
    Yield_Total: { value: .1 * bit32(1, t[11], t[12])},
    PowerDc1: { value: bit16(1, t[8])},
    PowerDc2: { value: bit16(1, t[9])},
    BAT_Power: { value: bit16(0, t[16])},
    feedInPower: { value: bit32(0, t[32], t[33])},
    GridAPower: { value: bit16(0, t[2])},
    FeedInEnergy: { value: .01 * bit32(1, t[34], t[35])},
    ConsumeEnergy: { value: .01 * bit32(1, t[36], t[37])},
    RunMode: { value: bit16(1, t[10])},
    EPSAPower: { value: bit16(0, t[28])},
    Vdc1: { value: .1 * bit16(1, t[4])},
    Vdc2: { value: .1 * bit16(1, t[5])},
    Idc1: { value: .1 * bit16(1, t[6])},
    Idc2: { value: .1 * bit16(1, t[7])},
    EPSAVoltage: { value: .1 * bit16(1, t[29])},
    EPSACurrent: { value: .1 * bit16(0, t[30])},
    BatteryCapacity: { value: bit16(1, t[18])},
    BatteryVoltage: { value: .01 * bit16(1, t[14])},
    BatteryTemperature: { value: bit16(0, t[17])},
    GridAVoltage: { value: .1 * bit16(1, t[0])},
    GridACurrent: { value: .1 * bit16(0, t[1])},
    FreqacA: { value: .01 * bit16(1, t[3])}
},
24 = {
    Yield_Today: { value: .1 * bit16(1, t[70])},
    Yield_Total: { value: .1 * bit32(1, t[71], t[72])},
    PowerDc1: { value: bit16(1, t[14])},
    PowerDc2: { value: bit16(1, t[15])},
    BAT_Power: { value: bit16(0, t[41])},
    feedInPower: { value: bit32(0, t[34], t[35])},
    GridAPower: { value: bit16(0, t[6])},
    GridBPower: { value: bit16(0, t[7])},
    GridCPower: { value: bit16(0, t[8])},
    FeedInEnergy: { value: .01 * bit32(1, t[86], t[87])},
    ConsumeEnergy: { value: .01 * bit32(1, t[88], t[89])},
    RunMode: { value: bit16(1, t[19])},
    EPSAPower: { value: bit16(0, t[29])},
    EPSBPower: { value: bit16(0, t[30])},
    EPSCPower: { value: bit16(0, t[31])},
    Vdc1: { value: .1 * bit16(1, t[10])},
    Vdc2: { value: .1 * bit16(1, t[11])},
    Idc1: { value: .1 * bit16(1, t[12])},
    Idc2: { value: .1 * bit16(1, t[13])},
    EPSAVoltage: { value: .1 * bit16(1, t[23])},
    EPSBVoltage: { value: .1 * bit16(1, t[24])},
    EPSCVoltage: { value: .1 * bit16(1, t[25])},
    EPSACurrent: { value: .1 * bit16(0, t[26])},
    EPSBCurrent: { value: .1 * bit16(0, t[27])},
    EPSCCurrent: { value: .1 * bit16(0, t[28])},
    BatteryCapacity: { value: bit16(1, t[103])},
    BatteryVoltage: { value: .01 * bit16(1, t[39])},
    BatteryTemperature: { value: bit16(0, t[105])},
    GridAVoltage: { value: .1 * bit16(1, t[0])},
    GridBVoltage: { value: .1 * bit16(1, t[1])},
    GridCVoltage: { value: .1 * bit16(1, t[2])},
    GridACurrent: { value: .1 * bit16(0, t[3])},
    GridBCurrent: { value: .1 * bit16(0, t[4])},
    GridCCurrent: { value: .1 * bit16(0, t[5])},
    FreqacA: { value: .01 * bit16(1, t[16])},
    FreqacB: { value: .01 * bit16(1, t[17])},
    FreqacC: { value: .01 * bit16(1, t[18])}
},
100,101 = {
    Yield_Today: { value: .1 * bit16(0, t[48])},
    Yield_Total: { value: .1 * bit32(0, t[46], t[47])},
    GridAPower: { value: bit32(0, t[33], t[34])},
    GridBPower: { value: bit32(0, t[35], t[36])},
    GridCPower: { value: bit32(0, t[37], t[38])},
    FeedInEnergy: { value: 0},
    ConsumeEnergy: { value: 0},
    RunMode: { value: bit16(1, t[56])},
    Vdc1: { value: .1 * bit16(0, t[87])},
    Vdc2: { value: .1 * bit16(0, t[89])},
    Vdc3: { value: .1 * bit16(0, t[91])},
    Vdc4: { value: .1 * bit16(0, t[93])},
    Vdc5: { value: .1 * bit16(0, t[95])},
    Vdc6: { value: .1 * bit16(0, t[97])},
    Vdc7: { value: .1 * bit16(0, t[99])},
    Vdc8: { value: .1 * bit16(0, t[101])},
    Vdc9: { value: .1 * bit16(0, t[103])},
    Vdc10: { value: .1 * bit16(0, t[105])},
    Vdc11: { value: .1 * bit16(0, t[107])},
    Vdc12: { value: .1 * bit16(0, t[109])},
    Idc1: { value: .1 * bit16(0, t[88])},
    Idc2: { value: .1 * bit16(0, t[90])},
    Idc3: { value: .1 * bit16(0, t[92])},
    Idc4: { value: .1 * bit16(0, t[94])},
    Idc5: { value: .1 * bit16(0, t[96])},
    Idc6: { value: .1 * bit16(0, t[98])},
    Idc7: { value: .1 * bit16(0, t[100])},
    Idc8: { value: .1 * bit16(0, t[102])},
    Idc9: { value: .1 * bit16(0, t[104])},
    Idc10: { value: .1 * bit16(0, t[106])},
    Idc11: { value: .1 * bit16(0, t[108])},
    Idc12: { value: .1 * bit16(0, t[110])},
    CurrBranch1: { value: .1 * bit16(1, t[137])},
    CurrBranch2: { value: .1 * bit16(1, t[138])},
    CurrBranch3: { value: .1 * bit16(1, t[139])},
    CurrBranch4: { value: .1 * bit16(1, t[140])},
    CurrBranch5: { value: .1 * bit16(1, t[141])},
    CurrBranch6: { value: .1 * bit16(1, t[142])},
    CurrBranch7: { value: .1 * bit16(1, t[143])},
    CurrBranch8: { value: .1 * bit16(1, t[144])},
    CurrBranch9: { value: .1 * bit16(1, t[145])},
    CurrBranch10: { value: .1 * bit16(1, t[146])},
    CurrBranch11: { value: .1 * bit16(1, t[147])},
    CurrBranch12: { value: .1 * bit16(1, t[148])},
    CurrBranch13: { value: .1 * bit16(1, t[149])},
    CurrBranch14: { value: .1 * bit16(1, t[150])},
    CurrBranch15: { value: .1 * bit16(1, t[151])},
    CurrBranch16: { value: .1 * bit16(1, t[152])},
    CurrBranch17: { value: .1 * bit16(1, t[153])},
    CurrBranch18: { value: .1 * bit16(1, t[154])},
    CurrBranch19: { value: .1 * bit16(1, t[155])},
    CurrBranch20: { value: .1 * bit16(1, t[156])},
    CurrBranch21: { value: .1 * bit16(1, t[157])},
    CurrBranch22: { value: .1 * bit16(1, t[158])},
    CurrBranch23: { value: .1 * bit16(1, t[159])},
    CurrBranch24: { value: .1 * bit16(1, t[160])},
    GridAVoltage: { value: .1 * bit16(1, t[27])},
    GridBVoltage: { value: .1 * bit16(1, t[28])},
    GridCVoltage: { value: .1 * bit16(1, t[29])},
    GridACurrent: { value: .1 * bit16(0, t[30])},
    GridBCurrent: { value: .1 * bit16(0, t[31])},
    GridCCurrent: { value: .1 * bit16(0, t[32])},
    FreqacA: { value: .01 * bit16(1, t[39])},
    derateState: { value: bit16(1, t[55])}
},
102 = {
    Yield_Today:{ value: .1 * bit16(1, t[18])}
    Yield_Total:{ value: .1 * bit32(1, t[14], t[15])}
    PowerDc1:{ value: bit16(1, t[9])}
    PowerDc2:{ value: bit16(1, t[10])}
    BAT_Power:{ value: bit16(0, t[22])}
    feedInPower:{ value: bit32(0, t[29], t[30])}
    GridAPower:{ value: bit16(0, t[2])}
    GridBPower:{ value: 0}
    GridCPower:{ value: 0}
    FeedInEnergy:{ value: .01 * bit32(1, t[31], t[32])}
    ConsumeEnergy:{ value: .01 * bit32(1, t[33], t[34])}
    RunMode:{ value: bit16(1, t[12])}
    EPSAPower:{ value: bit16(0, t[43])}
    Vdc1:{ value: .1 * bit16(1, t[5])}
    Vdc2:{ value: .1 * bit16(1, t[7])}
    Idc1:{ value: .1 * bit16(1, t[6])}
    Idc2:{ value: .1 * bit16(1, t[8])}
    EPSAVoltage:{ value: .1 * bit16(1, t[41])}
    EPSACurrent:{ value: .1 * bit16(0, t[42])}
    BatteryCapacity:{ value: bit16(1, t[18])}
    BatteryVoltage:{ value: .1 * bit16(1, t[20])}
    BatteryTemperature:{ value: bit16(0, t[17])}
    GridAVoltage:{ value: .1 * bit16(1, t[0])}
    GridACurrent:{ value: .1 * bit16(0, t[1])}
    FreqacA:{ value: .01 * bit16(1, t[3])}
}

@adambogocz
Copy link
Contributor Author

I also have conversion table for each run mode code of each inverter type

@squishykid
Copy link
Owner

Please share it all.

BTW, can I contact you by email? I have some questions

@adambogocz
Copy link
Contributor Author

And here is the run mode table

3 = {
    0: "Wait Mode",
    1: "Check Mode",
    2: "Normal Mode",
    3: "Fault Mode",
    4: "Permanent Fault Mode",
    5: "Update Mode",
    6: "EPS check mode",
    7: "EPS mode",
    8: "Self Test",
    9: "Idle Mode",
    10: "Standby Mode"
},
4 = {
    0: "Wait Mode",
    1: "Check Mode",
    2: "Normal Mode",
    3: "Fault Mode",
    4: "Permanent Fault Mode",
    5: "Update Mode"
},
5 = {
    0: "Wait Mode",
    1: "Check Mode",
    2: "Normal Mode",
    3: "Fault Mode",
    4: "Permanent Fault Mode",
    5: "Update Mode",
    6: "EPS check mode",
    7: "EPS mode",
    8: "Self Test",
    9: "Idle Mode",
    10: "PvWakeUpBat Mode",
    11: "Standby Mode"
},
6 = {
    0: "Wait Mode",
    1: "Check Mode",
    2: "Normal Mode",
    3: "Fault Mode",
    4: "Permanent Fault Mode",
    5: "Update Mode"
},
7 = {
    0: "Wait Mode",
    1: "Check Mode",
    2: "Normal Mode",
    3: "Fault Mode",
    4: "Permanent Fault Mode",
    5: "Update Mode"
},
8 = {
    0: "Wait Mode",
    1: "Check Mode",
    2: "Normal Mode",
    3: "Fault Mode",
    4: "Permanent Fault Mode",
    5: "Update Mode"
},
9 = {
    0: "Wait Mode",
    1: "Check Mode",
    2: "Normal Mode",
    3: "Fault Mode",
    4: "Permanent Fault Mode",
    5: "Update Mode",
    8: "Self Test",
    9: "Idle Mode",
    10: "Standby Mode"
},
10,11,12 = {
    0: "Wait Mode",
    1: "Check Mode",
    2: "Normal Mode",
    3: "Fault Mode",
    4: "Permanent Fault Mode",
    5: "Update Mode",
    6: "EPS check mode",
    7: "EPS mode",
    8: "Self Test",
    9: "Idle Mode",
    10: "Gen Check Mmode",
    11: "Gen Run Mode",
    12: "RSD Standby"
},
13 = {
    0: "Wait Mode",
    1: "Check Mode",
    2: "Normal Mode",
    3: "Fault Mode",
    4: "Permanent Fault Mode",
    5: "Update Mode",
    6: "EPS check mode",
    7: "EPS mode",
    8: "Self Test",
    9: "Idle Mode",
    10: "Standby Mode"
},
14 = {
    0: "Wait Mode",
    1: "Check Mode",
    2: "Normal Mode",
    3: "Fault Mode",
    4: "Permanent Fault Mode",
    5: "Update Mode",
    6: "EPS check mode",
    7: "EPS mode",
    8: "Self Test",
    9: "Idle Mode",
    10: "Standby Mode"
},
15 = {
    0: "Waiting",
    1: "Checking",
    2: "Normal",
    3: "Fault",
    4: "Permanent Fault",
    5: "Upgrade",
    6: "EPS Waiting",
    7: "EPS",
    8: "Self Testing",
    9: "Idle",
    10: "Standby"
},
16 = {
    0: "Wait Mode",
    1: "Check Mode",
    2: "Normal Mode",
    3: "Fault Mode",
    4: "Permanent Fault Mode",
    5: "Update Mode"
},
17 = {
    0: "Wait Mode",
    1: "Check Mode",
    2: "Normal Mode",
    3: "Fault Mode",
    4: "Permanent Fault Mode",
    5: "Update Mode",
    6: "EPS check mode",
    7: "EPS mode",
    8: "Self Test",
    9: "Idle Mode",
    10: "Standby Mode"
},
18,22 = {
    0: "Wait Mode",
    1: "Check Mode",
    2: "Normal Mode",
    3: "Fault Mode",
    4: "Permanent Fault Mode",
    5: "Update Mode",
    6: "EpsCheckMode",
    7: "EpsMode"
},
19,20,21 = {
    0: "Wait Mode",
    1: "Check Mode",
    2: "Normal Mode",
    3: "Fault Mode",
    4: "Permanent Fault Mode",
    5: "Update Mode",
    6: "EPS Check Mode",
    7: "EPS Mode",
    8: "Self Test",
    9: "IdleMode",
    10: "StandbyMode",
    11: "Gen Check Mode",
    12: "Gen Run Mode",
    13: "RSD Standby"
},
100,101 = {
    0: "InitMode",
    1: "IdleMode",
    2: "StartMode",
    3: "RunMode",
    4: "FaultMode",
    5: "UpdateMode"
},
24 = {
    0: "Wait Mode",
    1: "Check Mode",
    2: "Normal Mode",
    3: "Fault Mode",
    4: "Permanent Fault Mode",
    5: "Update Mode",
    6: "EPS check mode",
    7: "EPS mode",
    8: "Self Test",
    9: "Idle Mode",
    10: "Standby Mode"
},
23 = {
    0: "Waiting",
    1: "Checking",
    2: "Normal",
    3: "Fault",
    4: "Permanent Fault",
    5: "Upgrade",
    6: "EPS Waiting",
    7: "EPS",
    8: "Self Testing",
    9: "Idle",
    10: "Standby"
}

@squishykid
Copy link
Owner

ConsumeEnergy: { value: .01 * bit32(1, t[36], t[37])},

Could you also please share which inverter name is which type in the list?

@adambogocz
Copy link
Contributor Author

adambogocz commented Dec 20, 2022

I haven't got the mapping from the same source, but it can be found here https://www.solaxcloud.com/user_api/SolaxCloud_User_Monitoring_API_V6.1.pdf

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants