-
Bram reacted to a post in a topic:
Premature Float Bug in RCT Axpert VMII 2.5kVA - Seeking Guidance on Modifying Latest Firmware for LiFePo4 Batteries
-
Ridiculous cooling design of Axpert clone inverter
Thanks, glad to hear it's better with the newer units. Depending on the price, it might be a good idea to just go ahead and replace it anyways. But I'll leave that for when the warranty expires. On another topic, did your inverter come with the dust filters? If it did, did you move them to the bottom when you changed the direction of the fans?
-
Ridiculous cooling design of Axpert clone inverter
Thanks! When you say now that the MOSFETs have a higher voltage rating, are you referring to your units or the newer Axpert inverters that are sold? So, I'll plan to replace the capacitors, and if the MOSFETs don't have much headroom above the battery's maximum voltage, I'll upgrade them as well.
-
Ridiculous cooling design of Axpert clone inverter
Thanks @Coulomb I appreciate your advice. I'm glad to hear not all of the capacitors are not seen as bad/problematic. I'll plan for upgrading the capacitors by the MOSFETs once the warranty runs out. If it was your unit, would you just upgrade those capacitors or the MOSFETs (or anything else) as well?
-
Ridiculous cooling design of Axpert clone inverter
Hi @Coulomb Some of the forum posts, including yours, have inspired me to replace the capacitors in my inverter once the warranty runs out. Also, thanks for sharing the service manual. When you refer to the critical capacitors, which ones are you referring to? Would it be the DC-AC ones, or the ones close to the MOSFETs?
-
Premature Float Bug in RCT Axpert VMII 2.5kVA - Seeking Guidance on Modifying Latest Firmware for LiFePo4 Batteries
Glad to see you got it working! The ESP firmware I shared with you is standalone, the Home Assistant API is disabled. If you wish to integrate it with Home Assistant, it will need to be recompiled with a few changes. Do you have Home Assistant?
-
Bram reacted to a post in a topic:
Premature Float Bug in RCT Axpert VMII 2.5kVA - Seeking Guidance on Modifying Latest Firmware for LiFePo4 Batteries
-
Premature Float Bug in RCT Axpert VMII 2.5kVA - Seeking Guidance on Modifying Latest Firmware for LiFePo4 Batteries
Thanks for the heads up, here's the updated firmware file attached with the 48V inverter set float stage voltage range. ESP32 ESPHome Standalone Firmware for Axpert-48V-Inverter (ver1.1).bin
-
Premature Float Bug in RCT Axpert VMII 2.5kVA - Seeking Guidance on Modifying Latest Firmware for LiFePo4 Batteries
Hi, sorry for the late response, I didn't get a notification (just quote or mention me next time) The commands are timing out, so that means the communication between the ESP32 and your inverter is not working. You can try swapping the RX and TX pins. Swapping them will most likely fix the issue. If it doesn't work, can you send a picture of how the ESP32, MAX3232 module and inverter is wired up?
-
Premature Float Bug in RCT Axpert VMII 2.5kVA - Seeking Guidance on Modifying Latest Firmware for LiFePo4 Batteries
ESP32 Firmware file attached; I just modified it for the 48V inverter. You can flash it using https://web.esphome.io/ on your computer in a Chrome based web browser. Once flashed, you can connect to the Wi-Fi hotspot on the ESP32 and connect it to your Wi-Fi network, more on that here: Captive Portal — ESPHome Once it's connected to your Wi-Fi you can go to http://axpert.local to access the ESP web portal, if you prefer, you can access it over the Wi-Fi hotspot as well. (Just in case you don't have an available Wi-Fi network or prefer to not connect it, although using a Wi-Fi network with internet is recommended as the uptime sensor etc relies on syncing time over the internet) I'd suggest adjusting the voltage sliders in the web portal on a computer, as they're difficult to adjust on phone, especially because your 48V inverter has much more steps for the voltage sliders. If the sliders are too difficult to use, I can change them to a drop-down menu instead. The below settings are the only ones you need to use for the charging fix: ESP32 ESPHome Standalone Firmware for Axpert-48V-Inverter.bin
-
Bram reacted to a post in a topic:
Premature Float Bug in RCT Axpert VMII 2.5kVA - Seeking Guidance on Modifying Latest Firmware for LiFePo4 Batteries
-
Premature Float Bug in RCT Axpert VMII 2.5kVA - Seeking Guidance on Modifying Latest Firmware for LiFePo4 Batteries
Hi Bram, Are you looking for using it in standalone mode or with Home Assistant? What voltage is your inverter?
-
Bram reacted to a post in a topic:
Premature Float Bug in RCT Axpert VMII 2.5kVA - Seeking Guidance on Modifying Latest Firmware for LiFePo4 Batteries
-
jumper reacted to a post in a topic:
Premature Float Bug in RCT Axpert VMII 2.5kVA - Seeking Guidance on Modifying Latest Firmware for LiFePo4 Batteries
-
RCT Axpert VMII 2.5kVA not showing output power
I use these buck regulators: DC-DC 5A Adjustable Buck Regulator VOUT 1.25-32V - Micro Robotics If you use a traditional ethernet cable, then it's the blue wire that provides 12V from the RS232 port, like in the below picture, and ground is brown, but you just verify it with a multi-meter before connecting to be safe (not sure if crossover cables etc might have an effect).
-
Premature Float Bug in RCT Axpert VMII 2.5kVA - Seeking Guidance on Modifying Latest Firmware for LiFePo4 Batteries
Axpert 24V Bulk Charge workaround with ESP32. Here's my ESP32 solution using ESPHome for anyone who might be interested. It's aimed at 24V Axpert inverters without a working bulk charge mode, to enable bulk charging reliably by adjusting the float charge voltage. Please note that this is by no means an extensive DIY how to guide, however, with the linked sources and what I've shared, you should have access to everything you need to make this yourself. These are the main settings to configure for bulk charging: Set float stage voltage - Set this value to your desired float charge voltage. Switch to bulk current - When charging current exceeds the value set here, the float voltage will be changed to the bulk charge voltage that's set on the inverter. Switch to float current - When charging current drops below the value set here, the float voltage will be changed to the value in Set float stage voltage. Bulk charge voltage - This allows for changing the bulk charge voltage on the inverter settings via the ESP. If needed I can also share a compiled firmware.bin file that can be flashed to an ESP32 module if anyone is interested. I'd like to give credit to the below for making this possible: https://github.com/Bandit-17/PVBRAIN/blob/main/code/pvbrain.yaml https://github.com/syssi/esphome-pipsolar/tree/pip8048 @Coulomb's firmware fix for the charging commands https://www.thingiverse.com/thing:3164954 (Printed at a scale 85% of the original size) https://esphome.io/ Notes: ESPHome version 2023.7.0 or later is required for compiling to get a stable, working web portal. A Home Assistant server is not required. There's a lot of areas that's commented out that I left in case anyone would like to expand on them. Flashing of ESPHome firmware can be done via https://web.esphome.io/ Time is synced from internet (not required for getting bulk charge workaround to work) Wi-Fi is required to access the web portal from a web browser on the same local network. The status LED on the ESP32 is not serving a purpose yet, and I hope to make use of it in the future, to indicate whether bulk or float charging is currently active. It plugs directly into the RS232 port of an Axpert inverter, and is powered from the inverter as well. The WiFi connection can be setup after connecting to the Wi-Fi Access Point of the ESP32 and entering the Wi-Fi details in the captive portal. Keep this is mind when using the sliders: These sliders are variables, they're values are indicative of the value of the variable: These sliders only send a command to the inverter after being adjusted, they don't update when the setting is changed on the inverter itself, it only displays the last value the slider was set to. Instead, use the sensor values to determine the actual value of the setting on the inverter. Hardware used: https://www.robotics.org.za/MX3232-MOD https://www.robotics.org.za/ESP32-DEV-CP2102-C?search=esp32 Ethernet cable to cut. Option: https://www.robotics.org.za/XL4015?search=buck regulator or USB charger with Type-C connector Optional: Enclosure Here's pictures of the solution: The below picture is from Home Assistant and indicates how the charging workaround works (left side of the graphs). #### ESPHome YAML Config for 24V Axpert inverter with Bulk Charge workaround #### substitutions: name: axpert inverter: rct tx_pin_inverter: GPIO17 rx_pin_inverter: GPIO16 baud_rate_inverter: '2400' template_update: 2s text_update: 5s esphome: name: ${name} friendly_name: RCT Inverter comment: RCT Inverter Standalone # platformio_options: # build_flags: # - -DCONFIG_ARDUINO_LOOP_STACK_SIZE=32768 # 16384 # 8192 # 16384 # platform_packages: # - framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#2.0.2 # platform: # - https://github.com/platformio/platform-espressif32.git#feature/arduino-upstream esp32: board: esp32dev framework: type: esp-idf external_components: - source: github://syssi/esphome-pipsolar@pip8048 refresh: 0s # Enable logging logger: # baud_rate: 0 # Enable Home Assistant API # api: # encryption: # key: !secret api_key # ota: # password: !secret ota_password wifi: power_save_mode: none ssid: !secret wifi_ssid password: !secret wifi_password # manual_ip: # static_ip: 10.0.0.55 # gateway: 10.0.0.254 # subnet: 255.255.255.0 # dns1: 1.1.1.1 # dns2: 8.8.8.8 ap: ssid: "Axpert Fallback Hotspot" password: "RCT123456" captive_portal: web_server: port: 80 # auth: # username: !secret web_server_username # password: !secret web_server_password globals: # - id: ${name}_${inverter}_PV_power_total_yesterday_global # type: float # restore_value: yes - id: ${name}_${inverter}_ac_output_active_power_yesterday_global type: float restore_value: yes - id: ${name}_${inverter}_battery_charging_power_yesterday_global type: float restore_value: yes - id: ${name}_${inverter}_battery_discharging_power_yesterday_global type: float restore_value: yes time: platform: sntp id: my_time timezone: "Africa/Johannesburg" on_time: - seconds: 59 minutes: 59 hours: 23 then: # - globals.set: # id: ${name}_${inverter}_PV_power_total_yesterday_global # value: !lambda return ( id(${name}_${inverter}_PV_power_total_yesterday_global) = float( id(${name}_${inverter}_PV_power_total_today).state) ); - globals.set: id: ${name}_${inverter}_ac_output_active_power_yesterday_global value: !lambda return ( id(${name}_${inverter}_ac_output_active_power_yesterday_global) = float( id(${name}_${inverter}_ac_output_active_power_total_today).state) ); - globals.set: id: ${name}_${inverter}_battery_charging_power_yesterday_global value: !lambda return ( id(${name}_${inverter}_battery_charging_power_yesterday_global) = float( id(${name}_${inverter}_battery_charging_power_total_today).state) ); - globals.set: id: ${name}_${inverter}_battery_discharging_power_yesterday_global value: !lambda return ( id(${name}_${inverter}_battery_discharging_power_yesterday_global) = float( id(${name}_${inverter}_battery_discharging_power_total_today).state) ); ####################### UART ####################### uart: ######### UART for PIPsolar RS232 ###### - id: uart_1 tx_pin: ${tx_pin_inverter} rx_pin: ${rx_pin_inverter} baud_rate: ${baud_rate_inverter} ######################### DEVICES UART/MODBUS based ################### pipsolar: - uart_id: uart_1 id: pip8048 #update_interval: 5s output: - platform: pipsolar pipsolar_id: pip8048 battery_bulk_voltage: id: ${name}_${inverter}_battery_bulk_voltage_set possible_values: [25.0,25.1,25.2,25.3,25.4,25.5,25.6,25.7,25.8,25.9,26.0,26.1,26.2,26.3,26.4,26.5,26.6,26.7,26.8,26.9,27.0,27.1,27.2,27.3,27.4,27.5,27.6,27.7,27.8,27.9,28.0,28.1,28.2,28.3,28.4,28.5,28.6,28.7,28.8,28.9,29.0,29.1,29.2,29.3,29.4,29.5,29.6,29.7,29.8,29.9,30.0,30.1,30.2,30.3,30.4,30.5,30.6,30.7,30.8,30.9,31.0] - platform: pipsolar pipsolar_id: pip8048 battery_float_voltage: id: ${name}_${inverter}_battery_float_voltage_set possible_values: [25.0,25.1,25.2,25.3,25.4,25.5,25.6,25.7,25.8,25.9,26.0,26.1,26.2,26.3,26.4,26.5,26.6,26.7,26.8,26.9,27.0,27.1,27.2,27.3,27.4,27.5,27.6,27.7,27.8,27.9,28.0,28.1,28.2,28.3,28.4,28.5,28.6,28.7,28.8,28.9,29.0,29.1,29.2,29.3,29.4,29.5,29.6,29.7,29.8,29.9,30.0,30.1,30.2,30.3,30.4,30.5,30.6,30.7,30.8,30.9,31.0] # - platform: pipsolar # pipsolar_id: pip8048 # current_max_charging_current: # id: ${name}_${inverter}_current_max_charging_current_set # possible_values: [10,20,30,40,50,60,70,80] # - platform: pipsolar # pipsolar_id: pip8048 # current_max_ac_charging_current: # id: ${name}_${inverter}_current_max_ac_charging_current_set # possible_values: [2,10,20,30,40,50,60,70,80] - platform: pipsolar pipsolar_id: pip8048 battery_under_voltage: id: ${name}_${inverter}_battery_under_voltage_set possible_values: [21.0, 21.1, 21.2, 21.3, 21.4, 21.5, 21.6, 21.7, 21.8, 21.9, 22.0, 22.1, 22.2, 22.3, 22.4, 22.5, 22.6, 22.7, 22.8, 22.9, 23.0, 23.1, 23.2, 23.3, 23.4, 23.5, 23.6, 23.7, 23.8, 23.9, 24.0] # - platform: pipsolar # pipsolar_id: pip8048 # battery_recharge_voltage: # id: ${name}_${inverter}_battery_recharge_voltage_set # possible_values: [44.0,45.0,46.0,47.0,48.0,49.0,49.0,50.0,51.0] number: ######## Thresholds Axpert ######## - platform: template name: Bulk charge voltage id: ${name}_${inverter}_battery_bulk_voltage_number optimistic: true unit_of_measurement: 'V' icon: mdi:sine-wave min_value: 26.5 max_value: 29.0 step: 0.1 initial_value: 27.5 restore_value: true mode: 'slider' on_value: then: - output.pipsolar.set_level: id: ${name}_${inverter}_battery_bulk_voltage_set value: !lambda return (float(id(${name}_${inverter}_battery_bulk_voltage_number).state)); - platform: template name: Float charge voltage id: ${name}_${inverter}_battery_float_voltage_number optimistic: true unit_of_measurement: 'V' icon: mdi:sine-wave min_value: 26.0 max_value: 27.4 step: 0.1 initial_value: 26.9 restore_value: true mode: 'slider' on_value: then: - output.pipsolar.set_level: id: ${name}_${inverter}_battery_float_voltage_set value: !lambda return (float(id(${name}_${inverter}_battery_float_voltage_number).state)); - platform: template name: Cutoff voltage id: ${name}_${inverter}_battery_under_voltage_number optimistic: true unit_of_measurement: 'V' icon: mdi:sine-wave min_value: 21.0 max_value: 24.0 step: 0.1 initial_value: 24.0 restore_value: true mode: 'slider' on_value: then: - output.pipsolar.set_level: id: ${name}_${inverter}_battery_under_voltage_set value: !lambda return (id(${name}_${inverter}_battery_under_voltage_number).state); # - platform: template # name: Recharge voltage # id: ${name}_${inverter}_battery_recharge_voltage_number # optimistic: true # unit_of_measurement: 'V' # icon: mdi:sine-wave # min_value: 44.0 # max_value: 51.0 # step: 1.0 # initial_value: 48.0 # restore_value: true # mode: 'slider' # on_value: # then: # - output.pipsolar.set_level: # id: ${name}_${inverter}_battery_recharge_voltage_set # value: !lambda return (id(${name}_${inverter}_battery_recharge_voltage_number).state); ######### Joshua's Bulk Charging Parameters ######## - platform: template name: Set float stage voltage id: ${name}_${inverter}_set_float_stage_voltage optimistic: true unit_of_measurement: 'V' icon: mdi:power-plug-battery-outline min_value: 26.5 max_value: 27.5 step: 0.1 initial_value: 26.9 restore_value: true mode: 'slider' - platform: template name: Switch to bulk current id: ${name}_${inverter}_switch_to_bulk_charge_current optimistic: true unit_of_measurement: 'A' icon: mdi:power-plug-battery-outline min_value: 1 max_value: 10 step: 1 initial_value: 3 restore_value: true mode: 'slider' - platform: template name: Switch to float current id: ${name}_${inverter}_switch_to_float_charge_current optimistic: true unit_of_measurement: 'A' icon: mdi:power-plug-battery-outline min_value: 2 max_value: 10 step: 1 initial_value: 4 restore_value: true mode: 'slider' switch: - platform: restart name: "ESP Restart" sensor: - platform: wifi_signal name: "WiFi Signal" id: rssi_sensor update_interval: 15s # - platform: template # name: "WiFi Quality" # unit_of_measurement: "%" # accuracy_decimals: 0 # icon: "mdi:wifi" # update_interval: 15s # lambda: |- # int quality; # const int rssi = id(rssi_sensor).state; # if (rssi <= -100) { quality = 0;} # else if (rssi >= -50) # { quality = 100; } # else # { quality = 2 * (rssi + 100); } # return quality; - platform: uptime id: uptime_sec update_interval: 30s - platform: pipsolar pipsolar_id: pip8048 # grid_rating_voltage: # id: ${name}_${inverter}_grid_rating_voltage # name: ${name}_${inverter}_grid_rating_voltage # grid_rating_current: # id: ${name}_${inverter}_grid_rating_current # name: ${name}_${inverter}_grid_rating_current # ac_output_rating_voltage: # id: ${name}_${inverter}_ac_output_rating_voltage # name: ${name}_${inverter}_ac_output_rating_voltage # ac_output_rating_frequency: # id: ${name}_${inverter}_ac_output_rating_frequency # name: ${name}_${inverter}_ac_output_rating_frequency # ac_output_rating_current: # id: ${name}_${inverter}_ac_output_rating_current # name: ${name}_${inverter}_ac_output_rating_current # ac_output_rating_apparent_power: # id: ${name}_${inverter}_ac_output_rating_apparent_power # name: ${name}_${inverter}_ac_output_rating_apparent_power # ac_output_rating_active_power: # id: ${name}_${inverter}_ac_output_rating_active_power # name: ${name}_${inverter}_ac_output_rating_active_power # battery_rating_voltage: # id: ${name}_${inverter}_battery_rating_voltage # name: "Inverter rated battery voltage" # battery_recharge_voltage: # id: ${name}_${inverter}_battery_recharge_voltage # name: "Recharge voltage" # battery_under_voltage: # id: ${name}_${inverter}_battery_under_voltage # name: "Battery cutoff voltage" battery_bulk_voltage: id: ${name}_${inverter}_battery_bulk_voltage name: "Bulk voltage" battery_float_voltage: id: ${name}_${inverter}_battery_float_voltage name: "Float voltage" # battery_type: # id: ${name}_${inverter}_battery_type #name: ${name}_${inverter}_battery_type # battery_redischarge_voltage: # id: ${name}_${inverter}_battery_redischarge_voltage # name: "Redischarge voltage" # current_max_ac_charging_current: # id: ${name}_${inverter}_current_max_ac_charging_current # name: "Inverter max AC charging current" # current_max_charging_current: # id: ${name}_${inverter}_current_max_charging_current # name: "Max charging current" # output_source_priority: # id: ${name}_${inverter}_output_source_priority # name: "Output source priority" # output_mode: # id: ${name}_${inverter}_output_mode # name: "Inverter output_mode" output_load_percent: id: ${name}_${inverter}_output_load_percent name: "Inverter load" accuracy_decimals: 0 # charger_source_priority: # id: ${name}_${inverter}_charger_source_priority # name: "Charger source priority" grid_voltage: id: ${name}_${inverter}_grid_voltage name: "Grid voltage" # grid_frequency: # id: ${name}_${inverter}_grid_frequency # name: ${name}_${inverter}_grid_frequency ac_output_voltage: id: ${name}_${inverter}_ac_output_voltage name: "AC output voltage" # ac_output_frequency: # id: ${name}_${inverter}_ac_output_frequency # name: ${name}_${inverter}_ac_output_frequency ac_output_apparent_power: id: ${name}_${inverter}_ac_output_apparent_power name: "AC output VA" accuracy_decimals: 0 ac_output_active_power: id: ${name}_${inverter}_ac_output_active_power name: "AC output power" accuracy_decimals: 0 # bus_voltage: # id: ${name}_${inverter}_bus_voltage # name: "Inverter bus voltage" battery_voltage: id: ${name}_${inverter}_battery_voltage name: "Battery voltage" battery_charging_current: id: ${name}_${inverter}_battery_charging_current name: "Battery charge current" accuracy_decimals: 0 on_value_range: - below: !lambda return (id(${name}_${inverter}_switch_to_float_charge_current).state); then: - if: condition: lambda: return ((float(id(${name}_${inverter}_set_float_stage_voltage).state)) != (float(id(${name}_${inverter}_battery_float_voltage).state))); then: - output.pipsolar.set_level: id: ${name}_${inverter}_battery_float_voltage_set value: !lambda return (float(id(${name}_${inverter}_set_float_stage_voltage).state)); - above: !lambda return (id(${name}_${inverter}_switch_to_bulk_charge_current).state); then: - if: condition: lambda: return (float(id(${name}_${inverter}_battery_bulk_voltage).state)) != (float(id(${name}_${inverter}_battery_float_voltage).state)); then: - output.pipsolar.set_level: id: ${name}_${inverter}_battery_float_voltage_set value: !lambda return (float(id(${name}_${inverter}_battery_bulk_voltage).state)); # # battery_capacity_percent: # # id: ${name}_${inverter}_battery_capacity_percent # # name: "Inverter battery capacity percent" # battery_voltage_scc: # id: ${name}_${inverter}_battery_voltage_scc # name: "Inverter battery voltage scc" battery_discharge_current: id: ${name}_${inverter}_battery_discharge_current name: "Discharge current" # battery_voltage_offset_for_fans_on: # id: ${name}_${inverter}_battery_voltage_offset_for_fans_on # name: "Inverter battery voltage offset for fans on" inverter_heat_sink_temperature: id: ${name}_${inverter}_inverter_heat_sink_temperature name: "Inverter temperature" accuracy_decimals: 0 # add_sbu_priority_version: # id: ${name}_${inverter}_add_sbu_priority_version # name: ${name}_${inverter}_add_sbu_priority_version # eeprom_version: # id: ${name}_${inverter}_eeprom_version # name: ${name}_${inverter}_eeprom_version # scc_firmware_version: # id: ${name}_${inverter}_scc_firmware_version # name: ${name}_${inverter}_scc_firmware_version # pv1_input_current: # id: ${name}_${inverter}_pv1_input_current # name: "PV input current" # pv1_input_voltage: # id: ${name}_${inverter}_pv1_input_voltage # name: "PV input voltage" # pv1_charging_power: # id: ${name}_${inverter}_pv1_charging_power # name: "PV charging power" # - platform: total_daily_energy # name: PV power total today # power_id: ${name}_${inverter}_pv1_charging_power # unit_of_measurement: "kWh" # accuracy_decimals: 2 # id: ${name}_${inverter}_PV1_power_total_today # method: trapezoid # filters: # # Multiplication factor from W to kW is 0.001 # - multiply: 0.001 # icon: mdi:counter # - platform: total_daily_energy # name: ${name}_${inverter}_PV2_power_total_today # power_id: ${name}_${inverter}_pv2_charging_power # unit_of_measurement: "kWh" # accuracy_decimals: 2 # id: ${name}_${inverter}_PV2_power_total_today # method: trapezoid # filters: # Multiplication factor from W to kW is 0.001 # - multiply: 0.001 # icon: mdi:counter # - platform: template # name: PV power total # id: ${name}_${inverter}_PV_power_total # unit_of_measurement: "W" # accuracy_decimals: 1 # update_interval: ${template_update} # icon: mdi:power # lambda: return (id(${name}_${inverter}_pv1_charging_power).state); # - platform: total_daily_energy # name: PV power total today # power_id: ${name}_${inverter}_PV_power_total # unit_of_measurement: "kWh" # accuracy_decimals: 3 # id: ${name}_${inverter}_PV_power_total_today # method: trapezoid # filters: # # Multiplication factor from W to kW is 0.001 # - multiply: 0.001 # icon: mdi:counter # - platform: template # name: PV power total yesterday # id: template_${name}_${inverter}_PV_power_total_yesterday # unit_of_measurement: "kwh" # accuracy_decimals: 3 # icon: mdi:power # update_interval: ${template_update} # lambda: |- # return ( id(template_${name}_${inverter}_PV_power_total_yesterday).state = id(${name}_${inverter}_PV_power_total_yesterday_global) ); - platform: total_daily_energy name: AC output power today power_id: ${name}_${inverter}_ac_output_active_power unit_of_measurement: "kWh" accuracy_decimals: 3 id: ${name}_${inverter}_ac_output_active_power_total_today method: trapezoid filters: # Multiplication factor from W to kW is 0.001 - multiply: 0.001 icon: mdi:counter - platform: template name: AC output power yesterday id: template_${name}_${inverter}_ac_output_active_power_yesterday unit_of_measurement: "kwh" accuracy_decimals: 3 icon: mdi:power update_interval: ${template_update} lambda: |- return ( id(template_${name}_${inverter}_ac_output_active_power_yesterday).state = id(${name}_${inverter}_ac_output_active_power_yesterday_global) ); - platform: template name: Battery charging power id: ${name}_${inverter}_battery_charging_power unit_of_measurement: "W" accuracy_decimals: 3 update_interval: ${template_update} icon: mdi:power lambda: return ( (id(${name}_${inverter}_battery_voltage).state) * (id(${name}_${inverter}_battery_charging_current).state) ); - platform: total_daily_energy name: Battery charged power today power_id: ${name}_${inverter}_battery_charging_power unit_of_measurement: "kWh" accuracy_decimals: 3 id: ${name}_${inverter}_battery_charging_power_total_today method: trapezoid filters: # Multiplication factor from W to kW is 0.001 - multiply: 0.001 icon: mdi:counter - platform: template name: Battery charged power yesterday id: template_${name}_${inverter}_battery_charging_power_yesterday unit_of_measurement: "kwh" accuracy_decimals: 3 icon: mdi:power update_interval: ${template_update} lambda: |- return ( id(template_${name}_${inverter}_battery_charging_power_yesterday).state = id(${name}_${inverter}_battery_charging_power_yesterday_global) ); - platform: template name: Battery discharging power id: ${name}_${inverter}_battery_discharging_power unit_of_measurement: "W" accuracy_decimals: 3 update_interval: ${template_update} icon: mdi:power lambda: return ( (id(${name}_${inverter}_battery_voltage).state) * (id(${name}_${inverter}_battery_discharge_current).state) ); - platform: total_daily_energy name: Battery discharged power today power_id: ${name}_${inverter}_battery_discharging_power unit_of_measurement: "kWh" accuracy_decimals: 3 id: ${name}_${inverter}_battery_discharging_power_total_today method: trapezoid filters: # Multiplication factor from W to kW is 0.001 - multiply: 0.001 icon: mdi:counter - platform: template name: Battery discharged power yesterday id: template_${name}_${inverter}_battery_discharging_power_yesterday unit_of_measurement: "kwh" accuracy_decimals: 3 icon: mdi:power update_interval: ${template_update} lambda: |- return ( id(template_${name}_${inverter}_battery_discharging_power_yesterday).state = id(${name}_${inverter}_battery_discharging_power_yesterday_global) ); # - platform: template # name: ${name}_${smartshunt}_battery_charging_power # id: ${name}_${smartshunt}_battery_charging_power # unit_of_measurement: "W" # accuracy_decimals: 3 # update_interval: ${template_update} # icon: mdi:power # lambda: |- # if (float(id(${name}_${smartshunt}_battery_current).state)> 0){ # return ( (id(${name}_${smartshunt}_battery_voltage).state) * (id(${name}_${smartshunt}_battery_current).state) ); # } # else { # return 0.0; # } # - platform: total_daily_energy # name: ${name}_${smartshunt}_battery_charging_power_total_today # power_id: ${name}_${smartshunt}_battery_charging_power # unit_of_measurement: "kWh" # accuracy_decimals: 3 # id: ${name}_${smartshunt}_battery_charging_power_total_today # method: trapezoid # filters: # # Multiplication factor from W to kW is 0.001 # - multiply: 0.001 # icon: mdi:counter # - platform: template # name: ${name}_${smartshunt}_battery_charging_power_yesterday # id: template_${name}_${smartshunt}_battery_charging_power_yesterday # unit_of_measurement: "kwh" # accuracy_decimals: 3 # icon: mdi:power # update_interval: ${template_update} # lambda: |- # return ( id(template_${name}_${smartshunt}_battery_charging_power_yesterday).state = id(${name}_${smartshunt}_battery_charging_power_yesterday_global) ); # - platform: template # name: ${name}_${smartshunt}_battery_discharging_current # id: ${name}_${smartshunt}_battery_discharging_current # unit_of_measurement: "A" # accuracy_decimals: 3 # update_interval: ${template_update} # icon: mdi:current-dc # lambda: |- # if (float(id(${name}_${smartshunt}_battery_current).state)< 0){ # return ( (id(${name}_${smartshunt}_battery_current).state) ); # } # else { # return 0.0; # } # - platform: template # name: ${name}_${smartshunt}_battery_discharging_power # id: ${name}_${smartshunt}_battery_discharging_power # unit_of_measurement: "W" # accuracy_decimals: 3 # update_interval: ${template_update} # icon: mdi:power # lambda: |- # if (float(id(${name}_${smartshunt}_battery_current).state) < 0){ # return ( -(id(${name}_${smartshunt}_battery_voltage).state) * (id(${name}_${smartshunt}_battery_current).state) ); # } # else { # return 0.0; # } # - platform: total_daily_energy # name: ${name}_${smartshunt}_battery_discharging_power_total_today # power_id: ${name}_${smartshunt}_battery_discharging_power # unit_of_measurement: "kWh" # accuracy_decimals: 3 # id: ${name}_${smartshunt}_battery_discharging_power_total_today # method: trapezoid # filters: # # Multiplication factor from W to kW is 0.001 # - multiply: 0.001 # icon: mdi:counter # - platform: template # name: ${name}_${smartshunt}_battery_discharging_power_yesterday # id: template_${name}_${smartshunt}_battery_discharging_power_yesterday # unit_of_measurement: "kwh" # accuracy_decimals: 3 # icon: mdi:power # update_interval: ${template_update} # lambda: |- # return ( id(template_${name}_${smartshunt}_battery_discharging_power_yesterday).state = id(${name}_${smartshunt}_battery_discharging_power_yesterday_global) ); # binary_sensor: # - platform: pipsolar # pipsolar_id: pip8048 # warning_battery_equalization: # id: ${name}_${inverter}_warning_battery_equalization # name: "Battery Equalization Status" # # configuration_status: # # name: "Inverter configuration status" # # scc_firmware_version: # # name: "${name} scc_firmware_version" # # load_status: # # name: "Inverter load status" # # battery_voltage_to_steady_while_charging: # # name: "pvbrain_axpert_battery_voltage_to_steady_while_charging" # # charging_status: # # name: "Invert charging status" # # scc_charging_status: # # name: "Inverter SCC charging status" # # ac_charging_status: # # name: "Inverter AC charging status" # # charging_to_floating_mode: # # name: "pvbrain_axpert_charging_to_floating_mode" # switch_on: # name: "Inverter switch on" # id: ${name}_${inverter}_switch_on text_sensor: - platform: template name: "Current time" lambda: |- char str[17]; time_t currTime = id(my_time).now().timestamp; strftime(str, sizeof(str), "%H:%M", localtime(&currTime)); return { str }; update_interval: 30s - platform: template name: "ESP Uptime" lambda: |- int seconds = (id(uptime_sec).state); int days = seconds / (24 * 3600); seconds = seconds % (24 * 3600); int hours = seconds / 3600; seconds = seconds % 3600; int minutes = seconds / 60; seconds = seconds % 60; if ( days ) { return { (std::to_string(days) +"d " + std::to_string(hours) +"h " + std::to_string(minutes) +"m").c_str() }; } else if ( hours ) { return { (std::to_string(hours) +"h " + std::to_string(minutes) +"m").c_str() }; } else if ( minutes ) { return { (std::to_string(minutes) +"m "+ std::to_string(seconds) +"s ").c_str() }; } else { return { (std::to_string(seconds) +"s ").c_str() }; } icon: mdi:clock-start update_interval: 30s select: - platform: pipsolar pipsolar_id: pip8048 output_source_priority: id: ${name}_${inverter}_output_source_priority_select name: "Output source priority" icon: mdi:numeric optionsmap: "Utility first": "POP00" "Solar only": "POP01" "Solar Battery Utility": "POP02" statusmap: "0": "Utility first" "1": "Solar only" "2": "Solar Battery Utility" # For HS: 00 for utility first, 01 for solar first, 02 for solar and utility, 03 for only solar charging - platform: pipsolar pipsolar_id: pip8048 charger_source_priority: id: ${name}_${inverter}_charger_source_priority_select name: "Charger source priority" icon: mdi:numeric optionsmap: # "Utility first": "PCP00" "Solar first": "PCP01" "Solar and utility": "PCP02" "Solar charging only": "PCP03" statusmap: # "0": "Utility first" "1": "Solar first" "2": "Solar and utility" "3": "Solar charging only" - platform: pipsolar pipsolar_id: pip8048 current_max_ac_charging_current: id: ${name}_${inverter}_current_max_ac_charging_current_select name: Max AC charge current icon: mdi:current-dc optionsmap: "2A": "MUCHGC002" "10A": "MUCHGC010" "20A": "MUCHGC020" "30A": "MUCHGC030" "40A": "MUCHGC040" "50A": "MUCHGC050" statusmap: "2": "2A" "10": "10A" "20": "20A" "30": "30A" "40": "40A" "50": "50A" "60": "60A" "70": "70A" "80": "80A" "90": "90A" "100": "100A" "110": "110A" "120": "120A" - platform: pipsolar pipsolar_id: pip8048 current_max_charging_current: id: ${name}_${inverter}_current_max_charging_current_select name: Max total charge current icon: mdi:current-dc optionsmap: "10A": "MNCHGC010" "20A": "MNCHGC020" "30A": "MNCHGC030" "40A": "MNCHGC040" "50A": "MNCHGC050" statusmap: "10": "10A" "20": "20A" "30": "30A" "40": "40A" "50": "50A" "60": "60A" "70": "70A" "80": "80A" "90": "90A" "100": "100A" "110": "110A" "120": "120A"
-
RCT Axpert VMII 2.5kVA not showing output power
So you're only having trouble with readings in those scenarios while it's not grounded? The Raspberry is functioning normally as expected, not buggy or slow?
-
RCT Axpert VMII 2.5kVA not showing output power
This is the last 12 hours (during which there's no loadshedding) on my parent's inverter running the freezers etc., and it frequently displays no power output on bypass when the load is low. When running from battery, my "idle" load is enough for it. During the night the load on mine is also low enough to not show anything (below is for the last 22 hours): Here you can also see the nighttime power draw only showing during loadshedding, reporting all the way down to about 12W. You did however lead to me to another idea. Using the inverter to report the grid or output voltage, you can also get one of these sensors and connect it to the Raspberry or ESP, then you should get more precise current readings so you can get accurate power readings. The 30A current sensor, is small enough to not lose too much accuracy, but it can read all the way up to the 5000W surges the inverter should be able to handle. Even a 20A one would be more than enough. (30A Max) Non-Invasive AC Current Sensor (netram.co.za)
-
RCT Axpert VMII 2.5kVA not showing output power
I've only connected to the inverter in these scenarios: Laptop powered from battery with USB to Serial adaptor. Laptop powered from inverter AC output with USB to Serial adaptor. ESP32 powered from cell phone charger via the inverter's AC output. ESP32 powered from the inverter's RS232 communication port with a buck module (current setup) I wouldn't suggest running a Raspberry Pi from this as it might draw too much power. For me grounding was never a concern. I'm not sure if the USB to Serial adaptor forms a grounded connection, but for the ESP32, a ground connection is inherently required to the inverter for the communication. If you're getting gibberish data, I'd guess it could be from Raspberry Pi not enough power from the battery. By running of battery, do you mean the AC output of the inverter when there's no mains? Or with a buck module from your inverter's 24V battery? Or with another battery solution, maybe like a DC UPS, with a slight voltage drop when mains go away that could cause your raspberry to become unstable?
-
RCT Axpert VMII 2.5kVA not showing output power
Thanks for the explanation, puts my mind at ease. I'm going to try to find out what the BMS is that's inside the batteries, so I can hopefully find out at what voltages they balance etc. With my testing at a 3A tail current, the charging went to float rather quickly. When the battery gets full the current drops off really quickly, about quick enough to make me wonder whether it will have enough time to balance the cells. The below test was at 5A, and it drops quite quickly, I think I'll end up settling on 3 or 4A just to give it the 1-2 minutes extra to balance.
Logic
Members
-
Joined
-
Last visited