59 lines
1.2 KiB
Python
59 lines
1.2 KiB
Python
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]
|