assembly12 / Foxess-T-series-ESPHome-Home-Assistant

Read out Foxess T-Series Inverter to Home Assistant by using ESPHome
32 stars 6 forks source link

Improvement idea: structure repo to work as an external_components for ESPHome #21

Open spitfire opened 9 months ago

spitfire commented 9 months ago

https://esphome.io/components/external_components.html#example-of-local-components

SibrenVasse commented 2 months ago

I've started working on this, you can check my progress on my fork: https://github.com/SibrenVasse/Foxess-T-series-ESPHome-Home-Assistant

spitfire commented 2 months ago

I've started working on this, you can check my progress on my fork: https://github.com/SibrenVasse/Foxess-T-series-ESPHome-Home-Assistant

Hey, first of all thanks for working on that! I've tried to migrate over by changing

includes:
     - templates/Foxess-T-series-ESPHome-Home-Assistant/foxess_t_series.h

from this repo to

external_components:
  - source:
      type: git
      url: https://github.com/SibrenVasse/Foxess-T-series-ESPHome-Home-Assistant    

shown in your example yaml.

Unfortunately it spawned this error at compile time:

/config/foxess-inverter.yaml: In lambda function:
/config/foxess-inverter.yaml:122:32: error: expected type-specifier before 'foxesscomponent'
     auto foxesssensors = new foxesscomponent(id(uart_bus));
                                ^~~~~~~~~~~~~~~
/config/foxess-inverter.yaml:158:7: error: could not convert '{<expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>, <expression error>}' from '<brace-enclosed initializer list>' to 'std::vector<esphome::sensor::Sensor*>'
     };
       ^

which seem to be related to lambda function from https://github.com/assembly12/Foxess-T-series-ESPHome-Home-Assistant/blob/main/foxess-inverter.yaml (line 61-100 here).

Is there any way to cleanly replace that? I've seen your https://github.com/SibrenVasse/Foxess-T-series-ESPHome-Home-Assistant/blob/main/foxess-inverter.yaml.example, but I'm afraid it would completely replace my entity names and anything depending on them in the process.

SibrenVasse commented 2 months ago

You have to replace everything below the 'uart:' section with the sections from the new yaml example.

If you're worried about entities changing name in Home Asisstant, you have to make sure the new sensor has the same 'name' field in the yaml file. Like this:

button:
  - platform: restart
    name: "Foxess inverter restart"

text_sensor:
  - platform: template
    name: "T-Series Inverter Mode"
    id: "inverter_mode_text_sensor"
    icon: mdi:solar-power-variant

sensor:
  - platform: foxess_solar
    phase_a:
      voltage:
        name: "T-Series Grid Voltage R"
      current:
        name: "T-Series Grid Current R"
      active_power:
        name: "T-Series Grid Power R"
      frequency:
        name: "T-Series Grid Frequency R"
    phase_b:
      voltage:
        name: "T-Series Grid Voltage S"
      current:
        name: "T-Series Grid Current S"
      active_power:
        name: "T-Series Grid Power S"
      frequency:
        name: "T-Series Grid Frequency S"
    phase_c:
      voltage:
        name: "T-Series Grid Voltage T"
      current:
        name: "T-Series Grid Current T"
      active_power:
        name: "T-Series Grid Power T"
      frequency:
        name: "T-Series Grid Frequency T"

    pv1:
      voltage:
        name: "T-Series PV1 Voltage"
      current:
        name: "T-Series PV1 Current"
      active_power:
        name: "T-Series PV1 Power"
    pv2:
      voltage:
        name: "T-Series PV2 Voltage"
      current:
        name: "T-Series PV2 Current"
      active_power:
        name: "T-Series PV2 Power"
    pv3:
      voltage:
        name: "T-Series PV3 Voltage"
      current:
        name: "T-Series PV3 Current"
      active_power:
        name: "T-Series PV3 Power"
    pv4:
      voltage:
        name: "T-Series PV4 Voltage"
      current:
        name: "T-Series PV4 Current"
      active_power:
        name: "T-Series PV4 Power"

    total_energy_production:
      name: "T-Series Generation Total"
    energy_production_day:
      name: "T-Series Today Yield"

    generation_power:
      name: "T-Series Generation Power"
    grid_power:
      name: "T-Series Grid Power"
    loads_power:
      name: "T-Series loads Power"

    inverter_temp:
      name: "T-Series Inverter Temperature"
    ambient_temp:
      name: "T-Series Ambient Temperature"
    boost_temp:
      name: "T-Series Boost Temperature"

    inverter_status:
      name: "T-Series Inverter State"
      internal: true
      on_value:
        then:
          - lambda: |-
              if (x==0) {
                id(inverter_mode_text_sensor).publish_state("Offline");
              } else if (x==1) {
                id(inverter_mode_text_sensor).publish_state("Online");
              } else if (x==2) {
                id(inverter_mode_text_sensor).publish_state("Error");
              } else {
                id(inverter_mode_text_sensor).publish_state("Waiting for response...");
              }

# Uncomment this sensor and the i2c section to use the AHT10
#  - platform: aht10
#    temperature:
#      name: "Foxess inverter ambient Temperature"
#    humidity:
#      name: "Foxess inverter ambient Humidity"

#i2c: