update to 1.0.2

This commit is contained in:
Norbert
2024-07-12 12:13:55 +02:00
parent 3a0fc1f9cd
commit 577596d9f3
44 changed files with 5860 additions and 1957 deletions

View File

@@ -0,0 +1,93 @@
"""Example of reading and saving some inverter registers."""
import sys
from datetime import datetime, timedelta
from os import environ
from solaxx3.solaxx3 import SolaxX3
from .mysql_data_source import MySQLDataSource
def _get_datetime(inverter_time: datetime) -> datetime:
return inverter_time - timedelta(hours=TIMEZONE_OFFSET)
MYSQL_CONNECTION_INFO = {
"user": environ["MYSQL_DB_USERNAME"],
"host": environ["MYSQL_DB_HOST_IP"],
"password": environ["MYSQL_DB_PASSWORD"],
}
DATABASE = environ["MYSQL_DB_DATABASE"]
TIMEZONE_OFFSET = 2
s = SolaxX3(port="/dev/ttyUSB0", baudrate=115200)
if not s.connect():
print("Could not connect to inverter")
sys.exit(1)
s.read_all_registers()
mysql_export_data = [
{
"database": DATABASE,
"table": "solax_local",
"data": {
"uploadTime": _get_datetime(s.read("rtc_datetime")[0]),
"inverter_status": s.read("run_mode")[0],
"dc_solar_power": s.read("power_dc1")[0] + s.read("power_dc2")[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],
"battery_capacity": s.read("battery_capacity")[0],
"battery_power": s.read("battery_power_charge1")[0],
"feed_in_power": s.read("feed_in_power")[0],
"time_count_down": s.read("time_count_down")[0],
"inverter_ac_power": s.read("grid_power")[0],
"consumeenergy": s.read("energy_from_grid_meter")[0],
"feedinenergy": s.read("energy_to_grid_meter")[0],
"power_dc1": s.read("power_dc1")[0],
"power_dc2": s.read("power_dc2")[0],
"inv_volt_r": s.read("inv_volt_r")[0],
"inv_volt_s": s.read("inv_volt_s")[0],
"inv_volt_t": s.read("inv_volt_t")[0],
"off_grid_power_active_r": s.read("off_grid_power_active_r")[0],
"off_grid_power_active_s": s.read("off_grid_power_active_s")[0],
"off_grid_power_active_t": s.read("off_grid_power_active_t")[0],
"grid_power_r": s.read("grid_power_r")[0],
"grid_power_s": s.read("grid_power_s")[0],
"grid_power_t": s.read("grid_power_t")[0],
},
},
{
"database": DATABASE,
"table": "solax_daily",
"data": {
"uploadDate": _get_datetime(s.read("rtc_datetime")[0]).date(),
"feed_in": s.read("feed_in_energy_today")[0],
"total_yield": s.read("energy_to_grid_today")[0],
},
},
]
mysql_data_source = MySQLDataSource(MYSQL_CONNECTION_INFO)
def bulk_save():
"""Save collected data."""
mysql_data_source.bulk_save(mysql_export_data)
def _transfer(index: int, **extras) -> None:
"""Save a record of collected data."""
data_record = mysql_export_data[index]
database, tablename = data_record["database"], data_record["table"]
data = data_record["data"]
mysql_data_source.save_record(database, tablename, data, **extras)
save = bulk_save
if __name__ == "__main__":
save()