Index: leahi_dialin/common/dd_defs.py =================================================================== diff -u -r6e0b0571d3f4064c8d7bb2b737e326c460780759 -rd2697fb12fc381fed6e7fb0820ec6486513243f6 --- leahi_dialin/common/dd_defs.py (.../dd_defs.py) (revision 6e0b0571d3f4064c8d7bb2b737e326c460780759) +++ leahi_dialin/common/dd_defs.py (.../dd_defs.py) (revision d2697fb12fc381fed6e7fb0820ec6486513243f6) @@ -190,7 +190,8 @@ D29_COND = 2 # Water, Bicarbonate, and Acid Collective Conductivity Sensor D43_COND = 3 # Self Test Conductivity Sensor (not used for dialysate conductivity) D74_COND = 4 # Water and Bicarbonate Collective Conductivity Sensor - NUM_OF_CONDUCTIVITY_SENSORS = 5 # Number of Conductivity Sensors + D98_COND = 5 # D98 Conductivity Sensor + NUM_OF_CONDUCTIVITY_SENSORS = 6 # Number of Conductivity Sensors @unique class DDDialysatePumpsEnum(DialinEnum): @@ -288,7 +289,8 @@ D51_PRES = 2 # Spent Dialysate pressure (PDs) D18_PRES = 3 # Fresh Dialysate pressure (PDf) D41_PRES = 4 # Transmembrane pressure (Ptm) - NUM_OF_PRESSURE_SENSORS = 5 # Number of pressure sensors + D87_PRES = 5 # D87 Pressure sensor + NUM_OF_PRESSURE_SENSORS = 6 # Number of pressure sensors COND_SENSOR_INDEX_OFFSET = 6 # Conductivity Sensor Index Offset for the Temperature Readings PRES_SENSOR_INDEX_OFFSET = 15 # Pressure Sensors Offset for Temperature Readings @@ -304,21 +306,24 @@ D4_TEMP = 2 # Hydraulics primary heater temperature sensor D50_TEMP = 3 # Trimmer heater temperature sensor BRD_TEMP = 4 # Barometric temperature sensor - D16_TEMP = 5 # D16 Conductivity sensor temperature value - D28_TEMP = 6 # D28 Conductivity sensor temperature value - D30_TEMP = 7 # D30 Conductivity sensor temperature value - D44_TEMP = 8 # D44 Conductivity sensor temperature value - D75_TEMP = 9 # D75 Conductivity sensor temperature value - D4_AVG_TEMP = 10 # D4 Filtered value - D50_AVG_TEMP = 11 # D50 Filtered value - D28_AVG_TEMP = 12 # D28 Filtered value - D30_AVG_TEMP = 13 # D30 Filtered value - D9_TEMP = 14 # D9 Pressure sensor temperature value - D66_TEMP = 15 # D66 Pressure sensor temperature value - D51_TEMP = 16 # D51 Pressure sensor temperature value - D18_TEMP = 17 # D18 Pressure sensor temperature value - D41_TEMP = 18 # D41 Pressure sensor temperature value - NUM_OF_TEMP_SENSORS = 19 # Number of Temperature Sensors + D16_TEMP = 5 # D16(D17) Conductivity sensor temperature value + D28_TEMP = 6 # D28(D27) Conductivity sensor temperature value + D30_TEMP = 7 # D30(D29) Conductivity sensor temperature value + D44_TEMP = 8 # D44(D43) Conductivity sensor temperature value + D75_TEMP = 9 # D75(D74) Conductivity sensor temperature value + D99_TEMP = 10 # D99(D98) Conductivity sensor temperature value + D4_AVG_TEMP = 11 # D4 Filtered value + D50_AVG_TEMP = 12 # D50 Filtered value + D28_AVG_TEMP = 13 # D28 Filtered value + D30_AVG_TEMP = 14 # D30 Filtered value + D99_AVG_TEMP = 15 # D99 Filtered value + D9_TEMP = 16 # D9 Pressure sensor temperature value + D66_TEMP = 17 # D66 Pressure sensor temperature value + D51_TEMP = 18 # D51 Pressure sensor temperature value + D18_TEMP = 19 # D18 Pressure sensor temperature value + D41_TEMP = 20 # D41 Pressure sensor temperature value + D87_TEMP = 21 # D87 Pressure sensor temperature value + NUM_OF_TEMP_SENSORS = 22 # Number of Temperature Sensors @unique class DDValveStates(DialinEnum): @@ -342,23 +347,23 @@ D3_VALV = 12 # Valve Hydraulics Inlet (D3) D80_VALV = 13 # Valve Dry Bicarb (D80) D81_VALV = 14 # Valve De-scaler (D81) - RSRVD_SPACE1 = 15 # This space has been reserved - D23_VALV = 16 # Balancing chamber Valve 1 (D23) - D19_VALV = 17 # Balancing chamber Valve 2 (D19) - D25_VALV = 18 # Balancing chamber Valve 3 (D25) - D21_VALV = 19 # Balancing chamber Valve 4 (D21) - D24_VALV = 20 # Balancing chamber Valve 5 (D24) - D20_VALV = 21 # Balancing chamber Valve 6 (D20) - D26_VALV = 22 # Balancing chamber Valve 7 (D26) - D22_VALV = 23 # Balancing chamber Valve 8 (D22) - D79_PMP_VALV = 24 # D79 pump mapped to spare valve 0 - SPARE1_VALV = 25 # Spare Valve 1 - SPARE2_VALV = 26 # Spare Valve 2 - SPARE3_VALV = 27 # Spare Valve 3 - SPARE4_VALV = 28 # Spare Valve 4 - SPARE5_VALV = 29 # Spare Valve 5 - SPARE6_VALV = 30 # Spare Valve 6 - SPARE7_VALV = 31 # Spare Valve 7 + D83_VALV = 15 # Valve De-scaler (D83) + D88_VALV = 16 # Valve De-scaler (D88) + D91_VALV = 17 # Valve De-scaler (D91) + D95_VALV = 18 # Valve De-scaler (D95) + D100_VALV = 19 # Valve De-scaler (D100) + RSRVD_SPACE1 = 20 # This space has been reserved + D23_VALV = 21 # Balancing chamber Valve 1 (D23) + D19_VALV = 22 # Balancing chamber Valve 2 (D19) + D25_VALV = 23 # Balancing chamber Valve 3 (D25) + D21_VALV = 24 # Balancing chamber Valve 4 (D21) + D24_VALV = 25 # Balancing chamber Valve 5 (D24) + D20_VALV = 26 # Balancing chamber Valve 6 (D20) + D26_VALV = 27 # Balancing chamber Valve 7 (D26) + D22_VALV = 28 # Balancing chamber Valve 8 (D22) + D79_PMP_VALV = 29 # D79 pump mapped to spare valve 0 + SPARE1_VALV = 30 # Spare Valve 1 + SPARE2_VALV = 31 # Spare Valve 2 NUM_OF_DD_VALVES = 32 # Number of Valves for the DD @unique Index: leahi_dialin/dd/modules/conductivity_sensors.py =================================================================== diff -u -r7c0309a22098e7c4b0ef1599fc737f6f8929b9ac -rd2697fb12fc381fed6e7fb0820ec6486513243f6 --- leahi_dialin/dd/modules/conductivity_sensors.py (.../conductivity_sensors.py) (revision 7c0309a22098e7c4b0ef1599fc737f6f8929b9ac) +++ leahi_dialin/dd/modules/conductivity_sensors.py (.../conductivity_sensors.py) (revision d2697fb12fc381fed6e7fb0820ec6486513243f6) @@ -13,16 +13,16 @@ # @date (original) 20-Jul-2020 # ############################################################################ + import struct from logging import Logger -from enum import unique -from .constants import RESET, NO_RESET +from leahi_dialin.common.constants import RESET, NO_RESET from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions from leahi_dialin.common.dd_defs import DDConductivitySensorsEnum +from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override 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.base import AbstractSubSystem, publish from leahi_dialin.utils.conversions import integer_to_bytearray, float_to_bytearray @@ -54,7 +54,8 @@ DDConductivitySensorsEnum.D27_COND.name: 0.0, DDConductivitySensorsEnum.D29_COND.name: 0.0, DDConductivitySensorsEnum.D43_COND.name: 0.0, - DDConductivitySensorsEnum.D74_COND.name: 0.0 + DDConductivitySensorsEnum.D74_COND.name: 0.0, + DDConductivitySensorsEnum.D98_COND.name: 0.0 } self.dd_conductivity_timestamp = 0.0 @@ -84,6 +85,9 @@ self.dd_conductivity[DDConductivitySensorsEnum.D74_COND.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] + self.dd_conductivity[DDConductivitySensorsEnum.D98_COND.name] = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6]))[0] + self.dd_conductivity_timestamp = timestamp def cmd_conductivity_sensor_data_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: @@ -98,36 +102,15 @@ @return: 1 if successful, zero otherwise """ - if not check_broadcast_interval_override_ms(ms): - return False + cmd_generic_broadcast_interval_override( + ms = ms, + reset = reset, + channel_id = DenaliChannels.dialin_to_dd_ch_id, + msg_id = MsgIds.MSG_ID_DD_CONDUCTIVITY_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, + module_name = 'DD conductivity sensors', + logger = self.logger, + can_interface = self.can_interface) - reset_byte_array = integer_to_bytearray(reset) - ms_byte_array = integer_to_bytearray(ms) - payload = reset_byte_array + ms_byte_array - - message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, - message_id=MsgIds.MSG_ID_DD_CONDUCTIVITY_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST.value, - payload=payload) - - self.logger.debug("override DD conductivity sensor broadcast interval") - - # Send message - received_message = self.can_interface.send(message) - - # If there is content... - if received_message is not None: - if reset == RESET: - str_res = "reset back to normal: " - else: - str_res = str(ms) + " ms: " - self.logger.debug("Conductivity sensor data broadcast interval overridden to " + str_res + - str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) - # response payload is OK or not OK - return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] - else: - self.logger.error("Timeout!!!!") - return False - 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 Index: leahi_dialin/dd/modules/levels.py =================================================================== diff -u -r56cd024ca23456ab0ae5f6acd30cb4cde02beb4a -rd2697fb12fc381fed6e7fb0820ec6486513243f6 --- leahi_dialin/dd/modules/levels.py (.../levels.py) (revision 56cd024ca23456ab0ae5f6acd30cb4cde02beb4a) +++ leahi_dialin/dd/modules/levels.py (.../levels.py) (revision d2697fb12fc381fed6e7fb0820ec6486513243f6) @@ -15,16 +15,16 @@ ############################################################################ import struct -from enum import unique from logging import Logger -from .constants import NO_RESET +from leahi_dialin.common.constants import NO_RESET from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions -from leahi_dialin.common.dd_defs import DDLevelSensorEnum +from leahi_dialin.common.dd_defs import DDConductivitySensorsEnum, DDLevelSensorEnum +from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override +from leahi_dialin.dd.modules.conductivity_sensors import DDConductivitySensors 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 +from leahi_dialin.utils.base import AbstractSubSystem, publish +from leahi_dialin.utils.conversions import integer_to_bytearray class DDLevels(AbstractSubSystem): @@ -86,29 +86,15 @@ @param reset: (int) 1 to reset a previous override, 0 to override @returns 1 if successful, zero otherwise """ - if not check_broadcast_interval_override_ms(ms): - return False - - reset_value = integer_to_bytearray(reset) - interval_value = integer_to_bytearray(ms) - payload = reset_value + interval_value - - message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, - message_id=MsgIds.MSG_ID_DD_LEVELS_PUBLISH_INTERVAL_OVERRIDE_REQUEST.value, - payload=payload) - - self.logger.debug("Sending {} ms publish interval to the Levels module".format(ms)) - # 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 - + cmd_generic_broadcast_interval_override( + ms = ms, + reset = reset, + channel_id = DenaliChannels.dialin_to_dd_ch_id, + msg_id = MsgIds.MSG_ID_DD_LEVELS_PUBLISH_INTERVAL_OVERRIDE_REQUEST, + module_name = 'DD level sensors', + logger = self.logger, + can_interface = self.can_interface) + def cmd_level_status_override(self, level_sensor: int, status: int, reset: int = NO_RESET) -> int: """ Constructs and sends level status cycle override command @@ -136,3 +122,13 @@ else: self.logger.debug("Timeout!!!!") return False + + def get_level_sensor_values(self): + """ + Docstring for get_level_sensor_values + """ + + D64_sensor_value = self.dd_level_sensors[DDLevelSensorEnum.D63_LEVEL.name] + D98_sensor_value = DDConductivitySensors(self.can_interface, self.logger).dd_conductivity[DDConductivitySensorsEnum.D98_COND.name] + + return { 'D64': D64_sensor_value, 'D98': D98_sensor_value } Index: leahi_dialin/dd/modules/pressure_sensors.py =================================================================== diff -u -r35e8d930cb1a45457de87d93728fe60c7cb10ab5 -rd2697fb12fc381fed6e7fb0820ec6486513243f6 --- leahi_dialin/dd/modules/pressure_sensors.py (.../pressure_sensors.py) (revision 35e8d930cb1a45457de87d93728fe60c7cb10ab5) +++ leahi_dialin/dd/modules/pressure_sensors.py (.../pressure_sensors.py) (revision d2697fb12fc381fed6e7fb0820ec6486513243f6) @@ -13,16 +13,16 @@ # @date (original) 14-Apr-2020 # ############################################################################ + import struct -from enum import unique from logging import Logger -from .constants import NO_RESET, RESET +from leahi_dialin.common.constants import NO_RESET, RESET from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions from leahi_dialin.common.dd_defs import DDPressureNames +from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override 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.base import AbstractSubSystem, publish from leahi_dialin.utils.conversions import integer_to_bytearray, float_to_bytearray @@ -53,7 +53,8 @@ DDPressureNames.D66_PRES.name: 0.0, DDPressureNames.D51_PRES.name: 0.0, DDPressureNames.D18_PRES.name: 0.0, - DDPressureNames.D41_PRES.name: 0.0 + DDPressureNames.D41_PRES.name: 0.0, + DDPressureNames.D87_PRES.name: 0.0 } self.dd_pressures_timestamp = 0 @@ -77,6 +78,8 @@ message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] self.dd_pressures[DDPressureNames.D41_PRES.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] + self.dd_pressures[DDPressureNames.D87_PRES.name] = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6]))[0] self.dd_pressures_timestamp = timestamp @@ -93,30 +96,15 @@ """ - if not check_broadcast_interval_override_ms(ms): - return False + cmd_generic_broadcast_interval_override( + ms = ms, + reset = reset, + channel_id = DenaliChannels.dialin_to_dd_ch_id, + msg_id = MsgIds.MSG_ID_DD_PRESSURE_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, + module_name = 'DD pressure sensors', + logger = self.logger, + can_interface = self.can_interface) - rst = integer_to_bytearray(reset) - ivl = integer_to_bytearray(ms) - payload = rst + ivl - - message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, - message_id=MsgIds.MSG_ID_DD_PRESSURE_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST.value, - payload=payload) - - self.logger.debug("override pressure data broadcast interval") - - # 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_readings_override(self, sensor: int, pressure: float, reset: int = NO_RESET) -> int: """ Constructs and sends the pressure readings override command. Index: leahi_dialin/dd/modules/temperature_sensors.py =================================================================== diff -u -r6e0b0571d3f4064c8d7bb2b737e326c460780759 -rd2697fb12fc381fed6e7fb0820ec6486513243f6 --- leahi_dialin/dd/modules/temperature_sensors.py (.../temperature_sensors.py) (revision 6e0b0571d3f4064c8d7bb2b737e326c460780759) +++ leahi_dialin/dd/modules/temperature_sensors.py (.../temperature_sensors.py) (revision d2697fb12fc381fed6e7fb0820ec6486513243f6) @@ -14,15 +14,14 @@ # ############################################################################ import struct -from enum import unique from logging import Logger -from .constants import NO_RESET, RESET +from leahi_dialin.common.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, PRES_SENSOR_INDEX_OFFSET, DDTemperaturesNames +from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override 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.base import AbstractSubSystem, publish from leahi_dialin.utils.conversions import integer_to_bytearray, float_to_bytearray @@ -56,7 +55,10 @@ DDTemperaturesNames.D66_TEMP.name: 0.0, DDTemperaturesNames.D51_TEMP.name: 0.0, DDTemperaturesNames.D18_TEMP.name: 0.0, - DDTemperaturesNames.D41_TEMP.name: 0.0 + DDTemperaturesNames.D41_TEMP.name: 0.0, + DDTemperaturesNames.D87_TEMP.name: 0.0, + DDTemperaturesNames.D99_TEMP.name: 0.0, + DDTemperaturesNames.D99_AVG_TEMP.name: 0.0 } if self.can_interface is not None: @@ -103,33 +105,43 @@ self.dd_temperatures[DDTemperaturesNames.D75_TEMP.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_10:MsgFieldPositions.END_POS_FIELD_10]))[0] - self.dd_temperatures[DDTemperaturesNames.D4_AVG_TEMP.name] = struct.unpack('f', bytearray( + self.dd_temperatures[DDTemperaturesNames.D99_TEMP.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_11:MsgFieldPositions.END_POS_FIELD_11]))[0] - self.dd_temperatures[DDTemperaturesNames.D50_AVG_TEMP.name] = struct.unpack('f', bytearray( + self.dd_temperatures[DDTemperaturesNames.D4_AVG_TEMP.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_12:MsgFieldPositions.END_POS_FIELD_12]))[0] - self.dd_temperatures[DDTemperaturesNames.D28_AVG_TEMP.name] = struct.unpack('f', bytearray( + self.dd_temperatures[DDTemperaturesNames.D50_AVG_TEMP.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_13:MsgFieldPositions.END_POS_FIELD_13]))[0] - self.dd_temperatures[DDTemperaturesNames.D30_AVG_TEMP.name] = struct.unpack('f', bytearray( + self.dd_temperatures[DDTemperaturesNames.D28_AVG_TEMP.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_14:MsgFieldPositions.END_POS_FIELD_14]))[0] - self.dd_temperatures[DDTemperaturesNames.D9_TEMP.name] = struct.unpack('f', bytearray( + self.dd_temperatures[DDTemperaturesNames.D30_AVG_TEMP.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_15:MsgFieldPositions.END_POS_FIELD_15]))[0] - self.dd_temperatures[DDTemperaturesNames.D66_TEMP.name] = struct.unpack('f', bytearray( + self.dd_temperatures[DDTemperaturesNames.D99_AVG_TEMP.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_16:MsgFieldPositions.END_POS_FIELD_16]))[0] - self.dd_temperatures[DDTemperaturesNames.D51_TEMP.name] = struct.unpack('f', bytearray( + self.dd_temperatures[DDTemperaturesNames.D9_TEMP.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_17:MsgFieldPositions.END_POS_FIELD_17]))[0] - self.dd_temperatures[DDTemperaturesNames.D18_TEMP.name] = struct.unpack('f', bytearray( + self.dd_temperatures[DDTemperaturesNames.D66_TEMP.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_18:MsgFieldPositions.END_POS_FIELD_18]))[0] + self.dd_temperatures[DDTemperaturesNames.D51_TEMP.name] = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_19:MsgFieldPositions.END_POS_FIELD_17]))[0] + + self.dd_temperatures[DDTemperaturesNames.D18_TEMP.name] = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_20:MsgFieldPositions.END_POS_FIELD_20]))[0] + self.dd_temperatures[DDTemperaturesNames.D41_TEMP.name] = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_19:MsgFieldPositions.END_POS_FIELD_19]))[0] + message['message'][MsgFieldPositions.START_POS_FIELD_21:MsgFieldPositions.END_POS_FIELD_21]))[0] + self.dd_temperatures[DDTemperaturesNames.D87_TEMP.name] = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_22:MsgFieldPositions.END_POS_FIELD_22]))[0] + + self.dd_temperatures_timestamp = timestamp def cmd_temperatures_data_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: @@ -143,30 +155,16 @@ @param reset: (int) 1 to reset a previous override, 0 to override @returns 1 if successful, zero otherwise """ - if not check_broadcast_interval_override_ms(ms): - return False + cmd_generic_broadcast_interval_override( + ms = ms, + reset = reset, + channel_id = DenaliChannels.dialin_to_dd_ch_id, + msg_id = MsgIds.MSG_ID_DD_TEMPERATURE_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, + module_name = 'DD temperature sensors', + logger = self.logger, + can_interface = self.can_interface) - reset_value = integer_to_bytearray(reset) - interval_value = integer_to_bytearray(ms) - payload = reset_value + interval_value - message = DenaliMessage.build_message( - channel_id=DenaliChannels.dialin_to_dd_ch_id, - message_id=MsgIds.MSG_ID_DD_TEMPERATURE_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST.value, - payload=payload) - - self.logger.debug("Sending {} ms publish interval to the Temperature Sensors module".format(ms)) - # 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_temperatures_value_override(self, sensor_index: int, sensor_value: float, reset: int = NO_RESET) -> int: """ Constructs and sends the value override of a temperature sensor. @@ -184,7 +182,7 @@ value = float_to_bytearray(sensor_value) # DD Conductivity Sensors' Temperature Reading Override - if DDTemperaturesNames.D16_TEMP.value <= sensor_index <= DDTemperaturesNames.D75_TEMP.value: + if DDTemperaturesNames.D16_TEMP.value <= sensor_index <= DDTemperaturesNames.D99_TEMP.value: index = integer_to_bytearray((sensor_index - COND_SENSOR_INDEX_OFFSET)) payload = rst + value + index message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, Index: leahi_dialin/dd/modules/valves.py =================================================================== diff -u -rfa63b92d3d3a3f2870833583bff12729e180e2d1 -rd2697fb12fc381fed6e7fb0820ec6486513243f6 --- leahi_dialin/dd/modules/valves.py (.../valves.py) (revision fa63b92d3d3a3f2870833583bff12729e180e2d1) +++ leahi_dialin/dd/modules/valves.py (.../valves.py) (revision d2697fb12fc381fed6e7fb0820ec6486513243f6) @@ -15,16 +15,15 @@ ############################################################################ import struct -from enum import unique from logging import Logger from collections import OrderedDict -from .constants import NO_RESET +from leahi_dialin.common.constants import NO_RESET from leahi_dialin.common.msg_defs import MsgIds -from leahi_dialin.common.dd_defs import DDValveStates, DDValveNames +from leahi_dialin.common.dd_defs import DDValveNames +from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override 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.base import AbstractSubSystem, publish from leahi_dialin.utils.conversions import integer_to_bytearray # Valve states @@ -80,6 +79,11 @@ self.d3_valv = {"id": DDValveNames.D3_VALV.value, "state": DEENERGIZED} self.d80_valv = {"id": DDValveNames.D80_VALV.value, "state": DEENERGIZED} self.d81_valv = {"id": DDValveNames.D81_VALV.value, "state": DEENERGIZED} + self.d83_valv = {"id": DDValveNames.D83_VALV.value, "state": DEENERGIZED} + self.d88_valv = {"id": DDValveNames.D88_VALV.value, "state": DEENERGIZED} + self.d91_valv = {"id": DDValveNames.D91_VALV.value, "state": DEENERGIZED} + self.d95_valv = {"id": DDValveNames.D95_VALV.value, "state": DEENERGIZED} + self.d100_valv = {"id": DDValveNames.D100_VALV.value, "state": DEENERGIZED} self.rsvrd1 = {"id": DDValveNames.RSRVD_SPACE1.value, "state": DEENERGIZED} self.d23_valv = {"id": DDValveNames.D23_VALV.value, "state": DEENERGIZED} @@ -129,6 +133,11 @@ self.d3_valv.get("state", None), self.d80_valv.get("state", None), self.d81_valv.get("state", None), + self.d83_valv.get("state", None), + self.d88_valv.get("state", None), + self.d91_valv.get("state", None), + self.d95_valv.get("state", None), + self.d100_valv.get("state", None), self.rsvrd1.get("state", None), self.d23_valv.get("state", None), @@ -142,12 +151,7 @@ self.d79_pmp_valv.get("state", None), self.spare1_valv.get("state", None), - self.spare2_valv.get("state", None), - self.spare3_valv.get("state", None), - self.spare4_valv.get("state", None), - self.spare5_valv.get("state", None), - self.spare6_valv.get("state", None), - self.spare7_valv.get("state", None) + self.spare2_valv.get("state", None) ] @staticmethod @@ -197,6 +201,11 @@ "d3_valv", "d80_valv", "d81_valv", + "D83_valv", + "D88_valv", + "D91_valv", + "D95_valv", + "D100_valv", "rsvrd1", "d23_valv", "d19_valv", @@ -209,11 +218,6 @@ "d79_pmp_valv", "spare1_valv", "spare2_valv", - "spare3_valv", - "spare4_valv", - "spare5_valv", - "spare6_valv", - "spare7_valv", "valve_states_enum", "valves_sensed_states", "dd_valves_states_timestamp" @@ -259,14 +263,14 @@ self.d22_valv["state"] = self._binary_to_valve_state(bcv[0] & 128) spv = struct.unpack('B', bytearray(message['message'][self.START_POS_SPARE_VALVES_STATES:self.END_POS_SPARE_VALVES_STATES])) - self.d79_pmp_valv["state"] = self._binary_to_valve_state(bcv[0] & 1) - self.spare1_valv["state"] = self._binary_to_valve_state(bcv[0] & 2) - self.spare2_valv["state"] = self._binary_to_valve_state(bcv[0] & 4) - self.spare3_valv["state"] = self._binary_to_valve_state(bcv[0] & 8) - self.spare4_valv["state"] = self._binary_to_valve_state(bcv[0] & 16) - self.spare5_valv["state"] = self._binary_to_valve_state(bcv[0] & 32) - self.spare6_valv["state"] = self._binary_to_valve_state(bcv[0] & 64) - self.spare7_valv["state"] = self._binary_to_valve_state(bcv[0] & 128) + self.d79_pmp_valv["state"] = self._binary_to_valve_state(spv[0] & 1) + self.d83_valv["state"] = self._binary_to_valve_state(spv[0] & 2) + self.d88_valv["state"] = self._binary_to_valve_state(spv[0] & 4) + self.d91_valv["state"] = self._binary_to_valve_state(spv[0] & 8) + self.d95_valv["state"] = self._binary_to_valve_state(spv[0] & 16) + self.d100_valv["state"] = self._binary_to_valve_state(spv[0] & 32) + self.spare1_valv["state"] = self._binary_to_valve_state(spv[0] & 64) + self.spare2_valv["state"] = self._binary_to_valve_state(spv[0] & 128) start = self.END_POS_SPARE_VALVES_STATES end = start + 1 @@ -416,31 +420,15 @@ """ - if not check_broadcast_interval_override_ms(ms): - return False + cmd_generic_broadcast_interval_override( + ms = ms, + reset = reset, + channel_id = DenaliChannels.dialin_to_dd_ch_id, + msg_id = MsgIds.MSG_ID_DD_VALVE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, + module_name = 'DD valve', + logger = self.logger, + can_interface = self.can_interface) - rst = integer_to_bytearray(reset) - ivl = integer_to_bytearray(ms) - payload = rst + ivl - - message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, - message_id=MsgIds.MSG_ID_DD_VALVE_PUBLISH_INTERVAL_OVERRIDE_REQUEST.value, - payload=payload) - - self.logger.debug("override valves states publish interval") - - # 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_valve_set_open_close(self, valve: int, state: int) -> int: """ Constructs and sends the valve open close command @@ -472,4 +460,4 @@ return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: self.logger.error("Timeout!!!!") - return False \ No newline at end of file + return False