Fixed several issues

This commit is contained in:
Jan Mrna 2022-08-15 22:00:17 +02:00
parent f103820af8
commit d771680ac1
3 changed files with 32 additions and 12 deletions

View File

@ -5,6 +5,6 @@ from .sensor_wired_RHT import SensorWiredRHT
# links device identifiers to its class # links device identifiers to its class
device_identifiers: Final[Dict[int, Device]] = { device_identifiers: Final[Dict[int, Device]] = {
SensorWiredIAQ.IDENTIFIER: SensorWiredIAQ, SensorWiredIAQ.DEVICE_CODE: SensorWiredIAQ,
SensorWiredRHT.IDENTIFIER: SensorWiredRHT SensorWiredRHT.DEVICE_CODE: SensorWiredRHT
} }

View File

@ -1,6 +1,6 @@
"""Module containing classes for generic wired/wireless devices""" """Module containing classes for generic wired/wireless devices"""
from dataclasses import dataclass from dataclasses import dataclass
from typing import Dict, Final, Any from typing import Dict, Final, Any, Union
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
import minimalmodbus import minimalmodbus
import serial import serial
@ -14,8 +14,8 @@ class Modbus:
INPUT_REGISTER_START = 30001 INPUT_REGISTER_START = 30001
INPUT_REGISTER_END = 39999 INPUT_REGISTER_END = 39999
# ranges for testing if address is in address range # ranges for testing if address is in address range
input_register_range = range(INPUT_REGISTER_START, INPUT_REGISTER_END) input_register_range = range(INPUT_REGISTER_START, INPUT_REGISTER_END + 1)
holding_register_range = range(HOLDING_REGISTER_START, HOLDING_REGISTER_END) holding_register_range = range(HOLDING_REGISTER_START, HOLDING_REGISTER_END + 1)
@dataclass(slots=True) @dataclass(slots=True)
@ -39,6 +39,20 @@ class Device(ABC):
used for logging purposes used for logging purposes
""" """
@property
@abstractmethod
def device_code(self) -> int:
"""
Return device code (device type)
"""
@property
@abstractmethod
def serial_number(self) -> int:
"""
Return serial number, unique for each device
"""
class ModbusRTUDevice(Device): class ModbusRTUDevice(Device):
""" """
@ -148,7 +162,7 @@ class ModbusRTUDevice(Device):
""" """
try: try:
self.write_register( self.write_register(
ModbusRTUDevice.holding_registers["RESET"], ModbusRTUDevice.holding_registers["RESET_DEVICE"],
ModbusRTUDevice.MAGIC_RESET_CONSTANT, ModbusRTUDevice.MAGIC_RESET_CONSTANT,
) )
return False # got answer => failed to reset return False # got answer => failed to reset
@ -173,3 +187,8 @@ class ModbusRTUDevice(Device):
self.read_register(self.input_registers["SERIAL_NUMBER_2"]) self.read_register(self.input_registers["SERIAL_NUMBER_2"])
) )
return (serial_number_1 << 16) + serial_number_2 return (serial_number_1 << 16) + serial_number_2
def get_data(self) -> Dict[str, int]:
return {
name: self.read_register(number) for name, number in self.input_registers.items()
}

View File

@ -29,9 +29,11 @@ class SensorWiredIAQ(ModbusRTUDevice):
"PMC_NUMBER_4_0": 30016, # 1 / m^3 "PMC_NUMBER_4_0": 30016, # 1 / m^3
"PMC_NUMBER_10_0": 30017, # 1 / m^3 "PMC_NUMBER_10_0": 30017, # 1 / m^3
"TYPICAL_PARTICLE_SIZE": 30018, # nm "TYPICAL_PARTICLE_SIZE": 30018, # nm
"T_SCD4x": 30019, # deg C "READ_ERR_T": 30019, # temperature sensor error code (0 if no error)
"T_SCD4x_F": 30020, # deg F "READ_ERR_RH": 30020, # humidity sensor error code (0 if no error)
"RH_SCD4x": 30021 # % "READ_ERR_CO2": 30021, # CO2 sensor error code (0 if no error)
"READ_ERR_VOC": 30022, # VOC sensor error code (0 if no error)
"READ_ERR_PMC": 30023, # PMC sensor error code (0 if no error)
} | ModbusRTUDevice.input_registers } | ModbusRTUDevice.input_registers
holding_registers: Dict[str, int] = { holding_registers: Dict[str, int] = {
"MODBUS_ADDR": 40001, "MODBUS_ADDR": 40001,
@ -41,7 +43,7 @@ class SensorWiredIAQ(ModbusRTUDevice):
"LED_SMOOTH": 40005, "LED_SMOOTH": 40005,
"CO2_ALERT_LIMIT1": 40006, "CO2_ALERT_LIMIT1": 40006,
"CO2_ALERT_LIMIT2": 40007, "CO2_ALERT_LIMIT2": 40007,
"SCD4x_T_OFFSET": 40008 "SCD4x_T_OFFSET": 40008,
} | ModbusRTUDevice.holding_registers } | ModbusRTUDevice.holding_registers
@property @property
@ -72,4 +74,3 @@ class SensorWiredIAQ(ModbusRTUDevice):
self.write_register(self.holding_registers["LED_BRIGHTNESS"], value) self.write_register(self.holding_registers["LED_BRIGHTNESS"], value)
sleep(0.1) sleep(0.1)
self.write_register(self.holding_registers["LED_ON"], 1) self.write_register(self.holding_registers["LED_ON"], 1)