History

history Module

This module provides some basic helper/formatting utilities, specifically targeted at decoding ReadHistoryData data.

class decocare.history.AlarmPump(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

head_length = 4
opcode = 6
class decocare.history.AlarmSensor(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

Glucose sensor alarms. The second byte of the head represents the alarm type. The third byte contains an alarm-specific value.

For example, a “Low Glucose” alarm type is: [

0x0b, # 11: Opcode 0x66, # 102: Low glucose subtype 0x50 # 80: Glucose level (For a pump configured to mg/dL)

]

alarm_types = {112: 'Weak Signal', 113: 'Lost Sensor', 115: 'Low Glucose Predicted', 101: 'High Glucose', 102: 'Low Glucose', 104: 'Meter BG Now', 105: 'Cal Reminder', 106: 'Calibration Error', 107: 'Sensor End'}
decode()[source]
head_length = 3
opcode = 11
class decocare.history.BGReceived(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

body_length = 3
decode()[source]
opcode = 63
class decocare.history.BasalProfileStart(head, larger=False)[source]

Bases: decocare.records.base.KnownRecord

body_length = 3
decode()[source]
opcode = 123
class decocare.history.Battery(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

opcode = 26
class decocare.history.BigBolusWizardChange(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

body_length = 143
opcode = 90
class decocare.history.BolusWizard512(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

body_length = 12
opcode = 47
class decocare.history.ChangeAlarmNotifyMode(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

body_length = 0
opcode = 99
class decocare.history.ChangeAudioBolus(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

decode()[source]
opcode = 95
class decocare.history.ChangeBGReminderEnable(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

decode()[source]
opcode = 96
class decocare.history.ChangeBasalProfile_new_profile(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

body_length = 145
decode()[source]
opcode = 9
class decocare.history.ChangeBasalProfile_old_profile(head, larger=False)[source]

Bases: decocare.records.base.KnownRecord

body_length = 145
decode()[source]
opcode = 8
class decocare.history.ChangeBolusWizardSetup(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

body_length = 40
opcode = 79
class decocare.history.ChangeCaptureEventEnable(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

opcode = 131
class decocare.history.ChangeMaxBasal(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

decode()[source]
opcode = 44
class decocare.history.ChangeMazaheri2e(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

body_length = 100
opcode = 46
class decocare.history.ChangeOtherDeviceID(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

body_length = 30
opcode = 125
class decocare.history.ChangeParadigmLinkID(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

body_length = 14
decode()[source]
opcode = 60
class decocare.history.ChangeRemoteID(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

opcode = 39
class decocare.history.ChangeTempBasalType(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

decode()[source]
opcode = 98
class decocare.history.ChangeTime(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

opcode = 23
class decocare.history.ChangeTimeDisplay(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

opcode = 100
class decocare.history.ChangeWatchdogMarriageProfile(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

body_length = 5
opcode = 129
class decocare.history.ClearAlarm(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

opcode = 12
class decocare.history.ConnectDevicesOtherDevicesEnabled(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

decode()[source]
opcode = 124
class decocare.history.DeleteOtherDeviceID(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

body_length = 5
opcode = 130
class decocare.history.EnableDisableRemote(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

body_length = 14
opcode = 38
class decocare.history.HistoryPage(raw, model)[source]

Bases: decocare.history.PagedData

clean(data)[source]
decode(larger=False)[source]
class decocare.history.Ian50(head, model, **kwds)[source]

Bases: decocare.records.base.KnownRecord

body_length = 30
opcode = 80
class decocare.history.Ian54(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

body_length = 57
opcode = 84
class decocare.history.Ian69(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

body_length = 2
opcode = 105
class decocare.history.IanA8(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

head_length = 10
opcode = 168
class decocare.history.JournalEntryExerciseMarker(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

Capture Event > Exercise marker

body_length = 1
opcode = 65
class decocare.history.JournalEntryMealMarker(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

Capture Event > Meal marker

body_length = 2
decode()[source]
opcode = 64
class decocare.history.JournalEntryOtherMarker(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

Capture Event > Other

body_length = 0
opcode = 67
class decocare.history.LowBattery(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

opcode = 25
class decocare.history.LowReservoir(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

>>> rec = LowReservoir( LowReservoir._test_1[:2] )
>>> decoded = rec.parse(LowReservoir._test_1)
>>> print str(rec)
LowReservoir 2012-12-07T11:02:43 head[2], body[0] op[0x34]
>>> print pformat(decoded)
{'amount': 20.0}
decode()[source]
opcode = 52
class decocare.history.Model522ResultTotals(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

body_length = 40
date_length = 2
date_str()[source]
head_length = 1
opcode = 109
parse_time()[source]
class decocare.history.NewTimeSet(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

opcode = 24
class decocare.history.OldBolusWizardChange(head, larger=False)[source]

Bases: decocare.records.base.KnownRecord

body_length = 117
decode()[source]
opcode = 90
class decocare.history.PagedData(raw, model)[source]

Bases: object

PagedData - context for parsing a page of cgm data.

clean(data)[source]
eat_nulls(data)[source]
class decocare.history.PumpResume(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

opcode = 31
class decocare.history.PumpSuspend(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

opcode = 30
class decocare.history.ResultDailyTotal(head, larger=False)[source]

Bases: decocare.records.base.InvalidRecord

On 722 this seems like two records.

date_length = 2
date_str()[source]
decode()[source]
head_length = 5
opcode = 7
parse_time()[source]
class decocare.history.Rewind(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

opcode = 33
class decocare.history.Sara6E(head, larger=False)[source]

Bases: decocare.history.Model522ResultTotals

Seems specific to 722?

body_length = 48
decode()[source]
opcode = 110
class decocare.history.SelectBasalProfile(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

opcode = 20
class decocare.history.SetAutoOff(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

opcode = 27
class decocare.history.SetBolusWizardEnabled(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

decode()[source]
opcode = 45
class decocare.history.SettingSomething57(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

opcode = 87
class decocare.history.TempBasal(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

body_length = 1
decode()[source]
opcode = 51
class decocare.history.TempBasalDuration(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

decode()[source]
opcode = 22
class decocare.history.UnabsorbedInsulin512(head, model=None)[source]

Bases: decocare.records.bolus.UnabsorbedInsulinBolus

opcode = 48
decocare.history.decode_bg_targets(data, bg_units)[source]
decocare.history.decode_carb_ratios(data)[source]
decocare.history.decode_insulin_sensitivies(data)[source]
decocare.history.decode_remote_id(msg)[source]

practice decoding some remote ids:

0x27
0x01 0xe2 0x40
0x03 0x42 0x2a
0x28 0x0c 0x89
0x92 0x00 0x00 0x00
>>> decode_remote_id(_remote_ids[0])
'123456'
>>> decode_remote_id(_remote_ids[1])
'213546'
>>> decode_remote_id(_remote_ids[2])
'821650'
decocare.history.decode_wizard_settings(data, num=8, model=None)[source]
decocare.history.describe()[source]
decocare.history.describe_rate(offset, rate, q)[source]
class decocare.history.hack51(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

opcode = 81
class decocare.history.hack52(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

opcode = 82
class decocare.history.hack53(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

body_length = 1
opcode = 83
class decocare.history.hack55(head, larger=False)[source]

Bases: decocare.records.base.KnownRecord

opcode = 85
class decocare.history.hack56(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

body_length = 5
opcode = 86
class decocare.history.old6c(head, model, **kwds)[source]

Bases: decocare.history.Model522ResultTotals

opcode = 108
decocare.history.parse_midnight(data)[source]
decocare.history.parse_record(fd, head=bytearray(b''), larger=False, model=None)[source]

Given a file-like object, and the head of a record, parse the rest of the record. Look up the type of record, read in just enough data to parse it, return the result.

class decocare.history.questionable22(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

opcode = 34
class decocare.history.questionable23(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

opcode = 35
class decocare.history.questionable24(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

opcode = 36
class decocare.history.questionable3b(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

opcode = 59
class decocare.history.questionable5e(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

opcode = 94
class decocare.history.questionable61(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

opcode = 97
class decocare.history.questionable65(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

opcode = 101
class decocare.history.questionable66(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

opcode = 102
class decocare.history.questionable6f(head=bytearray(b''), model=None, larger=False)[source]

Bases: decocare.records.base.KnownRecord

opcode = 111
decocare.history.suggest(head, larger=False, model=None)[source]

Look in the known table of commands to find a suitable record type for this opcode.

decocare.history.unmask_m_midnight(data)[source]

Extract date values from a series of bytes. Always returns tuple given a bytearray of at least 3 bytes.

Returns 6-tuple of scalar values year, month, day, hours, minutes, seconds.