Created
June 10, 2024 20:09
-
-
Save h3xagn/43df381139b7f7cc8917783fbb9d273f to your computer and use it in GitHub Desktop.
Building a home energy monitoring dashboard for your clevrHome
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import time | |
| from datetime import datetime | |
| from deye_controller import HoldingRegisters | |
| from pysolarmanv5 import PySolarmanV5 | |
| # Parameters to read from the inverter | |
| # [register, name, unit, multiplier] | |
| parameters = [ | |
| [172, "grid_ct_power_W", "W", 1], | |
| [169, "grid_power_W", "W", 1], | |
| [79, "grid_frequency_Hz", "Hz", 0.01], | |
| [194, "grid_status", "", 1], # 0: off-grid, 1: on-grid | |
| [90, "dc_temperture_C", "°C", 0.1], | |
| [91, "ac_temperture_C", "°C", 0.1], | |
| [178, "load_power_W", "W", 1], | |
| [175, "inverter_power_W", "W", 1], | |
| [190, "battery_power_W", "W", 1], | |
| [184, "battery_soc_perc", "%", 1], | |
| [189, "battery_status", "", 1], # 0: charge, 1: standby, 2: discharge | |
| [182, "battery_temperture_C", "°C", 0.1], | |
| [186, "PV1_power_W", "W", 1], | |
| [187, "PV2_power_W", "W", 1], | |
| [150, "grid_voltage_V", "V", 0.1], | |
| [76, "energy_day_grid_kWh", "kWh", 0.1], | |
| [84, "energy_day_load_kWh", "kWh", 0.1], | |
| [108, "energy_day_solar_kWh", "kWh", 0.1], | |
| [70, "energy_day_battergy_charge_kWh", "kWh", 0.1], | |
| [71, "energy_day_battergy_discharge_kWh", "kWh", 0.1], | |
| ] | |
| register = HoldingRegisters.InverterTotalPowerOut | |
| # Connect to the inverter and read the parameters | |
| # The inverter IP address and serial number can be found in the inverter's settings | |
| while True: | |
| try: | |
| inv = PySolarmanV5("192.168.2.20", 2763459xxx) | |
| timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f") | |
| for parameter in parameters: | |
| res = inv.read_holding_registers(parameter[0], register.len) | |
| register.value = res[0] if register.len == 1 else res | |
| print(f"{parameter[1]}: {register.format()*parameter[3]} {parameter[2]}") | |
| # Write the data to the database | |
| WriteSQLToDB(timestamp, parameter[1], register.format()*parameter[3]) | |
| inv.disconnect() | |
| except: | |
| print("ERROR - Could not connect to inverter.") | |
| time.sleep(10) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment