Skip to content

Instantly share code, notes, and snippets.

@h3xagn
Created June 10, 2024 20:09
Show Gist options
  • Select an option

  • Save h3xagn/43df381139b7f7cc8917783fbb9d273f to your computer and use it in GitHub Desktop.

Select an option

Save h3xagn/43df381139b7f7cc8917783fbb9d273f to your computer and use it in GitHub Desktop.
Building a home energy monitoring dashboard for your clevrHome
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