Work
This commit is contained in:
105
definitions.py
Normal file
105
definitions.py
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
"""Sunsynk hybrid inverter sensor definitions."""
|
||||||
|
|
||||||
|
CELSIUS = "C"
|
||||||
|
KWH = "kWh"
|
||||||
|
AMPS = "A"
|
||||||
|
VOLT = "V"
|
||||||
|
WATT = "W"
|
||||||
|
|
||||||
|
_SENSORS = []
|
||||||
|
|
||||||
|
##########
|
||||||
|
# Battery
|
||||||
|
##########
|
||||||
|
|
||||||
|
#################
|
||||||
|
# Inverter Power
|
||||||
|
#################
|
||||||
|
|
||||||
|
#############
|
||||||
|
# Grid Power
|
||||||
|
#############
|
||||||
|
#_SENSORS += (
|
||||||
|
# (169, "Grid power", WATT, -1), # L1(167) + L2(168)
|
||||||
|
# (167, "Grid LD power", WATT, -1), # L1 seems to be LD
|
||||||
|
# (168, "Grid L2 power", WATT, -1),
|
||||||
|
# (150, "Grid voltage", VOLT, 0.1),
|
||||||
|
# (598, "Grid voltage L1", VOLT, 0.1),
|
||||||
|
# (599, "Grid voltage L2", VOLT, 0.1),
|
||||||
|
# (600, "Grid voltage L3", VOLT, 0.1),
|
||||||
|
# ((160, 161), "Grid current", AMPS, (0.01, 0.01)),
|
||||||
|
# (172, "Grid CT power", WATT, -1),
|
||||||
|
#)
|
||||||
|
|
||||||
|
#############
|
||||||
|
# Load Power
|
||||||
|
#############
|
||||||
|
|
||||||
|
################
|
||||||
|
# Solar Power 1
|
||||||
|
################
|
||||||
|
|
||||||
|
################
|
||||||
|
# Solar Power 2
|
||||||
|
################
|
||||||
|
|
||||||
|
###################
|
||||||
|
# Power on Outputs
|
||||||
|
###################
|
||||||
|
_SENSORS += (
|
||||||
|
(609, "Grid frequency", "Hz", 0.01),
|
||||||
|
(640, "UPS Load Power L1", "W", 1),
|
||||||
|
(641, "UPS Load Power L2", "W", 1),
|
||||||
|
(642, "UPS Load Power L3", "W", 1),
|
||||||
|
(643, "UPS Load Power Total", "W", 1),
|
||||||
|
(644, "Load Voltage L1", "V", 1),
|
||||||
|
(645, "Load Voltage L2", "V", 1),
|
||||||
|
(646, "Load Voltage L3", "V", 1),
|
||||||
|
(650, "Load Power L1", "W", 1),
|
||||||
|
(651, "Load Power L2", "W", 1),
|
||||||
|
(652, "Load Power L3", "W", 1),
|
||||||
|
(653, "Load Power Total", "W", 1),
|
||||||
|
(654, "Load Power Appearent", "W", 1),
|
||||||
|
(655, "Load Frequency", "Hz", 1),
|
||||||
|
(661, "Gen Port Voltage L1", "V", 1),
|
||||||
|
(662, "Gen Port Voltage L1", "V", 1),
|
||||||
|
(663, "Gen Port Voltage L1", "V", 1),
|
||||||
|
(664, "Gen Port Power L1", "W", 1),
|
||||||
|
(665, "Gen Port Power L2", "W", 1),
|
||||||
|
(666, "Gen Port Power L3", "W", 1),
|
||||||
|
(667, "Gen Port Power Total", "W", 1),
|
||||||
|
(133, "Gen Port Usage ", "", 1),
|
||||||
|
(134, "Smart Load Off Bat Voltage ", "V", 1),
|
||||||
|
(135, "Smart Load Off Bat SOC ", "V", 1),
|
||||||
|
(136, "Smart Load On Bat Voltage ", "V", 1),
|
||||||
|
(137, "Smart Load On Bat SOC ", "V", 1),
|
||||||
|
(552, "AC Relay State ", "", 1),
|
||||||
|
(604, "InnerGrid Power L1 ", "", 1),
|
||||||
|
(605, "InnerGrid Power L2 ", "", 1),
|
||||||
|
(606, "InnerGrid Power L3 ", "", 1),
|
||||||
|
(607, "Act Power Side To Side ", "", 1),
|
||||||
|
(616, "Out-Of-Grid Power L1 ", "W", 1),
|
||||||
|
(617, "Out-Of-Grid Power L2 ", "W", 1),
|
||||||
|
(618, "Out-Of-Grid Power L3 ", "W", 1),
|
||||||
|
(619, "Out-Of-Grid Power Total ", "W", 1),
|
||||||
|
(622, "Grid-Side Power L1 ", "W", 1),
|
||||||
|
(623, "Grid-Side Power L2 ", "W", 1),
|
||||||
|
(624, "Grid-Side Power L3 ", "W", 1),
|
||||||
|
(625, "Grid-Side Power Total ", "W", 1),
|
||||||
|
(633, "Inv Output Power L1 ", "W", 1),
|
||||||
|
(634, "Inv Output Power L2 ", "W", 1),
|
||||||
|
(635, "Inv Output Power L3 ", "W", 1),
|
||||||
|
(636, "Inv Output Power Total ", "W", 1),
|
||||||
|
)
|
||||||
|
|
||||||
|
###################
|
||||||
|
# Energy
|
||||||
|
###################
|
||||||
|
|
||||||
|
##########
|
||||||
|
# General
|
||||||
|
##########
|
||||||
|
|
||||||
|
###########
|
||||||
|
# Settings
|
||||||
|
###########
|
||||||
300
definitions.save
Normal file
300
definitions.save
Normal file
@@ -0,0 +1,300 @@
|
|||||||
|
"""Sunsynk hybrid inverter sensor definitions."""
|
||||||
|
|
||||||
|
CELSIUS = "°C"
|
||||||
|
KWH = "kWh"
|
||||||
|
AMPS = "A"
|
||||||
|
VOLT = "V"
|
||||||
|
WATT = "W"
|
||||||
|
|
||||||
|
_SENSORS = []
|
||||||
|
|
||||||
|
##########
|
||||||
|
# Battery
|
||||||
|
##########
|
||||||
|
_SENSORS += (
|
||||||
|
(182, "Battery temperature", CELSIUS, 0.1),
|
||||||
|
(183, "Battery voltage", VOLT, 0.01),
|
||||||
|
(184, "Battery SOC", "%"),
|
||||||
|
(190, "Battery power", WATT, -1),
|
||||||
|
(191, "Battery current", AMPS, -0.01),
|
||||||
|
)
|
||||||
|
|
||||||
|
#################
|
||||||
|
# Inverter Power
|
||||||
|
#################
|
||||||
|
_SENSORS += (
|
||||||
|
(175, "Inverter power", WATT, -1),
|
||||||
|
(154, "Inverter voltage", VOLT, 0.1),
|
||||||
|
(193, "Inverter frequency", "Hz", 0.01),
|
||||||
|
)
|
||||||
|
|
||||||
|
#############
|
||||||
|
# Grid Power
|
||||||
|
#############
|
||||||
|
_SENSORS += (
|
||||||
|
(609, "Grid frequency", "Hz", 0.01),
|
||||||
|
(169, "Grid power", WATT, -1), # L1(167) + L2(168)
|
||||||
|
(167, "Grid LD power", WATT, -1), # L1 seems to be LD
|
||||||
|
(168, "Grid L2 power", WATT, -1),
|
||||||
|
(150, "Grid voltage", VOLT, 0.1),
|
||||||
|
(598, "Grid voltage L1", VOLT, 0.1),
|
||||||
|
(599, "Grid voltage L2", VOLT, 0.1),
|
||||||
|
(600, "Grid voltage L3", VOLT, 0.1),
|
||||||
|
((160, 161), "Grid current", AMPS, (0.01, 0.01)),
|
||||||
|
(172, "Grid CT power", WATT, -1),
|
||||||
|
)
|
||||||
|
|
||||||
|
#############
|
||||||
|
# Load Power
|
||||||
|
#############
|
||||||
|
_SENSORS += (
|
||||||
|
(178, "Load power", WATT, -1), # L1(176) + L2(177)
|
||||||
|
(176, "Load L1 power", WATT, -1),
|
||||||
|
(177, "Load L2 power", WATT, -1),
|
||||||
|
)
|
||||||
|
|
||||||
|
################
|
||||||
|
# Solar Power 1
|
||||||
|
################
|
||||||
|
_SENSORS += (
|
||||||
|
(186, "PV1 power", WATT, -1),
|
||||||
|
(109, "PV1 voltage", VOLT, 0.1),
|
||||||
|
(110, "PV1 current", AMPS, 0.1),
|
||||||
|
)
|
||||||
|
|
||||||
|
################
|
||||||
|
# Solar Power 2
|
||||||
|
################
|
||||||
|
_SENSORS += (
|
||||||
|
(187, "PV2 power", WATT, -1),
|
||||||
|
(111, "PV2 voltage", VOLT, 0.1),
|
||||||
|
(112, "PV2 current", AMPS, 0.1),
|
||||||
|
)
|
||||||
|
|
||||||
|
###################
|
||||||
|
# Power on Outputs
|
||||||
|
###################
|
||||||
|
_SENSORS += (
|
||||||
|
(166, "AUX power", WATT, -1),
|
||||||
|
(175, "Essential power 1", WATT, (1, 1, -1)),
|
||||||
|
(167, "Essential power 1", WATT, (1, 1, -1)),
|
||||||
|
(166, "Essential power 1", WATT, (1, 1, -1)),
|
||||||
|
(172, "Non-Essential power", WATT, (1, -1)),
|
||||||
|
(167, "Non-Essential power", WATT, (1, -1)),
|
||||||
|
)
|
||||||
|
|
||||||
|
###################
|
||||||
|
# Energy
|
||||||
|
###################
|
||||||
|
_SENSORS += (
|
||||||
|
(60, "Day Active Energy", KWH, -0.1),
|
||||||
|
(70, "Day Battery Charge", KWH, 0.1),
|
||||||
|
(71, "Day Battery discharge", KWH, 0.1),
|
||||||
|
(77, "Day Grid Export", KWH, 0.1),
|
||||||
|
(76, "Day Grid Import", KWH, 0.1),
|
||||||
|
# Sensor (200, "Day Load Power", KWH, 0.01),
|
||||||
|
(84, "Day Load Energy", KWH, 0.1),
|
||||||
|
(108, "Day PV Energy", KWH, 0.1),
|
||||||
|
(61, "Day Reactive Energy", "kVarh", -0.1),
|
||||||
|
# Sensor ((201, 202), "History Load Power", KWH, 0.1),
|
||||||
|
(67, "Month Grid Energy", KWH, 0.1),
|
||||||
|
(66, "Month Load Energy", KWH, 0.1),
|
||||||
|
(65, "Month PV Energy", KWH, 0.1),
|
||||||
|
((63, 64), "Total Active Energy", KWH, 0.1), # signed?
|
||||||
|
((72, 73), "Total Battery Charge", KWH, 0.1),
|
||||||
|
((74, 75), "Total Battery Discharge", KWH, 0.1),
|
||||||
|
((81, 82), "Total Grid Export", KWH, 0.1),
|
||||||
|
((78, 80), "Total Grid Import", KWH, 0.1),
|
||||||
|
((85, 86), "Total Load Energy", KWH, 0.1),
|
||||||
|
((96, 97), "Total PV Energy", KWH, 0.1),
|
||||||
|
((98, 99), "Year Grid Export", KWH, 0.1),
|
||||||
|
((87, 88), "Year Load Energy", KWH, 0.1),
|
||||||
|
((68, 69), "Year PV Energy", KWH, 0.1),
|
||||||
|
)
|
||||||
|
|
||||||
|
##########
|
||||||
|
# General
|
||||||
|
##########
|
||||||
|
RATED_POWER = ((16, 17), "Rated power", WATT, 0.1)
|
||||||
|
_SENSORS.append(RATED_POWER)
|
||||||
|
_SENSORS += (
|
||||||
|
(0, "Device Type"),
|
||||||
|
((103, 104, 105, 106, 107), "Fault"),
|
||||||
|
(59, "Overall state"),
|
||||||
|
(92, "SD Status", ""), # type: ignore
|
||||||
|
((3, 4, 5, 6, 7), "Serial"),
|
||||||
|
(90, "DC transformer temperature", CELSIUS, 0.1),
|
||||||
|
(95, "Environment temperature", CELSIUS, 0.1),
|
||||||
|
(91, "Radiator temperature", CELSIUS, 0.1),
|
||||||
|
(194, "Grid Connected Status"),
|
||||||
|
)
|
||||||
|
###########
|
||||||
|
# Settings
|
||||||
|
###########
|
||||||
|
_SENSORS += (
|
||||||
|
(200, "Control Mode"),
|
||||||
|
(230, "Grid Charge Battery current", AMPS, -1),
|
||||||
|
(232, "Grid Charge enabled", "", -1),
|
||||||
|
(312, "Battery charging voltage", VOLT, 0.01),
|
||||||
|
(603, "Bat1 SOC", "%"),
|
||||||
|
(611, "Bat1 Cycle"),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
#BATTERY_EQUALIZATION_VOLTAGE = NumberRWSensor (
|
||||||
|
# 201, "Battery Equalization voltage", VOLT, 0.01, min=MIN_VOLTAGE, max=MAX_VOLTAGE
|
||||||
|
#)
|
||||||
|
#BATTERY_ABSORPTION_VOLTAGE = NumberRWSensor (
|
||||||
|
# 202, "Battery Absorption voltage", VOLT, 0.01, min=MIN_VOLTAGE, max=MAX_VOLTAGE
|
||||||
|
#)
|
||||||
|
#BATTERY_FLOAT_VOLTAGE = NumberRWSensor (
|
||||||
|
# 203, "Battery Float voltage", VOLT, 0.01, min=MIN_VOLTAGE, max=MAX_VOLTAGE
|
||||||
|
#)
|
||||||
|
|
||||||
|
#BATTERY_SHUTDOWN_CAPACITY = NumberRWSensor (217, "Battery Shutdown Capacity", "%")
|
||||||
|
#BATTERY_RESTART_CAPACITY = NumberRWSensor (218, "Battery Restart Capacity", "%")
|
||||||
|
#BATTERY_LOW_CAPACITY = NumberRWSensor (
|
||||||
|
# 219,
|
||||||
|
# "Battery Low Capacity",
|
||||||
|
# "%",
|
||||||
|
# min=BATTERY_SHUTDOWN_CAPACITY,
|
||||||
|
# max=BATTERY_RESTART_CAPACITY,
|
||||||
|
#)
|
||||||
|
#BATTERY_SHUTDOWN_CAPACITY.max = BATTERY_LOW_CAPACITY
|
||||||
|
#BATTERY_RESTART_CAPACITY.min = BATTERY_LOW_CAPACITY
|
||||||
|
|
||||||
|
#BATTERY_SHUTDOWN_VOLTAGE = NumberRWSensor (
|
||||||
|
# 220, "Battery Shutdown voltage", VOLT, 0.01, min=MIN_VOLTAGE
|
||||||
|
#)
|
||||||
|
#BATTERY_RESTART_VOLTAGE = NumberRWSensor (
|
||||||
|
# 221, "Battery Restart voltage", VOLT, 0.01, max=MAX_VOLTAGE
|
||||||
|
#)
|
||||||
|
#BATTERY_LOW_VOLTAGE = NumberRWSensor (
|
||||||
|
# 222,
|
||||||
|
# "Battery Low voltage",
|
||||||
|
# VOLT,
|
||||||
|
# 0.01,
|
||||||
|
# min=BATTERY_SHUTDOWN_VOLTAGE,
|
||||||
|
# max=BATTERY_RESTART_VOLTAGE,
|
||||||
|
#)
|
||||||
|
#BATTERY_SHUTDOWN_VOLTAGE.max = BATTERY_LOW_VOLTAGE
|
||||||
|
#BATTERY_RESTART_VOLTAGE.min = BATTERY_LOW_VOLTAGE
|
||||||
|
#
|
||||||
|
#_SENSORS += (
|
||||||
|
# BATTERY_EQUALIZATION_VOLTAGE,
|
||||||
|
# BATTERY_ABSORPTION_VOLTAGE,
|
||||||
|
# BATTERY_FLOAT_VOLTAGE,
|
||||||
|
# BATTERY_SHUTDOWN_CAPACITY,
|
||||||
|
# BATTERY_RESTART_CAPACITY,
|
||||||
|
# BATTERY_LOW_CAPACITY,
|
||||||
|
# BATTERY_SHUTDOWN_VOLTAGE,
|
||||||
|
# BATTERY_RESTART_VOLTAGE,
|
||||||
|
# BATTERY_LOW_VOLTAGE,
|
||||||
|
#)
|
||||||
|
|
||||||
|
#################
|
||||||
|
# System program
|
||||||
|
#################
|
||||||
|
#_SENSORS.append(
|
||||||
|
# SelectRWSensor (243, "Priority Mode", options={0: "Battery first", 1: "Load first"})
|
||||||
|
#)
|
||||||
|
"""
|
||||||
|
PROG1_TIME = (250, "Prog1 Time")
|
||||||
|
PROG2_TIME = (251, "Prog2 Time", min=PROG1_TIME)
|
||||||
|
PROG3_TIME = (252, "Prog3 Time", min=PROG2_TIME)
|
||||||
|
PROG4_TIME = (253, "Prog4 Time", min=PROG3_TIME)
|
||||||
|
PROG5_TIME = (254, "Prog5 Time", min=PROG4_TIME)
|
||||||
|
PROG6_TIME = (255, "Prog6 Time", min=PROG5_TIME)
|
||||||
|
PROG1_TIME.min = PROG6_TIME
|
||||||
|
PROG1_TIME.max = PROG2_TIME
|
||||||
|
PROG2_TIME.max = PROG3_TIME
|
||||||
|
PROG3_TIME.max = PROG4_TIME
|
||||||
|
PROG4_TIME.max = PROG5_TIME
|
||||||
|
PROG5_TIME.max = PROG6_TIME
|
||||||
|
PROG6_TIME.max = PROG1_TIME
|
||||||
|
|
||||||
|
PROG_CHARGE_OPTIONS = {
|
||||||
|
4: "No Grid or Gen",
|
||||||
|
5: "Allow Grid",
|
||||||
|
6: "Allow Gen",
|
||||||
|
7: "Allow Grid & Gen",
|
||||||
|
}
|
||||||
|
PROGRAM = (
|
||||||
|
PROG1_TIME,
|
||||||
|
PROG2_TIME,
|
||||||
|
PROG3_TIME,
|
||||||
|
PROG4_TIME,
|
||||||
|
PROG5_TIME,
|
||||||
|
PROG6_TIME,
|
||||||
|
(256, "Prog1 power", WATT, max=RATED_POWER),
|
||||||
|
(257, "Prog2 power", WATT, max=RATED_POWER),
|
||||||
|
(258, "Prog3 power", WATT, max=RATED_POWER),
|
||||||
|
(259, "Prog4 power", WATT, max=RATED_POWER),
|
||||||
|
(260, "Prog5 power", WATT, max=RATED_POWER),
|
||||||
|
(261, "Prog6 power", WATT, max=RATED_POWER),
|
||||||
|
(268, "Prog1 Capacity", "%", min=BATTERY_LOW_CAPACITY),
|
||||||
|
(269, "Prog2 Capacity", "%", min=BATTERY_LOW_CAPACITY),
|
||||||
|
(270, "Prog3 Capacity", "%", min=BATTERY_LOW_CAPACITY),
|
||||||
|
(271, "Prog4 Capacity", "%", min=BATTERY_LOW_CAPACITY),
|
||||||
|
(272, "Prog5 Capacity", "%", min=BATTERY_LOW_CAPACITY),
|
||||||
|
(273, "Prog6 Capacity", "%", min=BATTERY_LOW_CAPACITY),
|
||||||
|
(274, "Prog1 Charge", options=PROG_CHARGE_OPTIONS),
|
||||||
|
(275, "Prog2 Charge", options=PROG_CHARGE_OPTIONS),
|
||||||
|
(276, "Prog3 Charge", options=PROG_CHARGE_OPTIONS),
|
||||||
|
(277, "Prog4 Charge", options=PROG_CHARGE_OPTIONS),
|
||||||
|
(278, "Prog5 Charge", options=PROG_CHARGE_OPTIONS),
|
||||||
|
SelectRWSensor (279, "Prog6 Charge", options=PROG_CHARGE_OPTIONS),
|
||||||
|
)
|
||||||
|
#_SENSORS.extend(PROGRAM)
|
||||||
|
PROG_VOLT = (
|
||||||
|
NumberRWSensor (
|
||||||
|
262,
|
||||||
|
"Prog1 voltage",
|
||||||
|
VOLT,
|
||||||
|
0.01,
|
||||||
|
min=BATTERY_LOW_VOLTAGE,
|
||||||
|
max=BATTERY_FLOAT_VOLTAGE,
|
||||||
|
),
|
||||||
|
NumberRWSensor (
|
||||||
|
263,
|
||||||
|
"Prog2 voltage",
|
||||||
|
VOLT,
|
||||||
|
0.01,
|
||||||
|
min=BATTERY_LOW_VOLTAGE,
|
||||||
|
max=BATTERY_FLOAT_VOLTAGE,
|
||||||
|
),
|
||||||
|
NumberRWSensor (
|
||||||
|
264,
|
||||||
|
"Prog3 voltage",
|
||||||
|
VOLT,
|
||||||
|
0.01,
|
||||||
|
min=BATTERY_LOW_VOLTAGE,
|
||||||
|
max=BATTERY_FLOAT_VOLTAGE,
|
||||||
|
),
|
||||||
|
NumberRWSensor (
|
||||||
|
265,
|
||||||
|
"Prog4 voltage",
|
||||||
|
VOLT,
|
||||||
|
0.01,
|
||||||
|
min=BATTERY_LOW_VOLTAGE,
|
||||||
|
max=BATTERY_FLOAT_VOLTAGE,
|
||||||
|
),
|
||||||
|
NumberRWSensor (
|
||||||
|
266,
|
||||||
|
"Prog5 voltage",
|
||||||
|
VOLT,
|
||||||
|
0.01,
|
||||||
|
min=BATTERY_LOW_VOLTAGE,
|
||||||
|
max=BATTERY_FLOAT_VOLTAGE,
|
||||||
|
),
|
||||||
|
NumberRWSensor (
|
||||||
|
267,
|
||||||
|
"Prog6 voltage",
|
||||||
|
VOLT,
|
||||||
|
0.01,
|
||||||
|
min=BATTERY_LOW_VOLTAGE,
|
||||||
|
max=BATTERY_FLOAT_VOLTAGE,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
#_SENSORS.extend(PROG_VOLT)
|
||||||
|
"""
|
||||||
36
deye.py
Executable file
36
deye.py
Executable file
@@ -0,0 +1,36 @@
|
|||||||
|
import minimalmodbus
|
||||||
|
from definitions import _SENSORS
|
||||||
|
|
||||||
|
PORT='/dev/ttyRS485'
|
||||||
|
TESTREG = 150
|
||||||
|
|
||||||
|
#Set up instrument
|
||||||
|
instrument = minimalmodbus.Instrument( PORT, 1) #, mode = minimalmodbus.MODE_RTU)
|
||||||
|
|
||||||
|
#Make the settings explicit
|
||||||
|
instrument.serial.baudrate = 9600 # Baud
|
||||||
|
instrument.serial.bytesize = 8
|
||||||
|
instrument.serial.parity = minimalmodbus.serial.PARITY_NONE
|
||||||
|
instrument.serial.stopbits = 1
|
||||||
|
instrument.serial.timeout = 1 # seconds
|
||||||
|
|
||||||
|
# Good practice
|
||||||
|
instrument.close_port_after_each_call = True
|
||||||
|
|
||||||
|
instrument.clear_buffers_before_each_transaction = True
|
||||||
|
|
||||||
|
# Read temperatureas a float
|
||||||
|
# if you need to read a 16 bit register use instrument.read_register()
|
||||||
|
instrument.write_register (135, 0, 1)
|
||||||
|
instrument.write_register (137, 0, 1)
|
||||||
|
for i in _SENSORS:
|
||||||
|
try:
|
||||||
|
reg, name, unit, scale = i
|
||||||
|
print (name)
|
||||||
|
if type (reg) == type (1):
|
||||||
|
val = instrument.read_register (reg, 1)
|
||||||
|
print (" ", val)
|
||||||
|
else:
|
||||||
|
print (reg)
|
||||||
|
except:
|
||||||
|
print (i)
|
||||||
Reference in New Issue
Block a user