Reading Data from Solaredge inverters via Modbus TCP

things

Bridge      modbus:tcp:solaredge                               "Solaredge Modbus"                                                       [ host="solaredge.lan", port=502, id=1, enableDiscovery=true ]
{
    Bridge      poller battery                                     "SolarEdge Battery"                                                      [ start=57664, length=90, refresh=15000, type="holding" ] //0xE140 - 0xE19A
    {
        Thing       data batteryTemperature                            "SolarEdge Battery Temperature"                                          [ readStart="57708", readValueType="float32_swap" ]   // 0xE16C
        Thing       data batteryPower                                  "SolarEdge Battery Current Power"                                        [ readStart="57716", readValueType="float32_swap" ]   // 0xE174
        Thing       data batteryLifetimeExport                         "SolarEdge Battery Lifetime Export"                                      [ readStart="57718", readValueType="int64_swap" ]     // 0xE176
        Thing       data batteryLifetimeImport                         "SolarEdge Battery Lifetime Import"                                      [ readStart="57722", readValueType="int64_swap" ]     // 0xE17A
        Thing       data batteryMaxEnergy                              "SolarEdge Battery Max Energy"                                           [ readStart="57726", readValueType="float32_swap" ]   // 0xE17E
        Thing       data batteryAvailableEnergy                        "SolarEdge Battery Available Energy"                                     [ readStart="57728", readValueType="float32_swap" ]   // 0xE180
        Thing       data batterySOH                                    "SolarEdge Battery SOH"                                                  [ readStart="57730", readValueType="float32_swap" ]   // 0xE182
        Thing       data batterySOE                                    "SolarEdge Battery SOC"                                                  [ readStart="57732", readValueType="float32_swap" ]   // 0xE184
        Thing       data batteryStatus                                 "SolarEdge Battery Status"                                               [ readStart="57734", readValueType="int32_swap" ]     // 0xE186
    }
}
Thing       modbus:inverter-single-phase:solaredge:se5000h     "SolarEdge SE5000H"                    (modbus:tcp:solaredge)            [ address=40069, length=52, refresh=15 ]
Thing       modbus:meter-wye-phase:solaredge:meter             "SolarEdge Meter"                      (modbus:tcp:solaredge)            [ address=40188, length=107, refresh=15 ]

items

Number:Power            SE_TOTAL_POWER           "Total Real Power [%.2f kW]"                             <energy>                                             { unit="kW", channel="modbus:meter-wye-phase:solaredge:meter:acGeneral#ac-total-real-power" }
Number:Power            SE_P1_POWER              "Phase 1 Real Power [%.2f kW]"                           <energy>                                             { unit="kW", channel="modbus:meter-wye-phase:solaredge:meter:acPhaseA#ac-real-power" }
Number:Power            SE_P2_POWER              "Phase 2 Real Power [%.2f kW]"                           <energy>                                             { unit="kW", channel="modbus:meter-wye-phase:solaredge:meter:acPhaseB#ac-real-power" }
Number:Power            SE_P3_POWER              "Phase 3 Real Power [%.2f kW]"                           <energy>                                             { unit="kW", channel="modbus:meter-wye-phase:solaredge:meter:acPhaseC#ac-real-power" }
Number:Energy           SE_LT_IMPORT             "Lifetime Import [%.1f kWh]"                             <carbondioxide>                                      { unit="kWh", channel="modbus:meter-wye-phase:solaredge:meter:acGeneral#ac-total-imported-real-energy" }
Number:Energy           SE_LT_EXPORT             "Lifetime Export [%.1f kWh]"                             <piggybank>                                          { unit="kWh", channel="modbus:meter-wye-phase:solaredge:meter:acGeneral#ac-total-exported-real-energy" }
Number                  SE_BATT_TEMP             "Battery Temperature [%d °C]"                                                                                 { channel="modbus:data:solaredge:battery:batteryTemperature:number" }
Number                  SE_BATT_CHARGE_DISCHARGE "Battery Current Power [JS(transformToKW.js):%s]"                                                             { channel="modbus:data:solaredge:battery:batteryPower:number" }
Number                  SE_BATT_LT_EXPORT        "Battery Lifetime Export [JS(transformToKWh.js):%s]"                                                          { channel="modbus:data:solaredge:battery:batteryLifetimeExport:number" }
Number                  SE_BATT_LT_IMPORT        "Battery Lifetime Import [JS(transformToKWh.js):%s]"                                                          { channel="modbus:data:solaredge:battery:batteryLifetimeImport:number" }
Number                  SE_BATT_MAX_ENERGY       "Battery Max Energy"                                                                                          { channel="modbus:data:solaredge:battery:batteryMaxEnergy:number" }
Number                  SE_BATT_CURR_ENERGY      "Battery Available Energy"                                                                                    { channel="modbus:data:solaredge:battery:batteryAvailableEnergy:number" }
Number                  SE_BATT_SOH              "Battery SOH [%d %%]"                                                                                         { channel="modbus:data:solaredge:battery:batterySOH:number" }
Number                  SE_BATT_BATT_LEVEL       "Battery SOC [%d %%]"                                    <battery>                                            { channel="modbus:data:solaredge:battery:batterySOE:number" }
Number                  SE_BATT_STATUS           "Battery Status [MAP(solarEdgeBatteryStatus.map):%s]"                                                         { channel="modbus:data:solaredge:battery:batteryStatus:number" }

transformToKW

// Wrap everything in a function (no global variable pollution)
// variable "input" contains data string passed by binding
(function(inputData) {
    // convert from Wh to kWh
    return Math.round( parseFloat(inputData) / 10 ) / 100 + " kW";
})(input)

transformToKWh

// Wrap everything in a function (no global variable pollution)
// variable "input" contains data string passed by binding
(function(inputData) {
    // convert from Wh to kWh
    return Math.round( parseFloat(inputData) / 1000 ) + " kWh";
})(input)

I found out that at least for my TESLA some datapoints do not return useful data:

  • Battery Max Energy
  • Battery Available Energy
  • Battery SOH