Skip to content

Commit ada8ca0

Browse files
committed
add the webble support for BSEC2 sensors 116 and 117
1 parent 6dfffdd commit ada8ca0

File tree

3 files changed

+93
-2
lines changed

3 files changed

+93
-2
lines changed

tools/bhy-controller/src/static/parse-scheme.json

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,35 @@
9090
{"name": "Accuracy", "type": "uint8", "scale-factor": 1},
9191
{"name": "Compensated-Temperature(°C)", "type": "int16", "scale-factor": 0.003906},
9292
{"name": "Compensated-Humidity(%)", "type": "uint16", "scale-factor": 0.002},
93-
{"name": "Compensated-Gas Resistance(Ohms)", "type": "float", "scale-factor": 1}
93+
{"name": "Compensated-Gas Resistance(Ω)", "type": "uint32", "scale-factor": 1}
9494
]
95-
}
95+
},
96+
97+
{
98+
"id": 8,
99+
"type": "BSEC2DataCollectorOutput",
100+
"parse-scheme":
101+
[
102+
{"name": "Timestamp(ms)", "type": "uint64", "scale-factor": 1},
103+
{"name": "Temperature(°C)", "type": "int16", "scale-factor": 0.003906},
104+
{"name": "Pressure(Pa)", "type": "float", "scale-factor": 1},
105+
{"name": "Humidity(%)", "type": "uint16", "scale-factor": 0.002},
106+
{"name": "Gas(Ω)", "type": "float", "scale-factor": 1},
107+
{"name": "Index", "type": "uint8", "scale-factor": 1}
108+
]
109+
},
96110

111+
{
112+
"id": 9,
113+
"type": "BSEC2GasClassifierOutput",
114+
"parse-scheme":
115+
[
116+
{"name": "Gas0(%)", "type": "uint8", "scale-factor": 1},
117+
{"name": "Gas1(%)", "type": "uint8", "scale-factor": 1},
118+
{"name": "Gas2(%)", "type": "uint8", "scale-factor": 1},
119+
{"name": "Gas3(%)", "type": "uint8", "scale-factor": 1},
120+
{"name": "Accuracy", "type": "uint8", "scale-factor": 1}
121+
]
122+
}
97123
]
98124
}

tools/bhy-controller/src/static/sensor-type-map.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,20 @@
353353
"dashboard": 1
354354
},
355355

356+
"116": {
357+
"name": "BSEC2 Data Collector Output",
358+
"scheme": "BSEC2DataCollectorOutput",
359+
"value": 0,
360+
"dashboard": 1
361+
},
362+
363+
"117": {
364+
"name": "BSEC2 Gas Classifier Output",
365+
"scheme": "BSEC2GasClassifierOutput",
366+
"value": 0,
367+
"dashboard": 1
368+
},
369+
356370
"128": {
357371
"name": "TEMPERATURE",
358372
"scheme": "singleRead",

tools/bhy-controller/src/static/sensor.html

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -487,6 +487,44 @@ <h3>Read sensor data</h3>
487487
});
488488
}
489489

490+
} else if (sensorTypes[sensor].scheme == "BSEC2GasClassifierOutput") {
491+
//Parse BSEC values
492+
const BSECValues = parsedStringValue.split(" ");
493+
console.log("Split: ", BSECValues);
494+
495+
var val0 = BSECValues[1]; //gas 0 probability (%)
496+
var val1 = BSECValues[5]; //gas 1 probability (%)
497+
var val2 = BSECValues[9]; //gas 2 probability (%)
498+
var val3 = BSECValues[13]; //gas 3 probability (%)
499+
//var status = BSECValues[17]; //status
500+
//var total = (val0+val1+val2+val3);
501+
502+
if (sensorTypes[sensor].value == 0) { //Plot doesn't exist yet because no valid data have been received
503+
Plotly.newPlot(chartIdx,
504+
[
505+
{y:[val0],name:'Gas0 probability(%)',type:'line'}, {y:[val1],name:'Gas1 probability(%)',type:'line'},
506+
{y:[val2],name:'Gas2 probability(%)',type:'line'}, {y:[val3],name:'Gas3 probability(%)',type:'line'}
507+
]);
508+
//Update json to signal that the reception started
509+
cnt = sensorTypes[sensor].value + 1;
510+
sensorTypes[sensor].value = cnt;
511+
} else { //Plot already exists
512+
Plotly.extendTraces(chartIdx,{y:[[val0]]}, [0]);
513+
Plotly.extendTraces(chartIdx,{y:[[val1]]}, [1]);
514+
Plotly.extendTraces(chartIdx,{y:[[val2]]}, [2]);
515+
Plotly.extendTraces(chartIdx,{y:[[val3]]}, [3]);
516+
cnt = sensorTypes[sensor].value;
517+
sensorTypes[sensor].value = cnt + 1;
518+
}
519+
520+
if (cnt > 150) {
521+
Plotly.relayout(chartIdx,{
522+
xaxis: {
523+
range: [cnt-150,cnt]
524+
}
525+
});
526+
}
527+
490528
}
491529
}
492530
}
@@ -524,6 +562,10 @@ <h3>Read sensor data</h3>
524562
} else {
525563
parse_scheme = parseScheme["types"][7]["parse-scheme"];
526564
}
565+
} else if (scheme == "BSEC2DataCollectorOutput") {
566+
parse_scheme = parseScheme["types"][8]["parse-scheme"];
567+
} else if (scheme == "BSEC2GasClassifierOutput") {
568+
parse_scheme = parseScheme["types"][9]["parse-scheme"];
527569
}
528570

529571
parse_scheme.forEach(element => {
@@ -547,13 +589,22 @@ <h3>Read sensor data</h3>
547589
size = 2;
548590
} else if (valueType == "uint24") {
549591
value = data.getUint16(dataIndex, true) + (data.getUint8(dataIndex+2, true) << 16);
592+
value = value * scale;
550593
size = 3;
551594
} else if (valueType == "uint32") {
552595
value = data.getUint16(dataIndex, true) + (data.getUint16(dataIndex+2, true) << 16);
596+
value = value * scale;
553597
size = 4;
554598
} else if (valueType == "float") {
555599
value = data.getFloat32(dataIndex, true) * scale;
556600
size = 4;
601+
} else if (valueType == "uint64") {
602+
valLow = data.getUint32(dataIndex, true)
603+
valHigh = data.getUint32(dataIndex + 4, true)
604+
value = (valLow + (valHigh * 2**32)) * scale
605+
//value = (valLow) * scale
606+
//console.log('value:' + value + 'scale:' + scale)
607+
size = 8;
557608
} else if (valueType == "none") {
558609
value = eventcount + 1;
559610
sensorTypes[sensor].eventcount = value;

0 commit comments

Comments
 (0)