-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.js
111 lines (110 loc) · 2.56 KB
/
main.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
109
110
111
const { WS } = require('./method')
const { Client } = require('node-osc')
/**
*
* @param {string} token
*/
const RunPulsoid = (token, maxconsolelog = NaN) => {
const wspath = `/api/v1/data/real_time?access_token=${token}`
const ws = new WS("dev.pulsoid.net", "", wspath, true)
let hbToggle = false
let logCount = 0
ws.message(ev => {
/**
* @type {{
* measured_at: number
* data: {
* heart_rate: number
* }
* }}
*/
let data
try {
data = JSON.parse(ev)
} catch (error) {
console.log(`data: ${ev}`)
console.error('Failed to parse data from Pulsoid. Skipping parameter update...')
return
}
const heartRate = data?.data?.heart_rate
if (!heartRate) return console.log('Got heart rate: 0 bpm, skipping parameter update...')
logCount++
if (maxconsolelog !== NaN && logCount >= maxconsolelog) {
logCount = 0
console.clear()
}
console.log('Got heart rate: %s bpm', heartRate)
const client = new Client('localhost', 9000)
// 参考自该代码:
// https://github.com/vard88508/vrc-osc-miband-hrm/blob/f60c3422c36921d317168ed38b1362528e8364e9/app.js#L24-L50
const Heartrates = [
{
address: '/avatar/parameters/Heartrate',
args:
{
type: 'f',
value: heartRate / 127 - 1
}
},
{
address: "/avatar/parameters/HeartRateFloat",
args:
{
type: "f",
value: heartRate / 127 - 1
}
},
{
address: "/avatar/parameters/Heartrate2",
args:
{
type: "f",
value: heartRate / 255
}
},
{
address: "/avatar/parameters/HeartRateFloat01",
args:
{
type: "f",
value: heartRate / 255
}
},
{
address: "/avatar/parameters/Heartrate3",
args:
{
type: "i",
value: heartRate
}
},
{
address: "/avatar/parameters/HeartRateInt",
args:
{
type: "i",
value: heartRate
}
},
{
address: "/avatar/parameters/HeartBeatToggle",
args:
{
type: "b",
value: hbToggle
}
}
]
Heartrates.forEach(element => {
client.send(element)
if (element.address === "/avatar/parameters/HeartBeatToggle") {
hbToggle = !hbToggle
}
});
})
ws.realclose = false
ws.connect().then(() => {
console.log('Connected to Pulsoid.')
})
}
exports.RunPulsoid = RunPulsoid