Files
2024-02-29 11:33:00 +01:00

150 lines
3.5 KiB
Python

# Constants for koolnova Modbus RTU BMS
# d'après la documentation officielle A52102 - Registre contrôle Modbus
from enum import Enum
# La couche physique est Modbus RTU sur RS485 à 9600, avec 8 bits de données, sans parité
# ou même parité et un bit d'arrêt. Par défaut: 9600 8E1
# L'adresse Modbus par défaut est 49
DEFAULT_ADDR = 49
DEFAULT_BAUDRATE = 9600
DEFAULT_PARITY = 'E'
DEFAULT_STOPBITS = 1
DEFAULT_BYTESIZE = 8
# Nombre de machines (AC1, AC2, AC3 et AC4)
NUM_OF_ENGINES = 4
# Nombre de registres par zone
NUM_REG_PER_ZONE = 4
# Nombre max de zone pour un systeme
NB_ZONE_MAX = 16
# Chaque zone climatique est définie par 4 registres et il y a 16 zones possibles,
# donc le climat est défini par 64 registres
REG_START_ZONE = 0
# Commandes Modbus prises en charge sont le Read Holding Register (0x03)
# et le Write Single Register (0x06)
REG_LOCK_ZONE = 0 # 40001, 40005, 40009, etc ...
REG_STATE_AND_FLOW = 1 # 40002, 40006, 40010, etc ...
class ZoneState(Enum):
STATE_OFF = 0
STATE_ON = 1
def __int__(self):
return self.value
class ZoneRegister(Enum):
REGISTER_OFF = 0
REGISTER_ON = 1
def __int__(self):
return self.value
class ZoneFanMode(Enum):
FAN_OFF = 0
FAN_LOW = 1
FAN_MEDIUM = 2
FAN_HIGH = 3
FAN_AUTO = 4
def __int__(self):
return self.value
class ZoneClimMode(Enum):
OFF = 0
COOL = 1
HEAT = 2
HEATING_FLOOR = 4
REFRESHING_FLOOR = 5
HEATING_FLOOR_2 = 6
def __int__(self):
return self.value
# Température de consigne = (data / 2) => delta: 15°C -> 35°C
REG_TEMP_ORDER = 2 # 40003, 40007, 40011, etc ...
# Température réelle = (data / 2) => delta: 0°C -> 50°C
REG_TEMP_REAL = 3 # 40004, 40008, 40012, etc ...
# Temperature maximale de consigne : 35°C
MAX_TEMP_ORDER = 35.0
# Temperature minimale de consigne : 15°C
MIN_TEMP_ORDER = 15.0
# Pas de la temperature de consigne : 0.5°C
STEP_TEMP_ORDER = 0.5
# Temperature maximale : 50°C
MAX_TEMP = 50.0
# Temperature minimale : 0°C
MIN_TEMP = 0.0
# Pas de la temperature : 0.5°C
STEP_TEMP = 0.5
# (4 registres: 64 -> 67) Debit des machines (0: arret -> 15: debit maximum)
REG_START_FLOW_ENGINE = 64
NUM_REG_FLOG_ENGINE = 4
FLOW_ENGINE_VAL_MAX = 15
FLOW_ENGINE_VAL_MIN = 0
# (4 registres : 68 -> 71) Température de consigne de la machine.
# Valeur décimale de 30 à 60 = double de la temp de consigne des consignes AC1, AC2, AC3 et AC4
REG_START_ORDER_TEMP = 68
NUM_REG_ORDER_TEMP = 4
# (4 registres : 72 -> 75) Programmation des débit des machines du système
REG_START_FLOW_STATE_ENGINE = 72
NUM_REG_FLOW_STATE_ENGINE = 4
class FlowEngine(Enum):
MANUAL_MIN = 1
MANUAL_MED = 2
MANUAL_HIGH = 3
AUTO = 4
def __int__(self):
return self.value
# Communication Modbus
REG_COMM = 76
REG_ADDR_MODBUS = 77 # dispo (1 - 127)
REG_EFFICIENCY = 78
# Point d'equilibre entre efficience/vitesse du système de zone
# chiffre élevé = meilleur efficience
# chiffre bas = temp réglée atteinte au plus tot
class Efficiency(Enum):
LOWER_EFF = 1
LOW_EFF = 2
MED_EFF = 3
HIGH_EFF = 4
HIGHER_EFF = 5
def __int__(self):
return self.value
REG_CLIM_ID = 79
REG_SYS_STATE = 80
class SysState(Enum):
SYS_STATE_OFF = 0
SYS_STATE_ON = 1
def __int__(self):
return self.value
REG_GLOBAL_MODE = 81
class GlobalMode(Enum):
COLD = 1
HEAT = 2
HEATING_FLOOR = 4
REFRESHING_FLOOR = 5
HEATING_FLOOR_2 = 6
def __int__(self):
return self.value