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