update to 1.0.2
This commit is contained in:
93
source/database/read_and_save.py
Normal file
93
source/database/read_and_save.py
Normal 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()
|
||||
Reference in New Issue
Block a user