forked from heisler3030/spaberry
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdecoder.js
59 lines (48 loc) · 1.74 KB
/
decoder.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
const Config = require('./config');
const debug = Config.debug
module.exports.decodeDisplay = (dataArray) => {
// Pass in a 76-bit binary array and get back a status object
dataString = dataArray.join('')
// substring() extracts characters from indexStart up to but not including indexEnd
let byte1 = dataString.substring(0,7);
let byte2 = dataString.substring(8,15);
let byte3 = dataString.substring(15,22);
let digit4 = _digitMap[byte1] || "?";
let digit3 = _digitMap[byte2] || "?";
let digit2 = _digitMap[byte3] || "?";
let digit1 = _getBit(dataArray, 25) ? 1 : null;
let temperature = (100 * digit1) + (10 * digit2) + (1 * digit3);
const displayStatus = {
bits: dataString,
display: [digit1, digit2, digit3, digit4].join(''),
setHeat: _getBit(dataArray, 41),
mode: _getBit(dataArray, 60),
heating: _getBit(dataArray, 40),
tempUp: _getBit(dataArray, 30), // display is in temp Up mode
tempDown: _getBit(dataArray, 39), // display is in temp Down mode
blower: _getBit(dataArray, 43),
pump: _getBit(dataArray, 49),
jets: _getBit(dataArray, 50),
light: _getBit(dataArray, 48),
temperature: temperature
}
if (debug) console.log(`byte1: ${byte1} byte2: ${byte2} byte3: ${byte3}`)
if (debug) console.log(`displayStatus: ${JSON.stringify(displayStatus)}`)
return displayStatus
}
function _getBit(array, bit) {
return parseInt(array[bit-1]);
}
const _digitMap = {
"1111110":"0", // as string to prevent evaluation to 'false'
"0110000":1,
"1101101":2,
"1111001":3,
"0110011":4,
"1011011":5,
"1011111":6,
"1110000":7,
"1111111":8,
"1110011":9,
"0100011":"F"
}