from typing import Optional from enum import Enum from dataclasses import dataclass class Algo(Enum): IEEE2 = "ieee754_sur_2_registres" NORMAL = "lecture_directe" STRING = "Chaîne de caractères" UINT32 = "Entier sur 32 bits non signé" BOOLEAN = "Booléen" @dataclass class Metrique: # Id de la métrique pour ce capteur : idMetrique:int indexRegistreDepart:int indexRegistreFin:int = None # Ne sert que dans le cas de Algo.STRING # Nombre de chiffres après la virgule (utilisé si Algo.IEEE2) precision:int = 2 algo:Algo = Algo.NORMAL class ModbusType(Enum): RTU = "rtu" TCP = "tcp" @dataclass class RtuConfig: baudrate:int stopbits:int bytesize:int parity:str serialPort:str = "/dev/ttyACM0" @dataclass class TcpConfig: ip:str @dataclass class AppelCapteur: firstRegisterAdress:int nbRegisters:int # Les métriques associées à ce capteur metriques:list[Metrique] # Le délais, en secondes, entre 2 appels (et stockage en bdd des métriques liées) avec 15s comme valeur par défaut : delai:int = 15 @dataclass class Capteur: idCapteur:int modbusAdresse:int appels:list[AppelCapteur] @dataclass class Canal: description:str typeModbus:ModbusType comConfig:RtuConfig|TcpConfig capteurs:list[Capteur]