Index: dialin/dg/conductivity_sensors.py =================================================================== diff -u -rd4c07268dfcb79727bf9516db309944635895a0b -rc9b3a20bb95ffeeb4f42989456557f4a537be236 --- dialin/dg/conductivity_sensors.py (.../conductivity_sensors.py) (revision d4c07268dfcb79727bf9516db309944635895a0b) +++ dialin/dg/conductivity_sensors.py (.../conductivity_sensors.py) (revision c9b3a20bb95ffeeb4f42989456557f4a537be236) @@ -29,13 +29,18 @@ Dialysate Generator (DG) Dialin API sub-class for conductivity sensors related commands. """ + # Data message ID + MSG_ID_DG_CONDUCTIVITY_DATA = 0x0031 + # Override message IDs - MSG_ID_DG_CONDUCTIVITY_SENSORS_DATA = 0x0031 - MSG_ID_DG_CONDUCTIVITY_SENSORS_OVERRIDE = 0xA015 - MSG_ID_DG_CONDUCTIVITY_SENSORS_DATA_BROADCAST_INTERVAL_OVERRIDE = 0xA016 + MSG_ID_CONDUCTIVITY_OVERRIDE = 0xA015 + MSG_ID_CONDUCTIVITY_PUBLISH_INTERVAL_OVERRIDE = 0xA016 + MSG_ID_RO_REJECTION_RATIO_OVERRIDE = 0xA022 # Conductivity sensor broadcast message field positions - START_POS_CS_CPI = DenaliMessage.PAYLOAD_START_INDEX + START_POS_RO_REJECTION_RATIO = DenaliMessage.PAYLOAD_START_INDEX + END_POS_RO_REJECTION_RATIO = START_POS_RO_REJECTION_RATIO + 4 + START_POS_CS_CPI = END_POS_RO_REJECTION_RATIO END_POS_CS_CPI = START_POS_CS_CPI + 4 START_POS_CS_CPO = END_POS_CS_CPI END_POS_CS_CPO = START_POS_CS_CPO + 4 @@ -52,10 +57,11 @@ if self.can_interface is not None: channel_id = DenaliChannels.dg_sync_broadcast_ch_id - msg_id = self.MSG_ID_DG_CONDUCTIVITY_SENSORS_DATA + msg_id = self.MSG_ID_DG_CONDUCTIVITY_DATA self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_conductivity_sensors_sync) + self.ro_rejection_ratio = 0.0 self.conductivity_sensor_cpi = 0.0 self.conductivity_sensor_cpo = 0.0 @@ -67,7 +73,15 @@ """ return [self.conductivity_sensor_cpi, self.conductivity_sensor_cpo] - @_publish(["conductivity_sensor_cpi", "conductivity_sensor_cpo"]) + def get_RO_rejection_ratio(self): + """ + Gets the current RO rejection ratio value + + @return: ro_rejection_ratio + """ + return self.ro_rejection_ratio + + @_publish(["ro_rejection_ratio", "conductivity_sensor_cpi", "conductivity_sensor_cpo"]) def _handler_conductivity_sensors_sync(self, message): """ Handles published conductivity sensor data messages. Conductivity sensor data are captured @@ -77,9 +91,11 @@ @return: None """ + ro_rejection_ratio = struct.unpack('f', bytearray(message['message'][self.START_POS_RO_REJECTION_RATIO:self.END_POS_RO_REJECTION_RATIO])) cpi = struct.unpack('f', bytearray(message['message'][self.START_POS_CS_CPI:self.END_POS_CS_CPI])) cpo = struct.unpack('f', bytearray(message['message'][self.START_POS_CS_CPO:self.END_POS_CS_CPO])) + self.ro_rejection_ratio = ro_rejection_ratio[0] self.conductivity_sensor_cpi = cpi[0] self.conductivity_sensor_cpo = cpo[0] @@ -97,13 +113,13 @@ 1 = CPO \n """ - rst = integer_to_bytearray(reset) - cond = float_to_bytearray(conductivity) - idx = integer_to_bytearray(sensor) - payload = rst + cond + idx + reset_byte_array = integer_to_bytearray(reset) + cond_byte_array = float_to_bytearray(conductivity) + sensor_byte_array = integer_to_bytearray(sensor) + payload = reset_byte_array + cond_byte_array + sensor_byte_array message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_DG_CONDUCTIVITY_SENSORS_OVERRIDE, + message_id=self.MSG_ID_CONDUCTIVITY_OVERRIDE, payload=payload) if reset == RESET: @@ -132,12 +148,12 @@ @return: 1 if successful, zero otherwise """ - rst = integer_to_bytearray(reset) - mis = integer_to_bytearray(ms) - payload = rst + mis + 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_dg_ch_id, - message_id=self.MSG_ID_DG_CONDUCTIVITY_SENSORS_DATA_BROADCAST_INTERVAL_OVERRIDE, + message_id=self.MSG_ID_CONDUCTIVITY_PUBLISH_INTERVAL_OVERRIDE, payload=payload) self.logger.debug("override DG conductivity sensor broadcast interval") @@ -158,3 +174,40 @@ else: self.logger.error("Timeout!!!!") return False + + def cmd_ro_rejection_ratio_override(self, ratio, reset=NO_RESET): + """ + Constructs and sends the RO rejection ratio override command + + @param ratio: float - RO rejection ratio to override with + @param reset: integer - 1 to reset a previous override, 0 to override + @return: 1 if successful, zero otherwise + """ + + reset_byte_array = integer_to_bytearray(reset) + ratio_byte_array = float_to_bytearray(ratio) + payload = reset_byte_array + ratio_byte_array + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, + message_id=self.MSG_ID_RO_REJECTION_RATIO_OVERRIDE, + payload=payload) + + self.logger.debug("override DG RO rejection ratio") + + # 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(ratio) + " : " + self.logger.debug("RO rejection ratio 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 +