This is a simple approach to read, parse and pass data from cheap solar charge controllers like Lumiax and Volt to MQTT broker. You can pass data to home automation software like Home Assistant, Openhab and others.
Parameters that you will be able to get are for example:
- battery voltage
- battery current
- battery power
- battery percentage capability
- solar voltage
- solar current
- solar power
- load voltage
- load current
- load power
- and many more...
Based on:
- https://github.com/majki09/lumiax_solar_bt/tree/main
- https://github.com/gbrault/gattclient/tree/master
- https://ctlsys.com/support/how_to_compute_the_modbus_rtu_message_crc/
- https://github.com/kokke/tiny-MQTT-c
- https://github.com/rpz80/json
- Lumiax Modbus Communication Protocol V3.9-1.pdf
Depends on: libglib-2.0
Tested on VM running Ubuntu 21.04 and Fritz-Box 6690 Cable router.
To use this app you will need a Bluetooth adapter with low energy capability and compatible solar charger with Bluetooth. Generally speaking all of charging controllers that uses "Solar Life" app for Android should work.
TODO:
- Fix bugs
- Pass commands to controller (load on/off, clock setup, etc.)
Example output:
root@ubuntu:/usr/src/solarlife# ./solarlife -d 04:7f:0e:51:21:4c -a test.mqtt.com
Connecting to BT device... Done
MQTT: connected to server.
Service Added - UUID: 00001801-0000-1000-8000-00805f9b34fb start: 0x0001 end: 0x0003
Service Added - UUID: 00001800-0000-1000-8000-00805f9b34fb start: 0x0004 end: 0x000e
Service Added - UUID: 0000ff00-0000-1000-8000-00805f9b34fb start: 0x000f end: 0x001a
GATT discovery procedures complete
Registering notify handler with id: 2
Registered notify handler!
{"PV_rated_voltage":50,"PV_rated_current":10,"PV_rated_power_l":130,"PV_rated_power_h":0,"battery_rated_voltage":17,"battery_rated_current":10,"battery_rated_power_l":130,"battery_rated_power_h":0,"load_rated_voltage":17,"load_rated_current":10,"load_rated_power_l":130,"load_rated_power_h":0,"slave_id":1,"running_days":6,"sys_voltage":12,"battery_status":3,"charge_status":32,"discharge_status":0,"env_temperature":13,"sys_temperature":6,"undervoltage_times":255,"fullycharged_times":1,"overvoltage_prot_times":0,"overcurrent_prot_times":0,"shortcircuit_prot_times":0,"opencircuit_prot_times":0,"hw_prot_times":0,"charge_overtemp_prot_times":0,"discharge_overtemp_prot_times":0,"battery_remaining_capacity":16,"battery_voltage":11.13,"battery_current":0,"battery_power_lo":0,"battery_power_hi":0,"load_voltage":0,"load_current":0,"load_power_l":0,"load_power_h":0,"solar_voltage":0.2,"solar_current":0,"solar_power_l":0,"solar_power_h":0,"daily_production":0.01,"total_production_l":0.82,"total_production_h":0,"daily_consumption":0.02,"total_consumption_l":0.83,"total_consumption_h":0,"lighttime_daily":695,"monthly_production_l":0,"monthly_production_h":0,"yearly_production_l":0,"yearly_production_h":0,"timestamp":"2023-10-20T19:15:58Z"}
MQTT server acknowledged data
Compilation:
- make