MPPT Solar Charge Controller with RJ45 to Home Assistant advice needed

Hi,
i wonder if someone could help with some ideas about the follwoing:
Ive got MPPT Solar Charge Controller with rj45 port in it that suppose to transfer battery data.
I wonder how can i connect that rj45 rwead the data (particularly voltage and battery charge level) and transfer it to home assistant?
I was wondering if esp8266 or something similar can be used? Can i read and decode the rj45 signal and then send it to home assistant via mqtt?

If so and you ever came across a similar project or have some advice or ideas please could you share? :slight_smile:

Just need some direction and ideas where to start from…

The mptt controller i have is:
Y&H 30A MPPT Solar Charge Controller with LCD Display Tracer AN Series 12V

Cheers,
Alex

Hi,

I have the same problem, my MPPT controller is MUST PC18-8015F have port RJ45 (RS485) and USB. On USB port receive info on my PC with dedicated APP.
But i want to connect to HA.

Can anyone help us in any direction ?

Thank you.
Cristi

Hi There,
The method I use for now (untill something HA direct comes along) is commercial. ICC Software has a solution that does all the hard work and not to expensive, the good thing for HA is builtin MQTT (two way) for integration into HA.

Cheers
Rob

Hi Cristi2005,I found this:

that is along with this https://www.youtube.com/watch?v=V21DxV9H6vE&lc=UgwzbJhOWjAa2Uzqo154AaABAg.9FCR4jOz53M9FCb7ZJp6dq

will make it possible to have the data in home assistant or elsewhere.
The only problem they are sold out here: https://www.tindie.com/products/plop211/epever-rs485-to-wifi-adaptor-v15/

If you are interested perhaps adding yourself to a list or dropping a message to the guy who makes it will make it available sooner? :slight_smile:

Cheers,
Alex

Hi Alex,

Thank you for this info, i verify if this kit works with my controller and i will say here all info.

BR. Cristi

Hello,
Did anyone succeed to integrate MUST PC18-8015F with Hassio?

I tried with Esphome and ttl rs485 adaptor but with no luck. I think it is a code issue.

Any suggestions?

Regards
Ricardo

Why not use Elfin-EW11 or eperver ebox-01. I have used both of them to connect my charge controller to HA over wifi and they both work.

HI,
the conversation is very old and so I hope to be read.

how did you connect eperver ebox-01a home assistant? I didn’t find any epever integration.
Sorry for the dumb question, but I’m a beginner…

Thank you

Hello Chukaonline, would the ebox-01a work with any charge controller?

Mine is a Felicity mppt charge controller and it has an RJ45 port with no instruction on the manual.

Please let me know. Thanks

It looks similar to the SRNE hybrid inverter series just like mine. Try this document which is what I used to set up mine. The pin config for the RJ45 is on the lat page.

Thank you. will check it out.

If anyone is looking for a solution to the above, I have added a modbus protocol to my configuration.yaml, and I now have my controller integrated into HA :smile:

