# 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