Index: leahi_dialin/dd/modules/conductivity_sensors.py =================================================================== diff -u -r4883713b492bdb0a8626e98fb5599841e8b17f23 -rcf2068872f9d6c000e67ede2dca3e207aa1d041e --- leahi_dialin/dd/modules/conductivity_sensors.py (.../conductivity_sensors.py) (revision 4883713b492bdb0a8626e98fb5599841e8b17f23) +++ leahi_dialin/dd/modules/conductivity_sensors.py (.../conductivity_sensors.py) (revision cf2068872f9d6c000e67ede2dca3e207aa1d041e) @@ -19,21 +19,13 @@ from .constants import RESET, NO_RESET from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions +from leahi_dialin.common.dd_defs import ConductivitySensorsEnum from leahi_dialin.protocols.CAN import DenaliMessage, DenaliChannels from leahi_dialin.utils.base import AbstractSubSystem, publish, DialinEnum from leahi_dialin.utils.checks import check_broadcast_interval_override_ms from leahi_dialin.utils.conversions import integer_to_bytearray, float_to_bytearray -@unique -class ConductivitySensorsEnum(DialinEnum): - D17_COND = 0 - D27_COND = 1 - D29_COND = 2 - D43_COND = 3 - D74_COND = 4 - NUM_OF_CONDUCTIVITY_SENSORS = 5 - class DDConductivitySensors(AbstractSubSystem): """ ConductivitySensors @@ -57,19 +49,16 @@ self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_conductivity_sensors_sync) - self.d17_cond = 0.0 - self.d27_cond = 0.0 - self.d29_cond = 0.0 - self.d43_cond = 0.0 - self.d74_cond = 0.0 self.dd_conductivity_timestamp = 0.0 + self.dd_conductivity = { + ConductivitySensorsEnum.D17_COND.name: 0.0, + ConductivitySensorsEnum.D27_COND.name: 0.0, + ConductivitySensorsEnum.D29_COND.name: 0.0, + ConductivitySensorsEnum.D43_COND.name: 0.0, + ConductivitySensorsEnum.D74_COND.name: 0.0 + } - @publish(["dd_conductivity_timestamp", - "d17_cond", - "d27_cond", - "d29_cond", - "d43_cond", - "d74_cond"]) + @publish(["dd_conductivity_timestamp", "dd_conductivity"]) def _handler_conductivity_sensors_sync(self, message, timestamp=0.0): """ Handles published DD conductivity sensor data messages. DD Conductivity sensor data are captured @@ -79,15 +68,19 @@ @return: None """ - self.d17_cond = struct.unpack('f', bytearray( + self.dd_conductivity[ConductivitySensorsEnum.D17_COND.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - self.d27_cond = struct.unpack('f', bytearray( + + self.dd_conductivity[ConductivitySensorsEnum.D27_COND.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - self.d29_cond = struct.unpack('f', bytearray( + + self.dd_conductivity[ConductivitySensorsEnum.D29_COND.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - self.d43_cond = struct.unpack('f', bytearray( + + self.dd_conductivity[ConductivitySensorsEnum.D43_COND.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] - self.d74cond = struct.unpack('f', bytearray( + + self.dd_conductivity[ConductivitySensorsEnum.D74_COND.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] self.dd_conductivity_timestamp = timestamp @@ -134,11 +127,14 @@ self.logger.error("Timeout!!!!") return False - def cmd_conductivity_sensor_readings_override(self, sensor: int, conductivity: float, reset: int = NO_RESET) -> int: + def cmd_conductivity_sensor_readings_override(self, sensor_index: int, conductivity: float, reset: int = NO_RESET) -> int: """ Constructs and sends the conductivity value override command + Constraints: + Must be logged into DD. + Given sensor_index must be one of the sensors defined in ConductivitySensorsEnum - @param sensor: unsigned int - sensor ID + @param sensor_index: unsigned int - index of the sensor @param conductivity: float - conductivity value to override sensor with @param reset: integer - 1 to reset a previous override, 0 to override @return: 1 if successful, zero otherwise @@ -147,7 +143,7 @@ reset_byte_array = integer_to_bytearray(reset) cond_byte_array = float_to_bytearray(conductivity) - sensor_byte_array = integer_to_bytearray(sensor) + sensor_byte_array = integer_to_bytearray(sensor_index) payload = reset_byte_array + cond_byte_array + sensor_byte_array message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, @@ -158,7 +154,8 @@ str_res = "reset back to normal" else: str_res = str(conductivity) + " microsiemens/cm" - self.logger.debug("override conductivity sensor value for sensor " + str(sensor) + ": " + str_res) + self.logger.debug("override conductivity sensor value for sensor " + ConductivitySensorsEnum[str(sensor_index)].name + + ": " + str_res) # Send message received_message = self.can_interface.send(message) @@ -171,11 +168,14 @@ self.logger.error("Timeout!!!!") return False - def cmd_conductivity_sensor_temperature_override(self, sensor: int, temperature: float, reset: int = NO_RESET) -> int: + def cmd_conductivity_sensor_temperature_override(self, sensor_index: int, temperature: float, reset: int = NO_RESET) -> int: """ Constructs and sends the conductivity temperature override command + Constraints: + Must be logged into DD. + Given sensor_index must be one of the sensors defined in ConductivitySensorsEnum - @param sensor: unsigned int - sensor ID + @param sensor_index: unsigned int - index of the sensor @param temperature: float - temperature value to override sensor with @param reset: integer - 1 to reset a previous override, 0 to override @return: 1 if successful, zero otherwise @@ -184,7 +184,7 @@ reset_byte_array = integer_to_bytearray(reset) temp_byte_array = float_to_bytearray(temperature) - sensor_byte_array = integer_to_bytearray(sensor) + sensor_byte_array = integer_to_bytearray(sensor_index) payload = reset_byte_array + temp_byte_array + sensor_byte_array message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, @@ -195,7 +195,8 @@ str_res = "reset back to normal" else: str_res = str(temperature) - self.logger.debug("override temperature value for conductivity sensor " + str(sensor) + ": " + str_res) + self.logger.debug("override temperature value for conductivity sensor " + ConductivitySensorsEnum[str(sensor_index)].name + + ": " + str_res) # Send message received_message = self.can_interface.send(message) @@ -208,9 +209,12 @@ self.logger.error("Timeout!!!!") return False - def cmd_conductivity_sensor_read_counter_override(self, sensor: int, counter: int, reset: int = NO_RESET) -> int: + def cmd_conductivity_sensor_read_counter_override(self, sensor_index: int, counter: int, reset: int = NO_RESET) -> int: """ Constructs and sends the conductivity read counter override command + Constraints: + Must be logged into DD. + Given sensor_index must be one of the sensors defined in ConductivitySensorsEnum @param sensor: unsigned int - sensor ID @param counter: int - rad count value to override sensor with @@ -221,7 +225,7 @@ reset_byte_array = integer_to_bytearray(reset) read_byte_array = integer_to_bytearray(counter) - sensor_byte_array = integer_to_bytearray(sensor) + sensor_byte_array = integer_to_bytearray(sensor_index) payload = reset_byte_array + read_byte_array + sensor_byte_array message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, @@ -232,7 +236,8 @@ str_res = "reset back to normal" else: str_res = str(counter) - self.logger.debug("override conductivity sensor value for sensor " + str(sensor) + ": " + str_res) + self.logger.debug("override conductivity sensor value for sensor " + ConductivitySensorsEnum[str(sensor_index)].name + + ": " + str_res) # Send message received_message = self.can_interface.send(message) @@ -245,7 +250,7 @@ self.logger.error("Timeout!!!!") return False - def cmd_conductivity_sensor_error_counter_override(self, sensor: int, counter: int, reset: int = NO_RESET) -> int: + def cmd_conductivity_sensor_error_counter_override(self, sensor_index: int, counter: int, reset: int = NO_RESET) -> int: """ Constructs and sends the conductivity error count override command @@ -258,7 +263,7 @@ reset_byte_array = integer_to_bytearray(reset) error_byte_array = integer_to_bytearray(counter) - sensor_byte_array = integer_to_bytearray(sensor) + sensor_byte_array = integer_to_bytearray(sensor_index) payload = reset_byte_array + error_byte_array + sensor_byte_array message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, @@ -269,7 +274,8 @@ str_res = "reset back to normal" else: str_res = str(counter) - self.logger.debug("override conductivity sensor value for sensor " + str(sensor) + ": " + str_res) + self.logger.debug("override conductivity sensor value for sensor " + ConductivitySensorsEnum[str(sensor_index)].name + + ": " + str_res) # Send message received_message = self.can_interface.send(message)