Index: dialin/dg/heaters.py =================================================================== diff -u -refdf22298708b66820df4084023381f8409634bc -r414ee5c06661993d4e847b7a61067c1718340cbf --- dialin/dg/heaters.py (.../heaters.py) (revision efdf22298708b66820df4084023381f8409634bc) +++ dialin/dg/heaters.py (.../heaters.py) (revision 414ee5c06661993d4e847b7a61067c1718340cbf) @@ -20,8 +20,9 @@ from ..utils.conversions import float_to_bytearray from .constants import NO_RESET from ..protocols.CAN import (DenaliMessage, DenaliChannels) +from ..utils.base import _AbstractSubSystem, _publish -class Heaters: +class Heaters(_AbstractSubSystem): MSG_ID_DG_HEATERS_DATA = 0x2C MSG_ID_START_STOP_PRIMARY_HEATER = 0xA011 @@ -38,39 +39,42 @@ def __init__(self, can_interface=None): + super().__init__() + self.can_interface = can_interface - self.mainPrimaryHeaterPWM = 0 - self.smallPrimaryHeaterPWM = 0 - self.trimmerHeaterPWM = 0 + self.main_primary_heater_pwm = 0 + self.small_primary_heater_pwm = 0 + self.trimmer_heater_pwm = 0 if self.can_interface is not None: channel_id = DenaliChannels.dg_sync_broadcast_ch_id msg_id = self.MSG_ID_DG_HEATERS_DATA - self.can_interface.register_receiving_publication_function(channel_id, msg_id, self.handler_heaters_sync) + self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_heaters_sync) - def handler_heaters_sync(self, message): + @_publish(["main_primary_heater_pwm", "small_primary_heater_pwm", "trimmer_heater_pwm"]) + def _handler_heaters_sync(self, message): """ Handles published heaters message - \param message: published heaters data message - \returns none + @param message: published heaters data message + @returns none """ - mainPriHeaterPWM = struct.unpack('i', bytearray( + main_primary_heater_pwm = struct.unpack('i', bytearray( message['message'][self.START_POS_MAIN_PRI_HEATER:self.END_POS_MAIN_PRI_HEATER])) - smallPriHeaterPWM = struct.unpack('i', bytearray( + small_primary_heater_pwm = struct.unpack('i', bytearray( message['message'][self.START_POS_SMALL_PRI_HEATER:self.END_POS_SMALL_PRI_HEATER])) - trimmerHeaterPWM = struct.unpack('i', bytearray( + trimmer_heater_pwm = struct.unpack('i', bytearray( message['message'][self.START_POS_TRIMMER_HEATER:self.END_POS_TRIMMER_HEATER])) - self.mainPrimaryHeaterPWM = mainPriHeaterPWM[0] - self.smallPrimaryHeaterPWM = smallPriHeaterPWM[0] - self.trimmerHeaterPWM = trimmerHeaterPWM[0] + self.main_primary_heater_pwm = main_primary_heater_pwm[0] + self.small_primary_heater_pwm = small_primary_heater_pwm[0] + self.trimmer_heater_pwm = trimmer_heater_pwm[0] def cmd_start_primary_heater(self): """ Constructs and sends start primary heater command - \returns none + @returns none """ # 1 is to start the primary heater @@ -85,7 +89,7 @@ """ Constructs and sends stop primary heater command - \returns none + @returns none """ # 0 is to stop the primary heater payload = integer_to_bytearray(0) @@ -99,7 +103,7 @@ """ Constructs and sends start trimmer heater command - \returns none + @returns none """ # 1 is to start the primary heater payload = integer_to_bytearray(1) @@ -113,7 +117,7 @@ """ Constructs and sends stop trimmer heater command - \returns none + @returns none """ # 1 is to start the primary heater payload = integer_to_bytearray(0) @@ -123,30 +127,30 @@ print("Stopping the Trimmer heater") self.can_interface.send(message, 0) - def cmd_set_dialysate_target_temperature(self, pirmaryTargetTemp=37.0, trimmerTargetTemp=38.0): + def cmd_set_dialysate_target_temperature(self, pirmary_target_temp=37.0, trimmer_target_temp=38.0): """ Constructs and sends primary and trimmer heater target temperature - \param pirmaryTargetTemp: Primary heater target temperature - \param trimmerTargetTemp: Trimmer heater target temperature - \returns none + @param pirmary_target_temp: Primary heater target temperature + @param trimmer_target_temp: Trimmer heater target temperature + @returns none """ - primaryTarget = float_to_bytearray(pirmaryTargetTemp) - trimmerTarget = float_to_bytearray(trimmerTargetTemp) - payload = primaryTarget + trimmerTarget + primary_target = float_to_bytearray(pirmary_target_temp) + trimmer_target = float_to_bytearray(trimmer_target_temp) + payload = primary_target + trimmer_target message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, message_id=self.MSG_ID_SET_DG_DIALYSATE_TEMP_TARGETS, payload=payload) - print("Setting Primary Heater to {} C and Trimmer Heater to {} C".format(pirmaryTargetTemp, trimmerTargetTemp)) + print("Setting Primary Heater to {} C and Trimmer Heater to {} C".format(pirmary_target_temp, trimmer_target_temp)) self.can_interface.send(message, 0) def cmd_heaters_broadcast_interval_override(self, ms, reset=NO_RESET): """ Constructs and sends broadcast time interval - \param ms: Publish time interval in ms - \param reset: integer - 1 to reset a previous override, 0 to override - \returns 1 if successful, zero otherwise + @param ms: Publish time interval in ms + @param reset: integer - 1 to reset a previous override, 0 to override + @returns 1 if successful, zero otherwise """ resetValue = integer_to_bytearray(reset) intervalValue = integer_to_bytearray(ms) Index: dialin/dg/temperature_sensors.py =================================================================== diff -u -r5c4333a9fe36fe3abc9f475368875e0077e6b86d -r414ee5c06661993d4e847b7a61067c1718340cbf --- dialin/dg/temperature_sensors.py (.../temperature_sensors.py) (revision 5c4333a9fe36fe3abc9f475368875e0077e6b86d) +++ dialin/dg/temperature_sensors.py (.../temperature_sensors.py) (revision 414ee5c06661993d4e847b7a61067c1718340cbf) @@ -19,8 +19,9 @@ from ..utils.conversions import float_to_bytearray from .constants import NO_RESET from ..protocols.CAN import (DenaliMessage, DenaliChannels) +from ..utils.base import _AbstractSubSystem, _publish -class TemperatureSensors: +class TemperatureSensors(_AbstractSubSystem): MSG_ID_DG_TEMPERATURE_DATA = 0x2D MSG_ID_TEMPERATURE_SENSORS_PUBLISH_INTERVAL_OVERRIDE = 0xA012 @@ -65,92 +66,96 @@ def __init__(self, can_interface=None): + super().__init__() + self.can_interface = can_interface - self.inletPrimary = 0.0 - self.outletPrimary = 0.0 + self.inlet_primary = 0.0 + self.outlet_primary = 0.0 self.cd1 = 0.0 self.cd2 = 0.0 - self.outletRedundancy = 0.0 - self.inletDialysate = 0.0 - self.primaryTC = 0.0 - self.trimmerTC = 0.0 - self.primaryCJ = 0.0 - self.trimmerCJ = 0.0 - self.primaryInternal = 0.0 - self.trimmerInternal = 0.0 + self.outlet_redundancy = 0.0 + self.inlet_dialysate = 0.0 + self.primary_tc = 0.0 + self.trimmer_tc = 0.0 + self.primary_cj = 0.0 + self.trimmer_cj = 0.0 + self.primary_internal = 0.0 + self.trimmer_internal = 0.0 if self.can_interface is not None: channel_id = DenaliChannels.dg_sync_broadcast_ch_id msg_id = self.MSG_ID_DG_TEMPERATURE_DATA - self.can_interface.register_receiving_publication_function(channel_id, msg_id, self.handler_temperature_sensors_sync) + self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_temperature_sensors_sync) - def handler_temperature_sensors_sync(self, message): + @_publish(["inlet_primary", "outlet_primary", "cd1", "cd2","outlet_redundancy", "inlet_dialysate", "primary_tc", + "trimmer_tc", "primary_cj", "trimmer_cj", "primary_internal", "trimmer_internal"]) + def _handler_temperature_sensors_sync(self, message): """ Handles published temperature sensors message - \param message: published temperature sensors data message - \returns none + @param message: published temperature sensors data message + @returns none """ - sensorsData = struct.unpack('f', bytearray( + sensors_data = struct.unpack('f', bytearray( message['message'][self.START_POS_INLET_PRIMARY_TEMP:self.END_POS_INLET_PRIMARY_TEMP])) - self.inletPrimary = sensorsData[0] + self.inlet_primary = sensors_data[0] - sensorsData = struct.unpack('f', bytearray( + sensors_data = struct.unpack('f', bytearray( message['message'][self.START_POS_OUTLET_PRIMARY_TEMP:self.END_POS_OUTLET_PRIMARY_TEMP])) - self.outletPrimary = sensorsData[0] + self.outlet_primary = sensors_data[0] - sensorsData = struct.unpack('f', bytearray( + sensors_data = struct.unpack('f', bytearray( message['message'][self.START_POS_CD1_TEMP:self.END_POS_CD1_TEMP])) - self.cd1 = sensorsData[0] + self.cd1 = sensors_data[0] - sensorsData = struct.unpack('f', bytearray( + sensors_data = struct.unpack('f', bytearray( message['message'][self.START_POS_CD2_TEMP:self.END_POS_CD2_TEMP])) - self.cd2 = sensorsData[0] + self.cd2 = sensors_data[0] - sensorsData = struct.unpack('f', bytearray( + sensors_data = struct.unpack('f', bytearray( message['message'][self.START_POS_OUTLET_REDUNDANCY_TEMP:self.END_POS_OUTLET_REDUNDANCY_TEMP])) - self.outletRedundancy = sensorsData[0] + self.outlet_redundancy = sensors_data[0] - sensorsData = struct.unpack('f', bytearray( + sensors_data = struct.unpack('f', bytearray( message['message'][self.START_POS_INLET_DIALYSATE_TEMP:self.END_POS_INLET_DIALYSATE_TEMP])) - self.inletDialysate = sensorsData[0] + self.inlet_dialysate = sensors_data[0] - sensorsData = struct.unpack('f', bytearray( + sensors_data = struct.unpack('f', bytearray( message['message'][self.START_POS_PRI_TC_TEMP:self.END_POS_PRI_TC_TEMP])) - self.primaryTC = sensorsData[0] + self.primary_tc = sensors_data[0] - sensorsData = struct.unpack('f', bytearray( + sensors_data = struct.unpack('f', bytearray( message['message'][self.START_POS_TRI_TC_TEMP:self.END_POS_TRI_TC_TEMP])) - self.trimmerTC = sensorsData[0] + self.trimmer_tc = sensors_data[0] - sensorsData = struct.unpack('f', bytearray( + sensors_data = struct.unpack('f', bytearray( message['message'][self.START_POS_PRI_CJ_TEMP:self.END_POS_PRI_CJ_TEMP])) - self.primaryCJ = sensorsData[0] + self.primary_cj = sensors_data[0] - sensorsData = struct.unpack('f', bytearray( + sensors_data = struct.unpack('f', bytearray( message['message'][self.START_POS_TRI_CJ_TEMP:self.END_POS_TRI_CJ_TEMP])) - self.trimmerCJ = sensorsData[0] + self.trimmer_cj = sensors_data[0] - sensorsData = struct.unpack('f', bytearray( + sensors_data = struct.unpack('f', bytearray( message['message'][self.START_POS_PRI_INTERNAL_TEMP:self.END_POS_PRI_INTERNAL_TEMP])) - self.primaryInternal = sensorsData[0] + self.primary_internal = sensors_data[0] - sensorsData = struct.unpack('f', bytearray( + sensors_data = struct.unpack('f', bytearray( message['message'][self.START_POS_TRI_INTERNAL_TEMP:self.END_POS_TRI_INTERNAL_TEMP])) - self.trimmerInternal = sensorsData[0] + self.trimmer_internal = sensors_data[0] def cmd_temperature_sensors_broadcast_interval_override(self, ms, reset=NO_RESET): """ Constructs and sends broadcast time interval - \param ms: Publish time interval in ms - \param reset: integer - 1 to reset a previous override, 0 to override - \returns 1 if successful, zero otherwise + @param ms: Publish time interval in ms + @param reset: integer - 1 to reset a previous override, 0 to override + @returns 1 if successful, zero otherwise """ - resetValue = integer_to_bytearray(reset) - intervalValue = integer_to_bytearray(ms) - payload = resetValue + intervalValue + 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_dg_ch_id, message_id=self.MSG_ID_TEMPERATURE_SENSORS_PUBLISH_INTERVAL_OVERRIDE, @@ -168,25 +173,25 @@ print("Timeout!!!!") return False - def cmd_temperature_sensors_override_value(self, sensorIndex, sensorValue, reset=NO_RESET): + def cmd_temperature_sensors_override_value(self, sensor_index, sensor_value, reset=NO_RESET): """ Constructs and sends the value override of a temperature sensor - \param sensorIndex : Index of the sensor - \param sensorValue: Value of the sensor to be overriden - \returns 1 if successful, zero otherwise + @param sensor_index : Index of the sensor + @param sensor_value: Value of the sensor to be overriden + @returns 1 if successful, zero otherwise """ rst = integer_to_bytearray(reset) - value = float_to_bytearray(sensorValue) - index = integer_to_bytearray(sensorIndex) + value = float_to_bytearray(sensor_value) + index = integer_to_bytearray(sensor_index) payload = rst + value + index message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, message_id=self.MSG_ID_TEMPERATURE_SENSORS_VALUE_OVERRIDE, payload=payload) - print("Setting sensor {} to {} C".format(sensorIndex, sensorValue)) + print("Setting sensor {} to {} C".format(sensor_index, sensor_value)) # Send message received_message = self.can_interface.send(message) Index: tests/dg_heaters_test.py =================================================================== diff -u -r5c4333a9fe36fe3abc9f475368875e0077e6b86d -r414ee5c06661993d4e847b7a61067c1718340cbf --- tests/dg_heaters_test.py (.../dg_heaters_test.py) (revision 5c4333a9fe36fe3abc9f475368875e0077e6b86d) +++ tests/dg_heaters_test.py (.../dg_heaters_test.py) (revision 414ee5c06661993d4e847b7a61067c1718340cbf) @@ -48,12 +48,12 @@ #dg.ro_pump.cmd_ro_flow_rate_override(0.46) while True: - print("TPi: {}, TPo: {}, TD1: {}, TD2: {}, TRo: {}, TDi: {}".format(dg.temperature_sensors.inletPrimary, - dg.temperature_sensors.outletPrimary, + print("TPi: {}, TPo: {}, TD1: {}, TD2: {}, TRo: {}, TDi: {}".format(dg.temperature_sensors.inlet_primary, + dg.temperature_sensors.outlet_primary, dg.temperature_sensors.cd1, dg.temperature_sensors.cd2, - dg.temperature_sensors.outletRedundancy, - dg.temperature_sensors.inletDialysate)) + dg.temperature_sensors.outlet_redundancy, + dg.temperature_sensors.inlet_dialysate)) #print("Main Primary Heater DC: {}".format(dg.heaters.mainPrimaryHeaterPWM)) #print("Small Primary Heater DC: {}".format(dg.heaters.smallPrimaryHeaterPWM)) #print("Trimmer Heater DC: {}".format(dg.heaters.trimmerHeaterPWM))