-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathGLY.js
108 lines (90 loc) · 3.14 KB
/
GLY.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
// Nightscout Widget
//
// Copyright (C) 2020 by niepi <[email protected]>
//
// Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
// IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
// OF THIS SOFTWARE.
const nsUrl ='https://xxx'; // your nightscout url
const nsToken =`your-ns-token`; // your nightscoutaccess token
const glucoseDisplay = `mgdl`;
//const glucoseDisplay = ` mmoll`;
const dateFormat = `fr-FR`;
// Initialize Widget
let widget = await createWidget();
if (!config.runsInWidget) {
await widget.presentSmall();
}
Script.setWidget(widget);
Script.complete();
// Build Widget
async function createWidget(items) {
const list = new ListWidget();
let glucose, updated;
let nsDataV2 = await getNsDataV2();
// create direction arrow
let directionString = await getDirectionString(nsDataV2.direction);
let glucoseValue = nsDataV2.bg;
if(glucoseDisplay === `mmoll`){
glucoseValue = Math.round(nsDataV2.bg / 18 * 10) / 10;
}
glucose = list.addText(" " + glucoseValue + " " + directionString);
glucose.font = Font.mediumSystemFont(37);
list.setPadding(30, 10, 30, 0);
let updateTime = new Date(nsDataV2.mills).toLocaleTimeString(dateFormat, { hour: "numeric", minute: "numeric" })
updated = list.addText("" + updateTime);
updated.font = Font.mediumSystemFont(8);
list.refreshAfterDate = new Date(Date.now() + 30);
return list;
}
async function getNsDataV2() {
let url = nsUrl + "/api/v2/properties?&token=" + nsToken;
let data = await new Request(url).loadJSON();
return {
bg: data.bgnow.mean,
direction: data.bgnow.sgvs[0].direction,
mills: data.bgnow.mills
};
}
async function getDirectionString(direction) {
let directionString
switch(direction) {
case 'NONE':
directionString = '⇼';
break;
case 'DoubleUp':
directionString = '⇈';
break;
case 'SingleUp':
directionString = '↑';
break;
case 'FortyFiveUp':
directionString = '↗';
break;
case 'Flat':
directionString = '→';
break;
case 'FortyFiveDown':
directionString = '↘';
break;
case 'SingleDown':
directionString = '↓';
break;
case 'DoubleDown':
directionString = '⇊';
break;
case 'NOT COMPUTABLE':
directionString = '-';
break;
case 'RATE OUT OF RANGE':
directionString = '⇕';
break;
default:
directionString = '⇼';
}
return directionString;
}