squishykid / solax

🌞 Solax Inverter API Wrapper
MIT License
102 stars 61 forks source link

Lookup tables for every(most) Solax Inverter #101

Open adambogocz opened 1 year ago

adambogocz commented 1 year ago

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

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 commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

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

squishykid commented 1 year ago

Please share it all.

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

adambogocz commented 1 year ago

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 commented 1 year ago

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

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

adambogocz commented 1 year ago

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