pyFroniusReg/examples/check_peak.py

49 lines
1.4 KiB
Python
Executable file

#!/usr/bin/env python3
import statistics
from pyfroniusreg import gen24_registers
from pyfroniusreg.froniusreg import RegisterReadError
from datetime import datetime
from pymodbus.client.tcp import ModbusTcpClient
fronius1 = ModbusTcpClient("172.19.107.211", port=502, timeout=10)
fronius1.connect()
current_time = datetime.now()
soc_percent = gen24_registers.scaledChaState.get(fronius1)
total_wh = gen24_registers.scaledWHRtg.get(fronius1)
charge_data = []
discharge_data = []
print("Gathering 20 second average of battery power")
while( (datetime.now() - current_time).seconds < 5):
charge_data.append(gen24_registers.scaledmodule_3_DCW.get(fronius1))
discharge_data.append(gen24_registers.scaledmodule_4_DCW.get(fronius1))
avg_charge = statistics.mean(charge_data)
avg_discharge = statistics.mean(discharge_data)
print(" Charge: %.2f" % avg_charge)
print("DisCharge: %.2f" % avg_discharge)
print(" SoC: %.2f" % soc_percent)
print("Total WH: %.2f" % total_wh)
wh_remain = (soc_percent / 100.0) * total_wh
h_estim = wh_remain - avg_discharge
h_estpct = (h_estim / total_wh) * 100
print("WH remain: %.2f" % wh_remain)
print("1h est WH: %.2f" % h_estim)
print("1hr est %%: %.2f" % h_estpct)
# Logic of this is:
#
# If it's 05:00 and battery SoC will be < 18% at 07:00: charge at full beans for 1 hour
#
# if it's 15:00 and battery SoC will be < 25% at 16:00: charge at full beans for 1 hour