Index: leahi_dialin/dd/modules/pressure_sensors.py =================================================================== diff -u -rec8a2600b9e8cf6fe7e02c200a1c24221ca86863 -r82b297112cb6098c63938b45e1e2b6099f460697 --- leahi_dialin/dd/modules/pressure_sensors.py (.../pressure_sensors.py) (revision ec8a2600b9e8cf6fe7e02c200a1c24221ca86863) +++ leahi_dialin/dd/modules/pressure_sensors.py (.../pressure_sensors.py) (revision 82b297112cb6098c63938b45e1e2b6099f460697) @@ -49,34 +49,13 @@ self._handler_pressures_sync) self.dd_pressures = { - DDPressureNames.M1_PRES.name: { - DDPressureAttributesEnum.PRES.name: 0.0, - DDPressureAttributesEnum.TEMP.name: 0.0 - }, - DDPressureNames.M3_PRES.name: { - DDPressureAttributesEnum.PRES.name: 0.0, - DDPressureAttributesEnum.TEMP.name: 0.0 - }, - DDPressureNames.D9_PRES.name: { - DDPressureAttributesEnum.PRES.name: 0.0, - DDPressureAttributesEnum.TEMP.name: 0.0 - }, - DDPressureNames.D66_PRES.name: { - DDPressureAttributesEnum.PRES.name: 0.0, - DDPressureAttributesEnum.TEMP.name: 0.0 - }, - DDPressureNames.D51_PRES.name: { - DDPressureAttributesEnum.PRES.name: 0.0, - DDPressureAttributesEnum.TEMP.name: 0.0 - }, - DDPressureNames.D18_PRES.name: { - DDPressureAttributesEnum.PRES.name: 0.0, - DDPressureAttributesEnum.TEMP.name: 0.0 - }, - DDPressureNames.D41_PRES.name: { - DDPressureAttributesEnum.PRES.name: 0.0, - DDPressureAttributesEnum.TEMP.name: 0.0 - } + DDPressureNames.M1_PRES.name: { DDPressureAttributesEnum.PRES.name: 0.0 }, + DDPressureNames.M3_PRES.name: { DDPressureAttributesEnum.PRES.name: 0.0 }, + DDPressureNames.D9_PRES.name: { DDPressureAttributesEnum.PRES.name: 0.0 }, + DDPressureNames.D66_PRES.name: { DDPressureAttributesEnum.PRES.name: 0.0 }, + DDPressureNames.D51_PRES.name: { DDPressureAttributesEnum.PRES.name: 0.0 }, + DDPressureNames.D18_PRES.name: { DDPressureAttributesEnum.PRES.name: 0.0 }, + DDPressureNames.D41_PRES.name: { DDPressureAttributesEnum.PRES.name: 0.0 } } self.dd_pressures_timestamp = 0 @@ -104,20 +83,6 @@ message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6]))[0] self.dd_pressures[DDPressureNames.D41_PRES.name][DDPressureAttributesEnum.PRES.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7]))[0] - self.dd_pressures[DDPressureNames.M1_PRES.name][DDPressureAttributesEnum.TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8]))[0] - self.dd_pressures[DDPressureNames.M3_PRES.name][DDPressureAttributesEnum.TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_9:MsgFieldPositions.END_POS_FIELD_9]))[0] - self.dd_pressures[DDPressureNames.D9_PRES.name][DDPressureAttributesEnum.TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_10:MsgFieldPositions.END_POS_FIELD_10]))[0] - self.dd_pressures[DDPressureNames.D66_PRES.name][DDPressureAttributesEnum.TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_11:MsgFieldPositions.END_POS_FIELD_11]))[0] - self.dd_pressures[DDPressureNames.D51_PRES.name][DDPressureAttributesEnum.TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_12:MsgFieldPositions.END_POS_FIELD_12]))[0] - self.dd_pressures[DDPressureNames.D18_PRES.name][DDPressureAttributesEnum.TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_13:MsgFieldPositions.END_POS_FIELD_13]))[0] - self.dd_pressures[DDPressureNames.D41_PRES.name][DDPressureAttributesEnum.TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_14:MsgFieldPositions.END_POS_FIELD_14]))[0] self.dd_pressures_timestamp = timestamp @@ -192,40 +157,6 @@ self.logger.debug("Timeout!!!!") return False - def cmd_pressure_temperature_override(self, sensor: int, temperature: float, reset: int = NO_RESET) -> int: - """ - Constructs and sends the pressure temperature override command. - Constraints: - Must be logged into DD. - - @param sensor: unsigned int - sensor ID - @param temperature: float - pressure (in PSI) - @param reset: integer - 1 to reset a previous override, 0 to override - @return: 1 if successful, zero otherwise - """ - - rst = integer_to_bytearray(reset) - tmp = float_to_bytearray(temperature) - idx = integer_to_bytearray(sensor) - payload = rst + tmp + idx - - message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, - message_id=MsgIds.MSG_ID_DD_PRESSURE_SENSOR_TEMPERATURE_OVERRIDE_REQUEST.value, - payload=payload) - - self.logger.debug("override pressure temperature") - - # Send message - received_message = self.can_interface.send(message) - - # If there is content... - if received_message is not None: - # response payload is OK or not OK - return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] - else: - self.logger.debug("Timeout!!!!") - return False - def cmd_pressure_sensor_read_counter_override(self, sensor: int, counter: int, reset: int = NO_RESET) -> int: """ Constructs and sends the pressure sensor read counter override command @@ -336,38 +267,4 @@ return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: self.logger.debug("Timeout!!!!") - return False - - def cmd_pressure_filtered_temperature_override(self, sensor: int, temperature: float, reset: int = NO_RESET) -> int: - """ - Constructs and sends the filtered temperature override command. - Constraints: - Must be logged into DD. - - @param sensor: unsigned int - sensor ID - @param temperature: float - temperature to override the sensor with - @param reset: integer - 1 to reset a previous override, 0 to override - @return: 1 if successful, zero otherwise - """ - - rst = integer_to_bytearray(reset) - tmp = float_to_bytearray(temperature) - idx = integer_to_bytearray(sensor) - payload = rst + tmp + idx - - message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, - message_id=MsgIds.MSG_ID_DD_PRESSURE_SENSOR_FILTER_TEMPERATURE_OVERRIDE_REQUEST.value, - payload=payload) - - self.logger.debug("override pressure temperature") - - # Send message - received_message = self.can_interface.send(message) - - # If there is content... - if received_message is not None: - # response payload is OK or not OK - return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] - else: - self.logger.debug("Timeout!!!!") return False \ No newline at end of file Index: leahi_dialin/dd/modules/temperature_sensors.py =================================================================== diff -u -r68cb68aa6427556aab6e1ff8f4b538690182b17d -r82b297112cb6098c63938b45e1e2b6099f460697 --- leahi_dialin/dd/modules/temperature_sensors.py (.../temperature_sensors.py) (revision 68cb68aa6427556aab6e1ff8f4b538690182b17d) +++ leahi_dialin/dd/modules/temperature_sensors.py (.../temperature_sensors.py) (revision 82b297112cb6098c63938b45e1e2b6099f460697) @@ -19,7 +19,7 @@ from .constants import NO_RESET, RESET from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions -from leahi_dialin.common.dd_defs import COND_SENSOR_INDEX_OFFSET, DDTemperaturesNames +from leahi_dialin.common.dd_defs import COND_SENSOR_INDEX_OFFSET, DDTemperaturesNames, DDPressureNames, DDPressureAttributesEnum 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 @@ -60,6 +60,24 @@ self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_dd_temperature_data, self._handler_temperature_sensors_sync) + if self.can_interface is not None: + channel_id = DenaliChannels.dd_sync_broadcast_ch_id + self.msg_id_dd_pressures_temperature_data = MsgIds.MSG_ID_DD_PRESSURES_DATA.value + self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_dd_pressures_temperature_data, + self._handler_pressure_sensors_temperatures_sync) + + self.dd_pressure_temperatures = { + DDPressureNames.M1_PRES.name: { DDPressureAttributesEnum.TEMP.name: 0.0 }, + DDPressureNames.M3_PRES.name: { DDPressureAttributesEnum.TEMP.name: 0.0 }, + DDPressureNames.D9_PRES.name: { DDPressureAttributesEnum.TEMP.name: 0.0 }, + DDPressureNames.D66_PRES.name: { DDPressureAttributesEnum.TEMP.name: 0.0 }, + DDPressureNames.D51_PRES.name: { DDPressureAttributesEnum.TEMP.name: 0.0 }, + DDPressureNames.D18_PRES.name: { DDPressureAttributesEnum.TEMP.name: 0.0 }, + DDPressureNames.D41_PRES.name: { DDPressureAttributesEnum.TEMP.name: 0.0 } + } + + self.dd_pressure_sensors_temperatures_timestamp = 0.0 + @publish(["msg_id_dd_temperature_data", "dd_temperatures", "dd_temperatures_timestamp"]) def _handler_temperature_sensors_sync(self, message,timestamp=0.0): """ @@ -115,6 +133,31 @@ self.dd_temperatures_timestamp = timestamp + @publish(["msg_id_dd_pressures_temperature_data", "dd_pressure_temperatures", "dd_pressure_sensors_temperatures_timestamp"]) + def _handler_pressure_sensors_temperatures_sync(self, message,timestamp=0.0): + """ + Handles published DD pressure sensors temperature message + + @param message: published DD pressure sensors temperatures data message + @returns none + """ + self.dd_pressure_temperatures[DDPressureNames.M1_PRES.name][DDPressureAttributesEnum.TEMP.name] = struct.unpack( + 'f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8]))[0] + self.dd_pressure_temperatures[DDPressureNames.M3_PRES.name][DDPressureAttributesEnum.TEMP.name] = struct.unpack( + 'f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_9:MsgFieldPositions.END_POS_FIELD_9]))[0] + self.dd_pressure_temperatures[DDPressureNames.D9_PRES.name][DDPressureAttributesEnum.TEMP.name] = struct.unpack( + 'f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_10:MsgFieldPositions.END_POS_FIELD_10]))[0] + self.dd_pressure_temperatures[DDPressureNames.D66_PRES.name][DDPressureAttributesEnum.TEMP.name] = struct.unpack( + 'f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_11:MsgFieldPositions.END_POS_FIELD_11]))[0] + self.dd_pressure_temperatures[DDPressureNames.D51_PRES.name][DDPressureAttributesEnum.TEMP.name] = struct.unpack( + 'f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_12:MsgFieldPositions.END_POS_FIELD_12]))[0] + self.dd_pressure_temperatures[DDPressureNames.D18_PRES.name][DDPressureAttributesEnum.TEMP.name] = struct.unpack( + 'f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_13:MsgFieldPositions.END_POS_FIELD_13]))[0] + self.dd_pressure_temperatures[DDPressureNames.D41_PRES.name][DDPressureAttributesEnum.TEMP.name] = struct.unpack( + 'f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_14:MsgFieldPositions.END_POS_FIELD_14]))[0] + + self.dd_pressure_sensors_temperatures_timestamp = timestamp + def cmd_temperatures_data_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: """ Constructs and sends broadcast time interval. @@ -157,7 +200,7 @@ Must be logged into DD. Given sensor_index must be one of the sensors listed below. - @param sensor_index : (int) Index of the sensor + @param sensor_index : (int) Index of the sensor from DDTemperaturesNames @param sensor_value: (float) Value of the sensor to override @param reset: (int) whether to reset the override value. The default is NO_RESET @returns 1 if successful, zero otherwise @@ -293,4 +336,72 @@ return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: self.logger.error("Timeout!!!!") + return False + + def cmd_pressure_temperature_override(self, sensor: int, temperature: float, reset: int = NO_RESET) -> int: + """ + Constructs and sends the pressure temperature override command. + Constraints: + Must be logged into DD. + + @param sensor: unsigned int - pressure sensor ID from DDPressureNames + @param temperature: float - pressure (in PSI) + @param reset: integer - 1 to reset a previous override, 0 to override + @return: 1 if successful, zero otherwise + """ + + rst = integer_to_bytearray(reset) + tmp = float_to_bytearray(temperature) + idx = integer_to_bytearray(sensor) + payload = rst + tmp + idx + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, + message_id=MsgIds.MSG_ID_DD_PRESSURE_SENSOR_TEMPERATURE_OVERRIDE_REQUEST.value, + payload=payload) + + self.logger.debug("override pressure temperature") + + # Send message + received_message = self.can_interface.send(message) + + # If there is content... + if received_message is not None: + # response payload is OK or not OK + return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + else: + self.logger.debug("Timeout!!!!") + return False + + def cmd_pressure_filtered_temperature_override(self, sensor: int, temperature: float, reset: int = NO_RESET) -> int: + """ + Constructs and sends the filtered temperature override command. + Constraints: + Must be logged into DD. + + @param sensor: unsigned int - pressure sensor ID from DDPressureNames + @param temperature: float - temperature to override the sensor with + @param reset: integer - 1 to reset a previous override, 0 to override + @return: 1 if successful, zero otherwise + """ + + rst = integer_to_bytearray(reset) + tmp = float_to_bytearray(temperature) + idx = integer_to_bytearray(sensor) + payload = rst + tmp + idx + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, + message_id=MsgIds.MSG_ID_DD_PRESSURE_SENSOR_FILTER_TEMPERATURE_OVERRIDE_REQUEST.value, + payload=payload) + + self.logger.debug("override pressure filtered temperature") + + # Send message + received_message = self.can_interface.send(message) + + # If there is content... + if received_message is not None: + # response payload is OK or not OK + return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + else: + self.logger.debug("Timeout!!!!") return False \ No newline at end of file Index: leahi_dialin/fp/modules/flow_sensors.py =================================================================== diff -u -rec8a2600b9e8cf6fe7e02c200a1c24221ca86863 -r82b297112cb6098c63938b45e1e2b6099f460697 --- leahi_dialin/fp/modules/flow_sensors.py (.../flow_sensors.py) (revision ec8a2600b9e8cf6fe7e02c200a1c24221ca86863) +++ leahi_dialin/fp/modules/flow_sensors.py (.../flow_sensors.py) (revision 82b297112cb6098c63938b45e1e2b6099f460697) @@ -49,14 +49,8 @@ self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_fp_flow_data, self._handler_flow_sensor_sync) self.fp_flows = { - FPFlowSensorNames.P7_FLOW.name: { - FPFlowSensorAttributesEnum.FLOW.name: 0.0, - FPFlowSensorAttributesEnum.TEMP.name: 0.0 - }, - FPFlowSensorNames.P16_FLOW.name: { - FPFlowSensorAttributesEnum.FLOW.name: 0.0, - FPFlowSensorAttributesEnum.TEMP.name: 0.0 - } + FPFlowSensorNames.P7_FLOW.name: { FPFlowSensorAttributesEnum.FLOW.name: 0.0 }, + FPFlowSensorNames.P16_FLOW.name: { FPFlowSensorAttributesEnum.FLOW.name: 0.0 } } self.fp_flow_timestamp = 0 @@ -73,10 +67,6 @@ message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] self.fp_flows[FPFlowSensorNames.P16_FLOW.name][FPFlowSensorAttributesEnum.FLOW.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - self.fp_flows[FPFlowSensorNames.P7_FLOW.name][FPFlowSensorAttributesEnum.TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - self.fp_flows[FPFlowSensorNames.P16_FLOW.name][FPFlowSensorAttributesEnum.TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] self.fp_flow_timestamp = timestamp @@ -143,35 +133,6 @@ self.logger.debug("Timeout!!!!") return False - def cmd_flow_temp_override(self, flow_sensor: int, temp: float, reset: int = NO_RESET) -> int: - """ - Constructs and sends flow temp override command. - Must be logged into FP. - - @param flow_sensor: integer - the sensor to override its value - @param temp: float - the temperature value to override - @param reset: integer - 1 to reset a previous override, 0 to override - @returns 1 if successful, zero otherwise - """ - reset_value = integer_to_bytearray(reset) - lvl = integer_to_bytearray(flow_sensor) - sts = float_to_bytearray(temp) - payload = reset_value + sts + lvl - message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_fp_ch_id, - message_id=MsgIds.MSG_ID_FP_FLOW_TEMP_OVERRIDE_REQUEST.value, - payload=payload) - - # Send message - received_message = self.can_interface.send(message) - - # If there is content in message - if received_message is not None: - # Response payload is OK or not - return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] - else: - self.logger.debug("Timeout!!!!") - return False - def cmd_filtered_flow_rate_override(self, flow_sensor: int, rate: float, reset: int = NO_RESET) -> int: """ Constructs and sends filtered flow rate override command. @@ -199,33 +160,4 @@ return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: self.logger.debug("Timeout!!!!") - return False - - def cmd_filtered_flow_temp_override(self, flow_sensor: int, temp: float, reset: int = NO_RESET) -> int: - """ - Constructs and sends filtered flow temp override command. - Must be logged into FP. - - @param flow_sensor: integer - the sensor to override its value - @param temp: float - the temperature value to override - @param reset: integer - 1 to reset a previous override, 0 to override - @returns 1 if successful, zero otherwise - """ - reset_value = integer_to_bytearray(reset) - lvl = integer_to_bytearray(flow_sensor) - sts = float_to_bytearray(temp) - payload = reset_value + sts + lvl - message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_fp_ch_id, - message_id=MsgIds.MSG_ID_FP_FILTERED_FLOW_TEMP_OVERRIDE_REQUEST.value, - payload=payload) - - # Send message - received_message = self.can_interface.send(message) - - # If there is content in message - if received_message is not None: - # Response payload is OK or not - return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] - else: - self.logger.debug("Timeout!!!!") return False \ No newline at end of file Index: leahi_dialin/fp/modules/temperatures.py =================================================================== diff -u -rec8a2600b9e8cf6fe7e02c200a1c24221ca86863 -r82b297112cb6098c63938b45e1e2b6099f460697 --- leahi_dialin/fp/modules/temperatures.py (.../temperatures.py) (revision ec8a2600b9e8cf6fe7e02c200a1c24221ca86863) +++ leahi_dialin/fp/modules/temperatures.py (.../temperatures.py) (revision 82b297112cb6098c63938b45e1e2b6099f460697) @@ -18,7 +18,7 @@ from logging import Logger from .constants import NO_RESET, RESET -from leahi_dialin.common.fp_defs import FPTemperaturesNames +from leahi_dialin.common.fp_defs import FPTemperaturesNames, FPFlowSensorNames, FPFlowSensorAttributesEnum from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions from leahi_dialin.protocols.CAN import DenaliMessage, DenaliChannels from leahi_dialin.utils.base import AbstractSubSystem, publish, DialinEnum @@ -57,6 +57,18 @@ FPTemperaturesNames.P16_TEMP.name: 0.0, } + if self.can_interface is not None: + channel_id = DenaliChannels.fp_sync_broadcast_ch_id + self.msg_id_fp_flow_temperature_data = MsgIds.MSG_ID_FP_FLOW_DATA.value + self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_fp_flow_temperature_data, + self._handler_flow_sensors_temperature_sync) + + self.fp_flow_temperatures_timestamp = 0.0 + self.fp_flow_temperatures = { + FPFlowSensorNames.P7_FLOW.name: { FPFlowSensorAttributesEnum.TEMP.name: 0.0 }, + FPFlowSensorNames.P16_FLOW.name: { FPFlowSensorAttributesEnum.TEMP.name: 0.0 } + } + @publish(["msg_id_fp_temperature_data", "fp_temperatures", "fp_temperatures_timestamp"]) def _handler_temperature_sensors_sync(self, message,timestamp=0.0): """ @@ -106,6 +118,22 @@ self.fp_temperature_sensors_timestamp = timestamp + @publish(["msg_id_fp_flow_temperature_data", "fp_flow_temperatures", "fp_flow_temperatures_timestamp"]) + def _handler_flow_sensors_temperature_sync(self, message, timestamp=0.0): + """ + Handles published FP flow sensors temperature message + + @param message: published FP flow sensors temperature data message + @returns none + """ + + self.fp_flow_temperatures[FPFlowSensorNames.P7_FLOW.name][FPFlowSensorAttributesEnum.TEMP.name] = struct.unpack( + 'f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] + self.fp_flow_temperatures[FPFlowSensorNames.P16_FLOW.name][FPFlowSensorAttributesEnum.TEMP.name] = struct.unpack( + 'f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] + + self.fp_flow_temperatures_timestamp = timestamp + def cmd_temperatures_data_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: """ Constructs and sends broadcast time interval. @@ -148,7 +176,7 @@ Must be logged into FP. Given sensor_index must be one of the sensors listed below. - @param sensor_index : (int) Index of the sensor + @param sensor_index : (int) Index of the sensor from FPTemperaturesNames @param sensor_value: (float) Value of the sensor to override @param reset: (int) whether to reset the override value. The default is NO_RESET @returns 1 if successful, zero otherwise @@ -159,17 +187,19 @@ index = integer_to_bytearray(sensor_index) payload = rst + value + index + # FP Conductivity Sensors Temperature override if sensor_index <= FPTemperaturesNames.P19_TEMP.value: message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_fp_ch_id, message_id=MsgIds.MSG_ID_FP_CONDUCTIVITY_TEMP_OVERRIDE_REQUEST.value, payload=payload) + # FP Flow Sensors Temperature override elif FPTemperaturesNames.P7_TEMP.value <= sensor_index < FPTemperaturesNames.NUM_OF_TEMPERATURE_SENSORS.value: message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_fp_ch_id, message_id=MsgIds.MSG_ID_FP_FLOW_TEMP_OVERRIDE_REQUEST.value, payload=payload) - - else: # the remaining sensors are sent to the pressure temp override + # FP Pressure Sensors Temperature override + else: message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_fp_ch_id, message_id=MsgIds.MSG_ID_FP_PRESSURE_TEMP_OVERRIDE_REQUEST.value, payload=payload) @@ -185,4 +215,33 @@ return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: self.logger.debug("Timeout!!!!") + return False + + def cmd_filtered_flow_temp_override(self, flow_sensor: int, temp: float, reset: int = NO_RESET) -> int: + """ + Constructs and sends filtered flow temp override command. + Must be logged into FP. + + @param flow_sensor: integer - the sensor to override its value from FPFlowSensorNames + @param temp: float - the temperature value to override + @param reset: integer - 1 to reset a previous override, 0 to override + @returns 1 if successful, zero otherwise + """ + reset_value = integer_to_bytearray(reset) + lvl = integer_to_bytearray(flow_sensor) + sts = float_to_bytearray(temp) + payload = reset_value + sts + lvl + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_fp_ch_id, + message_id=MsgIds.MSG_ID_FP_FILTERED_FLOW_TEMP_OVERRIDE_REQUEST.value, + payload=payload) + + # Send message + received_message = self.can_interface.send(message) + + # If there is content in message + if received_message is not None: + # Response payload is OK or not + return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + else: + self.logger.debug("Timeout!!!!") return False \ No newline at end of file