def _anomaly_detector(self, timetuple, med_name=None): meds_consumed = self._inventory_manager.get_inventory_delta(timetuple) curr_time_slot = constants.get_slot_num(timetuple) meds_prescribed = self._prescription_manager.get_prescribed_medicine( curr_time_slot) if med_name == None: for med in meds_consumed: if not self._check_wrong_dose(med, meds_prescribed): pills = meds_consumed[med] self._check_overdose(med, -pills, meds_prescribed) self._check_underdose(med, -pills, meds_prescribed) for med in meds_prescribed: if med not in meds_consumed: message = "You have to consume " + str( meds_prescribed[med]) + " pills of " + med self._anomaly_notifier( self._create_data(message, 'underdose')) else: if not self._check_wrong_dose(med_name, meds_prescribed): print(meds_consumed) pills_taken = meds_consumed[med_name] self._check_overdose(med_name, -pills_taken, meds_prescribed) self._check_underdose(med_name, -pills_taken, meds_prescribed)
def notify(self, event): if event.etype == 'timeslot': self._current_slot += event.data['timeinc'] next_slot = self.get_next_slot(self._current_slot) self.notify_user(self.get_prescribed_medicine(self._current_slot)) self._evq.new_event( Event( 'timer', { 'time': self._slots[next_slot][0], 'etype': 'timeslot', 'timeinc': next_slot - self._current_slot })) elif event.etype == 'presc_man': event_data = deepcopy(event.data) #print(event_data) if event.data['type'] == 'new': self.new_prescription(event_data['prescription']) elif event.data['type'] == 'update': self.update_prescription(event_data['prescription']) elif event.data['type'] == 'delete': self.delete_prescription(event_data['prescription_id']) elif event.etype == 'slot_begin': self._create_reminder(event.data['timetuple']) next_slot_index = self.get_next_slot( constants.get_slot_num(event.data['timetuple'])) time = constants.get_slot_time(next_slot_index) new_slot = Event('timer', { 'time': time[0], 'etype': 'slot_begin', 'timetuple': time }) self._evq.new_event(new_slot)
def _create_reminder(self, timetuple): curr_time_slot = constants.get_slot_num(timetuple) meds_prescribed = self.get_prescribed_medicine(curr_time_slot) for key, value in meds_prescribed.items(): message = "You have to take " + str(value) + " pill of " + str( key) + " in this slot" print(message) self.notify_user(self._create_data(message, 'reminder'))
def __init__(self, evq, slot_num=None): if slot_num is None: slot_num = constants.get_slot_num(get_current_time()) self._current_slot = slot_num self._prescriptions = [] self._evq = evq self._slots = constants.slots self._evq.register(self, ['presc_man', 'timeslot', 'slot_begin']) #print(slot_num) self._set_next_slot_alarm(slot_num)
def _set_reminder(self, time): #set reminder at end of timeslot next_slot_index = self._prescription_manager.get_next_slot( constants.get_slot_num(time)) time = constants.get_slot_time(next_slot_index) event = Event('timer', { 'time': time[1], 'etype': 'slot_end', 'timetuple': time }) self._event_queue.new_event(event)
def notify(self, event): if event.etype == 'presc_man': event_data = deepcopy(event.data) #print(event_data) if event.data['type'] == 'new': self.new_prescription(event_data['prescription']) self._send_med_reminder(self._current_slot) elif event.data['type'] == 'update': self.update_prescription(event_data['prescription']) self._send_med_reminder(self._current_slot) elif event.data['type'] == 'delete': self.delete_prescription(event_data['prescription_id']) elif event.etype == 'slot_begin': self._current_slot = constants.get_slot_num(event.data['timetuple']) self._send_med_reminder(self._current_slot) self._set_next_slot_alarm(self._current_slot) else: print('unknown event in prescription manager', event) assert(False)
def notify(self, event): if event.etype == 'presc_man': event_data = deepcopy(event.data) #print(event_data) if event.data['type'] == 'new': self.new_prescription(event_data['prescription']) self._send_med_reminder(self._current_slot) elif event.data['type'] == 'update': self.update_prescription(event_data['prescription']) self._send_med_reminder(self._current_slot) elif event.data['type'] == 'delete': self.delete_prescription(event_data['prescription_id']) elif event.etype == 'slot_begin': self._current_slot = constants.get_slot_num( event.data['timetuple']) self._send_med_reminder(self._current_slot) self._set_next_slot_alarm(self._current_slot) else: print('unknown event in prescription manager', event) assert (False)
def _anomaly_detector(self, timetuple, med_name=None): meds_consumed = self._inventory_manager.get_inventory_delta(timetuple) curr_time_slot = constants.get_slot_num(timetuple) meds_prescribed = self._prescription_manager.get_prescribed_medicine(curr_time_slot) if med_name == None: for med in meds_consumed: if not self._check_wrong_dose(med, meds_prescribed): pills = meds_consumed[med] self._check_overdose(med, -pills, meds_prescribed) self._check_underdose(med, -pills, meds_prescribed) for med in meds_prescribed: if med not in meds_consumed: message = "You have to consume "+str(meds_prescribed[med])+" pills of "+ med self._anomaly_notifier(self._create_data(message, 'underdose' )) else: if not self._check_wrong_dose(med_name, meds_prescribed): print(meds_consumed) pills_taken = meds_consumed[med_name] self._check_overdose(med_name, -pills_taken, meds_prescribed) self._check_underdose(med_name, -pills_taken, meds_prescribed)
def _set_reminder(self, time): #set reminder at end of timeslot next_slot_index = self._prescription_manager.get_next_slot(constants.get_slot_num(time)) time = constants.get_slot_time(next_slot_index) event = Event('timer', {'time':time[1], 'etype':'slot_end', 'timetuple':time} ) self._event_queue.new_event(event)