forked from veles_labs/pyveles
Fixed several issues
This commit is contained in:
parent
f103820af8
commit
d771680ac1
@ -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
|
||||||
}
|
}
|
@ -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()
|
||||||
|
}
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user