esphome/proto/configModel.py
2025-05-24 10:30:00 +02:00

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]