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

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

Latest firmware broke integration #15

Open giedriuskilcauskas opened 11 months ago

giedriuskilcauskas commented 11 months ago

It seems that latest firmware broke integration. most of the fields seems to be showing weird values: image These are versions currently installed: image

@assembly12 ,Would you mind looking into that?

Thanks, Giedrius

hartmut58 commented 11 months ago

Hi, it is a firmware problem. Downgrade to manager 1.20 and it works. Hartmut

Tanil2008 commented 11 months ago

Hi. I have the same problem even though the manager's version is 1.20. Please help. obraz obraz

assembly12 commented 11 months ago

Hi, i'm working on adding support for the new firmware (new protocol). Link to HA Forum I'm allmost there, just waiting for the confirmation on the generation power.

giedriuskilcauskas commented 11 months ago

Hi, i'm working on adding support for the new firmware (new protocol). Link to HA Forum I'm allmost there, just waiting for the confirmation on the generation power.

I confirm that 16/15 shows generation power. Without shifting that was grid power previously, not sure where it is now

hartmut58 commented 11 months ago

Hello, here is a Node-Red export, the addresses are not fully checked. But for my purposes (iobroker) it is enough. Hope you can do something with it.

Greetings hartmut

{ "type": "int16be", "name": "GridPower", "offset": 15, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "int16be", "name": "GenerationPower", "offset": 17, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "int16be", "name": "LoadsPower", "offset": 19, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, }, { "type": "int16be", "name": "GridCurrent_R", "offset": 23, "length": 1, "offsetbit": 0, "scale": "0.1", "mask": "" }, { "type": "uint16be", "name": "GridFrequency_R", "offset": 25, "length": 1, "offsetbit": 0, "scale": "0.01", "mask": "" }, { "type": "int16be", "name": "GridPower_R", "offset": 27, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "uint16be", "name": "GridVoltage_S", "offset": 29, "length": 1, "offsetbit": 0, "scale": "0.1", "mask": "" }, { "type": "int16be", "name": "GridCurrent_S", "offset": 31, "length": 1, "offsetbit": 0, "scale": "0.1", "mask": "" }, { "type": "uint16be", "name": "GridFrequency_S", "offset": 33, "length": 1, "offsetbit": 0, "scale": "0.01", "mask": "" }, { "type": "int16be", "name": "GridPower_S", "offset": 35, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "uint16be", "name": "GridVoltage_T", "offset": 37, "length": 1, "offsetbit": 0, "scale": "0.1", "mask": "" }, { "type": "int16be", "name": "GridCurrent_T", "offset": 39, "length": 1, "offsetbit": 0, "scale": "0.1", "mask": "" }, { "type": "uint16be", "name": "GridFrequency_T", "offset": 41, "length": 1, "offsetbit": 0, "scale": "0.01", "mask": "" }, { "type": "int16be", "name": "GridPower_T", "offset": 43, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "uint16be", "name": "PV1Voltage", "offset": 45, "length": 1, "offsetbit": 0, "scale": "0.1", "mask": "" }, { "type": "uint16be", "name": "PV1Current", "offset": 47, "length": 1, "offsetbit": 0, "scale": "0.1", "mask": "" }, { "type": "uint16be", "name": "PV1Power", "offset": 49, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "uint16be", "name": "PV2Voltage", "offset": 51, "length": 1, "offsetbit": 0, "scale": "0.1", "mask": "" }, { "type": "uint16be", "name": "PV2Current", "offset": 53, "length": 1, "offsetbit": 0, "scale": "0.1", "mask": "" }, { "type": "uint16be", "name": "PV2Power", "offset": 55, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "int16be", "name": "BoostTemperatur", "offset": 69, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "int16be", "name": "InverterTemperatur", "offset": 71, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "int16be", "name": "AmbientTemperatur", "offset": 73, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "uint16be", "name": "TodayYield", "offset": 75, "length": 1, "offsetbit": 0, "scale": "0.1", "mask": "" }, { "type": "uint32be", "name": "GenerationTotal", "offset": 77, "length": 1, "offsetbit": 0, "scale": "0.1", "mask": "" }, { "type": "uint32be", "name": "FromGridYieldGeneration", "offset": 81, "length": 1, "offsetbit": 0, "scale": "0.1", "mask": "" }, { "type": "uint32be", "name": "FeedInGeneration1", "offset": 85, "length": 1, "offsetbit": 0, "scale": "0.1", "mask": "" }, { "type": "uint32be", "name": "FeedInGeneration2", "offset": 89, "length": 1, "offsetbit": 0, "scale": "0.1", "mask": "" }, { "type": "uint32be", "name": "ConsumptionGeneration1", "offset": 93, "length": 1, "offsetbit": 0, "scale": "0.1", "mask": "" }, { "type": "uint32be", "name": "ConsumptionGeneration2", "offset": 97, "length": 1, "offsetbit": 0, "scale": "0.1", "mask": "" }, { "type": "uint32be", "name": "LoadsGeneration", "offset": 101, "length": 1, "offsetbit": 0, "scale": "0.1", "mask": "" }, { "type": "int16be", "name": "EpsVoltageR", "offset": 105, "length": 1, "offsetbit": 0, "scale": "0.1", "mask": "" }, { "type": "int16be", "name": "EpsCurrentR", "offset": 107, "length": 1, "offsetbit": 0, "scale": "0.1", "mask": "" }, { "type": "int16be", "name": "EpsPowerR", "offset": 109, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "int16be", "name": "Rev_1", "offset": 111, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "int16be", "name": "Rev_2", "offset": 113, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "int16be", "name": "Rev_3", "offset": 115, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "int16be", "name": "Rev_4", "offset": 117, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "int16be", "name": "Rev_5", "offset": 119, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "int16be", "name": "Rev_6", "offset": 121, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "int16be", "name": "Rev_7", "offset": 123, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "int16be", "name": "Rev_8", "offset": 125, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "int16be", "name": "Rev_9", "offset": 127, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "int16be", "name": "Rev_10", "offset": 129, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "uint32be", "name": "FaultMessage_DWORD1", "offset": 131, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "uint32be", "name": "FaultMessage_DWORD2", "offset": 135, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "uint32be", "name": "FaultMessage_DWORD3", "offset": 139, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "uint32be", "name": "FaultMessage_DWORD4", "offset": 143, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "uint32be", "name": "FaultMessage_DWORD5", "offset": 147, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "uint32be", "name": "FaultMessage_DWORD6", "offset": 151, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "uint32be", "name": "FaultMessage_DWORD7", "offset": 155, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "uint32be", "name": "FaultMessage_DWORD8", "offset": 159, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "uint16be", "name": "Master State", "offset": 163, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }, { "type": "uint16be", "name": "PV Input Number", "offset": 165, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" }


Von: Giedrius Kilčauskas @.> Gesendet: Sonntag, 6. August 2023 17:30 An: assembly12/Foxess-T-series-ESPHome-Home-Assistant @.> Cc: hartmut58 @.>; Comment @.> Betreff: Re: [assembly12/Foxess-T-series-ESPHome-Home-Assistant] Latest firmware broke integration (Issue #15)

Hi, i'm working on adding support for the new firmware (new protocol). Link to HA Forumhttps://community.home-assistant.io/t/foxess-inverter-modbus/459313/164?u=assembly I'm allmost there, just waiting for the confirmation on the generation power.

I confirm that 16/15 shows generation power. Without shifting that was grid power previously, not sure where it is now

— Reply to this email directly, view it on GitHubhttps://github.com/assembly12/Foxess-T-series-ESPHome-Home-Assistant/issues/15#issuecomment-1666896911, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ATO6YUZLWABRJGUPTNWBOITXT62B3ANCNFSM6AAAAAA3COMLXA. You are receiving this because you commented.Message ID: @.***>

hartmut58 commented 11 months ago

Hello, just tested - 15/16 generation power 175/176 grid power

Greetings Hartmut


Von: Giedrius Kilčauskas @.> Gesendet: Sonntag, 6. August 2023 17:30 An: assembly12/Foxess-T-series-ESPHome-Home-Assistant @.> Cc: hartmut58 @.>; Comment @.> Betreff: Re: [assembly12/Foxess-T-series-ESPHome-Home-Assistant] Latest firmware broke integration (Issue #15)

Hi, i'm working on adding support for the new firmware (new protocol). Link to HA Forumhttps://community.home-assistant.io/t/foxess-inverter-modbus/459313/164?u=assembly I'm allmost there, just waiting for the confirmation on the generation power.

I confirm that 16/15 shows generation power. Without shifting that was grid power previously, not sure where it is now

— Reply to this email directly, view it on GitHubhttps://github.com/assembly12/Foxess-T-series-ESPHome-Home-Assistant/issues/15#issuecomment-1666896911, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ATO6YUZLWABRJGUPTNWBOITXT62B3ANCNFSM6AAAAAA3COMLXA. You are receiving this because you commented.Message ID: @.***>

Tanil2008 commented 10 months ago

Here is the effect of my tests: foxess_t_series.zip To determine the bits T-Series Grid Current R, T-Series Grid Current S, T-Series Grid Current T - because they show bad data. My inverter: Foxess T5 G3, manager 1.20.

hartmut58 commented 10 months ago

[cid:7c305820-fbfb-4b01-b92a-da9eb3c649e4]

Hello, I think so it is ok, please test.


Von: Tanil2008 @.> Gesendet: Dienstag, 8. August 2023 20:08 An: assembly12/Foxess-T-series-ESPHome-Home-Assistant @.> Cc: hartmut58 @.>; Comment @.> Betreff: Re: [assembly12/Foxess-T-series-ESPHome-Home-Assistant] Latest firmware broke integration (Issue #15)

Here is the effect of my tests: foxess_t_series.ziphttps://github.com/assembly12/Foxess-T-series-ESPHome-Home-Assistant/files/12294568/foxess_t_series.zip To determine the bits T-Series Grid Current R, T-Series Grid Current S, T-Series Grid Current T - because they show bad data. My inverter: Foxess T5 G3, manager 1.20.

— Reply to this email directly, view it on GitHubhttps://github.com/assembly12/Foxess-T-series-ESPHome-Home-Assistant/issues/15#issuecomment-1670071326, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ATO6YU5DRF6KDZCAEBUDHW3XUJ6BNANCNFSM6AAAAAA3COMLXA. You are receiving this because you commented.Message ID: @.***>

include "esphome.h"

unsigned long millis_lastmessage = 0; const long inverter_timeout = 300000; int inverter_mode = 99; //0=Offline, 1=Online, 2=Error, 99=Waiting for response...

class foxesscomponent : public PollingComponent, public Sensor, public UARTDevice { public: foxesscomponent(UARTComponent *parent) : PollingComponent(600), UARTDevice(parent) {}

Sensor frame_header = new Sensor; Sensor function_code = new Sensor; Sensor time_stamp = new Sensor; Sensor data_length = new Sensor; Sensor grid_power = new Sensor; Sensor generation_power = new Sensor; Sensor loads_power = new Sensor; Sensor grid_voltage_r = new Sensor; Sensor grid_current_r = new Sensor; Sensor grid_frequency_r = new Sensor; Sensor grid_power_r = new Sensor; Sensor grid_voltage_s = new Sensor; Sensor grid_current_s = new Sensor; Sensor grid_frequency_s = new Sensor; Sensor grid_power_s = new Sensor; Sensor grid_voltage_T = new Sensor; Sensor grid_current_T = new Sensor; Sensor grid_frequency_T = new Sensor; Sensor grid_power_T = new Sensor; Sensor pv1_voltage = new Sensor; Sensor pv1_current = new Sensor; Sensor pv1_power = new Sensor; Sensor pv2_voltage = new Sensor; Sensor pv2_current = new Sensor; Sensor pv2_power = new Sensor; Sensor pv3_voltage = new Sensor; Sensor pv3_current = new Sensor; Sensor pv3_power = new Sensor; Sensor pv4_voltage = new Sensor; Sensor pv4_current = new Sensor; Sensor pv4_power = new Sensor; Sensor boost_temperature = new Sensor; Sensor inverter_temperature = new Sensor; Sensor ambient_temperature = new Sensor; Sensor today_yield = new Sensor; Sensor generation_total = new Sensor; Sensor from_grid_yield_generation = new Sensor; Sensor inverter_state = new Sensor;

void setup() override { id(inverter_state).publish_state(inverter_mode); millis_lastmessage = millis(); }

std::vector bytes;

//void loop() override { void update() { if(millis_lastmessage + inverter_timeout < millis()) { if(inverter_mode != 0){ inverter_mode = 0; //offline id(inverter_state).publish_state(inverter_mode); id(generation_power).publish_state(0); id(grid_current_r).publish_state(0); id(grid_power_r).publish_state(0); id(grid_current_T).publish_state(0); id(grid_power_T).publish_state(0); id(grid_current_s).publish_state(0); id(grid_power_s).publish_state(0); id(pv1_current).publish_state(0); id(pv1_power).publish_state(0); id(pv2_current).publish_state(0); id(pv2_power).publish_state(0); id(pv3_current).publish_state(0); id(pv3_power).publish_state(0); id(pv4_current).publish_state(0); id(pv4_power).publish_state(0); } } while(available() > 0) { bytes.push_back(read()); //ESP_LOGD("custom", "reading bytes");

  //make sure at least 9 header bytes are available to check
  if(bytes.size() < 9){
    continue;
  }

  if(bytes[0] != 0x7E || bytes[1] != 0x7E || bytes[2] != 0x02) {
    bytes.erase(bytes.begin()); //remove first byte from buffer
    //buffer will never get above 9 until the header is correct
    continue;
  }
  else {
  }

  //if(bytes.size() == 9) { //>=
    TwoByte message_length;
    message_length.Byte[0] = bytes[8];
    message_length.Byte[1] = bytes[7];
    uint16_t total_message_length = message_length.UInt16 + 13;
  //}

  if(bytes.size() == total_message_length) { //>=
  //if(bytes.size() == 165) { //>=
    if(bytes[total_message_length-1] != 0xE7 || bytes[total_message_length-2] != 0xE7) {
    //if(bytes[164] != 0xE7 || bytes[163] != 0xE7) {
      bytes.clear();
      ESP_LOGD("custom", "error in reading message");
      continue;
    }
    ESP_LOGD("custom", "succesfully read realtime data");
    ESP_LOGI("custom", "User data length: %i", message_length.UInt16);
    ESP_LOGI("custom", "Total message length: %i", total_message_length);
    millis_lastmessage = millis();
    inverter_mode = 1;

    TwoByte grid_power_value;
    grid_power_value.Byte[0] = bytes[176];
    grid_power_value.Byte[1] = bytes[175];
    id(grid_power).publish_state(grid_power_value.UInt16);
    delay(50);

    TwoByte generation_power_value;
    generation_power_value.Byte[0] = bytes[16];
    generation_power_value.Byte[1] = bytes[15];
    id(generation_power).publish_state(generation_power_value.Int16);
    delay(50);

    TwoByte loads_power_value;
    loads_power_value.Byte[0] = bytes[20];
    loads_power_value.Byte[1] = bytes[19];
    id(loads_power).publish_state(loads_power_value.Int16);
    delay(50);

    TwoByte grid_voltage_r_value;
    grid_voltage_r_value.Byte[0] = bytes[22];
    grid_voltage_r_value.Byte[1] = bytes[21];
    id(grid_voltage_r).publish_state(grid_voltage_r_value.UInt16);
    delay(50);

    TwoByte grid_current_r_value;
    grid_current_r_value.Byte[0] = bytes[24];
    grid_current_r_value.Byte[1] = bytes[23];
    id(grid_current_r).publish_state(grid_current_r_value.Int16);
    delay(50);

    TwoByte grid_frequency_r_value;
    grid_frequency_r_value.Byte[0] = bytes[26];
    grid_frequency_r_value.Byte[1] = bytes[25];
    id(grid_frequency_r).publish_state(grid_frequency_r_value.UInt16);
    delay(50);

    TwoByte grid_power_r_value;
    grid_power_r_value.Byte[0] = bytes[28];
    grid_power_r_value.Byte[1] = bytes[27];
    id(grid_power_r).publish_state(grid_power_r_value.Int16);
    delay(50);

    TwoByte grid_voltage_s_value;
    grid_voltage_s_value.Byte[0] = bytes[30];
    grid_voltage_s_value.Byte[1] = bytes[29];
    id(grid_voltage_s).publish_state(grid_voltage_s_value.UInt16);
    delay(50);

    TwoByte grid_current_s_value;
    grid_current_s_value.Byte[0] = bytes[32];
    grid_current_s_value.Byte[1] = bytes[31];
    id(grid_current_s).publish_state(grid_current_s_value.Int16);
    delay(50);

    TwoByte grid_frequency_s_value;
    grid_frequency_s_value.Byte[0] = bytes[34];
    grid_frequency_s_value.Byte[1] = bytes[33];
    id(grid_frequency_s).publish_state(grid_frequency_s_value.UInt16);
    delay(50);

    TwoByte grid_power_s_value;
    grid_power_s_value.Byte[0] = bytes[36];
    grid_power_s_value.Byte[1] = bytes[35];
    id(grid_power_s).publish_state(grid_power_s_value.UInt16);
    delay(50);

    TwoByte grid_voltage_T_value;
    grid_voltage_T_value.Byte[0] = bytes[38];
    grid_voltage_T_value.Byte[1] = bytes[37];
    id(grid_voltage_T).publish_state(grid_voltage_T_value.UInt16);
    delay(50);

    TwoByte grid_current_T_value;
    grid_current_T_value.Byte[0] = bytes[40];
    grid_current_T_value.Byte[1] = bytes[39];
    id(grid_current_T).publish_state(grid_current_T_value.UInt16);
    delay(50);

    TwoByte grid_frequency_T_value;
    grid_frequency_T_value.Byte[0] = bytes[42];
    grid_frequency_T_value.Byte[1] = bytes[41];
    id(grid_frequency_T).publish_state(grid_frequency_T_value.UInt16);
    delay(50);

    TwoByte grid_power_T_value;
    grid_power_T_value.Byte[0] = bytes[44];
    grid_power_T_value.Byte[1] = bytes[43];
    id(grid_power_T).publish_state(grid_power_T_value.UInt16);
    delay(50);

    TwoByte pv1_voltage_value;
    pv1_voltage_value.Byte[0] = bytes[46];
    pv1_voltage_value.Byte[1] = bytes[45];
    id(pv1_voltage).publish_state(pv1_voltage_value.UInt16);
    delay(50);

    TwoByte pv1_current_value;
    pv1_current_value.Byte[0] = bytes[48];
    pv1_current_value.Byte[1] = bytes[47];
    id(pv1_current).publish_state(pv1_current_value.UInt16);
    delay(50);

    TwoByte pv2_voltage_value;
    pv2_voltage_value.Byte[0] = bytes[52];
    pv2_voltage_value.Byte[1] = bytes[51];
    id(pv2_voltage).publish_state(pv2_voltage_value.UInt16);
    delay(50);

    TwoByte pv2_current_value;
    pv2_current_value.Byte[0] = bytes[54];
    pv2_current_value.Byte[1] = bytes[53];
    id(pv2_current).publish_state(pv2_current_value.UInt16);
    delay(50);

    TwoByte pv3_voltage_value;
    pv3_voltage_value.Byte[0] = bytes[58];
    pv3_voltage_value.Byte[1] = bytes[57];
    id(pv3_voltage).publish_state(pv3_voltage_value.UInt16);
    delay(50);

    TwoByte pv3_current_value;
    pv3_current_value.Byte[0] = bytes[60];
    pv3_current_value.Byte[1] = bytes[59];
    id(pv3_current).publish_state(pv3_current_value.UInt16);
    delay(50);

    TwoByte pv4_voltage_value;
    pv4_voltage_value.Byte[0] = bytes[64];
    pv4_voltage_value.Byte[1] = bytes[63];
    id(pv4_voltage).publish_state(pv4_voltage_value.UInt16);
    delay(50);

    TwoByte pv4_current_value;
    pv4_current_value.Byte[0] = bytes[66];
    pv4_current_value.Byte[1] = bytes[65];
    id(pv4_current).publish_state(pv4_current_value.UInt16);
    delay(50);

    TwoByte boost_temperature_value;
    boost_temperature_value.Byte[0] = bytes[70];
    boost_temperature_value.Byte[1] = bytes[69];
    id(boost_temperature).publish_state(boost_temperature_value.UInt16);
    delay(50);

    TwoByte inverter_temperature_value;
    inverter_temperature_value.Byte[0] = bytes[72];
    inverter_temperature_value.Byte[1] = bytes[71];
    id(inverter_temperature).publish_state(inverter_temperature_value.UInt16);
    delay(50);

    TwoByte ambient_temperature_value;
    ambient_temperature_value.Byte[0] = bytes[74];
    ambient_temperature_value.Byte[1] = bytes[73];
    id(ambient_temperature).publish_state(ambient_temperature_value.UInt16);
    delay(50);

    TwoByte today_yield_value;
    today_yield_value.Byte[0] = bytes[76];
    today_yield_value.Byte[1] = bytes[75];
    id(today_yield).publish_state(today_yield_value.UInt16);
    delay(50);

    uint32_t generation_total_value = int(
        (unsigned char)(bytes[77]) << 24 |
        (unsigned char)(bytes[78]) << 16 |
        (unsigned char)(bytes[79]) << 8 |
        (unsigned char)(bytes[80]));
    id(generation_total).publish_state(generation_total_value);
    delay(50);

    uint32_t FaultMessage1_value = int( 
        (unsigned char)(bytes[131]) << 24 | 
        (unsigned char)(bytes[132]) << 16 | 
        (unsigned char)(bytes[133]) << 8 | 
        (unsigned char)(bytes[134])); 
        delay(50);

    uint32_t FaultMessage2_value = int( 
        (unsigned char)(bytes[135]) << 24 | 
        (unsigned char)(bytes[136]) << 16 | 
        (unsigned char)(bytes[137]) << 8 | 
        (unsigned char)(bytes[138]));  
        delay(50);

    uint32_t FaultMessage3_value = int( 
        (unsigned char)(bytes[139]) << 24 | 
        (unsigned char)(bytes[140]) << 16 | 
        (unsigned char)(bytes[141]) << 8 | 
        (unsigned char)(bytes[142])); 
        delay(50);

    uint32_t FaultMessage4_value = int( 
        (unsigned char)(bytes[143]) << 24 | 
        (unsigned char)(bytes[144]) << 16 | 
        (unsigned char)(bytes[145]) << 8 | 
        (unsigned char)(bytes[146]));
        delay(50);

    uint32_t FaultMessage5_value = int( 
        (unsigned char)(bytes[147]) << 24 | 
        (unsigned char)(bytes[148]) << 16 | 
        (unsigned char)(bytes[149]) << 8 | 
        (unsigned char)(bytes[150])); 
        delay(50);

    uint32_t FaultMessage6_value = int( 
        (unsigned char)(bytes[151]) << 24 | 
        (unsigned char)(bytes[152]) << 16 | 
        (unsigned char)(bytes[153]) << 8 | 
        (unsigned char)(bytes[154]));
        delay(50);

    uint32_t FaultMessage7_value = int( 
        (unsigned char)(bytes[155]) << 24 | 
        (unsigned char)(bytes[156]) << 16 | 
        (unsigned char)(bytes[157]) << 8 | 
        (unsigned char)(bytes[158]));
        delay(50);

    uint32_t FaultMessage8_value = int( 
        (unsigned char)(bytes[159]) << 24 | 
        (unsigned char)(bytes[160]) << 16 | 
        (unsigned char)(bytes[161]) << 8 | 
        (unsigned char)(bytes[162]));
        delay(50);

    if(FaultMessage1_value != 0 || FaultMessage2_value != 0 || FaultMessage3_value != 0 || FaultMessage4_value != 0 || FaultMessage5_value != 0 || FaultMessage6_value != 0 || FaultMessage7_value != 0 || FaultMessage8_value != 0) {
      ESP_LOGI("custom", "Fault message 1: %i", FaultMessage1_value);
      ESP_LOGI("custom", "Fault message 2: %i", FaultMessage2_value);
      ESP_LOGI("custom", "Fault message 3: %i", FaultMessage3_value);
      ESP_LOGI("custom", "Fault message 4: %i", FaultMessage4_value);
      ESP_LOGI("custom", "Fault message 5: %i", FaultMessage5_value);
      ESP_LOGI("custom", "Fault message 6: %i", FaultMessage6_value);
      ESP_LOGI("custom", "Fault message 7: %i", FaultMessage7_value);
      ESP_LOGI("custom", "Fault message 8: %i", FaultMessage8_value);
      inverter_mode = 2; //error
    }
    else {
      inverter_mode = 1; //online
    }

    //calculate PV power from pv current and pv voltage:
    uint32_t pv1_power_value = pv1_current_value.UInt16 * pv1_voltage_value.UInt16 * 0.01;
    id(pv1_power).publish_state(pv1_power_value);
    delay(50);
    uint32_t pv2_power_value = pv2_current_value.UInt16 * pv2_voltage_value.UInt16 * 0.01;
    id(pv2_power).publish_state(pv2_power_value);
    delay(50);
    uint32_t pv3_power_value = pv3_current_value.UInt16 * pv3_voltage_value.UInt16 * 0.01;
    id(pv3_power).publish_state(pv3_power_value);
    delay(50);
    uint32_t pv4_power_value = pv4_current_value.UInt16 * pv4_voltage_value.UInt16 * 0.01;
    id(pv4_power).publish_state(pv4_power_value);
    delay(50);

    id(inverter_state).publish_state(inverter_mode);

    bytes.clear();
  }
  else {
  }
}

}

typedef union { unsigned char Byte[2]; int16_t Int16; uint16_t UInt16; unsigned char UChar; char Char; }TwoByte;};

Danielxyz123 commented 10 months ago

Did someone test the latest Manager Version 1.22?

hartmut58 commented 10 months ago

With Manager Firmware 1.22 the RS485 port is dead, just like with version 1.21.

Danielxyz123 commented 10 months ago

ok, thanks for that information. Is a downgrade possible?

Von meinem iPhone gesendet

Am 12.08.2023 um 17:28 schrieb hartmut58 @.***>:

 With Manager Firmware 1.22 the RS485 port is dead, just like with version 1.21.

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.

hartmut58 commented 10 months ago

Downgrade is possible via USB, rename ...1.20 to ...1.22 (no guarantee, can of course go wrong)


Von: Danielxyz123 @.> Gesendet: Samstag, 12. August 2023 21:57 An: assembly12/Foxess-T-series-ESPHome-Home-Assistant @.> Cc: hartmut58 @.>; Comment @.> Betreff: Re: [assembly12/Foxess-T-series-ESPHome-Home-Assistant] Latest firmware broke integration (Issue #15)

ok, thanks for that information. Is a downgrade possible?

Von meinem iPhone gesendet

Am 12.08.2023 um 17:28 schrieb hartmut58 @.***>:

 With Manager Firmware 1.22 the RS485 port is dead, just like with version 1.21.

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.

— Reply to this email directly, view it on GitHubhttps://github.com/assembly12/Foxess-T-series-ESPHome-Home-Assistant/issues/15#issuecomment-1676077648, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ATO6YU7ISNFDZE7MD7FTSM3XU7N3ZANCNFSM6AAAAAA3COMLXA. You are receiving this because you commented.Message ID: @.***>

Danielxyz123 commented 10 months ago

Ok, where do i get the File? Only from Support?

Von meinem iPhone gesendet

Am 13.08.2023 um 09:43 schrieb hartmut58 @.***>:

 Downgrade is possible via USB, rename ...1.20 to ...1.22 (no guarantee, can of course go wrong)


Von: Danielxyz123 @.> Gesendet: Samstag, 12. August 2023 21:57 An: assembly12/Foxess-T-series-ESPHome-Home-Assistant @.> Cc: hartmut58 @.>; Comment @.> Betreff: Re: [assembly12/Foxess-T-series-ESPHome-Home-Assistant] Latest firmware broke integration (Issue #15)

ok, thanks for that information. Is a downgrade possible?

Von meinem iPhone gesendet

Am 12.08.2023 um 17:28 schrieb hartmut58 @.***>:

 With Manager Firmware 1.22 the RS485 port is dead, just like with version 1.21.

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.

— Reply to this email directly, view it on GitHubhttps://github.com/assembly12/Foxess-T-series-ESPHome-Home-Assistant/issues/15#issuecomment-1676077648, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ATO6YU7ISNFDZE7MD7FTSM3XU7N3ZANCNFSM6AAAAAA3COMLXA. You are receiving this because you commented.Message ID: @.***> — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.

hartmut58 commented 10 months ago

Yes, open a ticket with support, otherwise Foxess will not notice the bug.


Von: Danielxyz123 @.> Gesendet: Sonntag, 13. August 2023 10:01 An: assembly12/Foxess-T-series-ESPHome-Home-Assistant @.> Cc: hartmut58 @.>; Comment @.> Betreff: Re: [assembly12/Foxess-T-series-ESPHome-Home-Assistant] Latest firmware broke integration (Issue #15)

Ok, where do i get the File? Only from Support?

Von meinem iPhone gesendet

Am 13.08.2023 um 09:43 schrieb hartmut58 @.***>:

 Downgrade is possible via USB, rename ...1.20 to ...1.22 (no guarantee, can of course go wrong)


Von: Danielxyz123 @.> Gesendet: Samstag, 12. August 2023 21:57 An: assembly12/Foxess-T-series-ESPHome-Home-Assistant @.> Cc: hartmut58 @.>; Comment @.> Betreff: Re: [assembly12/Foxess-T-series-ESPHome-Home-Assistant] Latest firmware broke integration (Issue #15)

ok, thanks for that information. Is a downgrade possible?

Von meinem iPhone gesendet

Am 12.08.2023 um 17:28 schrieb hartmut58 @.***>:

 With Manager Firmware 1.22 the RS485 port is dead, just like with version 1.21.

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.

— Reply to this email directly, view it on GitHubhttps://github.com/assembly12/Foxess-T-series-ESPHome-Home-Assistant/issues/15#issuecomment-1676077648, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ATO6YU7ISNFDZE7MD7FTSM3XU7N3ZANCNFSM6AAAAAA3COMLXA. You are receiving this because you commented.Message ID: @.***> — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.

— Reply to this email directly, view it on GitHubhttps://github.com/assembly12/Foxess-T-series-ESPHome-Home-Assistant/issues/15#issuecomment-1676272469, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ATO6YUZE7WFKUDCWLTH26KLXVCCXLANCNFSM6AAAAAA3COMLXA. You are receiving this because you commented.Message ID: @.***>

Danielxyz123 commented 10 months ago

Does somebody not this project?

https://github.com/peper0/foxess-t-modbus-ha

Seems that Modbus is recently possible ?

mekket commented 10 months ago

Does somebody not this project?

https://github.com/peper0/foxess-t-modbus-ha

Seems that Modbus is recently possible ?

This approach promises almost real time data and if I understood correctly it does it because it is connected to the meter RS485 side not the data RS485 that assembly12-s version uses. My T10 G3 shows almost real time data on its display so the inverter must have it available somehow. I just got my system running today and I installed a smart meter but I have not been able to get my ESP and home assistant working as intended. Possibly because of the firmware issue? I am on manager 1.21. Anyways I had a thought about connecting the ESP to the Meter connections alongside the meter itself. Would it work or does the RS485 not work like that? If someone here has a smart meter and has this integration working - maybe you could try it out and let us know. I am already sick of seeing the 5 minute old data from FoxEss Cloud :(

Edit: Does anyone have a working version that would possibly work with Manager 1.21 or when could we expect it?

Thank You!

Danielxyz123 commented 10 months ago

No, unfortunately it doesn’t work with a G3 model. He’s using an older model.

He also usen Pin 1 and 2 like assambly12.

But with assembly12‘s solution you get the data every 90 seconds. Better than 5min…

I also read the smartmeter parallel to the G3. There you can listen and get (only) the current „combinedPower“ every 100ms if the inverter is on.

I also tried to read the other data from the (chint) smartmeter when the inverter is off. It‘s easy by modbus when the master is offline..

It work also parallel (second master, normaly not allowed)… if you „fire“ between the messages of the inverter to the chint.. Not nice but it works. I you try this only every 2 seconds the inverter does not go into a fault. But intakes a lot of shots to get the data successfull…

Best wishes

Daniel

Von meinem iPhone gesendet

Am 18.08.2023 um 15:54 schrieb mekket @.***>:

 Does somebody not this project?

https://github.com/peper0/foxess-t-modbus-ha

Seems that Modbus is recently possible ?

This approach promises almost real time data and if I understood correctly it does it because it is connected to the meter RS485 side not the data RS485 that assembly12-s version uses. My T10 G3 shows almost real time data on its display so the inverter must have it available somehow. I just got my system running today and I installed a smart meter but I have not been able to get my ESP and home assistant working as intended. Possibly because of the firmware issue? I am on manager 1.21. Anyways I had a thought about connecting the ESP to the Meter connections alongside the meter itself. Would it work or does the RS485 not work like that? If someone here has a smart meter and has this integration working - maybe you could try it out and let us know. I am already sick of seeing the 5 minute old data from FoxEss Cloud :(

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.

mekket commented 10 months ago

Do You also have a T10 G3? Is assemblys version or some modified version of it working for you? Did you downgrade your firmware?

Danielxyz123 commented 10 months ago

Yes, i have s T10 G3. Which Firmware do you use? It worked until i used manager 1.22 🙈. I‘m working on an downgrade. But currently no success. The support sends me some Files but it dont‘t work yet..

Von meinem iPhone gesendet

Am 18.08.2023 um 19:21 schrieb mekket @.***>:

 Do You also have a T10 G3? Is assemblys version or some modified version of it working for you? Did you downgrade your firmware?

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.

giedriuskilcauskas commented 10 months ago

Yes, i have s T10 G3. Which Firmware do you use? It worked until i used manager 1.22 🙈. I‘m working on an downgrade. But currently no success. The support sends me some Files but it dont‘t work yet.. Von meinem iPhone gesendet Am 18.08.2023 um 19:21 schrieb mekket @.***>:  Do You also have a T10 G3? Is assemblys version or some modified version of it working for you? Did you downgrade your firmware? — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.

So I understand right that manager 1.22 kills access to RS485 and it's no longer working. No data coming in at all or it's somewhat garbage? I currently have 1.21 and with above changes to addressing, all works fine.

Danielxyz123 commented 10 months ago

Yes, it seems that 1.22 does deactivate that “sending data” on rs485…

I don’t know if it’s a bug. Downgrade didn’t work for me yet…

Von meinem iPhone gesendet

Am 22.08.2023 um 10:24 schrieb Giedrius Kilčauskas @.***>:

 Yes, i have s T10 G3. Which Firmware do you use? It worked until i used manager 1.22 🙈. I‘m working on an downgrade. But currently no success. The support sends me some Files but it dont‘t work yet.. Von meinem iPhone gesendet … Am 18.08.2023 um 19:21 schrieb mekket @.***>:  Do You also have a T10 G3? Is assemblys version or some modified version of it working for you? Did you downgrade your firmware? — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.

So I understand right that manager 1.22 kills access to RS485 and it's no longer working. No data coming in at all or it's somewhat garbage? I currently have 1.21 and with above changes to addressing, all works fine.

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.

hartmut58 commented 10 months ago

For me too, it seems that Manager 1.21 and Manager 1.22 disables the sending of data. (Inverter T10-G3) The German support sent me the manager 1.20 for a downgrade. For a successful downgrade, I had to rename manager1.20 to manager1.22, otherwise the inverter rejects the upgrade with the message "wrong file". The support in China does not give any answer. Unfortunately there is no changelog from FOXESS to the changes of the firmware.

Danielxyz123 commented 10 months ago

Thx for that Information. How did you change the Filename exactly? My Filename is attached. Only the ….V1.20 to ….V1.22?

4180D183-F7CB-44E8-A862-3449FDF35089

hartmut58 commented 10 months ago

Original / 10-300-11040-xx_T30_Manager_V1.20.bin New / T30_Manager_V1.22.bin

Danielxyz123 commented 10 months ago

Thx, a lot. It works 👌🏻

Von meinem iPhone gesendet

Am 22.08.2023 um 14:33 schrieb hartmut58 @.***>:

 Original / 10-300-11040-xx_T30_Manager_V1.20.bin New / T30_Manager_V1.22.bin

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.

assembly12 commented 10 months ago

Hi guys! Sorry i've been quiet for a while, I had some personal business to attend to.

Addressing some of the topics that were discussed in this issue:

  1. I didn't know about the other integration which presumably connects to a "real" modbus. As far as I could figure out, it doesn't work with my inverter (T12 G3). Updates every few seconds would be great, but G3 doesn't seem to be compatible with this setup.

  2. Regarding the compatibiltiy issues with newer firmwares: this is exactly the reason why I do not upgrade the firmware :-). I'm very happy, both with the way the inverter is running and it's integration in HA as well. I see, as of now, no need to upgrade and have in fact now removed the foxess dongle entirely. That being said I cannot test anything for the newer versions.

  3. Regarding 1.22: as far as I understand the RS485 communication is entirely terminated in this version. Thanks to hartmut58 for giving us a working solution for downgrading to 1.20 again!!

  4. Regarding 1.21: with the help of "xndz" over at the HA forums we seem to have the new registernumbers for 1.21 decoded. I'll try implement these registers in the code, so it works with both 1.20 and 1.21, or just release a new version for 1.21 alltogether. I'm not sure when I will be able to do this, though.

hartmut58 commented 10 months ago

Hi, in my experience, the firmware manager1.20 is the last one with working RS485 data. Probably from version 1.18 the address was changed. Here again my version of the "foxess_t_series.h" for manager1.20. For info, I use HA just for fun - I am iobroker user, sorry ;-) foxess_t_series.zip

mekket commented 10 months ago

Should the RS485 converter flash leds or show some sign of communication? Im on Manager 1.21, Master 1.27 and Slave 1.01. T10 G3. My inverter is in my basement so the wifi signal there is not the best but I have tried twice and it seems that both times when I connect my ESP to the inverter it will not even connect to my wifi and I think it brings down the cloud connection as well because the inverter status goes to Offline shortly after I connect the ESP. It will come back to normal when I remove it. The ESP was able to communicate "blank" values to home assistant when it was on my table. I am using the registry numbers from xndz who has it working on 1.21.

I don't even know where to start my troubleshooting because I can not be sure that my inverter is even able to communicate over RS485. The RED power indicator LED is on but there seems to be another one next to it and that one is constantly off - should it flash when working normally?

Danielxyz123 commented 10 months ago

It doesn‘t work with 1.21.. Last working is 1.20… thats what hartmut also said.

Von meinem iPhone gesendet

Am 23.08.2023 um 17:36 schrieb mekket @.***>:

 Should the RS485 converter flash leds or show some sign of communication? Im on Manager 1.21, Master 1.27 and Slave 1.01. T10 G3. My inverter is in my basement so the wifi signal there is not the best but I have tried twice and it seems that both times when I connect my ESP to the inverter it will not even connect to my wifi and I think it brings down the cloud connection as well because the inverter status goes to Offline shortly after I connect the ESP. It will come back to normal when I remove it. The ESP was able to communicate "blank" values to home assistant when it was on my table. I am using the registry numbers from xndz who has it working on 1.21.

I don't even know where to start my troubleshooting because I can not be sure that my inverter is even able to communicate over RS485. The RED power indicator LED is on but there seems to be another one next to it and that one is constantly off - should it flash when working normally?

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.

giedriuskilcauskas commented 10 months ago

It doesn‘t work with 1.21.. Last working is 1.20… thats what hartmut also said. Von meinem iPhone gesendet Am 23.08.2023 um 17:36 schrieb mekket @.***>:  Should the RS485 converter flash leds or show some sign of communication? Im on Manager 1.21, Master 1.27 and Slave 1.01. T10 G3. My inverter is in my basement so the wifi signal there is not the best but I have tried twice and it seems that both times when I connect my ESP to the inverter it will not even connect to my wifi and I think it brings down the cloud connection as well because the inverter status goes to Offline shortly after I connect the ESP. It will come back to normal when I remove it. The ESP was able to communicate "blank" values to home assistant when it was on my table. I am using the registry numbers from xndz who has it working on 1.21. I don't even know where to start my troubleshooting because I can not be sure that my inverter is even able to communicate over RS485. The RED power indicator LED is on but there seems to be another one next to it and that one is constantly off - should it flash when working normally? — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.

Well, 1.21 clearly works fine for me

giedriuskilcauskas commented 10 months ago

Should the RS485 converter flash leds or show some sign of communication? Im on Manager 1.21, Master 1.27 and Slave 1.01. T10 G3. My inverter is in my basement so the wifi signal there is not the best but I have tried twice and it seems that both times when I connect my ESP to the inverter it will not even connect to my wifi and I think it brings down the cloud connection as well because the inverter status goes to Offline shortly after I connect the ESP. It will come back to normal when I remove it. The ESP was able to communicate "blank" values to home assistant when it was on my table. I am using the registry numbers from xndz who has it working on 1.21.

I don't even know where to start my troubleshooting because I can not be sure that my inverter is even able to communicate over RS485. The RED power indicator LED is on but there seems to be another one next to it and that one is constantly off - should it flash when working normally?

Inverter going offline would indicate something like short circuiting wrong pins or so. For me the basic rs485 adapter didn't work, so I've got a bit more advanced one with automatic flow control and I also power ESP via usb (so don't use step-down from 12V)

mekket commented 10 months ago

The inverter itself stays online and keeps working, the communication seems to go down even for the cloud. I will try again tomorrow and if that is still the case it must be either my connections or the fact that we have 3 different people with 1.21 with 3 different results.

mekket commented 10 months ago

I re-flashed my ESP and now it is working as intended(On manager 1.21) Is there a way to change the inverter settings with this approach? Like changing the export limit with HA automations?

Danielxyz123 commented 10 months ago

Does somebody know, which function has manager, master, slave software for T-Series? Is standalone only manager relevant?

Von meinem iPhone gesendet

Am 29.08.2023 um 10:10 schrieb mekket @.***>:

 I re-flashed my ESP and now it is working as intended(On manager 1.21) Is there a way to change the inverter settings with this approach? Like changing the export limit with HA automations?

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.

Danielxyz123 commented 5 months ago

Has somebody tested manager 1.24?

kuminalli commented 4 months ago

For me too, it seems that Manager 1.21 and Manager 1.22 disables the sending of data. (Inverter T10-G3) The German support sent me the manager 1.20 for a downgrade. For a successful downgrade, I had to rename manager1.20 to manager1.22, otherwise the inverter rejects the upgrade with the message "wrong file". The support in China does not give any answer. Unfortunately there is no changelog from FOXESS to the changes of the firmware.

Could you please share V1.20 bin-file?

Danielxyz123 commented 4 months ago

10-300-11040-xx_T30_Manager_V1.20.zip

Here you are, unzip... .bin files are not supported.

mekket commented 4 months ago

Has anyone tried setting the export limit from home assistant using rs485? In my area the electricity prices sometimes go to negative values and exporting to grid would actually cost money to the exporter so it would be neat to keep the inverters export limit near the current house consumption which I have from the smart meter.

kuminalli commented 4 months ago

Thank You Very Much! 🙂

ke 14. helmik. 2024 klo 21.28 Danielxyz123 @.***) kirjoitti:

10-300-11040-xx_T30_Manager_V1.20.zip https://github.com/assembly12/Foxess-T-series-ESPHome-Home-Assistant/files/14285202/10-300-11040-xx_T30_Manager_V1.20.zip

Here you are, unzip... .bin files are not supported.

— Reply to this email directly, view it on GitHub https://github.com/assembly12/Foxess-T-series-ESPHome-Home-Assistant/issues/15#issuecomment-1944456953, or unsubscribe https://github.com/notifications/unsubscribe-auth/AMKL25UBBL6DGIQFFS4EGD3YTUF4DAVCNFSM6AAAAAA3COMLXCVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSNBUGQ2TMOJVGM . You are receiving this because you commented.Message ID: <assembly12/Foxess-T-series-ESPHome-Home-Assistant/issues/15/1944456953@ github.com>