first commit
This commit is contained in:
135
solax.py
Normal file
135
solax.py
Normal file
@@ -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()
|
||||||
Reference in New Issue
Block a user