Index: leahi_dialin/dd/modules/levels.py =================================================================== diff -u -r87d5fc1bdc694d2adaec08a38eea47a61c056f7d -r344ffd41f5460e1f0a9275192fdf5c47caeb6771 --- leahi_dialin/dd/modules/levels.py (.../levels.py) (revision 87d5fc1bdc694d2adaec08a38eea47a61c056f7d) +++ leahi_dialin/dd/modules/levels.py (.../levels.py) (revision 344ffd41f5460e1f0a9275192fdf5c47caeb6771) @@ -18,7 +18,7 @@ from logging import Logger from leahi_dialin.common.constants import NO_RESET -from leahi_dialin.common.dd_defs import dd_enum_repository +from leahi_dialin.common import dd_enum_repository from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from leahi_dialin.protocols.CAN import DenaliChannels @@ -45,14 +45,16 @@ self.msg_id_dd_level_data = MsgIds.MSG_ID_DD_LEVEL_DATA.value self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_dd_level_data, self._handler_levels_sync) + self.dd_levels_timestamp = 0 #: The timestamp of the latest message + + #: The Level Sensors data in dictionary format self.dd_level_sensors = { - dd_enum_repository.DDLevelSensorNames.D6_LEVEL.name: 0, - dd_enum_repository.DDLevelSensorNames.D63_LEVEL.name: 0, dd_enum_repository.DDLevelSensorNames.D46_LEVEL.name: 0, - dd_enum_repository.DDLevelSensorNames.D98_LEVEL.name: 0 + dd_enum_repository.DDLevelSensorNames.D63_LEVEL.name: 0, + dd_enum_repository.DDLevelSensorNames.D98_LEVEL.name: 0, + dd_enum_repository.DDLevelSensorNames.D6_LEVEL.name: 0, } - self.dd_bicarb_level = 0 - self.dd_levels_timestamp = 0 + self.dd_bicarb_level = 0 #: The Bicarb level @publish(["msg_id_dd_level_data", "dd_level_sensors", "dd_bicarb_level", "dd_levels_timestamp"]) @@ -64,21 +66,19 @@ @returns none """ sensor_list =[] - sensor_list.append((dd_enum_repository.DDLevelSensorNames.D6_LEVEL, 'i')) + sensor_list.append((dd_enum_repository.DDLevelSensorNames.D46_LEVEL, 'i')) sensor_list.append((dd_enum_repository.DDLevelSensorNames.D63_LEVEL, 'i')) sensor_list.append((dd_enum_repository.DDLevelSensorNames.D98_LEVEL, 'i')) - sensor_list.append((dd_enum_repository.DDLevelSensorNames.D46_LEVEL, 'i')) + sensor_list.append((dd_enum_repository.DDLevelSensorNames.D6_LEVEL, 'i')) i = 1 for sensor in sensor_list: start_pos = eval(f'MsgFieldPositions.START_POS_FIELD_{i}') end_pos = eval(f'MsgFieldPositions.END_POS_FIELD_{i}') - if i == 4: - self.dd_bicarb_level = struct.unpack('i', bytearray(message['message'][start_pos:end_pos]))[0] - else: - self.dd_level_sensors[sensor[0].name] = struct.unpack(sensor[1], bytearray(message['message'][start_pos:end_pos]))[0] + self.dd_level_sensors[sensor[0].name] = struct.unpack(sensor[1], bytearray(message['message'][start_pos:end_pos]))[0] i += 1 - + self.dd_bicarb_level = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] self.dd_levels_timestamp = timestamp @@ -128,3 +128,29 @@ override_text = str(status), logger = self.logger, can_interface = self.can_interface) + + def cmd_floater_level_status_override(self, level_sensor: int, status: int, reset: int = NO_RESET) -> int: + """ + Constructs and sends level status override command. + Must be logged into DD. + + @param level_sensor: integer - level sensor id to override + @param status: integer - the status value to override + @param reset: (int) 1 to reset a previous override, 0 to override + @returns 1 if successful, zero otherwise + """ + reset_value = integer_to_bytearray(reset) + lvl_sen = integer_to_bytearray(level_sensor) + sts = integer_to_bytearray(status) + print("sts", sts) + payload = reset_value + sts + lvl_sen + + return cmd_generic_override( + payload = payload, + reset = reset, + channel_id = DenaliChannels.dialin_to_fp_ch_id, + msg_id = MsgIds.MSG_ID_DD_FLOATER_LEVEL_OVERRIDE_REQUEST, + entity_name = f'DD Floater Levels status', + override_text = f'{str(status)}', + logger = self.logger, + can_interface = self.can_interface)