Weather Monitoring Station Interface

This module provides the interface to a Weather Station.

class WeatherStation(hostname, port, logger, config_file='')

Class to implement the Modbus interface to a Weather Station.

Parameters:
property poll_interval: float

Polling interval, in seconds.

property available_sensors: list[Sensor]

Sensors read from the configuration file.

configure_poll_sensors(sensors_to_poll)

Configure the subset of sensors to poll.

Parameters:
  • sensors – List of sensors to poll.

  • sensors_to_poll (list[SensorEnum])

Return type:

None

subscribe_data(data_callback, error_callback=None)

Subscribe to data updates and error notifications.

Parameters:
Return type:

int

Returns:

The subscription id.

unsubscribe_data(subscription_id)

Unsubscribe from all updates.

Parameters:
  • id – The id to unsubscribe.

  • subscription_id (int)

Return type:

None

connect()

Connect to the device.

Raises:

ValueError if the configuration could not be loaded or is invalid. ConnectionError if connecting failed.

Return type:

None

disconnect()

Disconnect from the device.

Return type:

None

start_polling(timeout=2.0)

Start polling the weather station data.

Will block until the polling has started successfully.

Parameters:

timeout (float) – The maximum time to wait for the poller to start.

Raises:

TimeoutError if the poller does not start within the timeout period.

Return type:

None

stop_polling(timeout=2.0)

Stop polling the weather station data.

Will block until the polling has stopped successfully.

Parameters:

timeout (float) – The maximum time to wait for the poller to start.

Raises:

TimeoutError if the poller does not stop within the timeout period.

Return type:

None

enum SensorEnum(value)

Enumeration type for Sensors.

Valid values are as follows:

WINDSPEED = <SensorEnum.WINDSPEED: 'windSpeed'>
WINDDIRECTION = <SensorEnum.WINDDIRECTION: 'windDirection'>
TEMPERATURE = <SensorEnum.TEMPERATURE: 'temperature'>
PRESSURE = <SensorEnum.PRESSURE: 'pressure'>
HUMIDITY = <SensorEnum.HUMIDITY: 'humidity'>
RAINFALL = <SensorEnum.RAINFALL: 'rainfall'>
enum InputSignalStatusEnum(value)

Possible channel status values.

Member Type:

int

Valid values are as follows:

IN_RANGE = <InputSignalStatusEnum.IN_RANGE: 0>
OVER_RANGE = <InputSignalStatusEnum.OVER_RANGE: 1>
UNDER_RANGE = <InputSignalStatusEnum.UNDER_RANGE: 2>
enum ModbusExceptionType(value)

Enumeration of Modbus exception types.

This enumeration includes both standard Modbus exception codes and exceptions raised by the pymodbus library.

Valid values are as follows:

IllegalFunction = <ModbusExceptionType.IllegalFunction: <ExcCodes.ILLEGAL_FUNCTION: 1>>
IllegalAddress = <ModbusExceptionType.IllegalAddress: <ExcCodes.ILLEGAL_ADDRESS: 2>>
IllegalValue = <ModbusExceptionType.IllegalValue: <ExcCodes.ILLEGAL_VALUE: 3>>
SlaveFailure = <ModbusExceptionType.SlaveFailure: <ExcCodes.DEVICE_FAILURE: 4>>
Acknowledge = <ModbusExceptionType.Acknowledge: <ExcCodes.ACKNOWLEDGE: 5>>
SlaveBusy = <ModbusExceptionType.SlaveBusy: <ExcCodes.DEVICE_BUSY: 6>>
NegativeAcknowledge = <ModbusExceptionType.NegativeAcknowledge: <ExcCodes.NEGATIVE_ACKNOWLEDGE: 7>>
MemoryParityError = <ModbusExceptionType.MemoryParityError: <ExcCodes.MEMORY_PARITY_ERROR: 8>>
GatewayPathUnavailable = <ModbusExceptionType.GatewayPathUnavailable: <ExcCodes.GATEWAY_PATH_UNAVIABLE: 10>>
GatewayNoResponse = <ModbusExceptionType.GatewayNoResponse: <ExcCodes.GATEWAY_NO_RESPONSE: 11>>
ModbusIOException = <ModbusExceptionType.ModbusIOException: 12>
ParameterException = <ModbusExceptionType.ParameterException: 13>
NoSuchSlaveException = <ModbusExceptionType.NoSuchSlaveException: 14>
ConnectionException = <ModbusExceptionType.ConnectionException: 15>
InvalidMessageReceivedException = <ModbusExceptionType.InvalidMessageReceivedException: 16>
MessageRegisterException = <ModbusExceptionType.MessageRegisterException: 17>
Unknown = <ModbusExceptionType.Unknown: 18>
class DatapointDict

Bases: TypedDict

Dictionary representation of a WMSDatapoint.

Attributes:
  • value (float): The measured value from the weather station.

  • unit (str): The unit of the measured value (e.g., “Celsius”, “m/s”).

  • timestamp (datetime): The timestamp when the datapoint was recorded.

  • low_current_value (float): The low current value associated with the datapoint.

  • adc_value (int): The raw ADC (Analog-to-Digital Converter) value.

  • input_signal_status (InputSignalStatusEnum): The status of the input signal.

class ErrorDict

Bases: TypedDict

Dictionary representation of a WMSError.

Atributes:
  • modbus_exception (ModbusExceptionType): The type of Modbus exception that occurred.

  • message (str): A message describing the error.

  • timestamp (datetime): The timestamp when the error occurred.

load_weather_station_configuration(config_path)

Load and validate a weather station configuration YAML file.

Parameters:

config_path (str) – path to the configuration file.

Return type:

WeatherStationDict

Returns:

validated configuration dictionary.

Raises:

OSError if the file cannot be opened.

Raises:

UnicodeDecodeError if the file cannot be decoded.

Raises:

YAMLError if the YAML cannot be loaded.

Raises:

ValueError if the configuration is invalid.