springfall2008 / batpred

Home battery prediction and charging automation for Home Assistant, supporting many inverter types
https://springfall2008.github.io/batpred/
115 stars 40 forks source link

Support for Dual AIO #1427

Open arfond opened 2 weeks ago

arfond commented 2 weeks ago

Here is the current REST output from a dual AIO gateway. I'm using the serial number for the Gateway (GW) in predbat. All the sensors that predbat needs exist, just some of them are not properly populated at the moment, like Battery Capacity and charge / discharge rate. These sensors are available in the individual AIO devices, so I was thinking I could refer PredBat to add those two up. To explain - with a dual AIO there are three invertors in the setup of GivTCP - the gateway and the individual AIOs.

So, I was thinking in the absence of this data in the REST output of the Gateway (for now) - I'd create it in apps.yaml. Something like:

battery_capacity_kwh: (if this is the thing PredBat is trying to read from the REST at startup

Gateway REST output

{ "Control": { "Active_Power_Rate": 100, "Battery_Calibration": "Off", "Battery_Charge_Rate": 0, "Battery_Charge_Rate_AC": 70, "Battery_Discharge_Rate": 0, "Battery_Discharge_Rate_AC": 75, "Battery_Power_Cutoff": 0, "Battery_Power_Reserve": 4, "Battery_pause_mode": "Disabled", "Charge_Target_SOC_1": 100, "Charge_Target_SOC_10": 100, "Charge_Target_SOC_2": 100, "Charge_Target_SOC_3": 100, "Charge_Target_SOC_4": 100, "Charge_Target_SOC_5": 100, "Charge_Target_SOC_6": 100, "Charge_Target_SOC_7": 100, "Charge_Target_SOC_8": 100, "Charge_Target_SOC_9": 100, "Discharge_Target_SOC_1": 4, "Discharge_Target_SOC_10": 0, "Discharge_Target_SOC_2": 0, "Discharge_Target_SOC_3": 0, "Discharge_Target_SOC_4": 0, "Discharge_Target_SOC_5": 0, "Discharge_Target_SOC_6": 0, "Discharge_Target_SOC_7": 0, "Discharge_Target_SOC_8": 0, "Discharge_Target_SOC_9": 0, "Eco_Mode": "disable", "Enable_Charge_Schedule": "disable", "Enable_Discharge_Schedule": "disable", "Force_Charge": "Normal", "Force_Charge_Num": 0, "Force_Export": "Normal", "Force_Export_Num": 0, "Mode": "Eco (Paused)", "Reboot_Addon": "disable", "Reboot_Invertor": "disable", "Sync_Time": "disable", "Target_SOC": 100, "Temp_Pause_Charge": "Running", "Temp_Pause_Charge_Num": 43, "Temp_Pause_Discharge": "Normal", "Temp_Pause_Discharge_Num": 0 }, "Energy": { "Today": { "Battery_Charge_Energy_Today_kWh": 30.7, "Battery_Discharge_Energy_Today_kWh": 28.4, "Export_Energy_Today_kWh": 24.9, "Import_Energy_Today_kWh": 22.6, "Load_Energy_Today_kWh": 12.3, "PV_Energy_Today_kWh": 20.7, "Parallel_Total_Charge_Energy_Today_kWh": 32.3, "Parallel_Total_Discharge_Energy_Today_kWh": 25.7 }, "Total": { "Battery_Charge_Energy_Total_kWh": 3.04, "Battery_Discharge_Energy_Total_kWh": 2.97, "Export_Energy_Total_kWh": 4.1, "Import_Energy_Total_kWh": 3.58, "Load_Energy_Total_kWh": 3.08, "PV_Energy_Total_kWh": 3.37, "Parallel_Total_Charge_Energy_Total_kWh": 3.57, "Parallel_Total_Discharge_Energy_Total_kWh": 2.76 } }, "GW2330G276": { "Battery_Capacity_kWh": 0.0, "Export_Limit": 11000, "Gateway_Mode": "On grid", "Gateway_Software_Version": "GAAA0010", "Gateway_State": "Static", "Invertor_Serial_Number": "GW2330G276", "Invertor_Time": "2024-09-02T21:31:11+01:00", "Invertor_Type": "Gen 1 - Gateway", "Parallel_Total_AIO_Number": 2, "Parallel_Total_AIO_Online_Number": 2 }, "Inverters": { "AIO_1": { "AC_Charge_Energy_Today_kWh": 15.4, "AC_Charge_Energy_Total_kWh": 3.0, "AC_Discharge_Energy_Today_kWh": 14.3, "AC_Discharge_Energy_Total_kWh": 2.92, "AIO_1_Serial_Number": "CH2330G294", "Invertor_Power": -59, "SOC": 4 }, "AIO_2": { "AC_Charge_Energy_Today_kWh": 15.3, "AC_Charge_Energy_Total_kWh": 0.05, "AC_Discharge_Energy_Today_kWh": 14.1, "AC_Discharge_Energy_Total_kWh": 0.05, "AIO_2_Serial_Number": "CH2414G514", "Invertor_Power": -76, "SOC": 4 } }, "Meter_Details": { "Meter_ID1": { "Export_Energy_kWh": 0.0, "Frequency": 5.0, "Import_Energy_kWh": 0.0, "Phase_1_Current": 12.6, "Phase_1_Power": 3038, "Phase_1_Power_Factor": 0.0, "Phase_1_Voltage": 246.6, "Phase_2_Current": 0.0, "Phase_2_Power": 0, "Phase_2_Power_Factor": 0.0, "Phase_2_Voltage": 0.0, "Phase_3_Current": 0.0, "Phase_3_Power": 0, "Phase_3_Power_Factor": 0.0, "Phase_3_Voltage": 0.0 } }, "Power": { "Power": { "Battery_Power": 0, "Grid_Current": 12.6, "Grid_Power": -2987, "Grid_Relay_Voltage": 243.3, "Grid_Voltage": 243.7, "Inverter_Relay_Voltage": 243.3, "Invertor_Power": -136, "Liberty_Power": -223, "Load_Current": 13.0, "Load_Power": 3084, "Load_Voltage": 244.0, "PV_Current": 1.3, "PV_Power": 320, "SOC": 4, "SOC_kWh": 0.0 } }, "Stats": { "GivTCP_Version": "2.4.739beta", "Last_Updated_Time": "2024-09-02T20:33:04.701754+00:00", "Time_Since_Last_Update": 31.727202, "status": "online" }, "Timeslots": { "Battery_pause_end_time_slot": "00:00:00", "Battery_pause_start_time_slot": "00:00:00", "Charge_end_time_slot_1": "15:52:00", "Charge_end_time_slot_10": "00:00:00", "Charge_end_time_slot_2": "00:00:00", "Charge_end_time_slot_3": "00:00:00", "Charge_end_time_slot_4": "00:00:00", "Charge_end_time_slot_5": "00:00:00", "Charge_end_time_slot_6": "00:00:00", "Charge_end_time_slot_7": "00:00:00", "Charge_end_time_slot_8": "00:00:00", "Charge_end_time_slot_9": "00:00:00", "Charge_start_time_slot_1": "12:52:00", "Charge_start_time_slot_10": "00:00:00", "Charge_start_time_slot_2": "00:00:00", "Charge_start_time_slot_3": "00:00:00", "Charge_start_time_slot_4": "00:00:00", "Charge_start_time_slot_5": "00:00:00", "Charge_start_time_slot_6": "00:00:00", "Charge_start_time_slot_7": "00:00:00", "Charge_start_time_slot_8": "00:00:00", "Charge_start_time_slot_9": "00:00:00", "Discharge_end_time_slot_1": "19:00:00", "Discharge_end_time_slot_10": "00:00:00", "Discharge_end_time_slot_2": "00:00:00", "Discharge_end_time_slot_3": "00:00:00", "Discharge_end_time_slot_4": "00:00:00", "Discharge_end_time_slot_5": "00:00:00", "Discharge_end_time_slot_6": "00:00:00", "Discharge_end_time_slot_7": "00:00:00", "Discharge_end_time_slot_8": "00:00:00", "Discharge_end_time_slot_9": "00:00:00", "Discharge_start_time_slot_1": "16:00:00", "Discharge_start_time_slot_10": "00:00:00", "Discharge_start_time_slot_2": "00:00:00", "Discharge_start_time_slot_3": "00:00:00", "Discharge_start_time_slot_4": "00:00:00", "Discharge_start_time_slot_5": "00:00:00", "Discharge_start_time_slot_6": "00:00:00", "Discharge_start_time_slot_7": "00:00:00", "Discharge_start_time_slot_8": "00:00:00", "Discharge_start_time_slot_9": "00:00:00" }, "raw": { "batteries": {}, "invertor": { "active_power_rate": 100, "aio1_serial_number": "", "aio1_serial_number_new": "CH2330G294", "aio1_soc": 4, "aio2_serial_number": "CH23", "aio2_serial_number_new": "CH2414G514", "aio2_soc": 4, "aio3_serial_number": "94CH24", "aio3_serial_number_new": "", "aio3_soc": 0, "aio_state": 0, "arm_firmware_version": 0, "battery_charge_limit": 0, "battery_charge_limit_ac": 70, "battery_discharge_limit": 0, "battery_discharge_limit_ac": 75, "battery_discharge_min_power_reserve": 0, "battery_errors": [], "battery_firmware_version": 612, "battery_high_voltage_protection_limit": 0.0, "battery_low_force_charge_time": 0, "battery_low_voltage_protection_limit": 0.0, "battery_nominal_capacity": 0.0, "battery_pause_mode": 0, "battery_pause_slot_1": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "battery_pause_slot_1_end": 0, "battery_pause_slot_1_start": 0, "battery_percent": 0, "battery_soc_reserve": 4, "battery_type": 0, "battery_voltage_adjust": 0.0, "bms_firmware_version": 0, "certification_type": 12, "charge_slot_1": "TimeSlot(start=datetime.time(12, 52), end=datetime.time(15, 52))", "charge_slot_10": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "charge_slot_10_end": 0, "charge_slot_10_start": 0, "charge_slot_1_end": 1552, "charge_slot_1_start": 1252, "charge_slot_2": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "charge_slot_2_end": 0, "charge_slot_2_start": 0, "charge_slot_3": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "charge_slot_3_end": 0, "charge_slot_3_start": 0, "charge_slot_4": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "charge_slot_4_end": 0, "charge_slot_4_start": 0, "charge_slot_5": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "charge_slot_5_end": 0, "charge_slot_5_start": 0, "charge_slot_6": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "charge_slot_6_end": 0, "charge_slot_6_start": 0, "charge_slot_7": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "charge_slot_7_end": 0, "charge_slot_7_start": 0, "charge_slot_8": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "charge_slot_8_end": 0, "charge_slot_8_start": 0, "charge_slot_9": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "charge_slot_9_end": 0, "charge_slot_9_start": 0, "charge_soc": 0, "charge_soc_stop_1": 0, "charge_soc_stop_2": 0, "charge_target_soc": 100, "charge_target_soc_1": 100, "charge_target_soc_10": 100, "charge_target_soc_2": 100, "charge_target_soc_3": 100, "charge_target_soc_4": 100, "charge_target_soc_5": 100, "charge_target_soc_6": 100, "charge_target_soc_7": 100, "charge_target_soc_8": 100, "charge_target_soc_9": 100, "cmd_bms_flash_update": false, "debug_inverter": 0, "device_type_code": "7001", "discharge_slot_1": "TimeSlot(start=datetime.time(16, 0), end=datetime.time(19, 0))", "discharge_slot_10": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "discharge_slot_10_end": 0, "discharge_slot_10_start": 0, "discharge_slot_1_end": 1900, "discharge_slot_1_start": 1600, "discharge_slot_2": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "discharge_slot_2_end": 0, "discharge_slot_2_start": 0, "discharge_slot_3": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "discharge_slot_3_end": 0, "discharge_slot_3_start": 0, "discharge_slot_4": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "discharge_slot_4_end": 0, "discharge_slot_4_start": 0, "discharge_slot_5": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "discharge_slot_5_end": 0, "discharge_slot_5_start": 0, "discharge_slot_6": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "discharge_slot_6_end": 0, "discharge_slot_6_start": 0, "discharge_slot_7": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "discharge_slot_7_end": 0, "discharge_slot_7_start": 0, "discharge_slot_8": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "discharge_slot_8_end": 0, "discharge_slot_8_start": 0, "discharge_slot_9": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "discharge_slot_9_end": 0, "discharge_slot_9_start": 0, "discharge_soc": 0, "discharge_soc_stop_1": 0, "discharge_soc_stop_2": 0, "discharge_target_soc_1": 4, "discharge_target_soc_10": 0, "discharge_target_soc_2": 0, "discharge_target_soc_3": 0, "discharge_target_soc_4": 0, "discharge_target_soc_5": 0, "discharge_target_soc_6": 0, "discharge_target_soc_7": 0, "discharge_target_soc_8": 0, "discharge_target_soc_9": 0, "dsp_firmware_version": 0, "e_aio1_charge_today": 15.4, "e_aio1_charge_total": 2996.9, "e_aio1_discharge_today": 14.3, "e_aio1_discharge_total": 2924.0, "e_aio2_charge_today": 15.3, "e_aio2_charge_total": 45.7, "e_aio2_discharge_today": 14.1, "e_aio2_discharge_total": 47.6, "e_aio3_charge_today": 0.0, "e_aio3_charge_total": 0.0, "e_aio3_discharge_today": 0.0, "e_aio3_discharge_total": 0.0, "e_aio_charge_today": 32.3, "e_aio_charge_total": 3571.9, "e_aio_discharge_today": 25.7, "e_aio_discharge_total": 2759.1, "e_battery_charge_today": 30.7, "e_battery_charge_today2": 0.0, "e_battery_charge_total": 3042.6, "e_battery_charge_total2": 0.0, "e_battery_discharge_today": 28.4, "e_battery_discharge_today2": 0.0, "e_battery_discharge_total": 2971.6, "e_battery_discharge_total2": 0.0, "e_battery_throughput_total": 0.0, "e_discharge_year": 0.0, "e_grid_export_today": 24.9, "e_grid_export_total": 4102.0, "e_grid_import_today": 22.6, "e_grid_import_total": 3585.0, "e_grid_in_day": 0.0, "e_grid_in_total": 0.0, "e_grid_out_day": 0.0, "e_grid_out_total": 0.0, "e_inverter_in_day": 0.0, "e_inverter_in_total": 0.0, "e_inverter_out_day": 0.0, "e_inverter_out_total": 0.0, "e_load_today": 12.3, "e_load_total": 3080.0, "e_pv1_day": 0.0, "e_pv2_day": 0.0, "e_pv_today": 20.7, "e_pv_total": 3367.8, "e_solar_diverter": 0.0, "eco_mode": 0, "enable_60hz_freq_mode": false, "enable_above_6kw_system": false, "enable_ammeter": false, "enable_auto_judge_battery_type": false, "enable_battery_cable_impedance_alarm": false, "enable_battery_on_pv_or_grid": false, "enable_bms_read": false, "enable_buzzer": false, "enable_charge": false, "enable_charge_target": false, "enable_discharge": false, "enable_drm_rj45_port": false, "enable_frequency_derating": false, "enable_g100_limit_switch": true, "enable_inverter": false, "enable_inverter_auto_restart": false, "enable_local_command_test": false, "enable_low_voltage_fault_ride_through": false, "enable_reversed_115_meter": false, "enable_reversed_418_meter": false, "enable_reversed_ct_clamp": false, "enable_spi": false, "enable_standard_self_consumption_logic": true, "enable_ups_mode": false, "f_ac1": 0.0, "f_eps_backup": 0.0, "fault_protection": 0, "firmware_version": "D0.0-A0.0", "first_battery_bms_firmware_version": 0, "first_battery_serial_number": "", "first_inverter_serial_number": "CH2330G294", "frequency_load_limit_rate": 0, "gateway_fault_codes": [], "generation": "Gen 1", "grid_port_max_power_output": 11000, "i_ac1": 0.0, "i_battery": null, "i_grid": 12.6, "i_grid_port": 0.0, "i_load": 13.0, "i_pv": 1.3, "i_pv1": 0.0, "i_pv2": 0.0, "inv_max_power": 60, "inverter_countdown": 0, "inverter_errors": [], "inverter_max_power": 6000, "inverter_reboot": 0, "meter_type": 0, "modbus_address": 17, "modbus_version": "0.00", "model": "7", "num_mppt": 0, "num_phases": 0, "p_ac1": -2987, "p_aio1_inverter": 59, "p_aio2_inverter": 76, "p_aio3_inverter": 0, "p_aio_total": 136, "p_battery": 0, "p_combined_generation": null, "p_eps_backup": 0, "p_grid_apparent": 0, "p_grid_out": 0, "p_inverter_out": 0, "p_liberty": 223, "p_load": 3084, "p_load_demand": 0, "p_pv": 320, "p_pv1": 0, "p_pv2": 0, "parallel_aio_battery_power": 0, "parallel_aio_load_power": 0, "parallel_aio_num": 2, "parallel_aio_online_num": 2, "parallel_aio_soc": 0, "power_factor": 0, "power_factor_function_model": 0, "reactive_power_rate": 0, "restart_delay_time": 0, "select_arm_chip": false, "serial_number": "GW2330G276", "soc_force_adjust": 0, "software_version": "GAAA0010", "start_countdown_timer": 0, "start_system_auto_test": false, "status": 0, "system_mode": 0, "system_time": "2024-09-02 21:31:11", "temp_battery": 0.0, "temp_charger": 0.0, "temp_inverter_heatsink": 0.0, "threephase_abc": 0, "threephase_balance_1": 0, "threephase_balance_2": 0, "threephase_balance_3": 0, "threephase_balance_mode": 0, "usb_device_inserted": 0, "user_code": 0, "v_ac1": 0.0, "v_battery": 0.0, "v_eps_backup": 0.0, "v_grid": 243.7, "v_grid_relay": 243.3, "v_highbrigh_bus": 0.0, "v_inverter_relay": 243.3, "v_load": 244.0, "v_n_bus": 0.0, "v_p_bus": 0.0, "v_pv1": 0.0, "v_pv2": 0.0, "v_pv_start": 0.0, "variable_address": 0, "variable_value": 0, "work_mode": 2, "work_time_total": 0 }, "meters": { "Meter_ID_1": { "e_export_active": 0.0, "e_export_reactive": 0.0, "e_import_active": 0.0, "e_import_reactive": 0.0, "frequency": 5.0, "i_ln": 0.0, "i_phase_1": 12.6, "i_phase_2": 0.0, "i_phase_3": 0.0, "i_total": 0.0, "p_active_phase_1": 3038, "p_active_phase_2": 0, "p_active_phase_3": 0, "p_active_total": 0, "p_apparent_phase_1": 0, "p_apparent_phase_2": 0, "p_apparent_phase_3": 0, "p_apparent_total": 0, "p_reactive_phase_1": 0, "p_reactive_phase_2": 0, "p_reactive_phase_3": 0, "p_reactive_total": 0, "pf_phase_1": 0.0, "pf_phase_2": 0.0, "pf_phase_3": 0.0, "pf_total": 0.0, "v_phase_1": 246.6, "v_phase_2": 0.0, "v_phase_3": 0.0 } } } }

springfall2008 commented 2 weeks ago

Interesting, so we have something similar with EMS so it maybe feasible to apply that approach.

What is controlled via the Gateway and what is controlled via the individual inverters?

gcoan commented 2 weeks ago

Are you running the latest Beta version of GivTCP? It has enhanced support for multiple AIO's including I think deriving the correct battery SoC.

Have a look at the GivTCP Github issues, there's one that's been dealing with getting it working for AIO's

arfond commented 2 weeks ago

Mark is a legend and fixed it!

{ "Control": { "Active_Power_Rate": 100, "Battery_Calibration": "Off", "Battery_Charge_Rate": 0, "Battery_Charge_Rate_AC": 70, "Battery_Discharge_Rate": 0, "Battery_Discharge_Rate_AC": 75, "Battery_Power_Cutoff": 0, "Battery_Power_Reserve": 4, "Battery_pause_mode": "Disabled", "Charge_Target_SOC_1": 100, "Charge_Target_SOC_10": 100, "Charge_Target_SOC_2": 100, "Charge_Target_SOC_3": 100, "Charge_Target_SOC_4": 100, "Charge_Target_SOC_5": 100, "Charge_Target_SOC_6": 100, "Charge_Target_SOC_7": 100, "Charge_Target_SOC_8": 100, "Charge_Target_SOC_9": 100, "Discharge_Target_SOC_1": 4, "Discharge_Target_SOC_10": 0, "Discharge_Target_SOC_2": 0, "Discharge_Target_SOC_3": 0, "Discharge_Target_SOC_4": 0, "Discharge_Target_SOC_5": 0, "Discharge_Target_SOC_6": 0, "Discharge_Target_SOC_7": 0, "Discharge_Target_SOC_8": 0, "Discharge_Target_SOC_9": 0, "Eco_Mode": "disable", "Enable_Charge_Schedule": "disable", "Enable_Discharge_Schedule": "disable", "Force_Charge": "Normal", "Force_Charge_Num": 0, "Force_Export": "Normal", "Force_Export_Num": 0, "Mode": "Eco (Paused)", "Reboot_Addon": "disable", "Reboot_Invertor": "disable", "Sync_Time": "disable", "Target_SOC": 100, "Temp_Pause_Charge": "Normal", "Temp_Pause_Charge_Num": 0, "Temp_Pause_Discharge": "Normal", "Temp_Pause_Discharge_Num": 0 }, "Energy": { "Today": { "Battery_Charge_Energy_Today_kWh": 30.9, "Battery_Discharge_Energy_Today_kWh": 28.4, "Export_Energy_Today_kWh": 24.9, "Import_Energy_Today_kWh": 24.0, "Load_Energy_Today_kWh": 13.7, "PV_Energy_Today_kWh": 20.9, "Parallel_Total_Charge_Energy_Today_kWh": 32.6, "Parallel_Total_Discharge_Energy_Today_kWh": 25.7 }, "Total": { "Battery_Charge_Energy_Total_kWh": 3.04, "Battery_Discharge_Energy_Total_kWh": 2.97, "Export_Energy_Total_kWh": 4.1, "Import_Energy_Total_kWh": 3.59, "Load_Energy_Total_kWh": 3.08, "PV_Energy_Total_kWh": 3.37, "Parallel_Total_Charge_Energy_Total_kWh": 3.57, "Parallel_Total_Discharge_Energy_Total_kWh": 2.76 } }, "GW2330G276": { "Battery_Capacity_kWh": 27.0, "Export_Limit": 11000, "Gateway_Mode": "On grid", "Gateway_Software_Version": "GAAA0010", "Gateway_State": "Static", "Invertor_Serial_Number": "GW2330G276", "Invertor_Time": "2024-09-02T22:25:03+01:00", "Invertor_Type": "Gen 1 - Gateway", "Parallel_Total_AIO_Number": 2, "Parallel_Total_AIO_Online_Number": 2 }, "Inverters": { "AIO_1": { "AC_Charge_Energy_Today_kWh": 15.5, "AC_Charge_Energy_Total_kWh": 3.0, "AC_Discharge_Energy_Today_kWh": 14.3, "AC_Discharge_Energy_Total_kWh": 2.92, "AIO_1_Serial_Number": "CH2330G294", "Invertor_Power": -58, "SOC": 6 }, "AIO_2": { "AC_Charge_Energy_Today_kWh": 15.4, "AC_Charge_Energy_Total_kWh": 0.05, "AC_Discharge_Energy_Today_kWh": 14.1, "AC_Discharge_Energy_Total_kWh": 0.05, "AIO_2_Serial_Number": "CH2414G514", "Invertor_Power": -74, "SOC": 6 } }, "Meter_Details": { "Meter_ID1": { "Export_Energy_kWh": 0.0, "Frequency": 4.99, "Import_Energy_kWh": 0.0, "Phase_1_Current": 4.3, "Phase_1_Power": 788, "Phase_1_Power_Factor": 0.0, "Phase_1_Voltage": 249.8, "Phase_2_Current": 0.0, "Phase_2_Power": 0, "Phase_2_Power_Factor": 0.0, "Phase_2_Voltage": 0.0, "Phase_3_Current": 0.0, "Phase_3_Power": 0, "Phase_3_Power_Factor": 0.0, "Phase_3_Voltage": 0.0 } }, "Power": { "Power": { "Battery_Power": 0, "Grid_Current": 4.4, "Grid_Power": -762, "Grid_Relay_Voltage": 248.3, "Grid_Voltage": 248.7, "Inverter_Relay_Voltage": 248.3, "Invertor_Power": -132, "Liberty_Power": -306, "Load_Current": 3.9, "Load_Power": 523, "Load_Voltage": 248.9, "PV_Current": 0.4, "PV_Power": 67, "SOC": 6, "SOC_kWh": 1.62 } }, "Stats": { "GivTCP_Version": "2.4.741beta", "Last_Updated_Time": "2024-09-02T21:26:57.873584+00:00", "Time_Since_Last_Update": 31.782281, "status": "online" }, "Timeslots": { "Battery_pause_end_time_slot": "00:00:00", "Battery_pause_start_time_slot": "00:00:00", "Charge_end_time_slot_1": "15:52:00", "Charge_end_time_slot_10": "00:00:00", "Charge_end_time_slot_2": "00:00:00", "Charge_end_time_slot_3": "00:00:00", "Charge_end_time_slot_4": "00:00:00", "Charge_end_time_slot_5": "00:00:00", "Charge_end_time_slot_6": "00:00:00", "Charge_end_time_slot_7": "00:00:00", "Charge_end_time_slot_8": "00:00:00", "Charge_end_time_slot_9": "00:00:00", "Charge_start_time_slot_1": "12:52:00", "Charge_start_time_slot_10": "00:00:00", "Charge_start_time_slot_2": "00:00:00", "Charge_start_time_slot_3": "00:00:00", "Charge_start_time_slot_4": "00:00:00", "Charge_start_time_slot_5": "00:00:00", "Charge_start_time_slot_6": "00:00:00", "Charge_start_time_slot_7": "00:00:00", "Charge_start_time_slot_8": "00:00:00", "Charge_start_time_slot_9": "00:00:00", "Discharge_end_time_slot_1": "19:00:00", "Discharge_end_time_slot_10": "00:00:00", "Discharge_end_time_slot_2": "00:00:00", "Discharge_end_time_slot_3": "00:00:00", "Discharge_end_time_slot_4": "00:00:00", "Discharge_end_time_slot_5": "00:00:00", "Discharge_end_time_slot_6": "00:00:00", "Discharge_end_time_slot_7": "00:00:00", "Discharge_end_time_slot_8": "00:00:00", "Discharge_end_time_slot_9": "00:00:00", "Discharge_start_time_slot_1": "16:00:00", "Discharge_start_time_slot_10": "00:00:00", "Discharge_start_time_slot_2": "00:00:00", "Discharge_start_time_slot_3": "00:00:00", "Discharge_start_time_slot_4": "00:00:00", "Discharge_start_time_slot_5": "00:00:00", "Discharge_start_time_slot_6": "00:00:00", "Discharge_start_time_slot_7": "00:00:00", "Discharge_start_time_slot_8": "00:00:00", "Discharge_start_time_slot_9": "00:00:00" }, "raw": { "batteries": {}, "invertor": { "active_power_rate": 100, "aio1_serial_number": "", "aio1_serial_number_new": "CH2330G294", "aio1_soc": 6, "aio2_serial_number": "CH23", "aio2_serial_number_new": "CH2414G514", "aio2_soc": 6, "aio3_serial_number": "94CH24", "aio3_serial_number_new": "", "aio3_soc": 0, "aio_state": 0, "arm_firmware_version": 0, "battery_charge_limit": 0, "battery_charge_limit_ac": 70, "battery_discharge_limit": 0, "battery_discharge_limit_ac": 75, "battery_discharge_min_power_reserve": 0, "battery_errors": [], "battery_firmware_version": 612, "battery_high_voltage_protection_limit": 0.0, "battery_low_force_charge_time": 0, "battery_low_voltage_protection_limit": 0.0, "battery_nominal_capacity": 0.0, "battery_pause_mode": 0, "battery_pause_slot_1": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "battery_pause_slot_1_end": 0, "battery_pause_slot_1_start": 0, "battery_percent": 0, "battery_soc_reserve": 4, "battery_type": 0, "battery_voltage_adjust": 0.0, "bms_firmware_version": 0, "certification_type": 12, "charge_slot_1": "TimeSlot(start=datetime.time(12, 52), end=datetime.time(15, 52))", "charge_slot_10": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "charge_slot_10_end": 0, "charge_slot_10_start": 0, "charge_slot_1_end": 1552, "charge_slot_1_start": 1252, "charge_slot_2": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "charge_slot_2_end": 0, "charge_slot_2_start": 0, "charge_slot_3": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "charge_slot_3_end": 0, "charge_slot_3_start": 0, "charge_slot_4": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "charge_slot_4_end": 0, "charge_slot_4_start": 0, "charge_slot_5": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "charge_slot_5_end": 0, "charge_slot_5_start": 0, "charge_slot_6": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "charge_slot_6_end": 0, "charge_slot_6_start": 0, "charge_slot_7": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "charge_slot_7_end": 0, "charge_slot_7_start": 0, "charge_slot_8": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "charge_slot_8_end": 0, "charge_slot_8_start": 0, "charge_slot_9": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "charge_slot_9_end": 0, "charge_slot_9_start": 0, "charge_soc": 0, "charge_soc_stop_1": 0, "charge_soc_stop_2": 0, "charge_target_soc": 100, "charge_target_soc_1": 100, "charge_target_soc_10": 100, "charge_target_soc_2": 100, "charge_target_soc_3": 100, "charge_target_soc_4": 100, "charge_target_soc_5": 100, "charge_target_soc_6": 100, "charge_target_soc_7": 100, "charge_target_soc_8": 100, "charge_target_soc_9": 100, "cmd_bms_flash_update": false, "debug_inverter": 0, "device_type_code": "7001", "discharge_slot_1": "TimeSlot(start=datetime.time(16, 0), end=datetime.time(19, 0))", "discharge_slot_10": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "discharge_slot_10_end": 0, "discharge_slot_10_start": 0, "discharge_slot_1_end": 1900, "discharge_slot_1_start": 1600, "discharge_slot_2": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "discharge_slot_2_end": 0, "discharge_slot_2_start": 0, "discharge_slot_3": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "discharge_slot_3_end": 0, "discharge_slot_3_start": 0, "discharge_slot_4": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "discharge_slot_4_end": 0, "discharge_slot_4_start": 0, "discharge_slot_5": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "discharge_slot_5_end": 0, "discharge_slot_5_start": 0, "discharge_slot_6": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "discharge_slot_6_end": 0, "discharge_slot_6_start": 0, "discharge_slot_7": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "discharge_slot_7_end": 0, "discharge_slot_7_start": 0, "discharge_slot_8": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "discharge_slot_8_end": 0, "discharge_slot_8_start": 0, "discharge_slot_9": "TimeSlot(start=datetime.time(0, 0), end=datetime.time(0, 0))", "discharge_slot_9_end": 0, "discharge_slot_9_start": 0, "discharge_soc": 0, "discharge_soc_stop_1": 0, "discharge_soc_stop_2": 0, "discharge_target_soc_1": 4, "discharge_target_soc_10": 0, "discharge_target_soc_2": 0, "discharge_target_soc_3": 0, "discharge_target_soc_4": 0, "discharge_target_soc_5": 0, "discharge_target_soc_6": 0, "discharge_target_soc_7": 0, "discharge_target_soc_8": 0, "discharge_target_soc_9": 0, "dsp_firmware_version": 0, "e_aio1_charge_today": 15.5, "e_aio1_charge_total": 2996.9, "e_aio1_discharge_today": 14.3, "e_aio1_discharge_total": 2924.0, "e_aio2_charge_today": 15.4, "e_aio2_charge_total": 45.7, "e_aio2_discharge_today": 14.1, "e_aio2_discharge_total": 47.6, "e_aio3_charge_today": 0.0, "e_aio3_charge_total": 0.0, "e_aio3_discharge_today": 0.0, "e_aio3_discharge_total": 0.0, "e_aio_charge_today": 32.6, "e_aio_charge_total": 3572.2, "e_aio_discharge_today": 25.7, "e_aio_discharge_total": 2759.1, "e_battery_charge_today": 30.9, "e_battery_charge_today2": 0.0, "e_battery_charge_total": 3042.6, "e_battery_charge_total2": 0.0, "e_battery_discharge_today": 28.4, "e_battery_discharge_today2": 0.0, "e_battery_discharge_total": 2971.6, "e_battery_discharge_total2": 0.0, "e_battery_throughput_total": 0.0, "e_discharge_year": 0.0, "e_grid_export_today": 24.9, "e_grid_export_total": 4102.0, "e_grid_import_today": 24.0, "e_grid_import_total": 3586.4, "e_grid_in_day": 0.0, "e_grid_in_total": 0.0, "e_grid_out_day": 0.0, "e_grid_out_total": 0.0, "e_inverter_in_day": 0.0, "e_inverter_in_total": 0.0, "e_inverter_out_day": 0.0, "e_inverter_out_total": 0.0, "e_load_today": 13.7, "e_load_total": 3081.4, "e_pv1_day": 0.0, "e_pv2_day": 0.0, "e_pv_today": 20.9, "e_pv_total": 3368.0, "e_solar_diverter": 0.0, "eco_mode": 0, "enable_60hz_freq_mode": false, "enable_above_6kw_system": false, "enable_ammeter": false, "enable_auto_judge_battery_type": false, "enable_battery_cable_impedance_alarm": false, "enable_battery_on_pv_or_grid": false, "enable_bms_read": false, "enable_buzzer": false, "enable_charge": false, "enable_charge_target": false, "enable_discharge": false, "enable_drm_rj45_port": false, "enable_frequency_derating": false, "enable_g100_limit_switch": true, "enable_inverter": false, "enable_inverter_auto_restart": false, "enable_local_command_test": false, "enable_low_voltage_fault_ride_through": false, "enable_reversed_115_meter": false, "enable_reversed_418_meter": false, "enable_reversed_ct_clamp": false, "enable_spi": false, "enable_standard_self_consumption_logic": true, "enable_ups_mode": false, "f_ac1": 0.0, "f_eps_backup": 0.0, "fault_protection": 0, "firmware_version": "D0.0-A0.0", "first_battery_bms_firmware_version": 0, "first_battery_serial_number": "", "first_inverter_serial_number": "CH2330G294", "frequency_load_limit_rate": 0, "gateway_fault_codes": [], "generation": "Gen 1", "grid_port_max_power_output": 11000, "i_ac1": 0.0, "i_battery": null, "i_grid": 4.4, "i_grid_port": 0.0, "i_load": 3.9, "i_pv": 0.4, "i_pv1": 0.0, "i_pv2": 0.0, "inverter_countdown": 0, "inverter_errors": [], "inverter_max_power": 12000, "inverter_reboot": 0, "meter_type": 0, "modbus_address": 17, "modbus_version": "0.00", "model": "7", "num_mppt": 0, "num_phases": 0, "p_ac1": -762, "p_aio1_inverter": 58, "p_aio2_inverter": 74, "p_aio3_inverter": 0, "p_aio_total": 132, "p_battery": 0, "p_combined_generation": null, "p_eps_backup": 0, "p_grid_apparent": 0, "p_grid_out": 0, "p_inverter_out": 0, "p_liberty": 306, "p_load": 523, "p_load_demand": 0, "p_pv": 67, "p_pv1": 0, "p_pv2": 0, "parallel_aio_battery_power": 0, "parallel_aio_load_power": 0, "parallel_aio_num": 2, "parallel_aio_online_num": 2, "parallel_aio_soc": 0, "power_factor": 0, "power_factor_function_model": 0, "reactive_power_rate": 0, "restart_delay_time": 0, "select_arm_chip": false, "serial_number": "GW2330G276", "soc_force_adjust": 0, "software_version": "GAAA0010", "start_countdown_timer": 0, "start_system_auto_test": false, "status": 0, "system_mode": 0, "system_time": "2024-09-02 22:25:03", "temp_battery": 0.0, "temp_charger": 0.0, "temp_inverter_heatsink": 0.0, "threephase_abc": 0, "threephase_balance_1": 0, "threephase_balance_2": 0, "threephase_balance_3": 0, "threephase_balance_mode": 0, "usb_device_inserted": 0, "user_code": 0, "v_ac1": 0.0, "v_battery": 0.0, "v_eps_backup": 0.0, "v_grid": 248.7, "v_grid_relay": 248.3, "v_highbrigh_bus": 0.0, "v_inverter_relay": 248.3, "v_load": 248.9, "v_n_bus": 0.0, "v_p_bus": 0.0, "v_pv1": 0.0, "v_pv2": 0.0, "v_pv_start": 0.0, "variable_address": 0, "variable_value": 0, "work_mode": 2, "work_time_total": 0 }, "meters": { "Meter_ID_1": { "e_export_active": 0.0, "e_export_reactive": 0.0, "e_import_active": 0.0, "e_import_reactive": 0.0, "frequency": 4.99, "i_ln": 0.0, "i_phase_1": 4.3, "i_phase_2": 0.0, "i_phase_3": 0.0, "i_total": 0.0, "p_active_phase_1": 788, "p_active_phase_2": 0, "p_active_phase_3": 0, "p_active_total": 0, "p_apparent_phase_1": 0, "p_apparent_phase_2": 0, "p_apparent_phase_3": 0, "p_apparent_total": 0, "p_reactive_phase_1": 0, "p_reactive_phase_2": 0, "p_reactive_phase_3": 0, "p_reactive_total": 0, "pf_phase_1": 0.0, "pf_phase_2": 0.0, "pf_phase_3": 0.0, "pf_total": 0.0, "v_phase_1": 249.8, "v_phase_2": 0.0, "v_phase_3": 0.0 } } } }

arfond commented 2 weeks ago

I'm running the latest Dev 2.4.745

arfond commented 2 weeks ago

Yep, PredBat has started!

image

arfond commented 2 weeks ago

Interesting, so we have something similar with EMS so it maybe feasible to apply that approach.

What is controlled via the Gateway and what is controlled via the individual inverters?

Nothing via the individual AIOs (strict instructions from Paul not to mess with the individual AIOs). All done via the GW, which I have checked has all the sensors listed in the apps.yaml that a single one has. So, I'm thinking simply pointing PredBat to the gateway might work once a couple of sensors are ironed out (battery capacity now sorted, last remaining are battery power and battery charge/discharge rate). I'm hoping those will be sorted before end of the week so I can try PredBat out on the gateway.

Here is my current error, as mentioned this is currently missing.

Screenshot_20240903-070638.png

arfond commented 2 weeks ago

Interesting exchange with Mark just then, as I noticed my gateway was no longer providing data from GivTCP since last night. I worked out is was PredBat running on the background - when I stopped it (running in monitor mode) the gateway data started flowing fine. I think this is due to the missing charge / discharge sensor - but strange that one add-on not running correctly can disrupt another like that.

Screenshot_20240903-072816.png

Screenshot_20240903-074118.png

arfond commented 1 week ago

@springfall2008 - I think it's up and running. The only intervention I've made from the default is to point battery_power to a sensor I've created. That data isn't available at the gateway yet, Paul suggested it's not coming anytime soon, so I created a sensor in HA that combines the individual AIO battery sensors.

Before I activate for the 1st time can I ask how the export limit works. I've added my DNO limit in apps.yaml. This is also commissioned in the gateway, but rather poor the gateway shuts off for a minute if export goes above that.... I ask as I noticed as soon as I ran PredBat it changed my export rate to 100% or 12kW. Once I enable I expect PredBat will see an opportunity to export... Will it limit discharge to the export limit (taking into account predicted load and PV)?

Screenshot_20240904-182010.png

I'll report back once it's running. I know fairly quickly if it's good or not.

gcoan commented 1 week ago

Before I activate for the 1st time can I ask how the export limit works. I've added my DNO limit in apps.yaml. This is also commissioned in the gateway, but rather poor the gateway shuts off for a minute if export goes above that.... I ask as I noticed as soon as I ran PredBat it changed my export rate to 100% or 12kW.

My understanding (per the documentation https://springfall2008.github.io/batpred/apps-yaml/#inverter-control-configurations) is that the export limit in apps.yaml is purely used by Predbat to model the max export you can achieve, and take that into account in the forward plan/cost projection.

Predbat relies on the inverter to actually manage any export limit set by the DNO as this has to be done in realtime based upon house load, solar generation,etc.

You could reduce the max discharge rate of the inverter in apps.yaml to avoid the inverter triggering the export limit.

arfond commented 1 week ago

Thank you. I've tried doing that via adding a number in apps.yaml but I get an exception

Screenshot_20240904-214149.png

Is there somewhere else I should do this. The scaling factor in PredBat I think will do what you said above - won't impact the inverter.

Before I activate for the 1st time can I ask how the export limit works. I've added my DNO limit in apps.yaml. This is also commissioned in the gateway, but rather poor the gateway shuts off for a minute if export goes above that.... I ask as I noticed as soon as I ran PredBat it changed my export rate to 100% or 12kW.

My understanding (per the documentation https://springfall2008.github.io/batpred/apps-yaml/#inverter-control-configurations) is that the export limit in apps.yaml is purely used by Predbat to model the max export you can achieve, and take that into account in the forward plan/cost projection.

Predbat relies on the inverter to actually manage any export limit set by the DNO as this has to be done in realtime based upon house load, solar generation,etc.

You could reduce the max discharge rate of the inverter in apps.yaml to avoid the inverter triggering the export limit.

gcoan commented 1 week ago

you've configured it wrongly

charge_rate and discharge_rate in apps.yaml should point to the inverter sensors that control the charge and discharge rate

you need to set inverter_limit_discharge per the documentation to your discharge limit.

Bear in mind that this just limits the battery discharge rate so if you have solar generation at the same time, it'll still exceed your export limit - which is why export limit has to be implemented in the inverter. This is a workaround

arfond commented 1 week ago

Thank you! That's well understood regarding the workaround. I've reduced max discharge by 3kW for now which is my max solar output during the flux export window.

I can confirm that dual AIO is working perfectly with PredBat. I've had a week without being able to use it since the 2nd AIO install - I've missed it looking after things.

Thanks again.

As noted above - the only workaround is creating a battery power sensor.

gcoan commented 1 week ago

Excellent news

Can you p[rovide a brief summary of what's needed, what software version, config, workaround template helpers, how to configure apps.yaml etc and I can add it to the documentation.

Great work from @britkat1980

arfond commented 1 week ago

Excellent news

Can you p[rovide a brief summary of what's needed, what software version, config, workaround template helpers, how to configure apps.yaml etc and I can add it to the documentation.

Great work from @britkat1980

Yes, very happy to. I'll do that once V3 is out. It's possible the missing battery_power sensor data will be populated (that would be an approximation if @britkat1980 does add it). If it's added it's a simple point to the gateway, if not a little extra guidance needed on GivTCP setup and a new sensor and apps.yaml.

Thank you all again for all your excellent work.

arfond commented 1 week ago

Excellent news

Can you p[rovide a brief summary of what's needed, what software version, config, workaround template helpers, how to configure apps.yaml etc and I can add it to the documentation.

Great work from @britkat1980

As an update. Latest V3 beta and dev now includes the missing battery power sensor, therefore there are now no workarounds. The only thing I'd note in the documentation dual dual / parallel AIO users is to only use the gateway sensors, not the individual AIO ones. It's been working perfectly since my last post, no issues at all. Final version of GivTCP V3 the only requirement. I'm running latest version of PredBat.

gcoan commented 1 week ago

Brilliant thanks, I'll add that point in about using the gateway

gcoan commented 1 week ago

I've added a reference to this to the latest documentation. More signposting and detail of the givtcp & mqtt install is needed, but that's already on my to-do list