commit 4cdb901fc0260d84e4c7eb6ac16fa657a7b9463c Author: Norbert Date: Tue Jul 4 07:17:49 2023 +0200 first commit diff --git a/solax.py b/solax.py new file mode 100644 index 0000000..c53e1b6 --- /dev/null +++ b/solax.py @@ -0,0 +1,135 @@ +from solaxx3.rs485 import SolaxX3 +from influxdb_client import InfluxDBClient, Point, WritePrecision +from influxdb_client.client.write_api import SYNCHRONOUS +token = "Wt0uDqp1gLr7Qe6qoUAohD8ciBva0kCRajHEFtRGDhSY5-TI2ASPJmqlQTUrcK-61rUAVedwiiLu5Iy-G41ByQ==" +org = "openhab" +bucket = "openhab" +client = InfluxDBClient(url="http://172.21.0.10:8086", token=token) + +from openhab import openHAB +base_url = 'http://192.168.178.51:8080/rest' +openhab = openHAB(base_url) +items = openhab.fetch_all_items() + +solax_items=[ +"power_dc1", +"power_dc2", +"battery_capacity", +"radiator_temperature", +"grid_power", +"grid_voltage", +"grid_current", +"pv_voltage_1", +"pv_voltage_2", +"pv_current_1", +"pv_current_2", +"consumption_energy_today", +"feed_in_power", +"energy_to_grid_total", +"feed_in_energy_today", +"consumption_energy_today", +"solar_energy_today", +"battery_power_charge1", +"temperature_battery", +"output_energy_charge_today", +"grid_current_r", +"grid_current_s", +"grid_current_t", +"grid_power_r", +"grid_power_s", +"grid_power_t", +"grid_voltage_r", +"grid_voltage_s", +"grid_voltage_t" +] + + +openhab_items=[ +"Solax_PowerDC1", +"Solax_PowerDC2", +"Solax_BatterySOC", +"Solax_TempRadiator", +"Solax_ACPower", +"Solax_NetworkVoltage", +"Solax_OutputCurrent", +"Solax_PV1Voltage", +"Solax_PV2Voltage", +"Solax_PV1Current", +"Solax_PV2Current", +"Solax_ConsumeFromGridToday", +"Solax_FeedInPower", +"Solax_FeedInTotal", +"Solax_FeedinEnergyToday", +"Solax_HouseConsumption", +"Solax_DailyYield", +"Solax_BatteryPowerCharge", +"Solax_BatteryTemp", +"Solax_BatteryOutputEnergyToday", +"Solax_GridCurrent_1", +"Solax_GridCurrent_2", +"Solax_GridCurrent_3", +"Solax_GridPower_1", +"Solax_GridPower_2", +"Solax_GridPower_3", +"Solax_GridVoltage_1", +"Solax_GridVoltage_2", +"Solax_GridVoltage_3" +] + +# adjust the serial port and baud rate as necessary +s = SolaxX3(port="/dev/ttySOLAX", baudrate=19200) +data =[] +if s.connect(): + s.read_all_registers() + available_stats = s.list_register_names() +# for stat in available_stats: +# print(stat) + battery_capacity = s.read("battery_capacity")[0] + feed_in_today = s.read("feed_in_energy_today")[0] + consumtion_today = s.read("consumption_energy_today")[0] + battery_charging = s.read("battery_power_charge1")[0] + grid_voltage_r = s.read("grid_voltage_r")[0] + grid_voltage_s = s.read("grid_voltage_s")[0] + grid_voltage_t = s.read("grid_voltage_t")[0] + run_mode = s.read("run_mode")[0] + time_count_down = s.read("time_count_down")[0] + inverter_ac_power = s.read("grid_power")[0] + etoday_togrid = s.read("energy_to_grid_today")[0] + solar_energy_today = s.read("solar_energy_today")[0] + echarge_today = s.read("echarge_today")[0] + energy_from_grid = s.read("energy_from_grid_meter")[0] + energy_to_grid = s.read("energy_to_grid_meter")[0] + power_to_ev = s.read("power_to_ev")[0] + feed_in_power = s.read("feed_in_power")[0] + output_energy_charge = s.read("output_energy_charge")[0] + output_energy_today = s.read("output_energy_charge_today")[0] + input_energy_today = s.read("input_energy_charge_today")[0] + power_dc1 = s.read("power_dc1")[0] + power_dc2 = s.read("power_dc2")[0] + total_power = power_dc1 + power_dc2 + #battery_temperature = s.read("temperature_battery") + #print(f"\n\nBattery temperature: {s.read('temperature_battery')}") +# for i, item in enumerate(solax_items): +# print (item + " " + str(s.read(item)[0]) + str(s.read(item)[1])+ " " + openhab_items[i]) + + + for i, item in enumerate(solax_items): + try: + act_item=items.get(openhab_items[i]) + act_item.state=float(s.read(item)[0]) + data += [openhab_items[i]+" value="+str(s.read(item)[0])] + except: + print("error in" + openhab_items[i] + " " + item ) + act_item=items.get("Solax_eToGridToday") + act_item.state=float(energy_to_grid) + act_item=items.get("Solax_feed_in_today") + act_item.state=float(feed_in_today) + data += ["Solax_SUM_DC"+" value="+str(total_power)] + data += ["Solax_eToGridToday"+" value="+str(etoday_togrid)] + data += ["Solax_feed_in_today"+" value="+str(feed_in_today)] + write_api = client.write_api(write_options=SYNCHRONOUS) + write_api.write(bucket, org, data) + +else: + print("Cannot connect to the Modbus Server/Slave") + exit()