{ "info": { "author": "Ben West", "author_email": "bewest+insulaudit@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "Programming Language :: Python", "Topic :: Scientific/Engineering", "Topic :: Software Development :: Libraries" ], "description": "# Decoding carelink\n\nFor an intro, see\n[insulaudit](https://github.com/bewest/insulaudit/tree/master/questions).\nWe are hoping to help diabetics independently reproduce therapeutic\naudits of their Medtronic insulin pumps. This experimental software\nwill download pump settings, and the entire log of historical data.\n\n## [Docs](http://bewest.github.io/decoding-carelink/)\n\nSpot something incorrect or not working? Want a feature/tool to do\nsomething?\n[Please file an issue!](https://github.com/bewest/decoding-carelink/issues)\n\n* http://bewest.github.io/decoding-carelink/ Sphinx docs.\n* https://gist.github.com/bewest/6330546 some diagrams\n\n![overview](https://gist.github.com/bewest/6330546/raw/dffdb1e95ef9882e3929579784f95db8c5c6705d/overview.seq.png)\n\n## Status\n\nWe can decode many of the opcodes that store configuration settings.\nWe can also download all pages of history from the ReadHistoryData\ncommand, which contains the log of all actions the pump has taken on\nyour behalf:\n\n* glucose readings\n* all bolus dosings, all usage of bolus wizard\n* unabsorbed insulin\n* alarms, etc...\n* current settings\n* query pump status: normal, suspended, bolusing\n `./bin/mm-set-suspend.py`\n* set/edit/query temporary basal rates\n `./bin/mm-temp-basals.py`\n* press any button on the keypad, using\n `./bin/mm-press-key.py`\n* Investigate how any command works, make new commands, download any command\n `./bin/mm-send-comm.py`\n* Bolus\n `./bin/mm-bolus.py`\n\n## Install first run\n\nThis only needs to be done once:\n\n### From pypi\n\n```bash\n$ easy_install decocare\n# or\n$ pip install decocare\n```\n\n### From source\n```bash\ngit clone https://github.com/bewest/decoding-carelink.git\ncd decoding-carelink\nsudo python ez_setup.py # only if you rarely use python\nsudo python setup.py develop\n```\n\n### Contribute your logs\n\nFork the repo, create a new branch, send the results back to your branch.\nThere will be a green \"create pull request button.\" Putting your logs back on\ngithub will allow more people to assist in decoding results.\n\n```bash\ngit checkout -b myname/init # replace with your name\n# all done\n```\n#### Find/Create serial device in the OS\n\nCongratulations, now you are ready for the demo:\nPlug in the carelink usb stick, and run this:\n```bash\ndmesg | grep ttyUSB # notice the new ttyUSB$x\nsudo ./insert.sh\n```\n\nYou are all done with setup.\nHere's how to test just the usb stick, then we'll run the full suite of\nexperiments.\n\n* on **MAC** the `PORT` is called `/dev/tty.serial` or something.\n* on **windows** the `PORT` is called `COM1` or something\n* on **Linux** the `PORT` is called `/dev/ttyUSBx` or something\n\n### Get your logs\n```bash\npython decocare/stick.py /dev/ttyUSB0 # on windows this is called COM1\n# should get a bunch of output, notably some counters called INTERFACE STATS\n\nexport SERIAL=208850\n# Turn RF POWER ON for 10 minutes\n# You have ten minutes to talk with the pump.\n# should say hello, and print serial number\nmm-send-comm.py --init sleep 0\n# print serial number\nmm-send-comm.py sleep 0\n# get logs\nmm-latest.py \n\n```\n\nFantastic.\nSend me your results! The following process uses git to store your\nrecent results. You can email me a bundle, or simply push your branch\nback to your fork on github.\n\nDo this every time, after you run some experiments:\n```bash\ngit commit -avm 'for @bewest, these are @ results'\n```\n\nSet up for sending me results.\n```bash\n# email me your results like this:\ngit bundle create myname-expr.bundle master..myname/init\n# you can send me myname-expr.bundle in an email\n```\n\nEven better, [fork the repo](https://github.com/bewest/decoding-carelink/fork)\nand setup to for easy.\n```bash\n# add your fork like this:\ngit remote rename origin author\ngit remote add origin git@github.com:/decoding-carelink.git\ngit push -u origin myname/init\n```\n\n\nNow you can do this easily:\n```bash\n./status-quo.sh /dev/ttyUSB0 # use your pump's serial number\ngit commit -avm 'for @bewest, these are @ results'\ngit push -u origin myname/init\n```\n\nRepeat. The easiest way to see what happened is to look at\nexplain.log, and use `git diff` and `git show`. Pushing to github as\nshown above will allow everyone to discuss our analysis together.\n\nThere are several log files created for each experiment.\n\n\n## Demo\n\n> If you don't want to use your own equipment, I've made some of my\n> test equipment available.\nTalk to my test insulin pump over the internet.\n\nRequires `socat` and `python 2.7`. The script [`./bin/socat_run_app.sh`](https://github.com/bewest/decoding-carelink/blob/master/bin/socat_run_app.sh)\nwill connect to my server, `bewest.io:8080` where my test insulin\npump, serial `208850` is waiting to talk to you.\n\nHere's an example using my scripts:\n\n```bash\n$ git checkout -b tester # create a new branch with just your stuff, please\n$ . ./bin/common # import some handy run_* functions\n$ ./bin/socat_run_app.sh & # get my test insulin pump from bewest.io:8080\n$ ls carelink.ttyUSB0 # creates this thing\ncarelink.ttyUSB0\n$ ./status-quo.sh ./carelink.ttyUSB0\n[...]\n$ PORT=./carelink.ttyUSB0 SERIAL=208850 run_download \n[...]\n\n```\n* [download](https://raw.github.com/bewest/decoding-carelink/tester/logs/download.log)\n* [commands](https://github.com/bewest/decoding-carelink/blob/tester/logs/commands.log)\n\nTry figuring out the dosing commands. Is it possible to rewind\nthe pump? Is it possible to enter new profiles and schedules?\n\n## Future work\n\n* collect more data\n* finish [analyzing pages of insulin pump history](https://github.com/bewest/decoding-carelink/blob/rewriting/analysis/pages.markdown)\n* https://github.com/bewest/decoding-carelink/tree/rewriting/analysis/pages\n** [analyze insulin pump bolus records](https://github.com/bewest/decoding-carelink/blob/rewriting/analysis/bolus.markdown)\n** [help analyze prime events](https://github.com/bewest/decoding-carelink/blob/rewriting/ground-start-0/decoding-prime-events.markdown)\n** [help analyze pump midnight events](https://github.com/bewest/decoding-carelink/tree/rewriting/basal-hist-2006)\n\nOnce we can decode historical logs, we'll clean up and merge back into\n[insulaudit](https://github.com/bewest/insulaudit/tree/master/hacking)\n\n### Help needed\n\nDocumentation of protocol, decoders, etc...\n\n```bash\n# fork the repo on github\n# clone the repo\n$ git clone git@github.com//decoding-carelink.git\n$ cd decoding-carelink\n$ git checkout -b \n$ ./insert.sh # will ask for sudo to configure usbserial for the stick\n# ./status-quo.sh [[|/dev/ttyUSB0>] [|208850]] eg:\n$ ./status-quo.sh /dev/ttyUSB0 208850\n$ git commit -avm \"here is my data \"\n$ git push -u origin \n```\nThanks!\nIf you can include CSV export from carelink, it would be helpful.\n\n### Decoding\n\nWe know how to\n[decode time](https://github.com/bewest/decoding-carelink/blob/master/new-years-day/rollover-month/stage-5.markdown)\nand as a result we can find and parse most records now.\n\nAnd lining this up with the Carelink CSV exports reveals the nature of\nthe contents for further analysis.\n\nOnce we can decode all records, it should be useful for\ndiabetics, to get basic reports, more or less on par with the\nvendor's solution.\nWe'll use it to \n[collect diabetes data](https://github.com/bewest/insulaudit/tree/master/hacking)\n(https://github.com/bewest/decoding-carelink/tree/rewriting/analysis/pages)\nover the internet, allowing anyone to independently audit their\ntherapy, and then send the data to their preferred auditing software.\n\n## Tools\n### `./bin/mm-bolus.py`\n```\n+ ./bin/mm-bolus.py --help\nusage: mm-bolus.py [-h] [--serial SERIAL] [--port PORT] [--no-op]\n [--skip-prelude] [--no-rf-prelude] [--skip-postlude] [-v]\n [--init] (--515 | --strokes STROKES_PER_UNIT)\n units\n\nmm-bolus.py - Send bolus command to a pump.\n\npositional arguments:\n units Amount of insulin to bolus.\n\noptional arguments:\n -h, --help show this help message and exit\n --serial SERIAL serial number of pump [default: ]\n --port PORT Path to device [default: ]\n --no-op Dry run, don't do main function\n --skip-prelude Don't do the normal prelude.\n --no-rf-prelude Do the prelude, but don't query the pump.\n --skip-postlude Don't do the normal postlude.\n -v, --verbose Verbosity\n --init Send power ctrl to initialize RF session.\n --515\n --strokes STROKES_PER_UNIT\n\nXXX: Be careful please! Units might be wrong. Keep disconnected from pump\nuntil you trust it by observing the right amount first.\n+ ./bin/mm-bolus.py\nusage: mm-bolus.py [-h] [--serial SERIAL] [--port PORT] [--no-op]\n [--skip-prelude] [--no-rf-prelude] [--skip-postlude] [-v]\n [--init] (--515 | --strokes STROKES_PER_UNIT)\n units\nmm-bolus.py: error: too few arguments\n\n\n+ ./bin/mm-bolus.py --515\nusage: mm-bolus.py [-h] [--serial SERIAL] [--port PORT] [--no-op]\n [--skip-prelude] [--no-rf-prelude] [--skip-postlude] [-v]\n [--init] (--515 | --strokes STROKES_PER_UNIT)\n units\nmm-bolus.py: error: too few arguments\n\n\n+ ./bin/mm-bolus.py --strokes 10\nusage: mm-bolus.py [-h] [--serial SERIAL] [--port PORT] [--no-op]\n [--skip-prelude] [--no-rf-prelude] [--skip-postlude] [-v]\n [--init] (--515 | --strokes STROKES_PER_UNIT)\n units\nmm-bolus.py: error: too few arguments\n```\n\n### `./bin/mm-send-comm.py`\n\n##### `mm-send-comm.py -h`\n```\n+ mm-send-comm.py -h\nusage: mm-send-comm.py [-h] [--serial SERIAL] [--port PORT] [--no-op]\n [--skip-prelude] [--no-rf-prelude] [--skip-postlude]\n [-v] [--init] [--prefix-path PREFIX_PATH] [--saveall]\n [--prefix\n {BaseCommand, KeypadPush, PowerControl, PowerControlOff,\n PumpCommand, PumpResume, PumpSuspend, ReadBasalTemp,\n ReadBatteryStatus, ReadContrast, ReadCurPageNumber,\n ReadErrorStatus, ReadFirmwareVersion,\n ReadGlucoseHistory, ReadHistoryData, ReadPumpID,\n ReadPumpModel, ReadPumpState, ReadPumpStatus, ReadRTC,\n ReadRadioCtrlACL, ReadRemainingInsulin, ReadSettings,\n ReadTotalsToday, SetSuspend, PushEASY, PushUP, PushDOWN,\n PushACT, PushESC, TempBasal, ManualCommand,\n ReadCurGlucosePageNumber, ReadErrorStatus508,\n ReadBolusHistory, ReadDailyTotals, ReadPrimeBoluses,\n ReadAlarms, ReadProfileSets, ReadUserEvents,\n ReadRemoteControlID, Read128KMem, Read256KMem,\n ReadBasalTemp508, ReadTodayTotals508,\n ReadSensorSettings, ReadSensorHistoryData,\n ReadISIGHistory, FilterHistory, FilterGlucoseHistory,\n FilterISIGHistory, ReadProfiles511_STD,\n ReadProfiles511_A, ReadProfiles511_B,\n Model511_ExperimentOP125, Model511_ExperimentOP126,\n ReadSettings511, ReadPumpTrace, ReadDetailTrace,\n Model511_Experiment_OP165, ReadNewTraceAlarm,\n ReadOldTraceAlarm, WriteGlucoseHistoryTimestamp,\n ReadLanguage, ReadBolusWizardSetupStatus, ReadCarbUnits,\n ReadBGUnits, ReadCarbRatios, ReadInsulinSensitivities,\n ReadBGTargets, ReadBGAlarmCLocks, ReadReservoirWarning,\n ReadBGReminderEnable, ReadSettings512,\n ReadProfile_STD512, ReadProfile_A512, ReadProfile_B512,\n ReadLogicLinkIDS, Model512Experiment_OP150,\n ReadBGAlarmEnable, GuardianSensorSettings,\n GuardianSensorSettings, GuardianSensorDemoGraphTimeout,\n GuardianSensorAlarmSilence,\n GuardianSensorRateChangeAlerts, ReadSavedSettingsDate,\n ReadBolusReminderEnable, ReadBolusReminders,\n ReadFactoryParameters, ReadCalibrationFactor,\n ReadVCNTRHistory, ReadOtherDevicesIDS, PumpTraceSelect,\n PumpEnableDetailTrace, PumpDisableDetailTrace,\n Experiment_OP161, Experiment_OP162,\n Model511_Experiment_OP119, Model511_Experiment_OP120,\n Model511_Experiment_OP121, Model511_Experiment_OP122,\n Model511_Experiment_OP123, Model511_Experiment_OP124,\n Model511_Experiment_OP125, Model511_Experiment_OP126,\n Model511_Experiment_OP127, Model511_Experiment_OP128,\n Model511_Experiment_OP129, Model511_Experiment_OP130,\n SelectBasalProfile, SelectBasalProfileSTD,\n SelectBasalProfileA, SelectBasalProfileB,\n PumpExperiment_OP69, PumpExperiment_OP70,\n PumpExperiment_OP71, PumpExperiment_OP72,\n PumpExperiment_OP73, PumpExperiment_OP75}]\n [--postfix {BaseCommand, KeypadPush, PowerControl,\n PowerControlOff, PumpCommand, PumpResume, PumpSuspend,\n ReadBasalTemp, ReadBatteryStatus, ReadContrast,\n ReadCurPageNumber, ReadErrorStatus, ReadFirmwareVersion,\n ReadGlucoseHistory, ReadHistoryData, ReadPumpID,\n ReadPumpModel, ReadPumpState, ReadPumpStatus, ReadRTC,\n ReadRadioCtrlACL, ReadRemainingInsulin, ReadSettings,\n ReadTotalsToday, SetSuspend, PushEASY, PushUP, PushDOWN,\n PushACT, PushESC, TempBasal, ManualCommand,\n ReadCurGlucosePageNumber, ReadErrorStatus508,\n ReadBolusHistory, ReadDailyTotals, ReadPrimeBoluses,\n ReadAlarms, ReadProfileSets, ReadUserEvents,\n ReadRemoteControlID, Read128KMem, Read256KMem,\n ReadBasalTemp508, ReadTodayTotals508,\n ReadSensorSettings, ReadSensorHistoryData,\n ReadISIGHistory, FilterHistory, FilterGlucoseHistory,\n FilterISIGHistory, ReadProfiles511_STD,\n ReadProfiles511_A, ReadProfiles511_B,\n Model511_ExperimentOP125, Model511_ExperimentOP126,\n ReadSettings511, ReadPumpTrace, ReadDetailTrace,\n Model511_Experiment_OP165, ReadNewTraceAlarm,\n ReadOldTraceAlarm, WriteGlucoseHistoryTimestamp,\n ReadLanguage, ReadBolusWizardSetupStatus, ReadCarbUnits,\n ReadBGUnits, ReadCarbRatios, ReadInsulinSensitivities,\n ReadBGTargets, ReadBGAlarmCLocks, ReadReservoirWarning,\n ReadBGReminderEnable, ReadSettings512,\n ReadProfile_STD512, ReadProfile_A512, ReadProfile_B512,\n ReadLogicLinkIDS, Model512Experiment_OP150,\n ReadBGAlarmEnable, GuardianSensorSettings,\n GuardianSensorSettings, GuardianSensorDemoGraphTimeout,\n GuardianSensorAlarmSilence,\n GuardianSensorRateChangeAlerts, ReadSavedSettingsDate,\n ReadBolusReminderEnable, ReadBolusReminders,\n ReadFactoryParameters, ReadCalibrationFactor,\n ReadVCNTRHistory, ReadOtherDevicesIDS, PumpTraceSelect,\n PumpEnableDetailTrace, PumpDisableDetailTrace,\n Experiment_OP161, Experiment_OP162,\n Model511_Experiment_OP119, Model511_Experiment_OP120,\n Model511_Experiment_OP121, Model511_Experiment_OP122,\n Model511_Experiment_OP123, Model511_Experiment_OP124,\n Model511_Experiment_OP125, Model511_Experiment_OP126,\n Model511_Experiment_OP127, Model511_Experiment_OP128,\n Model511_Experiment_OP129, Model511_Experiment_OP130,\n SelectBasalProfile, SelectBasalProfileSTD,\n SelectBasalProfileA, SelectBasalProfileB,\n PumpExperiment_OP69, PumpExperiment_OP70,\n PumpExperiment_OP71, PumpExperiment_OP72,\n PumpExperiment_OP73, PumpExperiment_OP75}]\n {sleep,tweak,ManualCommand} ...\n\nmm-send-comm.py - send messages to a compatible MM insulin pump\n\npositional arguments:\n {sleep,tweak,ManualCommand}\n Main thing to do between --prefix and--postfix\n sleep Just sleep between command sets\n tweak Tweak a builtin command\n ManualCommand Customize a command\n\noptional arguments:\n -h, --help show this help message and exit\n --serial SERIAL serial number of pump [default: ]\n --port PORT Path to device [default: ]\n --no-op Dry run, don't do main function\n --skip-prelude Don't do the normal prelude.\n --no-rf-prelude Do the prelude, but don't query the pump.\n --skip-postlude Don't do the normal postlude.\n -v, --verbose Verbosity\n --init Send power ctrl to initialize RF session.\n --prefix-path PREFIX_PATH\n Prefix to store saved files when using --save or\n --saveall.\n --saveall Whether or not to save all responses.\n --prefix {BaseCommand, KeypadPush, PowerControl, PowerControlOff,\n PumpCommand, PumpResume, PumpSuspend, ReadBasalTemp, ReadBatteryStatus,\n ReadContrast, ReadCurPageNumber, ReadErrorStatus, ReadFirmwareVersion,\n ReadGlucoseHistory, ReadHistoryData, ReadPumpID, ReadPumpModel,\n ReadPumpState, ReadPumpStatus, ReadRTC, ReadRadioCtrlACL,\n ReadRemainingInsulin, ReadSettings, ReadTotalsToday, SetSuspend, PushEASY,\n PushUP, PushDOWN, PushACT, PushESC, TempBasal, ManualCommand,\n ReadCurGlucosePageNumber, ReadErrorStatus508, ReadBolusHistory,\n ReadDailyTotals, ReadPrimeBoluses, ReadAlarms, ReadProfileSets,\n ReadUserEvents, ReadRemoteControlID, Read128KMem, Read256KMem,\n ReadBasalTemp508, ReadTodayTotals508, ReadSensorSettings,\n ReadSensorHistoryData, ReadISIGHistory, FilterHistory, FilterGlucoseHistory,\n FilterISIGHistory, ReadProfiles511_STD, ReadProfiles511_A, ReadProfiles511_B,\n Model511_ExperimentOP125, Model511_ExperimentOP126, ReadSettings511,\n ReadPumpTrace, ReadDetailTrace, Model511_Experiment_OP165, ReadNewTraceAlarm,\n ReadOldTraceAlarm, WriteGlucoseHistoryTimestamp, ReadLanguage,\n ReadBolusWizardSetupStatus, ReadCarbUnits, ReadBGUnits, ReadCarbRatios,\n ReadInsulinSensitivities, ReadBGTargets, ReadBGAlarmCLocks,\n ReadReservoirWarning, ReadBGReminderEnable, ReadSettings512,\n ReadProfile_STD512, ReadProfile_A512, ReadProfile_B512, ReadLogicLinkIDS,\n Model512Experiment_OP150, ReadBGAlarmEnable, GuardianSensorSettings,\n GuardianSensorSettings, GuardianSensorDemoGraphTimeout,\n GuardianSensorAlarmSilence, GuardianSensorRateChangeAlerts,\n ReadSavedSettingsDate, ReadBolusReminderEnable, ReadBolusReminders,\n ReadFactoryParameters, ReadCalibrationFactor, ReadVCNTRHistory,\n ReadOtherDevicesIDS, PumpTraceSelect, PumpEnableDetailTrace,\n PumpDisableDetailTrace, Experiment_OP161, Experiment_OP162,\n Model511_Experiment_OP119, Model511_Experiment_OP120,\n Model511_Experiment_OP121, Model511_Experiment_OP122,\n Model511_Experiment_OP123, Model511_Experiment_OP124,\n Model511_Experiment_OP125, Model511_Experiment_OP126,\n Model511_Experiment_OP127, Model511_Experiment_OP128,\n Model511_Experiment_OP129, Model511_Experiment_OP130, SelectBasalProfile,\n SelectBasalProfileSTD, SelectBasalProfileA, SelectBasalProfileB,\n PumpExperiment_OP69, PumpExperiment_OP70, PumpExperiment_OP71,\n PumpExperiment_OP72, PumpExperiment_OP73, PumpExperiment_OP75}\n Built-in commands to run before the main one.\n --postfix {BaseCommand, KeypadPush, PowerControl, PowerControlOff,\n PumpCommand, PumpResume, PumpSuspend, ReadBasalTemp, ReadBatteryStatus,\n ReadContrast, ReadCurPageNumber, ReadErrorStatus, ReadFirmwareVersion,\n ReadGlucoseHistory, ReadHistoryData, ReadPumpID, ReadPumpModel,\n ReadPumpState, ReadPumpStatus, ReadRTC, ReadRadioCtrlACL,\n ReadRemainingInsulin, ReadSettings, ReadTotalsToday, SetSuspend, PushEASY,\n PushUP, PushDOWN, PushACT, PushESC, TempBasal, ManualCommand,\n ReadCurGlucosePageNumber, ReadErrorStatus508, ReadBolusHistory,\n ReadDailyTotals, ReadPrimeBoluses, ReadAlarms, ReadProfileSets,\n ReadUserEvents, ReadRemoteControlID, Read128KMem, Read256KMem,\n ReadBasalTemp508, ReadTodayTotals508, ReadSensorSettings,\n ReadSensorHistoryData, ReadISIGHistory, FilterHistory, FilterGlucoseHistory,\n FilterISIGHistory, ReadProfiles511_STD, ReadProfiles511_A, ReadProfiles511_B,\n Model511_ExperimentOP125, Model511_ExperimentOP126, ReadSettings511,\n ReadPumpTrace, ReadDetailTrace, Model511_Experiment_OP165, ReadNewTraceAlarm,\n ReadOldTraceAlarm, WriteGlucoseHistoryTimestamp, ReadLanguage,\n ReadBolusWizardSetupStatus, ReadCarbUnits, ReadBGUnits, ReadCarbRatios,\n ReadInsulinSensitivities, ReadBGTargets, ReadBGAlarmCLocks,\n ReadReservoirWarning, ReadBGReminderEnable, ReadSettings512,\n ReadProfile_STD512, ReadProfile_A512, ReadProfile_B512, ReadLogicLinkIDS,\n Model512Experiment_OP150, ReadBGAlarmEnable, GuardianSensorSettings,\n GuardianSensorSettings, GuardianSensorDemoGraphTimeout,\n GuardianSensorAlarmSilence, GuardianSensorRateChangeAlerts,\n ReadSavedSettingsDate, ReadBolusReminderEnable, ReadBolusReminders,\n ReadFactoryParameters, ReadCalibrationFactor, ReadVCNTRHistory,\n ReadOtherDevicesIDS, PumpTraceSelect, PumpEnableDetailTrace,\n PumpDisableDetailTrace, Experiment_OP161, Experiment_OP162,\n Model511_Experiment_OP119, Model511_Experiment_OP120,\n Model511_Experiment_OP121, Model511_Experiment_OP122,\n Model511_Experiment_OP123, Model511_Experiment_OP124,\n Model511_Experiment_OP125, Model511_Experiment_OP126,\n Model511_Experiment_OP127, Model511_Experiment_OP128,\n Model511_Experiment_OP129, Model511_Experiment_OP130, SelectBasalProfile,\n SelectBasalProfileSTD, SelectBasalProfileA, SelectBasalProfileB,\n PumpExperiment_OP69, PumpExperiment_OP70, PumpExperiment_OP71,\n PumpExperiment_OP72, PumpExperiment_OP73, PumpExperiment_OP75}\n Built-in commands to run after the main one.\n\nThis tool is intended to help discover protocol behavior. Under no\ncircumstance is it intended to deliver therapy.\n```\n\n##### `mm-send-comm.py ManualCommand -h`\n\n```\n+ mm-send-comm.py ManualCommand -h\nusage: mm-send-comm.py ManualCommand [-h] [--params PARAMS] [--descr DESCR]\n [--name NAME] [--save]\n [--effectTime EFFECTTIME]\n [--maxRecords MAXRECORDS]\n [--bytesPerRecord BYTESPERRECORD]\n code\n\npositional arguments:\n code The opcode to send to the pump.\n\noptional arguments:\n -h, --help show this help message and exit\n --params PARAMS parameters to format into sent message\n --descr DESCR Description of command\n --name NAME Proposed name of command\n --save Save response in a file.\n --effectTime EFFECTTIME\n time to sleep before responding to message, float in\n seconds\n --maxRecords MAXRECORDS\n number of frames in a packet composing payload\n response\n --bytesPerRecord BYTESPERRECORD\n bytes per frame\n```\n\n#### `mm-send-comm.py sleep -h`\n```\n\n+ mm-send-comm.py sleep -h\nusage: mm-send-comm.py sleep [-h] timeout\n\npositional arguments:\n timeout Sleep in between running --prefix and --postfix\n\noptional arguments:\n -h, --help show this help message and exit\n```\n\n#### `mm-send-comm.py tweak -h`\n\n```\n+ mm-send-comm.py tweak -h\nusage: mm-send-comm.py tweak [-h] [--params PARAMS] [--descr DESCR]\n [--name NAME] [--save] [--effectTime EFFECTTIME]\n [--maxRecords MAXRECORDS]\n [--bytesPerRecord BYTESPERRECORD] [--page PAGE]\n [--begin BEGIN] [--end END]\n \n {BaseCommand, KeypadPush, PowerControl,\n PowerControlOff, PumpCommand, PumpResume,\n PumpSuspend, ReadBasalTemp, ReadBatteryStatus,\n ReadContrast, ReadCurPageNumber, ReadErrorStatus,\n ReadFirmwareVersion, ReadGlucoseHistory,\n ReadHistoryData, ReadPumpID, ReadPumpModel,\n ReadPumpState, ReadPumpStatus, ReadRTC,\n ReadRadioCtrlACL, ReadRemainingInsulin,\n ReadSettings, ReadTotalsToday, SetSuspend,\n PushEASY, PushUP, PushDOWN, PushACT, PushESC,\n TempBasal, ManualCommand,\n ReadCurGlucosePageNumber, ReadErrorStatus508,\n ReadBolusHistory, ReadDailyTotals,\n ReadPrimeBoluses, ReadAlarms, ReadProfileSets,\n ReadUserEvents, ReadRemoteControlID, Read128KMem,\n Read256KMem, ReadBasalTemp508, ReadTodayTotals508,\n ReadSensorSettings, ReadSensorHistoryData,\n ReadISIGHistory, FilterHistory,\n FilterGlucoseHistory, FilterISIGHistory,\n ReadProfiles511_STD, ReadProfiles511_A,\n ReadProfiles511_B, Model511_ExperimentOP125,\n Model511_ExperimentOP126, ReadSettings511,\n ReadPumpTrace, ReadDetailTrace,\n Model511_Experiment_OP165, ReadNewTraceAlarm,\n ReadOldTraceAlarm, WriteGlucoseHistoryTimestamp,\n ReadLanguage, ReadBolusWizardSetupStatus,\n ReadCarbUnits, ReadBGUnits, ReadCarbRatios,\n ReadInsulinSensitivities, ReadBGTargets,\n ReadBGAlarmCLocks, ReadReservoirWarning,\n ReadBGReminderEnable, ReadSettings512,\n ReadProfile_STD512, ReadProfile_A512,\n ReadProfile_B512, ReadLogicLinkIDS,\n Model512Experiment_OP150, ReadBGAlarmEnable,\n GuardianSensorSettings, GuardianSensorSettings,\n GuardianSensorDemoGraphTimeout,\n GuardianSensorAlarmSilence,\n GuardianSensorRateChangeAlerts,\n ReadSavedSettingsDate, ReadBolusReminderEnable,\n ReadBolusReminders, ReadFactoryParameters,\n ReadCalibrationFactor, ReadVCNTRHistory,\n ReadOtherDevicesIDS, PumpTraceSelect,\n PumpEnableDetailTrace, PumpDisableDetailTrace,\n Experiment_OP161, Experiment_OP162,\n Model511_Experiment_OP119,\n Model511_Experiment_OP120,\n Model511_Experiment_OP121,\n Model511_Experiment_OP122,\n Model511_Experiment_OP123,\n Model511_Experiment_OP124,\n Model511_Experiment_OP125,\n Model511_Experiment_OP126,\n Model511_Experiment_OP127,\n Model511_Experiment_OP128,\n Model511_Experiment_OP129,\n Model511_Experiment_OP130, SelectBasalProfile,\n SelectBasalProfileSTD, SelectBasalProfileA,\n SelectBasalProfileB, PumpExperiment_OP69,\n PumpExperiment_OP70, PumpExperiment_OP71,\n PumpExperiment_OP72, PumpExperiment_OP73,\n PumpExperiment_OP75}\n\npositional arguments:\n {BaseCommand, KeypadPush, PowerControl, PowerControlOff, PumpCommand,\n PumpResume, PumpSuspend, ReadBasalTemp, ReadBatteryStatus, ReadContrast,\n ReadCurPageNumber, ReadErrorStatus, ReadFirmwareVersion, ReadGlucoseHistory,\n ReadHistoryData, ReadPumpID, ReadPumpModel, ReadPumpState, ReadPumpStatus,\n ReadRTC, ReadRadioCtrlACL, ReadRemainingInsulin, ReadSettings,\n ReadTotalsToday, SetSuspend, PushEASY, PushUP, PushDOWN, PushACT, PushESC,\n TempBasal, ManualCommand, ReadCurGlucosePageNumber, ReadErrorStatus508,\n ReadBolusHistory, ReadDailyTotals, ReadPrimeBoluses, ReadAlarms,\n ReadProfileSets, ReadUserEvents, ReadRemoteControlID, Read128KMem,\n Read256KMem, ReadBasalTemp508, ReadTodayTotals508, ReadSensorSettings,\n ReadSensorHistoryData, ReadISIGHistory, FilterHistory, FilterGlucoseHistory,\n FilterISIGHistory, ReadProfiles511_STD, ReadProfiles511_A, ReadProfiles511_B,\n Model511_ExperimentOP125, Model511_ExperimentOP126, ReadSettings511,\n ReadPumpTrace, ReadDetailTrace, Model511_Experiment_OP165, ReadNewTraceAlarm,\n ReadOldTraceAlarm, WriteGlucoseHistoryTimestamp, ReadLanguage,\n ReadBolusWizardSetupStatus, ReadCarbUnits, ReadBGUnits, ReadCarbRatios,\n ReadInsulinSensitivities, ReadBGTargets, ReadBGAlarmCLocks,\n ReadReservoirWarning, ReadBGReminderEnable, ReadSettings512,\n ReadProfile_STD512, ReadProfile_A512, ReadProfile_B512, ReadLogicLinkIDS,\n Model512Experiment_OP150, ReadBGAlarmEnable, GuardianSensorSettings,\n GuardianSensorSettings, GuardianSensorDemoGraphTimeout,\n GuardianSensorAlarmSilence, GuardianSensorRateChangeAlerts,\n ReadSavedSettingsDate, ReadBolusReminderEnable, ReadBolusReminders,\n ReadFactoryParameters, ReadCalibrationFactor, ReadVCNTRHistory,\n ReadOtherDevicesIDS, PumpTraceSelect, PumpEnableDetailTrace,\n PumpDisableDetailTrace, Experiment_OP161, Experiment_OP162,\n Model511_Experiment_OP119, Model511_Experiment_OP120,\n Model511_Experiment_OP121, Model511_Experiment_OP122,\n Model511_Experiment_OP123, Model511_Experiment_OP124,\n Model511_Experiment_OP125, Model511_Experiment_OP126,\n Model511_Experiment_OP127, Model511_Experiment_OP128,\n Model511_Experiment_OP129, Model511_Experiment_OP130, SelectBasalProfile,\n SelectBasalProfileSTD, SelectBasalProfileA, SelectBasalProfileB,\n PumpExperiment_OP69, PumpExperiment_OP70, PumpExperiment_OP71,\n PumpExperiment_OP72, PumpExperiment_OP73, PumpExperiment_OP75}\n Command to tweak.\n\noptional arguments:\n -h, --help show this help message and exit\n --params PARAMS parameters to format into sent message\n --descr DESCR Description of command\n --name NAME Proposed name of command\n --save Save response in a file.\n --effectTime EFFECTTIME\n time to sleep before responding to message, float in\n seconds\n --maxRecords MAXRECORDS\n number of frames in a packet composing payload\n response\n --bytesPerRecord BYTESPERRECORD\n bytes per frame\n --page PAGE Page to fetch (for ReadHistoryData)\n --begin BEGIN begin date for FilterHistory\n --end END end date for FilterHistory\n```\n\n##### `mm-latest.py -h`\n\n```bash\nusage: mm-latest.py [-h] [--serial SERIAL] [--port PORT] [--no-op]\n [--skip-prelude] [--no-rf-prelude] [--skip-postlude] [-v]\n [--init] [--no-clock] [--no-basal] [--no-temp]\n [--no-reservoir] [--no-status]\n [minutes]\n\nmm-latest.py - Grab latest activity\n\npositional arguments:\n minutes [default: 30)]\n\noptional arguments:\n -h, --help show this help message and exit\n --serial SERIAL serial number of pump [default: ]\n --port PORT Path to device [default: ]\n --no-op Dry run, don't do main function\n --skip-prelude Don't do the normal prelude.\n --no-rf-prelude Do the prelude, but don't query the pump.\n --skip-postlude Don't do the normal postlude.\n -v, --verbose Verbosity\n --init Send power ctrl to initialize RF session.\n --no-clock Also report current time on pump.\n --no-basal Also report basal rates.\n --no-temp Also report temp basal rates.\n --no-reservoir Also report remaining insulin in reservoir.\n --no-status Also report current suspend/bolus status.\n\nQuery pump for latest activity.\n```\n\n\n#### `./bin/mm-press-key.py`\n\n```bash\nusage: mm-press-key.py [-h] [--serial SERIAL] [--port PORT] [--no-op] [-v]\n [--init]\n {act,esc,up,down,easy} [{act,esc,up,down,easy} ...]\n\npositional arguments:\n {act,esc,up,down,easy}\n buttons to press [default: act)]\n\noptional arguments:\n -h, --help show this help message and exit\n --serial SERIAL serial number of pump [default: ]\n --port PORT Path to device [default: ]\n --no-op Dry run, don't do main function\n -v, --verbose Verbosity\n --init Send power ctrl to initialize RF session.\n```\n\n#### `status-quo.sh`\n\n`status-quo.sh ` runs several experiments, described below.\nEach experiment is saved in the `./logs` directory, which is tracked by git.\n\n\n##### `. bin/common`\nSource a bunch of helper functions, notably:\n\n##### `run_stick`_\nRuns `python decocare/stick.py /dev/ttyUSB0`\nand saves results in `logs/stick.log`.\nWhen run by `status-quo.sh`, it creates\n`./logs/baseline.stick.log` before continuing.\nAt end of experiments, it records `./logs/postmortem.stick.log`\n\n##### `run_session`_\nRuns `python decocare/session.py /dev/ttyUSB0 `\nand saves results in `logs/session.log`.\n\n##### `run_commands`_\nRuns `python decocare/commands.py /dev/ttyUSB0 `\nand saves results in `logs/commands.log`.\n\n##### `run_download`_\n\nRuns `python decocare/download.py /dev/ttyUSB0 `\nand saves results in `logs/download.log`.\n\nThe download script is configured to save each page of historical data as a raw\nbinary blob in the `./logs/` subdirectory like this:\n`./logs/ReadHistoryData-page-$x.data`.\n\nThis script can take several minutes to run; it attempts to download\nall pages of data available.\n\n#### quick overview:\n\n`status-quo.sh` also tries to summarize what happened, saving a quick\nexplanation of what happened in `logs/explain.log`. The entire output\nis saved in `./status-quo.log`.\n\n#### `run_regress`\nAfter `. bin/common`, `export SERIAL=511888` with your serial number.\n\nRuns `python list_history.py` on each binary file found in `logs/`, saves\nresults in `./analysis//...`.\n\nThis is what I use to render the markdown files in analysis.\nOften, the diffs between runs help test theories.\n\n#### `list_history.py`\n`list_history.py [--larger] ./logs/ReadHistory....page-0.data`\nList/decode a page of history as markdown.\n\n#### `list_opcodes.py`\n`list_opcodes.py`\nList records found in binary data by looking for opcodes, and a\nregular data structure associated with that length. Includes at least\none variable stop length strength.\n\n#### `list_dates.py`\nList records found in binary data by looking for dates.\n\n#### usblyzer_filter.sh\n\n```bash\n# usblyzer_filter.sh was used to filter the raw usblyzer csv export into\n# something a bit more manageable.\n$ history\n 553 ./usblyzer_filter.sh first_run.csv \n 554 ls\n 555 git mv first_run.csv pcaps/first_run/\n 556 ./usblyzer_filter.sh pcaps/first_run/first_run.csv \n 557 ./usblyzer_filter.sh pcaps/first_run/first_run.csv > pcaps/first_run/pcap.csv\n 558 git mv second_run.csv pcaps/second_run/\n 559 ./usblyzer_filter.sh pcaps/second_run/second_run.csv \n 560 ./usblyzer_filter.sh pcaps/second_run/second_run.csv > pcaps/second_run/pcap.csv\n 561 git mv third_run.csv pcaps/third_run/\n 562 ./usblyzer_filter.sh pcaps/third_run/third_run.csv \n 563 ./usblyzer_filter.sh pcaps/third_run/third_run.csv > pcaps/third_run/pcap.csv\nbewest@paragon:~/src/decoding-carelink$ \n```\n\nThanks,\n-[contributors](https://github.com/bewest/decoding-carelink/network/members)", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/openaps/decocare", "keywords": null, "license": "UNKNOWN", "maintainer": null, "maintainer_email": null, "name": "decocare", "package_url": "https://pypi.org/project/decocare/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/decocare/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/openaps/decocare" }, "release_url": "https://pypi.org/project/decocare/0.0.31/", "requires_dist": null, "requires_python": null, "summary": "Audit, inspect, and command MM insulin pumps.", "version": "0.0.31" }, "last_serial": 2558915, "releases": { "0.0.10": [ { "comment_text": "built for Linux-3.16.0-30-generic-x86_64-with-glibc2.4", "digests": { "md5": "b5c02761290f45d929aec10137feb369", "sha256": "d200be9b25cb59e8ee83eca5388302237b65680fa3c8521bc5a3b2cc39d7fb2a" }, "downloads": -1, "filename": "decocare-0.0.10.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "b5c02761290f45d929aec10137feb369", "packagetype": "bdist_dumb", "python_version": "any", "requires_python": null, "size": 135342, "upload_time": "2015-05-11T00:33:03", "url": "https://files.pythonhosted.org/packages/d5/62/aca3e8a4393678f8e7fffd783e99abd6c93bc02e25bc77aac139be98768b/decocare-0.0.10.linux-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "cd5696c77e6444192953703063fdbdaf", "sha256": "661e9c75bd4e6b0a3cc499a0d7bfda566b0da2ae7a86f6014d09ebeed1a3adc9" }, "downloads": -1, "filename": "decocare-0.0.10.tar.gz", "has_sig": false, "md5_digest": "cd5696c77e6444192953703063fdbdaf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 69628, "upload_time": "2015-05-11T00:32:59", "url": "https://files.pythonhosted.org/packages/b7/eb/c6be439088852368bac29e4cde3652a6c7a310f68f4e28475ce2b7b5f02a/decocare-0.0.10.tar.gz" } ], "0.0.11": [ { "comment_text": "built for Linux-3.16.0-30-generic-x86_64-with-glibc2.4", "digests": { "md5": "9ab24fea2e837af63cf6404328d0924c", "sha256": "c0a879c394da04eff1e95019e1f5f7c57d18b59cfa603afaa980c09b5f95142a" }, "downloads": -1, "filename": "decocare-0.0.11.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "9ab24fea2e837af63cf6404328d0924c", "packagetype": "bdist_dumb", "python_version": "any", "requires_python": null, "size": 135437, "upload_time": "2015-05-11T01:24:19", "url": "https://files.pythonhosted.org/packages/22/e0/625766811fb870ee4d9934b05d0b2d04f0d214c2c1d8fa9447131ef99793/decocare-0.0.11.linux-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "c12230dc642b0331d10636b16a05e8cf", "sha256": "4e74d3a761d23a93d036f45b2b33022563d60a6eabf6f20abe45e60c3fa335f6" }, "downloads": -1, "filename": "decocare-0.0.11.tar.gz", "has_sig": false, "md5_digest": "c12230dc642b0331d10636b16a05e8cf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 76042, "upload_time": "2015-05-11T01:24:23", "url": "https://files.pythonhosted.org/packages/80/b9/57e46edfd8ce4487ce78de006d5facb3e36844ea1f6f1eb4d68059503820/decocare-0.0.11.tar.gz" } ], "0.0.12": [ { "comment_text": "built for Linux-3.16.0-30-generic-x86_64-with-glibc2.4", "digests": { "md5": "7957c7528cc24d658b4a91f9a158b422", "sha256": "870a0d9dc3e384c784bd83dda329ebe80b6678de14147e81e7e539bcb313c048" }, "downloads": -1, "filename": "decocare-0.0.12.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "7957c7528cc24d658b4a91f9a158b422", "packagetype": "bdist_dumb", "python_version": "any", "requires_python": null, "size": 135558, "upload_time": "2015-05-11T02:12:47", "url": "https://files.pythonhosted.org/packages/3b/66/e1ddb675af0c3c119d641e8332f8ba12e541875f67e017cf398b223246e4/decocare-0.0.12.linux-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "df9cbd307551636c67e2790f888552e7", "sha256": "32485fc84ffcf7cf6dffa890c95c8eba7b6ff6a01003a4d200cffd867a7bd465" }, "downloads": -1, "filename": "decocare-0.0.12.tar.gz", "has_sig": false, "md5_digest": "df9cbd307551636c67e2790f888552e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 76102, "upload_time": "2015-05-11T02:12:51", "url": "https://files.pythonhosted.org/packages/20/8f/8dd68b8b12ddb862f3a30a414c14c274500f64fe41b3d344a8cb2bc5a68a/decocare-0.0.12.tar.gz" } ], "0.0.13": [ { "comment_text": "built for Linux-3.16.0-30-generic-x86_64-with-glibc2.4", "digests": { "md5": "f3cabe366a28dfeafb9a3eb164d2dbe6", "sha256": "a71374ac81451eb2430b04436be882b9516c7bd394f35af7052a36633580becd" }, "downloads": -1, "filename": "decocare-0.0.13.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "f3cabe366a28dfeafb9a3eb164d2dbe6", "packagetype": "bdist_dumb", "python_version": "any", "requires_python": null, "size": 136016, "upload_time": "2015-05-14T23:35:57", "url": "https://files.pythonhosted.org/packages/84/6f/eb08b68fcfe370383585544131f16cc9dbeb95bb876a800a679d2212c5fc/decocare-0.0.13.linux-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "42a65052e274145cc83b3fbf1b816882", "sha256": "6eb289e39e2f76d73290441f575e94863a6216a59f144faa461a9715034ec0be" }, "downloads": -1, "filename": "decocare-0.0.13.tar.gz", "has_sig": false, "md5_digest": "42a65052e274145cc83b3fbf1b816882", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 76189, "upload_time": "2015-05-14T23:35:52", "url": "https://files.pythonhosted.org/packages/1a/2f/d24b2b8b7f3dbb9b7c4abc3992166782da5433b2d736ced72d23cbdee6c2/decocare-0.0.13.tar.gz" } ], "0.0.14": [ { "comment_text": "", "digests": { "md5": "f08f15eaec563fbc054e241ab5e3b02e", "sha256": "e3a8bf6a9b5dbe73fc6ca21d314a2bdd34c5267b4e648e2c4dcd739624c10a69" }, "downloads": -1, "filename": "decocare-0.0.14-py2.7.egg", "has_sig": false, "md5_digest": "f08f15eaec563fbc054e241ab5e3b02e", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 154679, "upload_time": "2015-05-19T05:33:51", "url": "https://files.pythonhosted.org/packages/79/3f/d4b48b03405af028891f923c484d773eb30faa1feda7f6cebd51bb581854/decocare-0.0.14-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "af9991c5767a79df2ebdd7ed6f3522cc", "sha256": "becfc4b47e87fc7a4389580b284808785b6a1f2907bdef1bd341838ee146afbe" }, "downloads": -1, "filename": "decocare-0.0.14.tar.gz", "has_sig": false, "md5_digest": "af9991c5767a79df2ebdd7ed6f3522cc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 76147, "upload_time": "2015-05-19T05:33:43", "url": "https://files.pythonhosted.org/packages/37/34/763861299fa5d415059df6cf54775f06fb7ac70c40f3e29c35318b1152e1/decocare-0.0.14.tar.gz" } ], "0.0.15": [ { "comment_text": "", "digests": { "md5": "70f10d68d301931eac4298b8e5a74097", "sha256": "5da4fb471fb7446c35a48432ea70d363d01942c89d2fc559aae33976295c77ca" }, "downloads": -1, "filename": "decocare-0.0.15.tar.gz", "has_sig": false, "md5_digest": "70f10d68d301931eac4298b8e5a74097", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 76311, "upload_time": "2015-06-16T02:36:07", "url": "https://files.pythonhosted.org/packages/4f/de/62356cd2b592a42b18ab5c4053d6140d5c6e02b6914729b4d8d6b4460d7b/decocare-0.0.15.tar.gz" } ], "0.0.16": [ { "comment_text": "", "digests": { "md5": "c23420031dbc326481cbfd0f24d53ba6", "sha256": "1f9966d43c915490ca65541ff673a8f078a1b73e6897feec289decb5ba1009e4" }, "downloads": -1, "filename": "decocare-0.0.16.tar.gz", "has_sig": false, "md5_digest": "c23420031dbc326481cbfd0f24d53ba6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 76347, "upload_time": "2015-06-21T00:51:33", "url": "https://files.pythonhosted.org/packages/4c/66/94dfe60b17b23228ce691812e8d1f496ca85e9f3bb00dbd04dda0b1ad23d/decocare-0.0.16.tar.gz" } ], "0.0.17": [ { "comment_text": "", "digests": { "md5": "e6c3669dd4dd5b284c99b7b426178044", "sha256": "7048b66b8453a3f5b6b02a8314018f6c8c3c52f2344bcd767beb4224a134649e" }, "downloads": -1, "filename": "decocare-0.0.17-py2.7.egg", "has_sig": false, "md5_digest": "e6c3669dd4dd5b284c99b7b426178044", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 156238, "upload_time": "2015-08-20T00:06:44", "url": "https://files.pythonhosted.org/packages/81/0a/9e99f909bc93501f65301b38f526fece08a585816ede2792df97c9247baa/decocare-0.0.17-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "6d0ef8565c7cacd51889ca6f042aee70", "sha256": "3415324f21418ee5ecc417006236a42d6d2edbf2fe228f6c3c0687e0c4b0a6bc" }, "downloads": -1, "filename": "decocare-0.0.17.tar.gz", "has_sig": false, "md5_digest": "6d0ef8565c7cacd51889ca6f042aee70", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 76604, "upload_time": "2015-08-20T00:06:39", "url": "https://files.pythonhosted.org/packages/10/6a/c7c2e873d95ed3e5e4364231d6f3ce5ff5e6586044dcf142e8f05ffea73b/decocare-0.0.17.tar.gz" } ], "0.0.18": [ { "comment_text": "", "digests": { "md5": "b9d38834d9b8c2c7518ba7d4817c2224", "sha256": "88643e72d06b1999e0d90838d28d4a05d445171d19c3e01a558a5fe9ddf2c0e6" }, "downloads": -1, "filename": "decocare-0.0.18-py2.7.egg", "has_sig": false, "md5_digest": "b9d38834d9b8c2c7518ba7d4817c2224", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 163729, "upload_time": "2015-10-20T03:16:39", "url": "https://files.pythonhosted.org/packages/c1/3d/1739353fcb09560de04ed8a275035b4192196bd77b1b4517798068eeaad3/decocare-0.0.18-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "05237f192129c01f93a1c94718374909", "sha256": "72f73bec10e977c72da76f8eaa44bbbbe9f7a05060bfcbb93d03280826546576" }, "downloads": -1, "filename": "decocare-0.0.18.tar.gz", "has_sig": false, "md5_digest": "05237f192129c01f93a1c94718374909", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 78948, "upload_time": "2015-10-20T03:16:32", "url": "https://files.pythonhosted.org/packages/93/e1/1ede76cba0e88767f8df1c6bfb6bd3d8650bcb9b9dc4bf193f7c6c68e9ce/decocare-0.0.18.tar.gz" } ], "0.0.19": [ { "comment_text": "", "digests": { "md5": "917584e946df2b7be63c26a6c81bf80f", "sha256": "fdb21bc94fa2a1c632e86aea1bd2e7e81b1be0840c2c9eec4af45acdc8ee87eb" }, "downloads": -1, "filename": "decocare-0.0.19-py2.7.egg", "has_sig": false, "md5_digest": "917584e946df2b7be63c26a6c81bf80f", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 164266, "upload_time": "2015-11-23T19:44:54", "url": "https://files.pythonhosted.org/packages/d4/8f/84cfb4aa0e80a27de68c72b282b00674ffe0b5e3682eb44c311b2c2cd567/decocare-0.0.19-py2.7.egg" } ], "0.0.20": [ { "comment_text": "", "digests": { "md5": "b187ea966200e5f156b94879fae2c894", "sha256": "106551e85033fb4855df2145738aa476e319b3696da8450f895c3f70661aad1e" }, "downloads": -1, "filename": "decocare-0.0.20-py2.7.egg", "has_sig": false, "md5_digest": "b187ea966200e5f156b94879fae2c894", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 158234, "upload_time": "2016-01-01T19:45:31", "url": "https://files.pythonhosted.org/packages/cc/0f/604ad60f14786623c1ee32f8bb29b6bc9812e64a8ce2bf7b7d23111f8178/decocare-0.0.20-py2.7.egg" } ], "0.0.21": [ { "comment_text": "", "digests": { "md5": "182ca386ba370bd782cdacbb14d017cc", "sha256": "be017e55521c9237c3b4cde8b1bd4e7dbd27f122d5eaf5caab71efb64a3a84c1" }, "downloads": -1, "filename": "decocare-0.0.21-py2.7.egg", "has_sig": false, "md5_digest": "182ca386ba370bd782cdacbb14d017cc", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 158743, "upload_time": "2016-01-01T19:55:31", "url": "https://files.pythonhosted.org/packages/dc/7d/f764fc4d8c88ad166ab9acc2b41ad22044b2e25c378b4d41ca666e52d58c/decocare-0.0.21-py2.7.egg" } ], "0.0.22": [ { "comment_text": "", "digests": { "md5": "bb09cb38d91db21e375e8a39748c152a", "sha256": "6b8574183a21422a682901954cb40880a9b51c4fc336f8dea08bd9856bc850b1" }, "downloads": -1, "filename": "decocare-0.0.22-py2.7.egg", "has_sig": false, "md5_digest": "bb09cb38d91db21e375e8a39748c152a", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 159388, "upload_time": "2016-03-06T22:07:59", "url": "https://files.pythonhosted.org/packages/75/81/76a49ff00259838511b129503e53129219a93ca4f29c327ff91429a8e5ba/decocare-0.0.22-py2.7.egg" } ], "0.0.23": [ { "comment_text": "", "digests": { "md5": "be3cf28ed723e80da8b3cf4fadd90125", "sha256": "1c5cf965adefa13240e0f4b3456d6667c3c518f39fb54843225eb292f6cf2672" }, "downloads": -1, "filename": "decocare-0.0.23-py2.7.egg", "has_sig": false, "md5_digest": "be3cf28ed723e80da8b3cf4fadd90125", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 160687, "upload_time": "2016-04-29T00:16:26", "url": "https://files.pythonhosted.org/packages/c9/dc/39395196e76bd18a087f56da1c5fef26c235b1f623cd6277114aa12a72b0/decocare-0.0.23-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "a95b405572a7bb9fa2fb2b6a7234a368", "sha256": "9155d05a9607a2ab1e3cfd227cf08c1de0368876abeee36a11cb1e4f63c6f099" }, "downloads": -1, "filename": "decocare-0.0.23.tar.gz", "has_sig": false, "md5_digest": "a95b405572a7bb9fa2fb2b6a7234a368", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 78510, "upload_time": "2016-04-28T03:32:25", "url": "https://files.pythonhosted.org/packages/c1/5d/15f21f2a21963ac45de78809b6f496789366865c383810f5f925f7c06c72/decocare-0.0.23.tar.gz" } ], "0.0.24": [ { "comment_text": "", "digests": { "md5": "58dc48718e99785a090fb3024de79f9a", "sha256": "758b3fe317382f8a9ec8813c36c2336c424b9e3e81ffea19f77477f8877c1c1d" }, "downloads": -1, "filename": "decocare-0.0.24-py2.7.egg", "has_sig": false, "md5_digest": "58dc48718e99785a090fb3024de79f9a", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 161335, "upload_time": "2016-05-29T02:44:50", "url": "https://files.pythonhosted.org/packages/d7/21/8e6e053a879c3c7c2f00191356745a1e467ec816f0a3196648730521bdfe/decocare-0.0.24-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "711b96e2afd2c15057f90a41b9114f88", "sha256": "29e2f5b72f4a31f20cc0fde694d95e4ce2a8c306718a3ea2f7a43b3d6a2902b5" }, "downloads": -1, "filename": "decocare-0.0.24.tar.gz", "has_sig": false, "md5_digest": "711b96e2afd2c15057f90a41b9114f88", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 78755, "upload_time": "2016-05-29T02:44:46", "url": "https://files.pythonhosted.org/packages/a4/a2/13761a829393dcb4c3a959f59aedb0cb0fe985888bd7189d24b1504355cc/decocare-0.0.24.tar.gz" } ], "0.0.25": [ { "comment_text": "", "digests": { "md5": "05988d08ec93eef6e1b41f9da2c0e755", "sha256": "affda395ba07e5299af596799b7a62b0757bd0db2d107acbba92c8700b9e3a49" }, "downloads": -1, "filename": "decocare-0.0.25-py2.7.egg", "has_sig": false, "md5_digest": "05988d08ec93eef6e1b41f9da2c0e755", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 161324, "upload_time": "2016-05-29T03:51:07", "url": "https://files.pythonhosted.org/packages/d6/3b/c86ee31cb89bc1150ff2688d9051d8ed709a52d0c05ac56c3da488fa25ca/decocare-0.0.25-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "0e96dceb9b03ab55f8816dea73347254", "sha256": "8c3a37c760f702b82bade8291f94d16268a2cec123de26e2e80220f1248556c2" }, "downloads": -1, "filename": "decocare-0.0.25.tar.gz", "has_sig": false, "md5_digest": "0e96dceb9b03ab55f8816dea73347254", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 78713, "upload_time": "2016-05-29T03:51:03", "url": "https://files.pythonhosted.org/packages/11/57/0f8680b60f25efd17010ee2f4c88a8ab88615265a0a915634035d36af22f/decocare-0.0.25.tar.gz" } ], "0.0.26": [ { "comment_text": "", "digests": { "md5": "6a4523e583e2fa9e8e9ac4a1edc4db52", "sha256": "e01538ff4f4e43cf60859b18a980a37350b31a3e01e066ea335271bb3a163317" }, "downloads": -1, "filename": "decocare-0.0.26.tar.gz", "has_sig": false, "md5_digest": "6a4523e583e2fa9e8e9ac4a1edc4db52", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 78729, "upload_time": "2016-05-29T04:25:40", "url": "https://files.pythonhosted.org/packages/e2/2b/389a40220bddc158ea44b5037c460b4b3d7e0fe689f6acdc0818feb95c85/decocare-0.0.26.tar.gz" } ], "0.0.27": [ { "comment_text": "", "digests": { "md5": "7de44045e1274e160f6d90fe995750b9", "sha256": "a31964d07dca5b72c00f5a38e4c0d154ea78cbd3b55d4e21c289ac458ae334ff" }, "downloads": -1, "filename": "decocare-0.0.27-py2.7.egg", "has_sig": false, "md5_digest": "7de44045e1274e160f6d90fe995750b9", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 161981, "upload_time": "2016-05-29T04:38:39", "url": "https://files.pythonhosted.org/packages/8a/e1/42587f5c2f3561b4919d0d011fb6371fc9577b86370c1e5755dbc6376791/decocare-0.0.27-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "adee13ea30c0d68def24ae06444128aa", "sha256": "e76a8e5eeb4c77a2f3eab50a09666168ed0f4346d3c517ab51730a5bd7bf741e" }, "downloads": -1, "filename": "decocare-0.0.27.tar.gz", "has_sig": false, "md5_digest": "adee13ea30c0d68def24ae06444128aa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 79414, "upload_time": "2016-05-29T04:38:35", "url": "https://files.pythonhosted.org/packages/f9/c9/6ab74b13f077e1a1caf909bfd3b309845d6f4635a239e2d144e3e12d97f9/decocare-0.0.27.tar.gz" } ], "0.0.28": [ { "comment_text": "", "digests": { "md5": "bcb3e5a027f744e2e3a4623bc1f89a32", "sha256": "025fc6a9cb417636c3b38df4472e4e31d373329a4dc80dfbde9925eeaad5c335" }, "downloads": -1, "filename": "decocare-0.0.28-py2.7.egg", "has_sig": false, "md5_digest": "bcb3e5a027f744e2e3a4623bc1f89a32", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 161356, "upload_time": "2016-05-29T19:23:06", "url": "https://files.pythonhosted.org/packages/72/47/61d0e1e76251c3b2dab7d56e5e8971b3097aaa5e8890d3a1b9225a109923/decocare-0.0.28-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "c596ab2af147aed9f07a6ee4a4eaeb17", "sha256": "af202cf2cba196296f5afeb63a980ca50d7d437ae9081ea447764af725e54583" }, "downloads": -1, "filename": "decocare-0.0.28.tar.gz", "has_sig": false, "md5_digest": "c596ab2af147aed9f07a6ee4a4eaeb17", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 79402, "upload_time": "2016-05-29T19:22:59", "url": "https://files.pythonhosted.org/packages/3a/8b/a099f4ff3d47dd7261a8db5551f16bcfe54d00d28a8d707e9962a1e65dc1/decocare-0.0.28.tar.gz" } ], "0.0.29": [ { "comment_text": "", "digests": { "md5": "394b28561b839211e803b2fff41e4262", "sha256": "aaae2a8beb75acab0823b59ba306ce03e545a65db150684acf4f6e9818b6f902" }, "downloads": -1, "filename": "decocare-0.0.29-py2.7.egg", "has_sig": false, "md5_digest": "394b28561b839211e803b2fff41e4262", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 161356, "upload_time": "2016-06-05T23:45:57", "url": "https://files.pythonhosted.org/packages/e9/63/e7c7e340051d5d6ea67415a8629b71928c56bd921febaab922794da5e15e/decocare-0.0.29-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "3479c76d938a20ea564f9b8dd62adf1a", "sha256": "646aa0aadde7ade967fd88ea2b9f72352c569f063eed1524c282cf2431f56816" }, "downloads": -1, "filename": "decocare-0.0.29.tar.gz", "has_sig": false, "md5_digest": "3479c76d938a20ea564f9b8dd62adf1a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 79461, "upload_time": "2016-06-05T23:45:52", "url": "https://files.pythonhosted.org/packages/2c/3b/caeca6c37396c401bc602dc21baea395fc8829b3ee92fa63c245f3bd7e68/decocare-0.0.29.tar.gz" } ], "0.0.30": [ { "comment_text": "", "digests": { "md5": "10c844bb8765125dbf9a3644a9841b40", "sha256": "8fc24aa2bcca110255697f5a2ed91fd536ad10625159b087ab0613ac389e5451" }, "downloads": -1, "filename": "decocare-0.0.30-py2.7.egg", "has_sig": false, "md5_digest": "10c844bb8765125dbf9a3644a9841b40", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 161370, "upload_time": "2016-06-17T21:53:35", "url": "https://files.pythonhosted.org/packages/63/8c/19831e693b227cfa81cf3aea5bd89bbd93a3f392ca5ca43c170240a674d7/decocare-0.0.30-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "4bae5b83e160df3a3b4745ad09b43815", "sha256": "3b54b20a1409e1b54b6f0cc1211aa583162cb4a8687e47cf8aed6fed78bcdbc3" }, "downloads": -1, "filename": "decocare-0.0.30.tar.gz", "has_sig": false, "md5_digest": "4bae5b83e160df3a3b4745ad09b43815", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 79491, "upload_time": "2016-06-17T21:53:30", "url": "https://files.pythonhosted.org/packages/db/56/60f34899fb6fa9a529403aa86b833d917f1ba7e1e339dec9fd97ec21a1e7/decocare-0.0.30.tar.gz" } ], "0.0.31": [ { "comment_text": "", "digests": { "md5": "bab18f3508be275b74d7820f85aecc06", "sha256": "67e1a3e6a9ff8c43a1eb5db2341eef489abca8d4a8c5a42ccf4556bb4485aa1e" }, "downloads": -1, "filename": "decocare-0.0.31-py2.7.egg", "has_sig": false, "md5_digest": "bab18f3508be275b74d7820f85aecc06", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 162947, "upload_time": "2016-10-26T21:46:17", "url": "https://files.pythonhosted.org/packages/30/97/7de8fc2db34adb0d6706f8c785a531035b7b72b729f66015f412a5815384/decocare-0.0.31-py2.7.egg" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "df062b658c71d6dafd7f5592234222d2", "sha256": "6dfa35876f77db514494d760025b5634ffb837f8517302d0f4072a32748281f5" }, "downloads": -1, "filename": "decocare-0.0.5.tar.gz", "has_sig": false, "md5_digest": "df062b658c71d6dafd7f5592234222d2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28502, "upload_time": "2014-04-04T01:47:55", "url": "https://files.pythonhosted.org/packages/b3/2a/67720f0358020e6e06902de2db13772e8196a69a2995bbd3bb9af61eb615/decocare-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "1cfc61168815690673c77c1b7dd025b9", "sha256": "0205962d29daf9e95558f024101222ef6cf942702ed05439397982a112412508" }, "downloads": -1, "filename": "decocare-0.0.6.tar.gz", "has_sig": false, "md5_digest": "1cfc61168815690673c77c1b7dd025b9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41607, "upload_time": "2014-04-10T21:39:59", "url": "https://files.pythonhosted.org/packages/09/ec/5d5ff3a718a8492b489a926cfe780b5add4ad9265d808e3679fd3096e934/decocare-0.0.6.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "8544194fbe2f99b2fc6d4da1484fb1eb", "sha256": "b329359dae7b2c538958a2a5eb02304274b90949244d5cbb68849a417380855e" }, "downloads": -1, "filename": "decocare-0.0.8.tar.gz", "has_sig": false, "md5_digest": "8544194fbe2f99b2fc6d4da1484fb1eb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47312, "upload_time": "2015-01-07T00:41:01", "url": "https://files.pythonhosted.org/packages/8a/7c/dc238729aaf810bd501f638f8b55076b4727de199f7f5168e8d8d0e4d70e/decocare-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "built for Linux-3.16.0-30-generic-x86_64-with-glibc2.4", "digests": { "md5": "d66fbc4fd44cedfc2c84b7e5faa50598", "sha256": "c02a79073cbd6671381329c00cfb82018b9a8a4516587a04339b2b6df44b6126" }, "downloads": -1, "filename": "decocare-0.0.9.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "d66fbc4fd44cedfc2c84b7e5faa50598", "packagetype": "bdist_dumb", "python_version": "any", "requires_python": null, "size": 83935, "upload_time": "2015-04-01T23:31:08", "url": "https://files.pythonhosted.org/packages/69/6d/57f976ce1712ecec0d2b067ceb61a116b3f861c69d05f3591b806b0d6232/decocare-0.0.9.linux-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "e33f2d00db5f9345a5a0ba418da27b6a", "sha256": "1885d6b7751ed09fb13fa53661abaa16ef8bae5bd4612b60f02367cd1e69deee" }, "downloads": -1, "filename": "decocare-0.0.9.tar.gz", "has_sig": false, "md5_digest": "e33f2d00db5f9345a5a0ba418da27b6a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47568, "upload_time": "2015-04-01T23:31:04", "url": "https://files.pythonhosted.org/packages/9c/c3/f707f3c67791b9e9354d2cda216ea86b6df5a211845486607836034729e9/decocare-0.0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "bab18f3508be275b74d7820f85aecc06", "sha256": "67e1a3e6a9ff8c43a1eb5db2341eef489abca8d4a8c5a42ccf4556bb4485aa1e" }, "downloads": -1, "filename": "decocare-0.0.31-py2.7.egg", "has_sig": false, "md5_digest": "bab18f3508be275b74d7820f85aecc06", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 162947, "upload_time": "2016-10-26T21:46:17", "url": "https://files.pythonhosted.org/packages/30/97/7de8fc2db34adb0d6706f8c785a531035b7b72b729f66015f412a5815384/decocare-0.0.31-py2.7.egg" } ] }