modbus:
  - name: Solar Array
    type: rtuovertcp
    host: [add in IP address of device]
    port: 8080
    sensors:
      - name: "Solar Charging Mode"
        slave: 1
        address: 0
        input_type: holding
        data_type: int16
        scale: 1
        unit_of_measurement: "Mode"
        unique_id: solar_charging_mode
        # Possible Values: 0 (Standby), 1 (CC Mode), 2 (CV Mode), 3 (CF Mode)

      - name: "Solar PV Voltage"
        slave: 1
        address: 1
        input_type: holding
        data_type: int16
        scale: 0.1
        precision: 1
        unit_of_measurement: "V"
        device_class: "voltage"
        unique_id: solar_pv_voltage

      - name: "Solar Power Generation"
        slave: 1
        address: 1031
        input_type: holding
        data_type: int16
        scale: 0.1
        precision: 1
        unit_of_measurement: "Wh"
        device_class: "energy"
        unique_id: solar_power_generation

      - name: "Solar Battery Voltage"
        slave: 1
        address: 2
        input_type: holding
        data_type: int16
        scale: 0.1
        precision: 1
        unit_of_measurement: "V"
        device_class: "voltage"
        unique_id: solar_battery_voltage

      - name: "Solar Charging Current"
        slave: 1
        address: 3
        input_type: holding
        data_type: int16
        scale: 0.1
        precision: 1
        unit_of_measurement: "A"
        device_class: "current"
        unique_id: solar_charging_current

      - name: "Solar Charging Power"
        slave: 1
        address: 7
        input_type: holding
        data_type: int16
        scale: 1
        unit_of_measurement: "W"
        device_class: "power"
        unique_id: solar_charging_power

      - name: "Solar Battery Level"
        slave: 1
        address: 11
        input_type: holding
        data_type: int16
        scale: 1
        unit_of_measurement: "%"
        device_class: "battery"
        unique_id: solar_battery_level

      - name: "Solar CO2 Emission Reduction"
        slave: 1
        address: 12
        input_type: holding
        data_type: int32
        scale: 0.001
        unit_of_measurement: "kg"
        device_class: "carbon_dioxide"
        unique_id: solar_co2_emission_reduction

      - name: "Solar Fault Code"
        slave: 1
        address: 14
        input_type: holding
        data_type: int16
        scale: 1
        unit_of_measurement: "Code"
        unique_id: solar_fault_code
        # Fault Code Definitions:
        # Bit 0: Battery Overvoltage
        # Bit 1: PV Overvoltage
        # Bit 2: Charging Overcurrent
        # Bit 3: Discharging Overcurrent
        # Bit 4: Battery Undervoltage
        # Bit 5: PV Undervoltage
        # Bit 6: Charging Overtemperature
        # Bit 7: Discharging Overtemperature
        # Bit 8: System Overtemperature
        # Bit 9: PV Reverse Polarity
        # Bit 10: Battery Reverse Polarity
        # Bit 11: Battery Overdischarge
        # Bit 12: Communication Fault
        # Bit 13: Internal Fault
        # Bit 14: Relay Fault
        # Bit 15: Reserved

      - name: "Solar System Prompt"
        slave: 1
        address: 15
        input_type: holding
        data_type: int16
        scale: 1
        unit_of_measurement: "Prompt"
        unique_id: solar_system_prompt

      - name: "Solar Battery Temperature"
        slave: 1
        address: 9
        input_type: holding
        data_type: int16
        scale: 1
        unit_of_measurement: "°C"
        device_class: "temperature"
        unique_id: solar_battery_temperature

      - name: "Solar Internal Temperature"
        slave: 1
        address: 10
        input_type: holding
        data_type: int16
        scale: 1
        unit_of_measurement: "°C"
        device_class: "temperature"
        unique_id: solar_internal_temperature

      - name: "Daily Power Generation"
        slave: 1
        address: 0x0206
        input_type: holding
        data_type: int32
        scale: 1
        unit_of_measurement: "Wh"
        device_class: "energy"
        unique_id: daily_power_generation

      - name: "Solar Panel Current"
        slave: 1
        address: 6
        input_type: holding
        data_type: int16
        scale: 0.1
        precision: 1
        unit_of_measurement: "A"
        device_class: "current"
        unique_id: solar_panel_current

      - name: "Total Energy Produced"
        slave: 1
        address: 0x020E
        input_type: holding
        data_type: int32
        scale: 1
        unit_of_measurement: "Wh"
        device_class: "energy"
        unique_id: total_energy_produced

      - name: "Solar Running Time"
        slave: 1
        address: 513 # 0x0201 in decimal
        input_type: holding
        data_type: int32 # Assuming 32-bit integer to cover the full range
        scale: 1
        precision: 0
        unit_of_measurement: "minutes"
        device_class: "duration"
        unique_id: total_running_time

      - name: "Solar Running Days"
        slave: 1
        address: 516 # 0x0204 in decimal
        input_type: holding
        data_type: int16
        scale: 1
        precision: 0
        unit_of_measurement: "days"
        device_class: "duration"
        unique_id: total_running_days
# Explanation of CRC Calculation (Appendix)
# The CRC-16 calculation is used to ensure data integrity. For example:
# - Given Data: [0x01, 0x03, 0x00, 0x00, 0x00, 0x02]
# - CRC-16 Result: 0xC40B (The checksum appended to the data)

# Configuration Examples:
# - Battery Type Configuration:
#   Address: 0x0101, Value: 0x0004 (Lithium Battery)
# - Battery System Voltage Configuration:
#   Address: 0x0102, Value: 0x0018 (24V System)
# - CV Voltage Configuration:
#   Address: 0x0103, Value: 0x0C80 (32.00V)

# Error Codes and Troubleshooting:
# - Fault Code 0x000E - System Fault Codes (e.g., Bit 0: Battery Overvoltage)
#   Recommended actions for each fault code.

# Advanced Features:
# - Remote control parameters and applications.
# - Example use cases and command sequences for advanced features.

# Use tables and charts to summarize complex information, making it easier to understand.
# Add a glossary of terms used in the document for quick reference.