June 28, 20232 yr Thanks @Coulomb and @Logic - same inverter, also got problems. I've got 2 new lead acid in series, supposed to be rated at 120AH. First what happened was voltage measured by inverter was way off, giving me something like 22V vs measured 26 (at terminals). I used BTA+01 to get it right. After that though, I was getting very low actual use times in loadshedding. About 20 minutes using 200W. So the batteries were delivering about 10A which in theory should be 12 hours, right, or 6 if I want to be conservative and set cutoff to 50% discharge. One theory is I zapped the batteries, what with the voltage measurement being wrong, inverter thought it was trying to charge to say 28 but it was actually trying to charge to 32 or something? So I've got the batteries off and on a cheap little charger to see if they're ok. I'm still busy with that but they seem not too bad. I'm thinking of trying the firmware flash, will I be able to backup the current one and revert if it doesn't work? I am not a complete novice at flashing firmware in general so I understand the risks of possibly bricking. Currently firmware is reporting to be VERFW:00043.02. Many thanks, really appreciate the good vibes in this community.
June 28, 20232 yr 16 hours ago, Logic said: By original firmware, do you mean 43.04 as well, or specifically 43.05? Either would do. But don't bother until you can reliability get to bulk charging. It looks as though this factory firmware is badly messed up. Hopefully a new version will come through soon. I can patch the new version if needed.
June 28, 20232 yr Author 2 hours ago, Coulomb said: Either would do. But don't bother until you can reliability get to bulk charging. It looks as though this factory firmware is badly messed up. Hopefully a new version will come through soon. I can patch the new version if needed. Thanks, then I'm not going to retest with the original 43.05. I'll keep some pressure on Rectron to get some of the firmware issues resolved. 2 hours ago, Nkunzi said: Thanks @Coulomb and @Logic - same inverter, also got problems. I've got 2 new lead acid in series, supposed to be rated at 120AH. First what happened was voltage measured by inverter was way off, giving me something like 22V vs measured 26 (at terminals). I used BTA+01 to get it right. After that though, I was getting very low actual use times in loadshedding. About 20 minutes using 200W. So the batteries were delivering about 10A which in theory should be 12 hours, right, or 6 if I want to be conservative and set cutoff to 50% discharge. One theory is I zapped the batteries, what with the voltage measurement being wrong, inverter thought it was trying to charge to say 28 but it was actually trying to charge to 32 or something? So I've got the batteries off and on a cheap little charger to see if they're ok. I'm still busy with that but they seem not too bad. I'm thinking of trying the firmware flash, will I be able to backup the current one and revert if it doesn't work? I am not a complete novice at flashing firmware in general so I understand the risks of possibly bricking. Currently firmware is reporting to be VERFW:00043.02. Many thanks, really appreciate the good vibes in this community. Glad to hear you managed to get your voltage offset sorted. I guess you've had the inverter for a while, or you might have gotten somewhat older stock, I'd estimate 43.02 is from around middle last year. My knowledge on lead acid batteries is not very broad, but I hope they'll be fine if you managed to catch it early enough. If it's been from middle last year and ran them at 32V then I'm pretty sure they won't be the same anymore. Regarding the firmware update, if you were able to send the command to offset the voltage, you shouldn't have any trouble with upgrading the firmware. Just make sure the computer you use is not powered from the inverter. The below is the latest firmware, thanks to Coulumb (you can choose between the patched and original one), and there is a document explaining the process for upgrading the firmware. On 2023/06/25 at 5:48 PM, Coulomb said: dsp 343.05 Patched.zip 1.05 MB · 7 downloads
June 28, 20232 yr 3 hours ago, Nkunzi said: I used BTA+01 to get it right. Cool. But 22 V is a loooong way off 26 V (15% low). 3 hours ago, Nkunzi said: One theory is I zapped the batteries, what with the voltage measurement being wrong, inverter thought it was trying to charge to say 28 but it was actually trying to charge to 32 or something? Unfortunately, that could be the case. 3 hours ago, Nkunzi said: So I've got the batteries off and on a cheap little charger to see if they're ok. Good luck. Alas, in my experience, lead acid batteries are usually not very forgiving. 3 hours ago, Nkunzi said: will I be able to backup the current one and revert if it doesn't work? Currently firmware is reporting to be VERFW:00043.02. No, there isn't space for two firmwares in the flash memory, so the only way to revert is to reflash using a firmware update file that happens to have the original firmware in it. I've checked my collection, and I only have 43.04 and 43.05 factory firmwares. But I'm pretty sure that 43.05 is just a minor update from 43.02, unless they mangled the PBFT and other commands in 43.03 or 43.04. Actually, that might be worth knowing. Can you change your bulk/absorb/CV or float voltage with monitoring software?
June 28, 20232 yr 58 minutes ago, Logic said: and there is a document explaining the process for upgrading the firmware. I tend to leave that document in the patched firmware update files as a matter of routine, and some users may benefit from them. But they're typical Chinese English documents, and you may care to access these firmware upload instructions as well.
June 28, 20232 yr 6 hours ago, Coulomb said: Actually, that might be worth knowing. Can you change your bulk/absorb/CV or float voltage with monitoring software? Already flashed the stock, not your enhanced, 43.05, sorry. I'm getting NAK for both PBFT and PCVV. Never did try that when I was still on 43.02 so can't say if that's changed.
June 28, 20232 yr 9 hours ago, Coulomb said: Cool. But 22 V is a loooong way off 26 V (15% low). Yeah, it's worrying that it's so far off. Bit of background, I bought the inverter beginning of the year and it was never used, was saving up for batteries. So a bit of an anticlamax that everything is not exactly perfect. Edited June 28, 20232 yr by Nkunzi
June 28, 20232 yr 10 hours ago, Logic said: I guess you've had the inverter for a while 6 months sitting on a rack waiting for my finances to afford batteries So can you set charging, float, etc on the fly, in principle at least? As I was telling @Coulomb when I try PBFT etc I get NAK. You also mentioned ESP32 to try alleviate your problems, have you got something that uses the correct RS232 voltages on an ESP board or do you have to run it through a voltage converter? Just curious. I've got a Pi zero for logging metrics, still hoping I don't need to mess around with setting voltages to solve the floating charge bug, still too early to say if I really suffer from that.
June 28, 20232 yr Author 13 hours ago, Nkunzi said: 6 months sitting on a rack waiting for my finances to afford batteries So can you set charging, float, etc on the fly, in principle at least? As I was telling @Coulomb when I try PBFT etc I get NAK. You also mentioned ESP32 to try alleviate your problems, have you got something that uses the correct RS232 voltages on an ESP board or do you have to run it through a voltage converter? Just curious. I've got a Pi zero for logging metrics, still hoping I don't need to mess around with setting voltages to solve the floating charge bug, still too early to say if I really suffer from that. I also tried the charge settings with the original 43.05 and got NAK. The patched firmware from @Coulomballows for settings voltages through the communication port. @NkunziYou can try running this on you Pi Zero (if you're not already using it): https://github.com/ned-kelly/docker-voltronic-homeassistant Though I'm not sure if you can easily automate commands on it without MQTT. I'm working on expanding the below as a solution for a single inverter (keeping it relaively cheap, so my friends and family can also get the solution), using a single ESP32 (costs about R150) and MAX3232 module (costs about R15) . It connects to the WiFi and is accessible on local network via the IP in a web browser. It displays real-time data, and counting totals (sadly no fancy logs, or graphs). Since the charge voltage commands are working, it's now possible to mimic bulk charging with the ESP. My idea is something like this, please let me know if you have any suggestions: Program ESP32 with the below sliders for variable values vdiff - desired voltage difference between bulk and float mcur - minimum charge current for bulk charge Then, every few seconds the ESP32 will get these charge parameters from the inverter: bulk - Bulk charge voltage float - Float charge voltage charge current - Current charge current Each time the ESP32 receives new data from the inverter, it runs the below: IF (charge current > mcur) AND (float < bulk) THEN set(float = bulk) #Increase float voltage to bulk voltage to mimic bulk charging IF (charge current < mcur) AND (float = bulk) THEN set(float = float - vdiff) #Reduces float charge voltage back to desired float voltage based on vdiff IF (float = bulk) THEN long flash LED on ESP32 #Visual indicator that it's still working and charging at bulk voltage IF (float =! bulk) #Bulk not equal to float THEN quick flash LED on ESP32 #Visual indicator that it's still working and set to float Edited June 29, 20232 yr by Logic
June 29, 20232 yr Nice setup. Bonus points for the Class A Private IP, not just Class C like me What did you build the web page on, just a dark theme and custom PHP or is it some kind of framework? Does it run on your ESP? I do know the ned-kelly repo, I've been plagiarizing https://github.com/JosefKrieglstein/AxpertControl/blob/master/axpert_tmp.py for comms to the inverter with Python which works OK for me. I've got Mosquitto and Node Red running on Pi in the house, all still very basic. 12 hours ago, Logic said: IF (charge current > mcur) AND (float < bulk) THEN set(float = bulk) #Increase float voltage to bulk voltage to mimic bulk charging IF (charge current < mcur) AND (float = bulk) THEN set(float = float - vdiff) #Reduces float charge voltage back to desired float voltage based on vdiff Hmm, whole thing seems a bit tricky. I don't have experience with this problem, but let me try think it through. What do you assume starting conditions to be, say it's discharged and now it needs to bulk charge. So say you're on 22, bulk is 26 and float is 24, mcur is 10A. Let's say it's not suffering from the bug, charge is higher than mcur so you don't do anything. If charge current is < mcur though, that's when you have to set float and bulk the same and you do that. Now float and bulk's the same, so it should kick into bulk mode. Charge current increases. How long must it bulk charge? For a certain time or until it hits another voltage? Either way, once it hits that time or voltage, I presume now you set float lower again and it drops from bulk to float mode. Float is now lower, and charge current is also low, as it's supposed to be. However, you need to not kick it into bulk again. If you just do a comparison again, charge current is low and float is lower than bulk, you'll set bulk and float equal again which is not right. How about a time based flag that it does not do this again, maybe? Slight tangent, can you actually read the settings for float and bulk from the inverter, or do you just keep it as a value in a variable? I looked at commands https://forums.aeva.asn.au/uploads/293/HS_MS_MSX_RS232_Protocol_20140822_after_current_upgrade.pdf and QPIGS does not seem to give it, nor any other query. Thanks
June 29, 20232 yr Author 20 minutes ago, Nkunzi said: Nice setup. Bonus points for the Class A Private IP, not just Class C like me Thanks, and it was just the default IP range the router had, didn't bother changing it to Class C as it's less effort to type. 21 minutes ago, Nkunzi said: What did you build the web page on, just a dark theme and custom PHP or is it some kind of framework? Does it run on your ESP? Luckily, I didn't have to build it, it's part of ESPhome, and pipsolar. So, I just used that as a foundation and it runs on the ESP32. 25 minutes ago, Nkunzi said: What do you assume starting conditions to be, say it's discharged and now it needs to bulk charge. So say you're on 22, bulk is 26 and float is 24, mcur is 10A. Let's say it's not suffering from the bug, charge is higher than mcur so you don't do anything. If charge current is < mcur though, that's when you have to set float and bulk the same and you do that. My idea is that starting conditions can be anything, whether or not the inverter has the charge bug. As long as the charge current is higher than mcur it will increase the float voltage to the bulk voltage set on the inverter. Then when you reach the end of charging, and the charge current drops of to below mcur, then it decreases the float voltage by the value set in vdiff. 29 minutes ago, Nkunzi said: Now float and bulk's the same, so it should kick into bulk mode. Charge current increases. How long must it bulk charge? For a certain time or until it hits another voltage? Either way, once it hits that time or voltage, I presume now you set float lower again and it drops from bulk to float mode. The inverter will still think it's floating, it will just be using bulk voltage for float (hence why the LED on the ESP32 will flash to indicate whether it's in "bulk" or "float"). Bulk charge won't be time based, it will depend on charge current, as the battery becomes fully charged, it allows for less and less current to flow into the battery (until it drops below mcur, at which point the float voltage is reduced). 34 minutes ago, Nkunzi said: Float is now lower, and charge current is also low, as it's supposed to be. However, you need to not kick it into bulk again. If you just do a comparison again, charge current is low and float is lower than bulk, you'll set bulk and float equal again which is not right. If float is lower than bulk and charge current is below mcur, then the ESP32 will not do anything as the first condition in this statement won't be true: IF (charge current > mcur) AND (float < bulk) 38 minutes ago, Nkunzi said: How about a time based flag that it does not do this again, maybe? I can do it based on time, but it will become a bit more complicated to program, for now I want to keep it simple so I can get it working first. What do you think would the benefit be for a time-based approach? The only reason I can think of is to avoid it switching back on forth while solar charging and clouds pass over, but at least it will enter bulk again right after the cloud has passed. Alternatively, if the conditions become true for switching back to float, you might want to keep it at bulk for a bit longer with lead acid batteries, but I'm not sure if the lead acid batteries will benefit from this. 43 minutes ago, Nkunzi said: Slight tangent, can you actually read the settings for float and bulk from the inverter, or do you just keep it as a value in a variable? I looked at commands https://forums.aeva.asn.au/uploads/293/HS_MS_MSX_RS232_Protocol_20140822_after_current_upgrade.pdf and QPIGS does not seem to give it, nor any other query. Yes, you can read the current settings for bulk, float and more, as well as the current values for charging current, etc. From my understanding, the charging settings, it gets from QPIRI, and charging current from QPIGS.
June 29, 20232 yr 22 minutes ago, Logic said: My idea is that starting conditions can be anything, whether or not the inverter has the charge bug. As long as the charge current is higher than mcur it will increase the float voltage to the bulk voltage set on the inverter. Then when you reach the end of charging, and the charge current drops of to below mcur, then it decreases the float voltage by the value set in vdiff. Hmm OK. I'm not very clear on what the bug actually does or how the inverter's bulk and float voltages play into the inverter's algorithm for delivering bulk then float charging. I'd presume it has a time parameter of its own and stays (if it is working right) at the higher voltage and a high current, then drops down to the lower float voltage. But let's say it does have the bug, charging current is then low, i.e. lower than mcur, so the first IF will not catch it and do nothing. Let's assume float and bulk are different, so the second IF does not catch it either. So nothing at all happens. 39 minutes ago, Logic said: I can do it based on time, but it will become a bit more complicated to program, for now I want to keep it simple so I can get it working first. What do you think would the benefit be for a time-based approach? The only reason I can think of is to avoid it switching back on forth while solar charging and clouds pass over, but at least it will enter bulk again right after the cloud has passed. Alternatively, if the conditions become true for switching back to float, you might want to keep it at bulk for a bit longer with lead acid batteries, but I'm not sure if the lead acid batteries will benefit from this. I'm thinking time based might be the only way to cater for all possible states. Voltage might be high even though it hasn't spent enough time in bulk and you'd not be able to know it by just looking at settings and charge current at any given time. What do you reckon?
June 29, 20232 yr Author 2 hours ago, Nkunzi said: But let's say it does have the bug, charging current is then low, i.e. lower than mcur, so the first IF will not catch it and do nothing. Let's assume float and bulk are different, so the second IF does not catch it either. If my understanding is current, and the charging current is lower the mcur (say for exaple mcur is set to 1A), it would mean your battery is effectively full, and should be float charging, assuming your float/bulk charge voltages are set correctly. It will only be once your battery loses some capacity, that it will accept charging current higher than mcur. The idea is that mcur is a user adjustable variable, so it can but set to whatever is ideal for your batteries and and how fast you want them to chage. 2 hours ago, Nkunzi said: I'm thinking time based might be the only way to cater for all possible states. Voltage might be high even though it hasn't spent enough time in bulk and you'd not be able to know it by just looking at settings and charge current at any given time. What do you reckon? I've quickly read up, and Lithium batteries don't need an absorption stage, as you only want to bulk charge while you're filling up your battery, not when you want to keep it at a certain voltage. For our inverters, float charging does CC/CV, so it will do bulk perfectly, just not absorption. However, for lead acid batteries, absorption is needed, likely because they become less efficient at charging the closer they get to a full SOC. I'll first try to get the workaround working for Lithium batteries, as this will take the least amount of work, and it will still improve things for lead acid batteries. For lead acid batteries, if you can find out roughly what the current is between Absorbtion and float (marked with X on picture) and you set mcur to that, it should also increase the time spent at absorption. If this doesn't work, I can try to add a time delay for bulk, but it could make things more difficult especially if solar charging is being used. I can also set two variables for the minimum current, one to check for increasing float, and one to check for decreasing float. This will allow for more control over when it will switch.
June 29, 20232 yr 3 hours ago, Logic said: If this doesn't work, I can try to add a time delay for bulk, but it could make things more difficult especially if solar charging is being used. No worries thanks! If you can get the principle right and are willing to share your findings, that will be great. If I do need this I'll try and implement on Pi / Python anyway. Thanks for your help.
June 30, 20232 yr Author 13 hours ago, Nkunzi said: No worries thanks! If you can get the principle right and are willing to share your findings, that will be great. If I do need this I'll try and implement on Pi / Python anyway. Thanks for your help. I programmed the float voltage switching part last night, the below graphs are indicating that it's working quite well, I also added a screenshot of the controls. I'd be happy to share the YAML code in the meanwhile if you'd like. I'm quite pleased with how well it's working so far. I'm just working on improving things a bit more and testing/monitoring, I also haven't touched the status LED part yet. Once I'm done, then I need to remove the SmartShunt integration and then it will be ready to share. @Coulomb, I just want to say thanks again for the patched firmware, the fixed PCVV and PBFT commands we're very much needed. I really appreciate your help.
June 30, 20232 yr Author @Nkunzi Here's an update on how I ended up programming it to make it a bit more reliable and adjustable, it should be easier to work from this than the YAML code that includes a bunch of C++ parts: ESP32 with the below sliders for adjusting variable values. setfloatvar - desired voltage for float stage bulkcurrentvar - minimum charge current for bulk charge floatcurrentvar - minimum charge current for float charge Then, every few seconds the ESP32 will get these values from the inverter: bulk_setting - Bulk charge voltage float_setting - Float charge voltage charge_current_sensor - Current charge current Each time the ESP32 receives new data from the inverter, it runs the below: READ bulk_setting READ float_setting READ charge_current_sensor - IF (charge_current_sensor > bulkcurrentvar ) AND (float != bulk_setting) THEN output(float_setting = bulk_setting) #Increase float voltage to bulk voltage to mimic bulk charging. - IF (charge_current_sensor < floatcurrentvar ) AND (float != setfloatvar ) THEN output(float_setting = setfloatvar ) #Reduces float charge voltage back to desired float voltage. The below still needs to be programmed: IF (float_setting == bulk_setting) THEN long flash LED on ESP32 #Visual indicator that it's still working and charging at bulk voltage. IF (float_setting == setfloatvar) THEN quick flash LED on ESP32 #Visual indicator that it's still working and at float stage. Update: Just had loadshedding, it worked perfectly. Edited June 30, 20232 yr by Logic
July 19, 20232 yr Author 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"
February 9, 20242 yr On 2023/07/19 at 9:20 PM, Logic said: If needed I can also share a compiled firmware.bin file that can be flashed to an ESP32 module if anyone is interested. I'm interested to program ESP32 for my inverter PIP-5048GEW. Can I get the firmware bin? Thanks in advance.
February 11, 20242 yr Author On 2024/02/09 at 10:00 PM, Bram said: I'm interested to program ESP32 for my inverter PIP-5048GEW. Can I get the firmware bin? Thanks in advance. Hi Bram, Are you looking for using it in standalone mode or with Home Assistant? What voltage is your inverter?
February 11, 20242 yr 24 minutes ago, Logic said: Hi Bram, Are you looking for using it in standalone mode or with Home Assistant? What voltage is your inverter? My inverter PIP5048GEW. Output voltage 48VDC. Standalone is okey. Because i'm not have capable with Home Assistant. Edited February 11, 20242 yr by Bram
February 11, 20242 yr Author 2 hours ago, Bram said: My inverter PIP5048GEW. Output voltage 48VDC. Standalone is okey. Because i'm not have capable with Home Assistant. 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: Quote 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. ESP32 ESPHome Standalone Firmware for Axpert-48V-Inverter.bin
February 11, 20242 yr 46 minutes ago, Logic said: Thank you very much for the firmware. I will program ESP32 and try it. 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 865.25 kB · 0 downloads
February 11, 20242 yr Now, ESP32 can connect to PIP 5048GEW, but all parameters still blank data. Need to set the "Set float stage voltage" section on the slider 26.5V - 27.5V. Thank you for your help. Edited February 11, 20242 yr by Bram
February 17, 20242 yr Author On 2024/02/11 at 7:14 PM, Bram said: Now, ESP32 can connect to PIP 5048GEW, but all parameters still blank data. Need to set the "Set float stage voltage" section on the slider 26.5V - 27.5V. Thank you for your help. 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?
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.