Introduction
This document is intended to be used as a comprehensive overview of MedM DeviceKit data API. Every measurement is represented by an xml.
Measurements
Measurement Types
Measurement types are separated into two big classes - discrete and stream.
- Discrete
- Discrete are non-continuous measurement types with individual values like glucose or blood pressure measurement.
- Streams
- Streams are continuous measurement types like ECG measurement.
The tables below describe terms used in API requests for measurement type identification.
Discrete Measurements
Term | Description |
---|---|
measurements-realtime-activity | Realtime Activity |
measurements-bloodpressure | Blood Pressure measurements |
measurements-glucose | Glucose measurements |
measurements-ketone | Ketone measurements |
measurements-lactate | Lactate measurements |
measurements-cholesterol | Cholesterol measurements |
measurements-uric-acid | Uric Acid measurements |
measurements-blood-coagulations | Blood Coagulation measurements |
measurements-realtime-spirometry | Realtime Spirometry measurements |
measurements-spirometry | Spirometry measurements |
measurements-weight | Weight measurements |
measurements-note | Note measurements |
Stream Measurements
Term | Description |
---|---|
measurements-activity-stream | Activity tracking |
measurements-ecg-stream | Electrocardiogram measurements |
measurements-fetal-doppler-stream | Fetal Doppler measurements |
measurements-heartrate-stream | Heart Rate measurements |
measurements-oxygen-stream | Oxygen Saturation measurements |
measurements-sleep-stream | Sleep tracking |
measurements-temperature-stream | Temperature measurements |
measurements-respiration-rate-stream | Respiration Rate measurements |
Common Attributes
Discrete measurement example
<?xml version="1.0" encoding="UTF-8"?>
<measurements-bloodpressure>
<id>c402e177-95c9-493b-b12f-7b4ef42d0add</id>
<instance-id>ae770afe-2e21-4f31-b410-2c2f5006b5b1</instance-id>
<measured-at>2019-08-11T14:21:00.000000000+00:00</measured-at>
<measured-at-local>2019-08-11T07:21:00.000000000-07:00</measured-at-local>
<measured-at-utc-offset>-25200</measured-at-utc-offset>
<client-received-at>2019-08-11T14:21:03.098145000+00:00</client-received-at>
<client-received-at-local>2019-08-11T07:21:03.098145000-07:00</client-received-at-local>
<client-received-at-utc-offset>-25200</client-received-at-utc-offset>
<systolic>113</systolic>
<diastolic>77</diastolic>
<pulse>81</pulse>
<predefined-tags-str>measured_arm_left, body_position_sitting</predefined-tags-str>
<is-low-battery>false</is-low-battery>
<battery-percentage>67</battery-percentage>
<sensor>
<name>com.taidoc.taidocbus.bp</name>
<serial>3128213440001333</serial>
<address>8C:DE:52:30:55:94</address>
<manufacturer>TaiDoc</manufacturer>
<model>3128</model>
<device-db-title>TD-3128</device-db-title>
<device-db-id>95</device-db-id>
</sensor>
</measurements-bloodpressure>
Attribute | Type | Values | Description |
---|---|---|---|
id | string | UUID version 4 according to RFC 4122 | Unique measurement identifier |
instance-id | string | UUID version 4 according to RFC 4122 | Unique instance identifier, configured via medm.json, or generated |
measured-at | string | RFC3339 Timestamp | Datetime measurement was performed in server timezone. Medical Device source. |
measured-at-local | string | RFC3339 Timestamp | Datetime measurement was performed in patient’s timezone. Medical Device source. |
measured-at-utc-offset | integer | measured-at-local utc offset in seconds. Medical Device source. |
|
client-received-at | string | RFC3339 Timestamp | Optional Datetime measurement was performed in server timezone. Mobile Device source. |
client-received-at-local | string | RFC3339 Timestamp | Optional Datetime measurement was performed in patient’s timezone. Mobile Device source. |
client-received-at-utc-offset | integer | Optional client-received-at-local utc offset in seconds. Mobile Device source. |
|
note | string | Optional Measurement notes. | |
predefined-tags-str | string | Comma separated string | Optional Predefined tags applied to the measurement. |
is-low-battery | boolean | Optional true if low battery on Medical Device on the moment this measurement was received. | |
battery-percentage | integer | 0..100 | Medical Device battery charge percentage on the moment this measurement was received. |
sensor-user-id | string | User profile id on the medical device if supported. | |
sensor | Sensor |
Optional. Data source. See Sensor API. |
Stream measurement common attributes:
Stream measurement example
<?xml version="1.0" encoding="UTF-8"?>
<measurements-oxygen-stream>
<id>86735ebc-d752-4110-89f6-e06d5519e9d2</id>
<instance-id>ae770afe-2e21-4f31-b410-2c2f5006b5b1</instance-id>
<measured-at>2019-08-09T16:10:09.751000000+00:00</measured-at>
<measured-at-local>2019-08-09T11:10:09.751000000-05:00</measured-at-local>
<measured-at-utc-offset>-18000</measured-at-utc-offset>
<client-received-at>2019-08-09T16:10:09.751000000+00:00</client-received-at>
<client-received-at-local>2019-08-09T11:10:09.751000000-05:00</client-received-at-local>
<client-received-at-utc-offset>-18000</client-received-at-utc-offset>
<measurement-duration>20001</measurement-duration>
<spo2-min>95</spo2-min>
<spo2-max>98</spo2-max>
<spo2-last>96</spo2-last>
<spo2-average>95.35</spo2-average>
<pulse-min>96</pulse-min>
<pulse-max>102</pulse-max>
<pulse-last>98</pulse-last>
<pulse-average>100.1</pulse-average>
<is-low-battery>false</is-low-battery>
<battery-percentage>67</battery-percentage>
<chunks>
<chunk>
<id>d43f3553-3732-4145-a8ec-f5e05c95a019</id>
<position>0</position>
<start>0</start>
<end>20001</end>
<oxygen>{"regular":{"waveform":{"values":[]}},"irregular":{"spo2":[96,56,95,1059,96,2060,96,3044,96,4045,96,5047,95,6072,95,7047,95,8047,95,9048,95,10046,95,11046,95,12058,96,13046,95,14061,95,15047,95,16047,95,17048,95,18056,96,19058],"pulse":[101,56,100,1059,100,2060,100,3044,101,4045,101,5047,102,6069,102,7047,102,8046,101,9047,100,10045,100,11045,99,12058,99,13046,99,14060,99,15046,99,16046,99,17048,99,18056,99,19058],"pulse_quality":[255,56,255,1059,255,2060,255,3044,255,4045,255,5047,255,6069,255,7047,255,8046,255,9047,255,10045,255,11045,255,12058,255,13046,255,14060,255,15046,255,16046,255,17048,255,18056,255,19058],"spo2_quality":[255,56,255,1059,255,2060,255,3044,255,4045,255,5047,255,6072,255,7047,255,8047,255,9048,255,10046,255,11046,255,12058,255,13046,255,14061,255,15047,255,16047,255,17048,255,18056,255,19058]}}</oxygen>
</chunk>
</chunks>
</measurements-oxygen-stream>
Attribute | Type | Description |
---|---|---|
measurement-duration | integer | Time in milliseconds from the start of the measurement (measured_at ) - whole measurement duration |
chunks | array[Chunk ] |
Array of chunks ordered by position attribute ascending. |
Chunk attributes:
Attribute | Type | Values | Description |
---|---|---|---|
id | string | UUID version 4 according to RFC 4122 | Unique chunk identifier |
position | integer | >= 0 | Each chunk has position from 0 to infinity - index number of chunk inside the measurement. Unique in scope of one measurement. |
start | integer | >= 0 | Time in milliseconds from the start of the measurement (measured_at ) when this chunk was started. |
end | integer | >= 0 | Time in milliseconds from the start of the measurement (measured_at ) when this chunk was ended. |
is-low-battery | boolean | true if low battery on Medical Device during this chunk was received. | |
battery-percentage | integer | 0..100 | Medical Device battery charge percentage during this chunk was received. |
Sensor API
With each measurement medical device / sensor information can be sent to describe data source.
<?xml version="1.0" encoding="UTF-8"?>
<sensor>
<name>A&D_UA-651BLE_7C195D</name>
<serial>5140500310</serial>
<address>20:CD:39:7C:19:5D</address>
<manufacturer>A&D Medical</manufacturer>
<model>UA-651BLE</model>
<firmware>BLP008_d016</firmware>
<hardware>0.00</hardware>
<device-db-title>UA-651BLE</device-db-title>
<device-db-id>144</device-db-id>
</sensor>
All attributes are optional strings without any strict formatting.
Attribute | Type | Description |
---|---|---|
name | string | Medical Device name |
serial | string | Serial number of the Medical Device |
address | string | Bluetooth/MAC address of the Medical Device |
manufacturer | string | Medical Device manufacturer |
model | string | Medical Device model |
firmware | string | Firmware version |
hardware | string | Hardware version |
device-db-title | string | Title according client database |
device-db-id | string | Class device id according client database |
Activity Tracking
Stream Measurement Type
Model
<?xml version="1.0" encoding="UTF-8"?>
<measurements-activity-stream>
<id>0d786650-7971-4c78-9c46-80bef4c764a7</id>
<instance-id>ae770afe-2e21-4f31-b410-2c2f5006b5b1</instance-id>
<measured-at>2019-07-13T07:00:00.000000000+00:00</measured-at>
<measured-at-local>2019-07-13T00:00:00.000000000-07:00</measured-at-local>
<measured-at-utc-offset>-25200</measured-at-utc-offset>
<client-received-at>2019-07-13T07:02:03.098145000+00:00</client-received-at>
<client-received-at-local>2019-07-13T00:02:03.098145000-07:00</client-received-at-local>
<client-received-at-utc-offset>-25200</client-received-at-utc-offset>
<measurement-duration>44760327</measurement-duration>
<active-time>1860326</active-time>
<steps>3568</steps>
<climb>0</climb>
<distance>2511</distance>
<calories>4289</calories>
<walking-burnt-calories>2670</walking-burnt-calories>
<daily-body-burnt-calories>1619</daily-body-burnt-calories>
<chunks>
<chunk>
<id>69a1f362-4342-4a5f-a571-0aeb3ac8bf54</id>
<position>29340001</position>
<start>29340001</start>
<end>29400001</end>
<activity>{"irregular":{"climbs":[],"steps":[0,0,50,59999]}}</activity>
</chunk>
<chunk>
<id>ba45d24b-a719-4342-8305-12e7119953fe</id>
<position>29640001</position>
<start>29640001</start>
<end>29700001</end>
<activity>{"irregular":{"climbs":[],"steps":[0,0,40,59999]}}</activity>
</chunk>
<chunk>
<id>ea963486-5ee1-4540-a254-7e1ae0240faa</id>
<position>33060001</position>
<start>33060001</start>
<end>33300001</end>
<activity>{"irregular":{"climbs":[],"steps":[0,0,473,239999]}}</activity>
</chunk>
<chunk>
<id>2d7a334c-aeb5-4b90-8223-476f1e0a0706</id>
<position>44580001</position>
<start>44580001</start>
<end>44760327</end>
<activity>{"irregular":{"climbs":[],"steps":[0,0,313,119999,44,180325]}}</activity>
</chunk>
</chunks>
</measurements-activity-stream>
Attribute | Type | Values | Description |
---|---|---|---|
active-time | integer | >=0 | Activity duration in milliseconds |
steps | integer | >=0 | Number of steps |
climb | integer | >=0 | Total climb height in meters |
distance | integer | >=0 | Total distance in meters |
calories | integer | >=0 | Total Calories Burned (kcal) |
walking-burnt-calories | integer | >=0 | Calories Burned by walking (tracked with fitness tracker or accelerometer) (kcal) |
daily-body-burnt-calories | integer | >=0 | Calories Burned by the body itself (kcal) |
Each chunk
includes activity
container with data in the internal format (JSON compatible).
{
"irregular": {
"climbs": [
],
"steps": [
0,
0,
50,
59999
]
}
}
Activity stream does not have stable data rate, so it is considered irregular data.
climbs
and steps
arrays consist of flatten value/time pairs: even items are values
and odd ones are times in milliseconds from the start of the chunk: [v0, t0, v1, t1, ... , vn, tn]
There is special summary kind of activity streams that has no chunks
tag.
Summary activity corresponds to the values currently shown on the device, like today's steps, calories and so on.
The exact steps
values in chunks will be reported after the device agrregates hem to the history.
Blood Coagulation
Discrete Measurement Type
Model
<?xml version="1.0" encoding="UTF-8"?>
<measurements-blood-coagulation>
<id>6c5071e0-c136-4e20-976a-f873e3d36408</id>
<instance-id>ae770afe-2e21-4f31-b410-2c2f5006b5b1</instance-id>
<measured-at>2021-09-21T11:05:18.079000000+00:00</measured-at>
<measured-at-local>2021-09-21T18:05:18.079000000-07:00</measured-at-local>
<measured-at-utc-offset>-25200</measured-at-utc-offset>
<client-received-at>2021-09-21T11:05:03.098145000+00:00</client-received-at>
<client-received-at-local>2021-09-21T18:05:03.098145000-07:00</client-received-at-local>
<client-received-at-utc-offset>-25200</client-received-at-utc-offset>
<pt>11.0</pt>
<inr>0.9</inr>
</measurements-blood-coagulation>
Attribute | Type | Values | Description |
---|---|---|---|
pt | float | 0..30 | Original PT received |
inr | float | 0..10 | Original INR received |
Blood Pressure
Discrete Measurement Type
Model
<?xml version="1.0" encoding="UTF-8"?>
<measurements-bloodpressure>
<id>c402e177-95c9-493b-b12f-7b4ef42d0add</id>
<instance-id>ae770afe-2e21-4f31-b410-2c2f5006b5b1</instance-id>
<measured-at>2019-08-11T14:21:00.000000000+00:00</measured-at>
<measured-at-local>2019-08-11T07:21:00.000000000-07:00</measured-at-local>
<measured-at-utc-offset>-25200</measured-at-utc-offset>
<client-received-at>2019-08-11T14:21:03.098145000+00:00</client-received-at>
<client-received-at-local>2019-08-11T07:21:03.098145000-07:00</client-received-at-local>
<client-received-at-utc-offset>-25200</client-received-at-utc-offset>
<systolic>113</systolic>
<diastolic>77</diastolic>
<pulse>81</pulse>
<predefined-tags-str>measured_arm_left, body_position_sitting</predefined-tags-str>
<is-low-battery>false</is-low-battery>
<battery-percentage>67</battery-percentage>
<sensor>
<name>com.taidoc.taidocbus.bp</name>
<serial>3128213440001333</serial>
<address>8C:DE:52:30:55:94</address>
<manufacturer>TaiDoc</manufacturer>
<model>3128</model>
<device-db-title>TD-3128</device-db-title>
<device-db-id>95</device-db-id>
</sensor>
</measurements-bloodpressure>
Attribute | Type | Values | Description |
---|---|---|---|
systolic | integer | 0..300 | Systolic Blood Pressure |
diastolic | integer | 0..300 | Diastolic Blood Pressure |
pulse | integer | 0..300 | Pulse |
predefined-tags-str | string | feeling_good, feeling_normal, feeling_bad, body_position_sitting, body_position_standing, body_position_supine, measured_arm_left, measured_arm_right, cuff_position_upper_arm, cuff_position_wrist | Comma-separated list of predefined tags |
Cholesterol
Discrete Measurement Type
Model
<?xml version="1.0" encoding="UTF-8"?>
<measurements-cholesterol>
<id>6c5071e0-c136-4e20-976a-f873e3d36408</id>
<instance-id>ae770afe-2e21-4f31-b410-2c2f5006b5b1</instance-id>
<measured-at>2020-05-21T15:05:18.079000000+00:00</measured-at>
<measured-at-local>2020-05-21T08:05:18.079000000-07:00</measured-at-local>
<measured-at-utc-offset>-25200</measured-at-utc-offset>
<client-received-at>2020-05-21T15:05:25.079000000+00:00</client-received-at>
<client-received-at-local>2020-05-21T08:05:25.074000000-07:00</client-received-at-local>
<client-received-at-utc-offset>-25200</client-received-at-utc-offset>
<value>1.0</value>
<units>mmol</units>
<value-in-mg>39</value-in-mg>
<value-in-mmol>1.0</value-in-mmol>
<hematocrit>nil</hematocrit>
<sensor>
<name>TAIDOC TD4289</name>
<serial>45393831313536000000</serial>
<address>C0:26:DA:03:5C:E2</address>
<manufacturer>TaiDoc/FORA</manufacturer>
<firmware>V1.2.29</firmware>
<device-db-title>TD-4289</device-db-title>
<device-db-id>520</device-db-id>
</sensor>
</measurements-cholesterol>
Attribute | Type | Values | Description |
---|---|---|---|
value | float | Original or converted value | |
units | string | mg, mmol | Original or converted units |
value-in-mg | float | Blood cholesterol value in mg/dL | |
value-in-mmol | float | Blood cholesterol value in mmol/L | |
hematocrit | float | Hematocrit value percentage |
Electrocardiogram (ECG)
Stream Measurement Type
Model
<?xml version="1.0" encoding="UTF-8"?>
<measurements-ecg-stream>
<id>f3b376dc-95ea-4ae4-b0da-3223b59b175c</id>
<instance-id>ae770afe-2e21-4f31-b410-2c2f5006b5b1</instance-id>
<measured-at>2019-08-07T03:31:50.487000000+00:00</measured-at>
<measured-at-local>2019-08-06T20:31:50.487000000-07:00</measured-at-local>
<measured-at-utc-offset>-25200</measured-at-utc-offset>
<client-received-at>2019-08-07T03:31:03.098145000+00:00</client-received-at>
<client-received-at-local>2019-08-06T20:31:03.098145000-07:00</client-received-at-local>
<client-received-at-utc-offset>-25200</client-received-at-utc-offset>
<measurement-duration>1520</measurement-duration>
<channels>
<channel>I</channel>
<channel>II</channel>
<channel>III</channel>
<channel>V</channel>
</channels>
<chunks>
<chunk>
<id>6f1ada73-4535-4f40-93df-8508572e722d</id>
<position>0</position>
<start>0</start>
<end>1520</end>
<ecg>{"regular":{"meta":{"channels":["I","II","III","V"],"voltage_min":-3300,"value_min":0,"frequency":100,"voltage_max":3300,"value_max":4095},"leads":[{"values":[2040,2042,2048,2047,2058,2063,2066,2066,2066,2071,2070,2074,2069,2074,2073,2051,2026,2027,2037,2039,2045,2077,2118,2117,2095,2081,2060,2033,1927,1724,1606,1765,2058,2205,2212,2185,2186,2175,2150,2131,2110,2083,2070,2076,2086,2083,2064,2043,2029,2035,2043,2042,2039,2025,2016,2006,2016,2036,2061,2068,2042,2018,2025,2035,2041,2042,2053,2060,2057,2047,2043,2038,2047,2060,2065,2073,2066,2045,2029,2018,2016,2046,2070,2086,2094,2101,2091,2084,2092,2070,1927,1684,1569,1757,2057,2220,2250,2233,2205,2165,2144,2142,2132,2118,2101,2097,2089,2075,2067,2079,2081,2061,2047,2035,2039,2045,2055,2051,2043,2040,2017,2005,2025,2054,2062,2052,2034,2031,2028,2021,2039,2064,2060,2057,2065,2061,2059,2058,2056,2045,2037,2029,2032,2047,2069,2081,2108,2119,2094,2082,2064,1990]},{"values":[2440,2442,2448,2447,2458,2463,2466,2466,2466,2471,2470,2474,2469,2474,2473,2451,2426,2427,2437,2439,2445,2477,2518,2517,2495,2481,2460,2433,2327,2124,2006,2165,2458,2605,2612,2585,2586,2575,2550,2531,2510,2483,2470,2476,2486,2483,2464,2443,2429,2435,2443,2442,2439,2425,2416,2406,2416,2436,2461,2468,2442,2418,2425,2435,2441,2442,2453,2460,2457,2447,2443,2438,2447,2460,2465,2473,2466,2445,2429,2418,2416,2446,2470,2486,2494,2501,2491,2484,2492,2470,2327,2084,1969,2157,2457,2620,2650,2633,2605,2565,2544,2542,2532,2518,2501,2497,2489,2475,2467,2479,2481,2461,2447,2435,2439,2445,2455,2451,2443,2440,2417,2405,2425,2454,2462,2452,2434,2431,2428,2421,2439,2464,2460,2457,2465,2461,2459,2458,2456,2445,2437,2429,2432,2447,2469,2481,2508,2519,2494,2482,2464,2390]},{"values":[1960,1958,1952,1953,1942,1937,1934,1934,1934,1929,1930,1926,1931,1926,1927,1949,1974,1973,1963,1961,1955,1923,1882,1883,1905,1919,1940,1967,2073,2276,2394,2235,1942,1795,1788,1815,1814,1825,1850,1869,1890,1917,1930,1924,1914,1917,1936,1957,1971,1965,1957,1958,1961,1975,1984,1994,1984,1964,1939,1932,1958,1982,1975,1965,1959,1958,1947,1940,1943,1953,1957,1962,1953,1940,1935,1927,1934,1955,1971,1982,1984,1954,1930,1914,1906,1899,1909,1916,1908,1930,2073,2316,2431,2243,1943,1780,1750,1767,1795,1835,1856,1858,1868,1882,1899,1903,1911,1925,1933,1921,1919,1939,1953,1965,1961,1955,1945,1949,1957,1960,1983,1995,1975,1946,1938,1948,1966,1969,1972,1979,1961,1936,1940,1943,1935,1939,1941,1942,1944,1955,1963,1971,1968,1953,1931,1919,1892,1881,1906,1918,1936,2010]},{"values":[1740,1742,1748,1747,1758,1763,1766,1766,1766,1771,1770,1774,1769,1774,1773,1751,1726,1727,1737,1739,1745,1777,1818,1817,1795,1781,1760,1733,1627,1424,1306,1465,1758,1905,1912,1885,1886,1875,1850,1831,1810,1783,1770,1776,1786,1783,1764,1743,1729,1735,1743,1742,1739,1725,1716,1706,1716,1736,1761,1768,1742,1718,1725,1735,1741,1742,1753,1760,1757,1747,1743,1738,1747,1760,1765,1773,1766,1745,1729,1718,1716,1746,1770,1786,1794,1801,1791,1784,1792,1770,1627,1384,1269,1457,1757,1920,1950,1933,1905,1865,1844,1842,1832,1818,1801,1797,1789,1775,1767,1779,1781,1761,1747,1735,1739,1745,1755,1751,1743,1740,1717,1705,1725,1754,1762,1752,1734,1731,1728,1721,1739,1764,1760,1757,1765,1761,1759,1758,1756,1745,1737,1729,1732,1747,1769,1781,1808,1819,1794,1782,1764,1690]}]}}</ecg>
</chunk>
</chunks>
</measurements-ecg-stream>
Attribute | Type | Description |
---|---|---|
channels | array[string] | Array of available ECG channels in this measurement |
Each chunk includes ecg
container with data in the internal format (JSON compatible).
ecg
container within achunk
{
"regular": {
"meta": {
"channels": ["I","II","III","AVR","AVL","AVF","V1","V2","V3","V4","V5","V6"],
"voltage_min": -1500,
"value_min": -4095,
"frequency": 500,
"voltage_max": 1500,
"value_max": 5978
},
"leads": [
{"values": [4647,4914,4250,2985,1655,<...>,1696,413,1,0,2197,2857,2861,2857,2857]},
{"values": [5978,5978,5978,1775,103,<...>,392,0,0,0,1960,5628,5978,5978,5978,3658]},
{"values": [912,729,1184,-829,-1063,<...>,-221,0,0,1068,1553,897,712,1160,-838]},
{"values": [3639,3730,3503,1630,602,<...>,110,0,0,2085,3318,3646,3739,3515,1661]},
{"values": [1136,1319,864,1437,1099,<...>,221,0,0,242,495,1151,1336,888,1459,1130]},
{"values": [2504,2412,2640,194,-496,<...>,1844,2824,2496,2404,2628,202,-509,-217]},
{"values": [1669,1608,1760,46,-336,<...>,1883,1664,1603,1752,52,-344,-145,-48,-219]},
{"values": [-472,-531,-382,861,1542,<...>,1883,1957,1956,566,-253,-467,-524,-378]},
{"values": [-1294,-1353,-1205,43,726,<...>,51,742,1061,1132,1138,-249,-1070,-1296]},
{"values": [-1042,-1115,-967,288,968,<...>,1303,1366,1370,-17,-844,-1075,-1125]},
{"values": [-2425,-2486,-2334,-1086,<...>,-2463,-2318,-1083,-389,-72,1,1,-1389]},
{"values": [-2426,-2487,-2335,-1087,<...>,-2319,-1084,-390,-73,0,0,-1390,-2212]}
]
}
}
As ecg stream has constant frequency, it is considered regular data.
Meta Attributes
Attribute | Type | Description |
---|---|---|
channels | array[string] | Array of available ECG channels in this chunk |
voltage_min | integer | Minimal voltage value, mV |
value_min | integer | Minimal allowed value inside each ECG lead |
frequency | integer | ECG points per second |
voltage_max | integer | Maximum voltage value, mV |
value_max | integer | Maximum allowed value inside each ECG lead |
leads
is an array of ECG leads ordered the same way as meta's channels
, and its each item contains the values
array - ECG points of the lead.
Fetal Doppler
Stream Measurement Type
Model
<?xml version="1.0" encoding="UTF-8"?>
<measurements-fetal-doppler-stream>
<id>2ef5b268-81ae-4bf4-bfea-77e5d0aeebd3</id>
<instance-id>ae770afe-2e21-4f31-b410-2c2f5006b5b1</instance-id>
<measured-at>2019-04-23T03:04:04.146000000+00:00</measured-at>
<measured-at-local>2019-04-22T20:04:04.146000000-07:00</measured-at-local>
<measured-at-utc-offset>-25200</measured-at-utc-offset>
<client-received-at>2019-04-23T03:04:04.146000000+00:00</client-received-at>
<client-received-at-local>2019-04-22T20:04:04.146000000-07:00</client-received-at-local>
<client-received-at-utc-offset>-25200</client-received-at-utc-offset>
<measurement-duration>6000</measurement-duration>
<pulse-last>130</pulse-last>
<pulse-min>105</pulse-min>
<pulse-max>157</pulse-max>
<pulse-average>134.5</pulse-average>
<chunks>
<chunk>
<id>70b0928e-0421-40f7-8ac4-6112af000938</id>
<position>0</position>
<start>0</start>
<end>3000</end>
<heartrate>{"irregular":{"pulse":[113,990,147,1990,157,2990],"pulse_quality":[255,990,255,1990,255,2990]}}</heartrate>
</chunk>
<chunk>
<id>343eb010-9ebe-4ceb-a76f-9a8d020e4128</id>
<position>1</position>
<start>3000</start>
<end>6000</end>
<heartrate>{"irregular":{"pulse":[105,1015,155,1989,130,2989],"pulse_quality":[255,1015,255,1989,255,2989]}}</heartrate>
</chunk>
</chunks>
</measurements-fetal-doppler-stream>
Attribute | Type | Values | Description |
---|---|---|---|
pulse-last | integer | 0..300 | Pulse rate (beats per minute) at the end of the measurement |
pulse-min | integer | 0..300 | Minimum pulse rate (beats per minute) during the measurement |
pulse-max | integer | 0..300 | Maximum pulse rate (beats per minute) during the measurement |
pulse-average | float | 0..300 | Average pulse rate (beats per minute) during the measurement |
Each chunk
includes heartrate
container with data in the internal format (JSON compatible):
{
"irregular": {
"pulse": [
105,
1015,
155,
1989,
130,
2989
],
"pulse_quality": [
255,
1015,
255,
1989,
255,
2989
]
}
}
Fetal doppler has no stable data rate, so data is considered irregular.
pulse
is an array of flatten value/time pairs: even items are pulse values
and odd ones are times in milliseconds from the start of the chunk: [v0, t0, v1, t1, ... , vn, tn]
pulse_quality
is an additional quality stream. It's an array of value/time pairs that corresponds by length and times to the pulse
array:
- if the value is 255 - corresponding pulse value is qualified (signal is strong and not ambiguous)
- if the value is any other integer - corresponding pulse value is ambiguous and cannot be used as real vital sign value.
Glucose
Discrete Measurement Type
Model
<?xml version="1.0" encoding="UTF-8"?>
<measurements-glucose>
<id>6c5071e0-c136-4e20-976a-f873e3d36408</id>
<instance-id>ae770afe-2e21-4f31-b410-2c2f5006b5b1</instance-id>
<measured-at>2019-07-22T01:05:18.079000000+00:00</measured-at>
<measured-at-local>2019-07-21T18:05:18.079000000-07:00</measured-at-local>
<measured-at-utc-offset>-25200</measured-at-utc-offset>
<client-received-at>2019-07-22T01:05:03.098145000+00:00</client-received-at>
<client-received-at-local>2019-07-21T18:05:03.098145000-07:00</client-received-at-local>
<client-received-at-utc-offset>-25200</client-received-at-utc-offset>
<value>96.0</value>
<units>mg</units>
<value-in-mg>96</value-in-mg>
<value-in-mmol>5.3</value-in-mmol>
<state>unknown</state>
<sensor>
<name>H3GMA_BAYER_2.6_1017F3</name>
<serial>45393831313536000000</serial>
<address>00:80:25:10:17:F3</address>
<manufacturer>H3 System Co., Ltd.</manufacturer>
<firmware>Ver 2.6</firmware>
<device-db-title>BA-110 for Bayer</device-db-title>
<device-db-id>153</device-db-id>
</sensor>
</measurements-glucose>
Attribute | Type | Values | Description |
---|---|---|---|
value | float | Original or converted value | |
units | string | mg, mmol | Original or converted units |
value-in-mg | float | Blood glucose value in mg/dL | |
value-in-mmol | float | Blood glucose value in mmol/L | |
state | string | unknown, before_meals, after_meals, fasting, bedtime, snacks | Meal state (before, after, fasting) |
Heart Rate
Stream Measurement Type
Model
<?xml version="1.0" encoding="UTF-8"?>
<measurements-heartrate-stream>
<id>c451a714-b233-45e1-ab56-df212d4bce8c</id>
<instance-id>ae770afe-2e21-4f31-b410-2c2f5006b5b1</instance-id>
<measured-at>2019-07-14T23:16:40.404000000+00:00</measured-at>
<measured-at-local>2019-07-14T16:16:40.404000000-07:00</measured-at-local>
<measured-at-utc-offset>-25200</measured-at-utc-offset>
<client-received-at>2019-07-14T23:16:40.404000000+00:00</client-received-at>
<client-received-at-local>2019-07-14T16:16:40.404000000-07:00</client-received-at-local>
<client-received-at-utc-offset>-25200</client-received-at-utc-offset>
<measurement-duration>6002</measurement-duration>
<pulse-last>102</pulse-last>
<pulse-min>102</pulse-min>
<pulse-max>102</pulse-max>
<pulse-average>102</pulse-average>
<chunks>
<chunk>
<id>652bb758-cd2b-434e-838d-e8756d7e68ca</id>
<position>0</position>
<start>0</start>
<end>3003</end>
<heartrate>{"irregular":{"pulse":[102,2076],"pulse_quality":[255,2076]}}</heartrate>
</chunk>
<chunk>
<id>d39e139a-01d1-454e-b2f4-c1f7020899e6</id>
<position>1</position>
<start>3003</start>
<end>6002</end>
<heartrate>{"irregular":{"pulse":[102,48,102,1057,102,2083],"pulse_quality":[255,48,255,1057,255,2083]}}</heartrate>
</chunk>
</chunks>
</measurements-heartrate-stream>
Attribute | Type | Values | Description |
---|---|---|---|
pulse-last | integer | 0..300 | Pulse rate (beats per minute) at the end of the measurement |
pulse-min | integer | 0..300 | Minimum pulse rate (beats per minute) during the measurement |
pulse-max | integer | 0..300 | Maximum pulse rate (beats per minute) during the measurement |
pulse-average | float | 0..300 | Average pulse rate (beats per minute) during the measurement |
Each chunk
includes heartrate
container with data in the internal format (JSON compatible):
{
"irregular": {
"pulse": [
102,
48,
102,
1057,
102,
2083
],
"pulse_quality": [
255,
48,
255,
1057,
255,
2083
]
}
}
heartrate
container within achunk
{
"irregular": {
"pulse": [ 102, 48, 102, 1057, 102, 2083 ],
"pulse_quality": [ 255, 48, 255, 1057, 255, 2083 ]
}
}
Heart Rate monitors have no constant data rate so data is considered irregular.
pulse
is an array of flattened value/time pairs: even items are pulse values
and odd ones are times in milliseconds from the start of the chunk: [v0, t0, v1, t1, ... , vn, tn]
pulse_quality
is an additional quality stream (optional). It's an array of value/time pairs that corresponds by length and times to the pulse
array:
- if the value is 255 - corresponding pulse value is of high quality (signal is strong and not ambiguous)
- if the value is any other integer - corresponding pulse value is ambiguous and cannot be used as real vital sign value.
Ketone
Discrete Measurement Type
Model
<?xml version="1.0" encoding="UTF-8"?>
<measurements-ketone>
<id>6c5071e0-c136-4e20-976a-f873e3d36408</id>
<instance-id>ae770afe-2e21-4f31-b410-2c2f5006b5b1</instance-id>
<measured-at>2020-05-21T15:05:18.079000000+00:00</measured-at>
<measured-at-local>2020-05-21T08:05:18.079000000-07:00</measured-at-local>
<measured-at-utc-offset>-25200</measured-at-utc-offset>
<client-received-at>2020-05-21T15:05:25.079000000+00:00</client-received-at>
<client-received-at-local>2020-05-21T08:05:25.074000000-07:00</client-received-at-local>
<client-received-at-utc-offset>-25200</client-received-at-utc-offset>
<value>0.1</value>
<units>mmol</units>
<value-in-mmol>0.1</value-in-mmol>
<hematocrit>22</hematocrit>
<sensor>
<name>TAIDOC TD4289</name>
<serial>45393831313536000000</serial>
<address>C0:26:DA:03:5C:E2</address>
<manufacturer>TaiDoc/FORA</manufacturer>
<firmware>V1.2.29</firmware>
<device-db-title>TD-4289</device-db-title>
<device-db-id>520</device-db-id>
</sensor>
</measurements-ketone>
Attribute | Type | Values | Description |
---|---|---|---|
value | float | Original or converted value | |
units | string | mmol | Original or converted units |
value-in-mmol | float | Blood ketone value in mmol/L | |
hematocrit | float | Hematocrit value percentage |
Lactate
Discrete Measurement Type
Model
<?xml version="1.0" encoding="UTF-8"?>
<measurements-lactate>
<id>6c5071e0-c136-4e20-976a-f873e3d36408</id>
<instance-id>ae770afe-2e21-4f31-b410-2c2f5006b5b1</instance-id>
<measured-at>2020-05-21T15:05:18.079000000+00:00</measured-at>
<measured-at-local>2020-05-21T08:05:18.079000000-07:00</measured-at-local>
<measured-at-utc-offset>-25200</measured-at-utc-offset>
<client-received-at>2020-05-21T15:05:25.079000000+00:00</client-received-at>
<client-received-at-local>2020-05-21T08:05:25.074000000-07:00</client-received-at-local>
<client-received-at-utc-offset>-25200</client-received-at-utc-offset>
<value>0.1</value>
<units>mmol</units>
<value-in-mmol>0.1</value-in-mmol>
<hematocrit>22</hematocrit>
<sensor>
<name>TAIDOC TD4289</name>
<serial>45393831313536000000</serial>
<address>C0:26:DA:03:5C:E2</address>
<manufacturer>TaiDoc/FORA</manufacturer>
<firmware>V1.2.29</firmware>
<device-db-title>TD-4289</device-db-title>
<device-db-id>520</device-db-id>
</sensor>
</measurements-lactate>
Attribute | Type | Values | Description |
---|---|---|---|
value | float | Original or converted value | |
units | string | mmol | Original or converted units |
value-in-mmol | float | Blood lactate value in mmol/L | |
hematocrit | float | Hematocrit value percentage |
Note
Discrete Measurement Type
Model
<?xml version="1.0" encoding="UTF-8"?>
<measurements-note>
<id>51af6035-4779-4e84-b854-a05566e3e713</id>
<instance-id>ae770afe-2e21-4f31-b410-2c2f5006b5b1</instance-id>
<measured-at>2019-07-22T01:05:18.079000000+00:00</measured-at>
<measured-at-local>2019-07-21T18:05:18.079000000-07:00</measured-at-local>
<measured-at-utc-offset>-25200</measured-at-utc-offset>
<client-received-at>2019-07-22T01:05:03.098145000+00:00</client-received-at>
<client-received-at-local>2019-07-21T18:05:03.098145000-07:00</client-received-at-local>
<client-received-at-utc-offset>-25200</client-received-at-utc-offset>
<sensor>
<name>generic glucose</name>
<address>00:80:25:10:17:F3</address>
<device-db-id>67</device-db-id>
<device-db-title>Generic Glucose Meter Smart</device-db-title>
<manufacturer>Unknown Manufacturer</manufacturer>
</sensor>
<predefined-tags-str>scope_glucose,glucose_qc</predefined-tags-str>
<body>14.4 mmol/L</body>
</measurements-note>
Attribute | Type | Values | Description |
---|---|---|---|
body | string | Arbitrary text | Text content of the note |
Note measurement could be result of some non-medical data received from the device, like Quality Control of glucose.
Oxygen Saturation
Stream Measurement Type
Model
<?xml version="1.0" encoding="UTF-8"?>
<measurements-oxygen-stream>
<id>86735ebc-d752-4110-89f6-e06d5519e9d2</id>
<instance-id>ae770afe-2e21-4f31-b410-2c2f5006b5b1</instance-id>
<measured-at>2019-08-09T16:10:09.751000000+00:00</measured-at>
<measured-at-local>2019-08-09T11:10:09.751000000-05:00</measured-at-local>
<measured-at-utc-offset>-18000</measured-at-utc-offset>
<client-received-at>2019-08-09T16:10:09.751000000+00:00</client-received-at>
<client-received-at-local>2019-08-09T11:10:09.751000000-05:00</client-received-at-local>
<client-received-at-utc-offset>-18000</client-received-at-utc-offset>
<measurement-duration>20001</measurement-duration>
<spo2-min>95</spo2-min>
<spo2-max>98</spo2-max>
<spo2-last>96</spo2-last>
<spo2-average>95.35</spo2-average>
<pulse-min>96</pulse-min>
<pulse-max>102</pulse-max>
<pulse-last>98</pulse-last>
<pulse-average>100.1</pulse-average>
<is-low-battery>false</is-low-battery>
<battery-percentage>67</battery-percentage>
<chunks>
<chunk>
<id>d43f3553-3732-4145-a8ec-f5e05c95a019</id>
<position>0</position>
<start>0</start>
<end>20001</end>
<oxygen>{"regular":{"waveform":{"values":[]}},"irregular":{"spo2":[96,56,95,1059,96,2060,96,3044,96,4045,96,5047,95,6072,95,7047,95,8047,95,9048,95,10046,95,11046,95,12058,96,13046,95,14061,95,15047,95,16047,95,17048,95,18056,96,19058],"pulse":[101,56,100,1059,100,2060,100,3044,101,4045,101,5047,102,6069,102,7047,102,8046,101,9047,100,10045,100,11045,99,12058,99,13046,99,14060,99,15046,99,16046,99,17048,99,18056,99,19058],"pulse_quality":[255,56,255,1059,255,2060,255,3044,255,4045,255,5047,255,6069,255,7047,255,8046,255,9047,255,10045,255,11045,255,12058,255,13046,255,14060,255,15046,255,16046,255,17048,255,18056,255,19058],"spo2_quality":[255,56,255,1059,255,2060,255,3044,255,4045,255,5047,255,6072,255,7047,255,8047,255,9048,255,10046,255,11046,255,12058,255,13046,255,14061,255,15047,255,16047,255,17048,255,18056,255,19058]}}</oxygen>
</chunk>
</chunks>
</measurements-oxygen-stream>
Attribute | Type | Values | Description |
---|---|---|---|
spo2-min | integer | 0..100 | Minimum oxygen saturation value (%) during the measurement |
spo2-max | integer | 0..100 | Maximum oxygen saturation value (%) during the measurement |
spo2-last | integer | 0..100 | Oxygen saturation value (%) at the end of the measurement |
spo2-average | float | 0..300 | Average oxygen saturation value (%) during the measurement |
pulse-min | integer | 0..300 | Minimum pulse value (bpm) during the measurement |
pulse-max | integer | 0..300 | Maximum pulse value (bpm) during the measurement |
pulse-last | integer | 0..300 | Pulse value (bpm) at the end of the measurement |
pulse-average | float | 0..300 | Average pulse rate (beats per minute) during the measurement |
Each chunk includes oxygen
container with data in the internal format (JSON compatible):
oxygen
container within achunk
{
"regular": {
"waveform": {
"meta": {
"value_min": 0, "offset": 0, "frequency": 75, "value_max": 65535
},
"values": [
48242,51721,54736,57127,58882,60002,60378,59977,58945,57540,55927,54186,52309,50262,47991,45515,42954,40485,38288,
36483,35085,34044,33289,32736,32308,25852,25921,25981,26014,26012,25996,25991,26021,26115,26324,26724,27398,28406,
<...>
47911,52265,55473,57315,57862,57338,56034,54267,52283,50242,48224,46246,44293,42364,40511,38827,37420,36367,35692,
35355,35278,35392,35648,35999,36377,36699,36877,36829,36495,35865,34972,33880,32672,31427,30200,29014,27877,26786
]
}
},
"irregular": {
"spo2": [
97,333,97,666,97,1000,97,1333,97,1666,97,2000,97,2333,97,2666,97,3000,97,3333,98,3666,98,4000,98,4333,98,4666,98,5000,
98,5333,98,5666,98,6000,98,6333,98,6666,98,7000,98,7333,98,7666,98,8000,98,8333,97,8666,97,9000,97,9333,97,9666,97,
10000,97,10333,97,10666,97,11000,97,11333,97,11666,97,12000,97,12333,97,12666
],
"pulse": [
83,333,83,666,83,1000,83,1333,83,1666,83,2000,83,2333,81,2666,81,3000,81,3333,80,3666,80,4000,80,4333,80,4666,80,5000,
80,5333,80,5666,80,6000,80,6333,80,6666,79,7000,79,7333,79,7666,79,8000,79,8333,79,8666,79,9000,79,9333,79,9666,78,
10000,78,10333,78,10666,77,11000,77,11333,77,11666,76,12000,76,12333,74,12666
],
"pulse_quality": [
255,333,255,666,255,1000,255,1333,255,1666,255,2000,255,2333,255,2666,255,3000,255,3333,255,3666,255,4000,255,4333,255,
4666,255,5000,255,5333,255,5666,255,6000,255,6333,255,6666,255,7000,255,7333,255,7666,255,8000,255,8333,255,8666,255,
9000,255,9333,255,9666,255,10000,255,10333,255,10666,255,11000,255,11333,255,11666,255,12000,255,12333,255,12666
],
"spo2_quality": [
255,333,255,666,255,1000,255,1333,255,1666,255,2000,255,2333,255,2666,255,3000,255,3333,255,3666,255,4000,255,4333,255,
4666,255,5000,255,5333,255,5666,255,6000,255,6333,255,6666,255,7000,255,7333,255,7666,255,8000,255,8333,255,8666,255,
9000,255,9333,255,9666,255,10000,255,10333,255,10666,255,11000,255,11333,255,11666,255,12000,255,12333,255,12666
]
}
}
Oxygen saturation stream taken from pulse oximeter always has two irregular data types - spo2
and pulse
- and may have a regular one - waveform
.
As for waveform stream, it has stable frequency
, min
and max
values in its meta
but the exact meaning and interpretation of waveform data varies across different medical devices and is generally device vendor-specific.
spo2
and pulse
arrays consist of flattened value/time pairs: even items are values
and odd ones are times in milliseconds from the start of the chunk: [v0, t0, v1, t1, ... , vn, tn]
spo2_quality
and pulse_quality
are additional quality streams, some devices (for example, Nonin oximeters) can assign quality to pulse and oxygen saturation data.
These streams are arrays of value/time pairs that corresponds by length and times to the according spo2
and pulse
arrays:
- if the value is 255 - corresponding value is considered of high quality (signal is strong and not ambiguous)
- if the value is any other integer - corresponding stream value is ambiguous and cannot be used as real vital sign value.
Realtime Activity
Discrete Measurement Type
Model
<?xml version="1.0" encoding="UTF-8"?>
<measurements-realtime-activity>
<id>0d786650-7971-4c78-9c46-80bef4c764a7</id>
<instance-id>ae770afe-2e21-4f31-b410-2c2f5006b5b1</instance-id>
<measured-at>2019-07-13T07:00:00.000000000+00:00</measured-at>
<measured-at-local>2019-07-13T00:00:00.000000000-07:00</measured-at-local>
<measured-at-utc-offset>-25200</measured-at-utc-offset>
<client-received-at>2019-07-13T07:02:03.098145000+00:00</client-received-at>
<client-received-at-local>2019-07-13T00:02:03.098145000-07:00</client-received-at-local>
<client-received-at-utc-offset>-25200</client-received-at-utc-offset>
<measurement-duration>44760327</measurement-duration>
<active-time>1860326</active-time>
<steps>3568</steps>
<climb>0</climb>
<distance>2511</distance>
<calories>4289</calories>
<walking-burnt-calories>2670</walking-burnt-calories>
<daily-body-burnt-calories>1619</daily-body-burnt-calories>
</measurements-realtime-activity>
Attribute | Type | Values | Description |
---|---|---|---|
active-time | integer | >=0 | Activity duration in milliseconds |
steps | integer | >=0 | Number of steps |
climb | integer | >=0 | Total climb height in meters |
distance | integer | >=0 | Total distance in meters |
calories | integer | >=0 | Total Calories Burned (kcal) |
walking-burnt-calories | integer | >=0 | Calories Burned by walking (tracked with fitness tracker or accelerometer) (kcal) |
daily-body-burnt-calories | integer | >=0 | Calories Burned by the body itself (kcal) |
Realtime activity corresponds to the values currently shown on the device.
Realtime Spirometry
Discrete Measurement Type
Model
<?xml version="1.0" encoding="UTF-8"?>
<measurements-realtime-spirometry>
<id>2bd5addb-2baf-234a-b33a-af6430b300cd</id>
<instance-id>ae770afe-2e21-4f31-b410-2c2f5006b5b1</instance-id>
<measured-at>2018-04-29T17:10:27.040000000+00:00</measured-at>
<measured-at-local>2018-04-29T10:10:27.040000000-07:00</measured-at-local>
<measured-at-utc-offset>-25200</measured-at-utc-offset>
<client-received-at>2018-04-29T17:10:27.040000000+00:00</client-received-at>
<client-received-at-local>2018-04-29T10:10:27.040000000-07:00</client-received-at-local>
<client-received-at-utc-offset>-25200</client-received-at-utc-offset>
<spirometry>{"FEV6p":{"value":95.2,"units":"%"},"FEF25":{"value":474,"units":"cl/s"},"VTChart":{"Loops":{"Units":{"volume":"cl","time":"msec"},"Points":[[0,1,100,14,200,32,300,49,400,64,500,75,600,84,700,91,800,96,900,100,1000,102,1100,104,1200,105,1300,107,1400,107]]}},"MV":{"value":0,"units":"cl/m"},"FVC":{"value":271,"units":"cl"},"FEF75":{"value":214,"units":"cl/s"},"MVV":{"value":0,"units":"cl"},"FVCChart":{"Loops":{"Units":{"volume":"ml","flow":"cl/s"},"Points":[[2250,-49,2220,-71,2190,-87,2160,-103,2130,-118,2100,-131,2070,-143,2040,-154,2010,-163,1980,-168,1950,-174,1920,-180,1890,-186,1860,-191,1830,-195,1800,-198,1770,-201,1740,-203,1710,-205,1680,-206,1650,-207,1620,-207,1590,-206,1560,-203,1530,-201,1500,-201,1470,-203,1440,-204,1410,-204,1380,-203,1350,-202,1320,-201,1290,-203,1260,-206,1230,-208,1200,-209,1170,-209,1140,-210,1110,-213,1080,-216,1050,-218,1020,-219,990,-220,960,-220,930,-221,900,-224,870,-224,840,-226,810,-228,780,-229,750,-231,720,-232,690,-231,660,-230,630,-229,600,-229,570,-228,540,-228,510,-225,480,-223,450,-220,420,-218,390,-214,360,-210,330,-205,300,-199,270,-192,240,-185,210,-178,180,-170,150,-164,120,-156,90,-146,60,-134,30,-108,0,-85,30,51,60,171,90,257,120,291,150,320,180,348,210,361,240,376,270,391,300,405,330,413,360,426,390,439,420,442,450,450,480,462,510,464,540,461,570,467,600,462,630,465,660,468,690,474,720,475,750,467,780,463,810,465,840,449,870,446,900,446,930,438,960,434,990,431,1020,423,1050,416,1080,413,1110,410,1140,403,1170,397,1200,390,1230,384,1260,380,1290,371,1320,367,1350,363,1380,363,1410,358,1440,351,1470,342,1500,338,1530,330,1560,328,1590,326,1620,319,1650,313,1680,306,1710,299,1740,291,1770,282,1800,276,1830,264,1860,259,1890,253,1920,245,1950,238,1980,232,2010,222,2040,214,2070,208,2100,200,2130,195,2160,188,2190,181,2220,174,2250,162,2280,156,2310,148,2340,135,2370,127,2400,120,2430,110,2460,103,2490,90,2520,81,2550,69,2580,62,2610,56,2640,46,2670,40,2700,30],[2670,-29,2640,-36,2610,-59,2580,-89,2550,-113,2520,-132,2490,-144,2460,-151,2430,-156,2400,-159,2370,-161,2340,-165,2310,-167,2280,-170,2250,-172,2220,-175,2190,-177,2160,-180,2130,-183,2100,-184,2070,-183,2040,-181,2010,-180,1980,-179,1950,-178,1920,-176,1890,-175,1860,-175,1830,-175,1800,-175,1770,-175,1740,-176,1710,-177,1680,-177,1650,-177,1620,-177,1590,-177,1560,-176,1530,-176,1500,-176,1470,-176,1440,-175,1410,-174,1380,-173,1350,-172,1320,-170,1290,-169,1260,-169,1230,-169,1200,-170,1170,-172,1140,-172,1110,-173,1080,-173,1050,-173,1020,-171,990,-168,960,-167,930,-163,900,-159,870,-156,840,-152,810,-149,780,-147,750,-145,720,-141,690,-137,660,-133,630,-127,600,-122,570,-115,540,-99,510,-85,540,113,570,199,600,226,630,247,660,276,690,294,720,316,750,332,780,343,810,347,840,354,870,362,900,371,930,375,960,380,990,383,1020,386,1050,383,1080,379,1110,378,1140,377,1170,380,1200,382,1230,373,1260,363,1290,360,1320,355,1350,351,1380,345,1410,340,1440,336,1470,340,1500,331,1530,328,1560,326,1590,324,1620,326,1650,321,1680,311,1710,303,1740,302,1770,294,1800,286,1830,284,1860,279,1890,270,1920,258,1950,252,1980,247,2010,236,2040,234,2070,229,2100,225,2130,212,2160,201,2190,195,2220,186,2250,179,2280,169,2310,158,2340,150,2370,145,2400,136,2430,128,2460,121,2490,109,2520,102,2550,89,2580,79,2610,65,2640,57,2670,46,2700,40,2730,32,2760,27,2790,19,2820,7],[2790,-27,2760,-46,2730,-61,2700,-71,2670,-77,2640,-82,2610,-86,2580,-91,2550,-98,2520,-109,2490,-121,2460,-128,2430,-135,2400,-139,2370,-143,2340,-144,2310,-146,2280,-147,2250,-149,2220,-150,2190,-152,2160,-151,2130,-150,2100,-148,2070,-147,2040,-146,2010,-146,1980,-146,1950,-145,1920,-145,1890,-146,1860,-147,1830,-146,1800,-146,1770,-146,1740,-146,1710,-146,1680,-145,1650,-145,1620,-145,1590,-144,1560,-142,1530,-140,1500,-139,1470,-138,1440,-138,1410,-138,1380,-138,1350,-138,1320,-138,1290,-138,1260,-139,1230,-139,1200,-139,1170,-138,1140,-135,1110,-130,1080,-123,1050,-112,1020,-93,1050,55,1080,171,1110,243,1140,265,1170,287,1200,307,1230,327,1260,334,1290,342,1320,352,1350,355,1380,359,1410,366,1440,377,1470,384,1500,384,1530,389,1560,393,1590,397,1620,405,1650,397,1680,400,1710,399,1740,402,1770,394,1800,397,1830,392,1860,388,1890,391,1920,387,1950,386,1980,389,2010,384,2040,384,2070,378,2100,371,2130,366,2160,361,2190,354,2220,346,2250,340,2280,338,2310,331,2340,322,2370,318,2400,312,2430,307,2460,297,2490,294,2520,289,2550,280,2580,275,2610,272,2640,265,2670,258,2700,255,2730,247,2760,243,2790,232,2820,228,2850,221,2880,216,2910,211,2940,206,2970,198,3000,185,3030,176,3060,166,3090,158,3120,147,3150,138,3180,133,3210,128,3240,122,3270,113,3300,105,3330,96,3360,90,3390,85,3420,78,3450,73,3480,67,3510,61,3540,56,3570,39],[3540,-6]]},"BestLoop":{"Units":{"volume":"ml","flow":"cl/s"},"Points":[[0,81,50,250,100,319,150,344,200,369,250,401,300,407,350,438,400,445,450,457,500,457,550,457,600,463,650,470,700,463,750,457,800,445,850,445,900,432,950,426,1000,413,1050,407,1100,401,1150,388,1200,382,1250,369,1300,357,1350,357,1400,344,1450,332,1500,326,1550,319,1600,307,1650,300,1700,288,1750,275,1800,263,1850,250,1900,231,1950,231,2000,213,2050,194,2100,194,2150,175,2200,156,2250,150,2300,131,2350,119,2400,106,2450,87,2500,68,2550,56,2600,43,2550,0,2500,-12,2450,-31,2400,-87,2350,-112,2300,-137,2250,-150,2200,-156,2150,-163,2100,-169,2050,-169,2000,-175,1950,-181,1900,-181,1850,-175,1800,-175,1750,-175,1700,-169,1650,-169,1600,-169,1550,-175,1500,-175,1450,-175,1400,-175,1350,-175,1300,-175,1250,-169,1200,-169,1150,-169,1100,-163,1050,-163,1000,-169,950,-169,900,-169,850,-169,800,-163,750,-156,700,-156,650,-150,600,-144,550,-144,500,-131,450,-125,400,-119,350,-94,300,0]]}},"VCC":{"value":0,"units":"cl"},"TE":{"value":0,"units":"msec"},"FEV3p":{"value":100,"units":"%"},"PEFF":{"value":0,"units":"cl/s"},"IC":{"value":0,"units":"cl"},"ERV":{"value":0,"units":"cl"},"FVV12":{"value":0,"units":"cl"},"FIV1":{"value":196,"units":"cl"},"IVC":{"value":0,"units":"cl"},"FIV1p":{"value":88.3,"units":"%"},"FEF2575":{"value":364,"units":"cl/s"},"FEF50":{"value":363,"units":"cl/s"},"FET":{"value":131,"units":"msec"},"PIF":{"value":184,"units":"cl/s"},"FEV1":{"value":258,"units":"cl"},"EVC":{"value":0,"units":"cl"},"FIVC":{"value":222,"units":"cl"},"FVV1":{"value":0,"units":"cl"},"PEF":{"value":475,"units":"cl/s"},"FVV62":{"value":0,"units":"cl/s"},"TV_TI":{"value":0,"units":"l/s"},"TI":{"value":0,"units":"msec"},"FEV6":{"value":271,"units":"cl"},"PEFF2":{"value":0,"units":"cl/s"},"FVVC2":{"value":0,"units":"cl"},"FVV6":{"value":0,"units":"cl/s"},"TV":{"value":0,"units":"cl"},"FEV1p":{"value":95.2,"units":"%"},"FVVC":{"value":0,"units":"cl"},"VEXT":{"value":80,"units":"ml"},"MVVcalc":{"value":903,"units":"cl"},"FEV3":{"value":271,"units":"cl"},"IT":{"value":0,"units":"cl"},"VCC2":{"value":0,"units":"cl"}}</spirometry>
<drugs>pre</drugs>
<test-type>fvc</test-type>
<protocol>generic_spirometry</protocol>
</measurements-realtime-spirometry>
Realtime spirometry corresponds to all the data that is currently received by the SDK. The format is the same as Spirometry.
Respiration Rate
Stream Measurement Type
Model
<?xml version="1.0" encoding="UTF-8"?>
<measurements-respiration-rate-stream>
<id>93ed959e-1503-4320-ae19-8a114c2a24ba</id>
<instance-id>ae770afe-2e21-4f31-b410-2c2f5006b5b1</instance-id>
<measured-at>2019-09-17T10:47:38.060000000+00:00</measured-at>
<measured-at-local>2019-09-17T03:47:38.060000000-07:00</measured-at-local>
<measured-at-utc-offset>-25200</measured-at-utc-offset>
<client-received-at>2019-09-17T10:47:40.060000000+00:00</client-received-at>
<client-received-at-local>2019-09-17T03:47:40.060000000-07:00</client-received-at-local>
<client-received-at-utc-offset>-25200</client-received-at-utc-offset>
<measurement-duration>0</measurement-duration>
<units>breaths_per_minute</units>
<respiration-rates-min>16</respiration-rates-min>
<respiration-rates-max>16</respiration-rates-max>
<respiration-rates-last>16</respiration-rates-last>
<respiration-rates-amount>1</respiration-rates-amount>
<respiration-rates-average>16.0</respiration-rates-average>
<chunks>
<chunk>
<id>84233f9e-6826-40df-a209-490055e1d554</id>
<position>0</position>
<start>0</start>
<end>0</end>
<is-low-battery>false</is-low-battery>
<battery-percentage>76</battery-percentage>
<respiration-rate>{"irregular": {"respiration_rates": [16, 0], "respiration_rates_quality": [255, 0]}}</respiration-rate>
<respiration-rates-min>16</respiration-rates-min>
<respiration-rates-max>16</respiration-rates-max>
<respiration-rates-last>16</respiration-rates-last>
<respiration-rates-amount>16</respiration-rates-amount>
<respiration-rates-average>16.0</respiration-rates-average>
</chunk>
</chunks>
</measurements-respiration-rate-stream>
Attribute | Type | Values | Description |
---|---|---|---|
units | string | breaths_per_minute | Original units received |
respiration-rates-min | integer | Minimum respiration rate of the stream | |
respiration-rates-max | integer | Maximum respiration rate of the stream | |
respiration-rates-last | integer | Last respiration rate value of the stream | |
respiration-rates-amount | integer | The number of respiration rate points of the stream | |
respiration-rates-average | float | Average respiration rate value of the stream |
Each chunk
includes respiration_rate
container with data in the internal format (JSON compatible):
{
"irregular": {
"respiration_rates": [
12,
0,
13,
53
],
"respiration_rates_quality": [
255,
0,
255,
53
]
}
}
respiration rate
container within achunk
{
"irregular": {
"respiration_rates": [ 12, 0, 13, 53 ],
"respiration_rates_quality": [ 255, 0, 255, 53 ]
}
}
Respiration rate monitors have no constant data rate so data is considered irregular.
respiration_rates
is an array of flattened value/time pairs: even items are respiration rate values
and odd ones are times in milliseconds from the start of the chunk: [v0, t0, v1, t1, ... , vn, tn]
respiration_rates_quality
is an additional quality stream (optional). It's an array of value/time pairs that corresponds by length and times to the respiration_rates
array:
- if the value is 255 - corresponding respiration rate value is of high quality (signal is strong and not ambiguous)
- if the value is any other integer - corresponding respiration rate value is ambiguous and cannot be used as real vital sign value.
Sleep Tracking
Stream Measurement Type
Model
<?xml version="1.0" encoding="UTF-8"?>
<measurements-sleep-stream>
<id>06bd76a6-b276-4fa4-be64-98a9b22a0a2b</id>
<instance-id>a49c07ac-c8e9-455c-9ee7-a816485f2851</instance-id>
<measured-at>2019-09-24T06:55:00+00:00</measured-at>
<measured-at-local>2019-09-23T23:55:00-07:00</measured-at-local>
<measured-at-utc-offset>-25200</measured-at-utc-offset>
<client-received-at>2019-09-24T19:47:48+00:00</client-received-at>
<client-received-at-local>2019-09-24T12:47:48-07:00</client-received-at-local>
<client-received-at-utc-offset>-25200</client-received-at-utc-offset>
<measurement-duration>33900001</measurement-duration>
<movements>1108</movements>
<total-time>33900000</total-time>
<sleep-time>33000000</sleep-time>
<awakening-time>900000</awakening-time>
<sleep-efficiency>0.973451</sleep-efficiency>
<times-awakened>2</times-awakened>
<awakening-threshold>40</awakening-threshold>
<light-sleep-threshold>10</light-sleep-threshold>
<point-resolution>300000</point-resolution>
<is-final>true</is-final>
<chunks>
<chunk>
<chunk>
<id>5299644f-80da-41f0-9b3d-62522c6646ef</id>
<position>0</position>
<start>0</start>
<end>33900001</end>
<activity>{"irregular":{"movements":[12,300000,13,900000,4,1200000,15,1500000,1,2700000,26,3000000,28,3300000,9,3600000,14,3900000,17,4200000,8,4500000,6,4800000,12,5100000,25,5700000,10,6000000,5,6900000,49,7500000,5,7800000,12,8100000,15,9000000,31,9900000,5,10200000,25,11700000,5,12000000,14,12300000,2,12900000,20,14400000,5,15000000,23,15600000,10,16200000,2,17100000,25,17400000,10,17700000,15,18600000,2,18900000,30,19500000,13,19800000,17,20100000,13,20400000,4,21000000,12,21300000,6,21600000,30,22200000,23,22800000,19,23100000,19,23400000,16,23700000,8,24000000,1,24600000,1,25800000,28,26700000,21,27000000,8,27300000,25,28800000,22,29100000,17,29700000,24,30300000,8,30600000,8,30900000,22,31500000,16,31800000,10,32100000,12,32400000,22,32700000,70,33000000,82,33300000,18,33600000,3,33900000]}}</activity>
</chunk>
</chunk>
</chunks>
<sensor>
<name>LSBand2S</name>
<serial>D409FD3F0C22</serial>
<address>D4:09:FD:3F:0C:22</address>
<manufacturer>Transtek</manufacturer>
<model>418B2</model>
<firmware>T059</firmware>
<hardware>68</hardware>
<device-db-title>Mambo 2</device-db-title>
<device-db-id>428</device-db-id>
</sensor>
</measurements-sleep-stream>
Attribute | Type | Values | Description |
---|---|---|---|
movements | integer | >= 0 | Total movements count during the sleep measurement |
sleep-time | integer | >= 0 | Time in milliseconds user was sleeping |
awakening-time | integer | >= 0 | Time in milliseconds user was awake |
sleep-efficiency | float | 0..1 | The ratio between the total sleep time and the total recording time (sleep-time / measurement-duration ) |
times-awakened | integer | >= 0 | Number of periods in sleep time with movements, gap between periods must be > 1.5 min |
awakening-threshold | integer | >= 0 | Number of movements |
light-sleep-threshold | integer | >= 0 | Optional Number of movements |
point-resolution | integer | > 0 | Minimal period of time between points, milliseconds. |
is-final | boolean | true if this is final or only part of the sleep stream. Otherwise, the sleep stream could be continued. |
Each chunk
includes activity
container with data in the internal format (JSON compatible).
{
"irregular": {
"movements": [
7,
60000,
2,
120000,
7,
180000
]
}
}
Sleep stream does not have stable frequency so it is considered irregular data.
movements
array consists of flattened value/time pairs: even items are movements count
and odd ones are times in milliseconds from the start of the chunk: [v0, t0, v1, t1, ... , vn, tn]
Spirometry
Discrete Measurement Type
Model
<?xml version="1.0" encoding="UTF-8"?>
<measurements-spirometry>
<id>2bd5addb-2baf-234a-b33a-af6430b300cd</id>
<instance-id>ae770afe-2e21-4f31-b410-2c2f5006b5b1</instance-id>
<measured-at>2018-04-29T17:10:27.040000000+00:00</measured-at>
<measured-at-local>2018-04-29T10:10:27.040000000-07:00</measured-at-local>
<measured-at-utc-offset>-25200</measured-at-utc-offset>
<client-received-at>2018-04-29T17:10:27.040000000+00:00</client-received-at>
<client-received-at-local>2018-04-29T10:10:27.040000000-07:00</client-received-at-local>
<client-received-at-utc-offset>-25200</client-received-at-utc-offset>
<spirometry>{"FEV6p":{"value":95.2,"units":"%"},"FEF25":{"value":474,"units":"cl/s"},"VTChart":{"Loops":{"Units":{"volume":"cl","time":"msec"},"Points":[[0,1,100,14,200,32,300,49,400,64,500,75,600,84,700,91,800,96,900,100,1000,102,1100,104,1200,105,1300,107,1400,107]]}},"MV":{"value":0,"units":"cl/m"},"FVC":{"value":271,"units":"cl"},"FEF75":{"value":214,"units":"cl/s"},"MVV":{"value":0,"units":"cl"},"FVCChart":{"Loops":{"Units":{"volume":"ml","flow":"cl/s"},"Points":[[2250,-49,2220,-71,2190,-87,2160,-103,2130,-118,2100,-131,2070,-143,2040,-154,2010,-163,1980,-168,1950,-174,1920,-180,1890,-186,1860,-191,1830,-195,1800,-198,1770,-201,1740,-203,1710,-205,1680,-206,1650,-207,1620,-207,1590,-206,1560,-203,1530,-201,1500,-201,1470,-203,1440,-204,1410,-204,1380,-203,1350,-202,1320,-201,1290,-203,1260,-206,1230,-208,1200,-209,1170,-209,1140,-210,1110,-213,1080,-216,1050,-218,1020,-219,990,-220,960,-220,930,-221,900,-224,870,-224,840,-226,810,-228,780,-229,750,-231,720,-232,690,-231,660,-230,630,-229,600,-229,570,-228,540,-228,510,-225,480,-223,450,-220,420,-218,390,-214,360,-210,330,-205,300,-199,270,-192,240,-185,210,-178,180,-170,150,-164,120,-156,90,-146,60,-134,30,-108,0,-85,30,51,60,171,90,257,120,291,150,320,180,348,210,361,240,376,270,391,300,405,330,413,360,426,390,439,420,442,450,450,480,462,510,464,540,461,570,467,600,462,630,465,660,468,690,474,720,475,750,467,780,463,810,465,840,449,870,446,900,446,930,438,960,434,990,431,1020,423,1050,416,1080,413,1110,410,1140,403,1170,397,1200,390,1230,384,1260,380,1290,371,1320,367,1350,363,1380,363,1410,358,1440,351,1470,342,1500,338,1530,330,1560,328,1590,326,1620,319,1650,313,1680,306,1710,299,1740,291,1770,282,1800,276,1830,264,1860,259,1890,253,1920,245,1950,238,1980,232,2010,222,2040,214,2070,208,2100,200,2130,195,2160,188,2190,181,2220,174,2250,162,2280,156,2310,148,2340,135,2370,127,2400,120,2430,110,2460,103,2490,90,2520,81,2550,69,2580,62,2610,56,2640,46,2670,40,2700,30],[2670,-29,2640,-36,2610,-59,2580,-89,2550,-113,2520,-132,2490,-144,2460,-151,2430,-156,2400,-159,2370,-161,2340,-165,2310,-167,2280,-170,2250,-172,2220,-175,2190,-177,2160,-180,2130,-183,2100,-184,2070,-183,2040,-181,2010,-180,1980,-179,1950,-178,1920,-176,1890,-175,1860,-175,1830,-175,1800,-175,1770,-175,1740,-176,1710,-177,1680,-177,1650,-177,1620,-177,1590,-177,1560,-176,1530,-176,1500,-176,1470,-176,1440,-175,1410,-174,1380,-173,1350,-172,1320,-170,1290,-169,1260,-169,1230,-169,1200,-170,1170,-172,1140,-172,1110,-173,1080,-173,1050,-173,1020,-171,990,-168,960,-167,930,-163,900,-159,870,-156,840,-152,810,-149,780,-147,750,-145,720,-141,690,-137,660,-133,630,-127,600,-122,570,-115,540,-99,510,-85,540,113,570,199,600,226,630,247,660,276,690,294,720,316,750,332,780,343,810,347,840,354,870,362,900,371,930,375,960,380,990,383,1020,386,1050,383,1080,379,1110,378,1140,377,1170,380,1200,382,1230,373,1260,363,1290,360,1320,355,1350,351,1380,345,1410,340,1440,336,1470,340,1500,331,1530,328,1560,326,1590,324,1620,326,1650,321,1680,311,1710,303,1740,302,1770,294,1800,286,1830,284,1860,279,1890,270,1920,258,1950,252,1980,247,2010,236,2040,234,2070,229,2100,225,2130,212,2160,201,2190,195,2220,186,2250,179,2280,169,2310,158,2340,150,2370,145,2400,136,2430,128,2460,121,2490,109,2520,102,2550,89,2580,79,2610,65,2640,57,2670,46,2700,40,2730,32,2760,27,2790,19,2820,7],[2790,-27,2760,-46,2730,-61,2700,-71,2670,-77,2640,-82,2610,-86,2580,-91,2550,-98,2520,-109,2490,-121,2460,-128,2430,-135,2400,-139,2370,-143,2340,-144,2310,-146,2280,-147,2250,-149,2220,-150,2190,-152,2160,-151,2130,-150,2100,-148,2070,-147,2040,-146,2010,-146,1980,-146,1950,-145,1920,-145,1890,-146,1860,-147,1830,-146,1800,-146,1770,-146,1740,-146,1710,-146,1680,-145,1650,-145,1620,-145,1590,-144,1560,-142,1530,-140,1500,-139,1470,-138,1440,-138,1410,-138,1380,-138,1350,-138,1320,-138,1290,-138,1260,-139,1230,-139,1200,-139,1170,-138,1140,-135,1110,-130,1080,-123,1050,-112,1020,-93,1050,55,1080,171,1110,243,1140,265,1170,287,1200,307,1230,327,1260,334,1290,342,1320,352,1350,355,1380,359,1410,366,1440,377,1470,384,1500,384,1530,389,1560,393,1590,397,1620,405,1650,397,1680,400,1710,399,1740,402,1770,394,1800,397,1830,392,1860,388,1890,391,1920,387,1950,386,1980,389,2010,384,2040,384,2070,378,2100,371,2130,366,2160,361,2190,354,2220,346,2250,340,2280,338,2310,331,2340,322,2370,318,2400,312,2430,307,2460,297,2490,294,2520,289,2550,280,2580,275,2610,272,2640,265,2670,258,2700,255,2730,247,2760,243,2790,232,2820,228,2850,221,2880,216,2910,211,2940,206,2970,198,3000,185,3030,176,3060,166,3090,158,3120,147,3150,138,3180,133,3210,128,3240,122,3270,113,3300,105,3330,96,3360,90,3390,85,3420,78,3450,73,3480,67,3510,61,3540,56,3570,39],[3540,-6]]},"BestLoop":{"Units":{"volume":"ml","flow":"cl/s"},"Points":[[0,81,50,250,100,319,150,344,200,369,250,401,300,407,350,438,400,445,450,457,500,457,550,457,600,463,650,470,700,463,750,457,800,445,850,445,900,432,950,426,1000,413,1050,407,1100,401,1150,388,1200,382,1250,369,1300,357,1350,357,1400,344,1450,332,1500,326,1550,319,1600,307,1650,300,1700,288,1750,275,1800,263,1850,250,1900,231,1950,231,2000,213,2050,194,2100,194,2150,175,2200,156,2250,150,2300,131,2350,119,2400,106,2450,87,2500,68,2550,56,2600,43,2550,0,2500,-12,2450,-31,2400,-87,2350,-112,2300,-137,2250,-150,2200,-156,2150,-163,2100,-169,2050,-169,2000,-175,1950,-181,1900,-181,1850,-175,1800,-175,1750,-175,1700,-169,1650,-169,1600,-169,1550,-175,1500,-175,1450,-175,1400,-175,1350,-175,1300,-175,1250,-169,1200,-169,1150,-169,1100,-163,1050,-163,1000,-169,950,-169,900,-169,850,-169,800,-163,750,-156,700,-156,650,-150,600,-144,550,-144,500,-131,450,-125,400,-119,350,-94,300,0]]}},"VCC":{"value":0,"units":"cl"},"TE":{"value":0,"units":"msec"},"FEV3p":{"value":100,"units":"%"},"PEFF":{"value":0,"units":"cl/s"},"IC":{"value":0,"units":"cl"},"ERV":{"value":0,"units":"cl"},"FVV12":{"value":0,"units":"cl"},"FIV1":{"value":196,"units":"cl"},"IVC":{"value":0,"units":"cl"},"FIV1p":{"value":88.3,"units":"%"},"FEF2575":{"value":364,"units":"cl/s"},"FEF50":{"value":363,"units":"cl/s"},"FET":{"value":131,"units":"msec"},"PIF":{"value":184,"units":"cl/s"},"FEV1":{"value":258,"units":"cl"},"EVC":{"value":0,"units":"cl"},"FIVC":{"value":222,"units":"cl"},"FVV1":{"value":0,"units":"cl"},"PEF":{"value":475,"units":"cl/s"},"FVV62":{"value":0,"units":"cl/s"},"TV_TI":{"value":0,"units":"l/s"},"TI":{"value":0,"units":"msec"},"FEV6":{"value":271,"units":"cl"},"PEFF2":{"value":0,"units":"cl/s"},"FVVC2":{"value":0,"units":"cl"},"FVV6":{"value":0,"units":"cl/s"},"TV":{"value":0,"units":"cl"},"FEV1p":{"value":95.2,"units":"%"},"FVVC":{"value":0,"units":"cl"},"VEXT":{"value":80,"units":"ml"},"MVVcalc":{"value":903,"units":"cl"},"FEV3":{"value":271,"units":"cl"},"IT":{"value":0,"units":"cl"},"VCC2":{"value":0,"units":"cl"}}</spirometry>
<drugs>pre</drugs>
<test-type>fvc</test-type>
<protocol>generic_spirometry</protocol>
</measurements-spirometry>
Attribute | Type | Values | Description |
---|---|---|---|
spirometry | string | Serialized data in JSON format | Measurement data |
drugs | string | pre, post | Pre- or Post-Bronchodilator spirometry testing |
test-type | string | fvc, mvv, vc, pef, vt | Test Type: Maximum Voluntary Ventilation (MVV), Vital Capacity (VC), Forced Vital Capacity (FVC), Oximetry (OXY), Peak Expiratory Flow (PEF), Tidal Volume (VT) |
protocol | string | generic_spirometry | Serialization protocol |
Sample
spirometry
container within aspirometry
attribute
{
"FEV6p": {
"value": 95.2,
"units": "%"
},
"FEF25": {
"value": 474,
"units": "cl/s"
},
"VTChart": {
"Loops": {
"Units": {
"volume": "cl",
"time": "msec"
},
"Points": [[0,1,<...>,1400,107]]
}
},
"MV": {
"value": 0,
"units": "cl/m"
},
"FVC": {
"value": 271,
"units": "cl"
},
"FEF75": {
"value": 214,
"units": "cl/s"
},
"MVV": {
"value": 0,
"units": "cl"
},
"FVCChart": {
"Loops": {
"Units": {
"volume": "ml",
"flow": "cl/s"
},
"Points": [[2250,-49,<...>,3570,39],[3540,-6]]
},
"BestLoop": {
"Units": {
"volume": "ml",
"flow": "cl/s"
},
"Points": [[0,81,<...>,300,0]]
}
},
"VCC": {
"value": 0,
"units": "cl"
},
"TE": {
"value": 0,
"units": "msec"
},
"FEV3p": {
"value": 100,
"units": "%"
},
"PEFF": {
"value": 0,
"units": "cl/s"
},
"IC": {
"value": 0,
"units": "cl"
},
"ERV": {
"value": 0,
"units": "cl"
},
"FVV12": {
"value": 0,
"units": "cl"
},
"FIV1": {
"value": 196,
"units": "cl"
},
"IVC": {
"value": 0,
"units": "cl"
},
"FIV1p": {
"value": 88.3,
"units": "%"
},
"FEF2575": {
"value": 364,
"units": "cl/s"
},
"FEF50": {
"value": 363,
"units": "cl/s"
},
"FET": {
"value": 131,
"units": "msec"
},
"PIF": {
"value": 184,
"units": "cl/s"
},
"FEV1": {
"value": 258,
"units": "cl"
},
"EVC": {
"value": 0,
"units": "cl"
},
"FIVC": {
"value": 222,
"units": "cl"
},
"FVV1": {
"value": 0,
"units": "cl"
},
"PEF": {
"value": 475,
"units": "cl/s"
},
"FVV62": {
"value": 0,
"units": "cl/s"
},
"TV_TI": {
"value": 0,
"units": "l/s"
},
"TI": {
"value": 0,
"units": "msec"
},
"FEV6": {
"value": 271,
"units": "cl"
},
"PEFF2": {
"value": 0,
"units": "cl/s"
},
"FVVC2": {
"value": 0,
"units": "cl"
},
"FVV6": {
"value": 0,
"units": "cl/s"
},
"TV": {
"value": 0,
"units": "cl"
},
"FEV1p": {
"value": 95.2,
"units": "%"
},
"FVVC": {
"value": 0,
"units": "cl"
},
"VEXT": {
"value": 80,
"units": "ml"
},
"MVVcalc": {
"value": 903,
"units": "cl"
},
"FEV3": {
"value": 271,
"units": "cl"
},
"IT": {
"value": 0,
"units": "cl"
},
"VCC2": {
"value": 0,
"units": "cl"
}
}
Spirometry Attributes
Attribute | Description |
---|---|
FVC | Expiratory forced vital capacity (the volume of air that can forcibly be blown out after full inspiration) |
FEV05, FEV075 | Forced expiratory volume in 0.5 or 0.75 seconds (the volume of air that can forcibly be blown out in one second, after full inspiration) |
FEV1, FEV2, FEV3, FEV6, FEV10 | Forced expiratory volume in 1, 2, 3, 6 or 10 seconds (the volume of air that can forcibly be blown out in 1, 2, 3, 6 or 10 seconds, after full inspiration) |
PEF | Peak expiratory flow (the maximal flow or speed achieved during the maximally forced expiration initiated at full inspiration) |
FEF25, FEF50, FEF75 | Forced expiratory flow (the flow or speed of air coming out of the lung during the 25%, 50% or 75% portion of a forced expiration) |
FEF2575 | Forced expiratory flow (the flow or speed of air coming out of the lung during the 25% |
FET | Forced Expiratory Time (the length of the expiration in seconds) |
PEFF | Best PEF |
FVVC | Best FVC |
FVV1 | Best FEV1 |
FEV05p | FEV05/FVC * 100% |
FEV075p | FEV075/FVC * 100% |
FEV1p | FEV1/FVC * 100% |
FEV2p | FEV2/FVC * 100% |
FEV3p | FEV3/FVC * 100% |
FEV6p | FEV6/FVC * 100% |
VEXT | Extrapolated volume of lungs |
FIVC | Forced inspiratory vital capacity (the maximum volume of air inhaled from the point of maximum expiration) |
FIV1 | Forced inspiratory volume in 1 second (the volume of air inspired in one second, after full expiration) |
FIV1p | FIV1/FVC * 100% |
PIF | Peak inspiratory flow (the maximal flow or speed achieved during the inspiration after full expiration) |
IT | FEV1/VC |
ELA | Estimated lungs age |
FVVC2 | Second best FVC |
FVV12 | Second best FEV1 |
PEFF2 | Second best PEF |
FVV6 | Best FEV6 |
FVV62 | Second best FEV6 |
VCC2 | Second best VC |
MVVcalc | Calculated maximum voluntary ventilation (volume of air expired in a specified period during repetitive maximal effort) |
VC | Vital capacity (maximum amount of air a person can expel from the lungs after a maximum inhalation) |
EVC | Expiratory vital capacity (the maximum volume of air exhaled from the point of maximum inhalation) |
IVC | Inspiratory vital capacity (the maximum volume of air inhaled from the point of maximum expiration) |
TV | Tidal volume (the volume of air moved into or out of the lungs during quiet breathing) |
IRV | Inspiratory reserve volume (the maximal volume that can be inhaled from the end-inspiratory level) |
IC | Inspiratory capacity (the sum of IRV and TV) |
VCC | max between EVC and IVC |
ERV | Expiratory reserve volume (the additional amount of air that can be expired from the lungs by determined effort after normal expiration) |
MV | Minute ventilation (the volume of air inhaled or exhaled per minute) |
RR | Respiratory rate |
TI | Inspiratory time |
TE | Expiratory time |
MET2575 | Mid expiratory time (time taken between 25% and 75% of the forced expired volume) |
TE_TI | TE/TI |
MVV | Maximal voluntary ventilation (volume of air expired in a specified period during repetitive maximal effort) |
DTPEF | Time from exhalation start to the time when PEF is reached |
FEF7585 | Forced expiratory flow (the flow or speed of air coming out of the lung between the 75% and 85% portion of a forced expiration) |
FIF25, FIF50, FIF75 | Forced inspiratory flow (the flow or speed of air coming in the lung during the 25%, 50% or 75% portion of a forced inspiration) |
TV_TI | TV/TI |
TV_TIp | TV / TI * 100% |
TI_TTOT | TI / (TI + TE) |
FEV1_FEV6p | FEV1/FEV6 |
FEV1PB | Personal Best FEV1 |
PEFPB | Personal Best PEF |
FEV1PBp | FEV1/ FEV1PB * 100% |
PEFPBp | PEF/PEFPB * 100 |
FEV1_FEV10p | FEV1/FEV10 |
FEV075_VCp | FEV075 / VC * 100% |
FEV1_VCp | FEV1 / VC * 100% |
FEV3_VCp | FEV3 / VC * 100% |
FEV075_FEV6p | FEV075 / FEV6 * 100% |
FEF50_VCp | FEF50 / VC * 100% |
FEF50_FVCp | FEF50 / FVC * 100% |
FEF2575_FVCp | FEF2575 / FVC * 100% |
FIV1_FIVCp | FIV1 / FIVC * 100% |
TI_TTOTp | TI_TTOT * 100% |
TV_TIp | TV / TI * 100% |
BREATHS_PER_MIN | number of breaths per minute |
FVCChart / VCChart / MVVChart / VTChart | Chart structure, see below |
Spirometry Chart structure
{
"Loops": {
"Units": {
"volume": "ml",
"flow": "cl/s"
},
"Points": [[2250,-49,<...>,3570,39],[2150,-59,<...>,3580,49]]
},
"BestLoop": {
"Units": {
"volume": "ml",
"flow": "cl/s"
},
"Points": [[2150,-59,<...>,3580,49]]
}
}
Points
array consists of flattened abscissa/value pairs: even items are abscissa and odd ones are value: [x0, v0, x1, v1, ... , xn, vn]
Test type | abscissa | value |
---|---|---|
FVC | volume | flow |
MVV | time | volume |
VC | time | volume |
VT | time | volume |
Temperature
Stream Measurement Type
Model
<?xml version="1.0" encoding="UTF-8"?>
<measurements-temperature-stream>
<id>654b7356-7a0c-4afa-838b-179be9807c66</id>
<instance-id>ae770afe-2e21-4f31-b410-2c2f5006b5b1</instance-id>
<measured-at>2019-08-26T23:27:00.000000000+00:00</measured-at>
<measured-at-local>2019-08-26T16:27:00.000000000-07:00</measured-at-local>
<measured-at-utc-offset>-25200</measured-at-utc-offset>
<client-received-at>2019-08-26T23:27:00.000000000+00:00</client-received-at>
<client-received-at-local>2019-08-26T16:27:00.000000000-07:00</client-received-at-local>
<client-received-at-utc-offset>-25200</client-received-at-utc-offset>
<units>C</units>
<temperatures-min>36.6</temperatures-min>
<temperatures-max>37.1</temperatures-max>
<temperatures-last>37.1</temperatures-last>
<sensor>
<name>FORA IR20</name>
<serial>1261315180000321</serial>
<address>c026df000357</address>
<manufacturer>FORA</manufacturer>
<model>1261</model>
<device-db-title>IR20b Bluetooth Smart</device-db-title>
<device-db-id>169</device-db-id>
</sensor>
<chunks>
<chunk>
<id>4521fc43-0da8-4c42-b3f6-c42cd16a4286</id>
<position>0</position>
<start>0</start>
<end>60000</end>
<is-low-battery>false</is-low-battery>
<battery-percentage>67</battery-percentage>
<temperature>{"irregular":{"temperatures":[36.6, 0, 36.8, 30000]}}</temperature>
</chunk>
<chunk>
<id>3a9edc7b-35fc-44af-b915-791311e6b979</id>
<position>1</position>
<start>60000</start>
<end>120000</end>
<is-low-battery>false</is-low-battery>
<battery-percentage>43</battery-percentage>
<temperature>{"irregular":{"temperatures":[37.0, 0, 37.1, 30000]}}</temperature>
</chunk>
</chunks>
</measurements-temperature-stream>
Attribute | Type | Values | Description |
---|---|---|---|
units | string | C, F | Temperature units |
temperatures-min | float | Minimum temperature of the stream | |
temperatures-max | float | Maximum temperature of the stream | |
temperatures-last | float | Last temperature value of the stream | |
temperatures-average | float | Average temperature value of the stream |
Each chunk includes temperature
container with data in the internal format (JSON compatible):
{
"irregular": {
"temperatures": [
36.6,
0,
36.9,
60000,
37.1,
120000
]
}
}
Thermometers have no constant data rate so data is considered irregular.
temperatures
is an array of flattened value/time pairs: even items are temperature values
and odd ones are times in milliseconds from the start of the chunk: [v0, t0, v1, t1, ... , vn, tn]
temperatures_quality
is an additional quality stream (optional). It's an array of value/time pairs that corresponds by length and times to the temperatures
array:
- if the value is 255 - corresponding temperature value is of high quality (signal is strong and not ambiguous)
- if the value is any other integer - corresponding temperature value is ambiguous and cannot be used as real vital sign value.
Uric Acid
Discrete Measurement Type
Model
<?xml version="1.0" encoding="UTF-8"?>
<measurements-uric-acid>
<id>6c5071e0-c136-4e20-976a-f873e3d36408</id>
<instance-id>ae770afe-2e21-4f31-b410-2c2f5006b5b1</instance-id>
<measured-at>2020-05-21T15:05:18.079000000+00:00</measured-at>
<measured-at-local>2020-05-21T08:05:18.079000000-07:00</measured-at-local>
<measured-at-utc-offset>-25200</measured-at-utc-offset>
<client-received-at>2020-05-21T15:05:25.079000000+00:00</client-received-at>
<client-received-at-local>2020-05-21T08:05:25.074000000-07:00</client-received-at-local>
<client-received-at-utc-offset>-25200</client-received-at-utc-offset>
<value>506.0</value>
<units>umol</units>
<value-in-mg>8.5</value-in-mg>
<value-in-umol>506.0</value-in-umol>
<hematocrit>nil</hematocrit>
<sensor>
<name>TAIDOC TD4289</name>
<serial>45393831313536000000</serial>
<address>C0:26:DA:03:5C:E2</address>
<manufacturer>TaiDoc/FORA</manufacturer>
<firmware>V1.2.29</firmware>
<device-db-title>TD-4289</device-db-title>
<device-db-id>520</device-db-id>
</sensor>
</measurements-uric-acid>
Attribute | Type | Values | Description |
---|---|---|---|
value | float | Original or converted value | |
units | string | mg, umol | Original or converted units |
value-in-mg | float | Blood uric acid value in mg/dL | |
value-in-umol | float | Blood uric acid value in μmol/L | |
hematocrit | float | Hematocrit value percentage |
Weight
Discrete Measurement Type
Model
<?xml version="1.0" encoding="UTF-8"?>
<measurements-weight>
<id>1553d4d9-76b1-48ba-8051-d9699aaab882</id>
<instance-id>ae770afe-2e21-4f31-b410-2c2f5006b5b1</instance-id>
<measured-at>2019-08-14T14:38:16.000000000+00:00</measured-at>
<measured-at-local>2019-08-14T07:38:16.000000000-07:00</measured-at-local>
<measured-at-utc-offset>-25200</measured-at-utc-offset>
<client-received-at>2019-08-14T14:38:18.000000000+00:00</client-received-at>
<client-received-at-local>2019-08-14T07:38:18.000000000-07:00</client-received-at-local>
<client-received-at-utc-offset>-25200</client-received-at-utc-offset>
<value>78.6</value>
<units>kg</units>
<value-in-metric>78.6</value-in-metric>
<value-in-us>173.3</value-in-us>
<bc-fat-percent>18.8</bc-fat-percent>
<bc-muscle-weight>60.7</bc-muscle-weight>
<bc-water-percent>57.8</bc-water-percent>
<bc-bones-weight>3.2</bc-bones-weight>
<bc-amr>2883</bc-amr>
<bc-metabolic-age>31</bc-metabolic-age>
<bc-overall-rating>5</bc-overall-rating>
<bcp-user-number>1</bcp-user-number>
<bcp-height-in-mm>1700</bcp-height-in-mm>
<bcp-age>34</bcp-age>
<bcp-activity-level>1</bcp-activity-level>
<bcp-gender>male</bcp-gender>
</measurements-weight>
Attribute | Type | Values | Description |
---|---|---|---|
value | float | Original or converted value | |
units | string | kg, lb | Original or converted units |
value-in-metric | float | Weight in metric system (Kilograms) | |
value-in-us | float | Weight in US system (Pounds) |
Body Composition Attributes
Attribute | Type | Values | Description |
---|---|---|---|
bc-bmi | float | Body Mass Index | |
bc-fat-percent | float | Fat percent | |
bc-muscle-percent | float | Muscles percent | |
bc-muscle-weight | float | Muscles weight | |
bc-water-percent | float | Water percent | |
bc-bones-percent | float | Bones percent | |
bc-bones-weight | float | Bones weight | |
bc-visceral-fat-level | integer | Visceral Fat Level | |
bc-visceral-fat-percent | float | Visceral Fat percent | |
bc-visceral-fat-weight | float | Visceral Fat weight | |
bc-bmr | integer | Basal Metabolic Rate | |
bc-amr | integer | Active Metabolic Rate | |
bc-metabolic-age | integer | Metabolic Age | |
bc-overall-rating | integer | Overall Rating | |
bcp-user-number | integer | User number | |
bcp-height-in-mm | integer | Height of the person in millimeters | |
bcp-age | integer | Age of the person | |
bcp-activity-level | integer | Activity Level | |
bcp-gender | string | male, female, other, unknown | Gender of the person |