Skip to content

Commit c0cc1f2

Browse files
committed
custom device support and logging added.
1 parent c12144b commit c0cc1f2

11 files changed

+137
-62
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@ node_modules/
22
.vscode/
33
credential.js
44
.idea/
5-
sinricproudp2.js
5+
sinricproudp2.js
6+
package-lock.json

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
## [2.6.1]
2+
3+
### Features
4+
5+
* **Custom device types support**
6+
* **SR_DEBUG to support debug logs**
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
//process.env.SR_DEBUG = '1';
2+
3+
const { SinricPro, startSinricPro } = require("sinricpro"); //= require('../../index');
4+
5+
const APPKEY = "";
6+
const APPSECRET = "";
7+
const device1 = "";
8+
9+
const deviceIds = [device1];
10+
11+
function setMode(deviceid, data, instanceId) {
12+
console.log(deviceid, data, instanceId);
13+
return true;
14+
}
15+
16+
function setRangeValue(deviceid, data, instanceId) {
17+
console.log(deviceid, data, instanceId);
18+
return true;
19+
}
20+
21+
function adjustRangeValue(deviceid, data, instanceId) {
22+
console.log(deviceid, data, instanceId);
23+
return true;
24+
}
25+
26+
function setToggleState(deviceid, data, instanceId) {
27+
console.log(deviceid, data, instanceId);
28+
return true;
29+
}
30+
31+
const callbacks = {
32+
adjustRangeValue,
33+
setMode,
34+
setRangeValue,
35+
setToggleState,
36+
};
37+
38+
const sinricpro = new SinricPro(APPKEY, deviceIds, APPSECRET, true);
39+
startSinricPro(sinricpro, callbacks);

lib/cbhandler.js

Lines changed: 36 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,18 @@ const { RangeValue, RangeValueAdjust } = require('./contorllers/range_value_cont
1515
const { Volume, VolumeAdjust, Mute } = require('./contorllers/tv_controller');
1616
const { ChangeChannel, SkipChannel, Media } = require('./contorllers/tv_controller');
1717
const { Input } = require('./contorllers/tv_controller');
18-
const { Bands, Mode, BandReset } = require('./contorllers/speaker_controller');
18+
const { Bands, BandReset } = require('./contorllers/speaker_controller');
1919
const { AdjustBands } = require('./contorllers/speaker_controller');
2020
const { ToggleState } = require('./contorllers/toggle_state_controller');
21+
const { Mode } = require('./contorllers/mode_controller');
2122

22-
const jsonResponse = (client, defaultPayload, dValue) => {
23+
const jsonResponse = (client, defaultPayload, payloadValue, instanceId) => {
2324
const header = {
2425
payloadVersion: 2,
2526
signatureVersion: 1,
2627
};
2728

28-
const payload = {
29+
let payload = {
2930
action: defaultPayload.action,
3031
clientId: defaultPayload.clientId,
3132
createdAt: Math.floor(new Date() / 1000),
@@ -34,9 +35,11 @@ const jsonResponse = (client, defaultPayload, dValue) => {
3435
replyToken: defaultPayload.replyToken,
3536
success: true,
3637
type: 'response',
37-
value: dValue,
38+
value: payloadValue,
3839
};
3940

41+
if(instanceId) payload.instanceId = instanceId;
42+
4043
const signature = {
4144
HMAC: getSignature(client, JSON.stringify(payload)),
4245
};
@@ -50,150 +53,150 @@ const handlePayload = (client, payload, signature, callbacks) => verifySignature
5053
return powerState(payload, callbacks)
5154
.then((value) => jsonResponse(client, payload, value))
5255
.catch((err) => {
53-
console.log(err.message);
56+
if (process.env.SR_DEBUG) console.log(err.message);
5457
});
5558
} else if (action === 'setPowerLevel') {
5659
return powerLevel(payload, callbacks)
5760
.then((value) => jsonResponse(client, payload, value))
5861
.catch((err) => {
59-
console.log(err.message);
62+
if (process.env.SR_DEBUG) console.log(err.message);
6063
});
6164
} else if (action === 'adjustPowerLevel') {
6265
return powerLevelAdjust(payload, callbacks)
6366
.then((value) => jsonResponse(client, payload, value))
6467
.catch((err) => {
65-
console.log(err.message);
68+
if (process.env.SR_DEBUG) console.log(err.message);
6669
});
6770
} else if (action === 'setBrightness') {
6871
return Brightness(payload, callbacks)
6972
.then((value) => jsonResponse(client, payload, value))
7073
.catch((err) => {
71-
console.log(err.message);
74+
if (process.env.SR_DEBUG) console.log(err.message);
7275
});
7376
} else if (action === 'adjustBrightness') {
7477
return BrightnessAdjust(payload, callbacks)
7578
.then((value) => jsonResponse(client, payload, value))
7679
.catch((err) => {
77-
console.log(err.message);
80+
if (process.env.SR_DEBUG) console.log(err.message);
7881
});
7982
} else if (action === 'setColor') {
8083
return Color(payload, callbacks)
8184
.then((value) => jsonResponse(client, payload, value))
8285
.catch((err) => {
83-
console.log(err.message);
86+
if (process.env.SR_DEBUG) console.log(err.message);
8487
});
8588
} else if (action === 'setColorTemperature') {
8689
return ColorTemperature(payload, callbacks)
8790
.then((value) => jsonResponse(client, payload, value))
8891
.catch((err) => {
89-
console.log(err.message);
92+
if (process.env.SR_DEBUG) console.log(err.message);
9093
});
9194
} else if (action === 'setThermostatMode') {
9295
return ThermoStatMode(payload, callbacks)
9396
.then((value) => jsonResponse(client, payload, value))
9497
.catch((err) => {
95-
console.log(err.message);
98+
if (process.env.SR_DEBUG) console.log(err.message);
9699
});
97100
} else if (action === 'targetTemperature') {
98101
return ThermoStatTemperature(payload, callbacks)
99102
.then((value) => jsonResponse(client, payload, value))
100103
.catch((err) => {
101-
console.log(err.message);
104+
if (process.env.SR_DEBUG) console.log(err.message);
102105
});
103106
} else if (action === 'setRangeValue') {
104107
return RangeValue(payload, callbacks)
105-
.then((value) => jsonResponse(client, payload, value))
108+
.then(([value, instanceId]) => jsonResponse(client, payload, value, instanceId))
106109
.catch((err) => {
107-
console.log(err.message);
110+
if (process.env.SR_DEBUG) console.log(err.message);
108111
});
109112
} else if (action === 'adjustRangeValue') {
110113
return RangeValueAdjust(payload, callbacks)
111-
.then((value) => jsonResponse(client, payload, value))
114+
.then(([value, instanceId]) => jsonResponse(client, payload, value, instanceId))
112115
.catch((err) => {
113-
console.log(err.message);
116+
if (process.env.SR_DEBUG) console.log(err.message);
114117
});
115118
} else if (action === 'setVolume') {
116119
return Volume(payload, callbacks)
117120
.then((value) => jsonResponse(client, payload, value))
118121
.catch((err) => {
119-
console.log(err.message);
122+
if (process.env.SR_DEBUG) console.log(err.message);
120123
});
121124
} else if (action === 'adjustVolume') {
122125
return VolumeAdjust(payload, callbacks)
123126
.then((value) => jsonResponse(client, payload, value))
124127
.catch((err) => {
125-
console.log(err.message);
128+
if (process.env.SR_DEBUG) console.log(err.message);
126129
});
127130
} else if (action === 'selectInput') {
128131
return Input(payload, callbacks)
129132
.then((value) => jsonResponse(client, payload, value))
130133
.catch((err) => {
131-
console.log(err.message);
134+
if (process.env.SR_DEBUG) console.log(err.message);
132135
});
133136
} else if (action === 'mediaControl') {
134137
return Media(payload, callbacks)
135138
.then((value) => jsonResponse(client, payload, value))
136139
.catch((err) => {
137-
console.log(err.message);
140+
if (process.env.SR_DEBUG) console.log(err.message);
138141
});
139142
} else if (action === 'changeChannel') {
140143
return ChangeChannel(payload, callbacks)
141144
.then((value) => jsonResponse(client, payload, value))
142145
.catch((err) => {
143-
console.log(err.message);
146+
if (process.env.SR_DEBUG) console.log(err.message);
144147
});
145148
} else if (action === 'skipChannels') {
146149
return SkipChannel(payload, callbacks)
147150
.then((value) => jsonResponse(client, payload, value))
148151
.catch((err) => {
149-
console.log(err.message);
152+
if (process.env.SR_DEBUG) console.log(err.message);
150153
});
151154
} else if (action === 'setBands') {
152155
return Bands(payload, callbacks)
153156
.then((value) => jsonResponse(client, payload, value))
154157
.catch((err) => {
155-
console.log(err.message);
158+
if (process.env.SR_DEBUG) console.log(err.message);
156159
});
157160
} else if (action === 'adjustBands') {
158161
return AdjustBands(payload, callbacks)
159162
.then((value) => jsonResponse(client, payload, value))
160163
.catch((err) => {
161-
console.log(err.message);
164+
if (process.env.SR_DEBUG) console.log(err.message);
162165
});
163166
} else if (action === 'resetBands') {
164167
return BandReset(payload, callbacks)
165168
.then((value) => jsonResponse(client, payload, value))
166169
.catch((err) => {
167-
console.log(err.message);
170+
if (process.env.SR_DEBUG) console.log(err.message);
168171
});
169172
} else if (action === 'setMode') {
170173
return Mode(payload, callbacks)
171-
.then((value) => jsonResponse(client, payload, value))
174+
.then(([value, instanceId]) => jsonResponse(client, payload, value, instanceId))
172175
.catch((err) => {
173-
console.log(err.message);
176+
if (process.env.SR_DEBUG) console.log(err.message);
174177
});
175178
} else if (action === 'setLockState') {
176179
return Lock(payload, callbacks)
177180
.then((value) => jsonResponse(client, payload, value))
178181
.catch((err) => {
179-
console.log(err.message);
182+
if (process.env.SR_DEBUG) console.log(err.message);
180183
});
181184
} else if (action === 'setMute') {
182185
return Mute(payload, callbacks)
183186
.then((value) => jsonResponse(client, payload, value))
184187
.catch((err) => {
185-
console.log(err.message);
188+
if (process.env.SR_DEBUG) console.log(err.message);
186189
});
187190
} else if (action === 'setToggleState') {
188191
return ToggleState(payload, callbacks)
189-
.then((value) => jsonResponse(client, payload, value))
192+
.then(([value, instanceId]) => jsonResponse(client, payload, value, instanceId))
190193
.catch((err) => {
191-
console.log(err.message);
194+
if (process.env.SR_DEBUG) console.log(err.message);
192195
});
193196
}
194197
return {};
195198
})
196199
.catch((err) => {
197-
console.log(err.message);
200+
console.error(err.message);
198201
});
199202
module.exports = handlePayload;

lib/contorllers/mode_controller.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* Copyright (c) 2019 Sinric. All rights reserved.
3+
* Licensed under Creative Commons Attribution-Share Alike (CC BY-SA)
4+
*
5+
* This file is part of the Sinric Pro (https://github.com/sinricpro/)
6+
*/
7+
8+
const sinricData = require('../storage');
9+
10+
const Mode = (payload, callbacks) => {
11+
const resp = callbacks.setMode(payload.deviceId, payload.value.mode, payload.instanceId);
12+
13+
return new Promise((resolve, reject) => {
14+
if (resp) resolve([payload.value, payload.instanceId]);
15+
else reject(new Error('Mode undefined'));
16+
});
17+
};
18+
19+
module.exports = {
20+
Mode
21+
};

lib/contorllers/range_value_controller.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
/*
32
* Copyright (c) 2019 Sinric. All rights reserved.
43
* Licensed under Creative Commons Attribution-Share Alike (CC BY-SA)
@@ -10,20 +9,25 @@ const sinricProData = require('../storage');
109

1110
const RangeValue = (payload, callbacks) => {
1211
sinricProData.rangeValue = payload.value.rangeValue;
13-
const resp = callbacks.setRangeValue(payload.deviceId, sinricProData.rangeValue);
12+
13+
const resp = callbacks.setRangeValue(payload.deviceId, sinricProData.rangeValue, payload.instanceId);
14+
1415
return new Promise((resolve, reject) => {
15-
if (payload.value.rangeValue !== undefined && resp) resolve(payload.value);
16+
if (payload.value.rangeValue !== undefined && resp) resolve([payload.value, payload.instanceId]);
1617
else reject(new Error('RangeValue is undefined'));
1718
});
1819
};
1920

2021
const RangeValueAdjust = (payload, callbacks) => {
21-
sinricProData.rangeValue += payload.value.rangeValueDelta;
22+
sinricProData.rangeValue += payload.value.rangeValueDelta;
23+
2224
if (sinricProData.rangeValue < 0) sinricProData.rangeValue = 0;
2325
else if (sinricProData.rangeValue > 100) sinricProData.rangeValue = 100;
24-
const resp = callbacks.adjustRangeValue(payload.deviceId, sinricProData.rangeValue);
26+
27+
const resp = callbacks.adjustRangeValue(payload.deviceId, sinricProData.rangeValue, payload.instanceId);
28+
2529
return new Promise((resolve, reject) => {
26-
if (payload.value.rangeValueDelta && resp) resolve({ rangeValue: sinricProData.rangeValue });
30+
if (payload.value.rangeValueDelta && resp) resolve([{ rangeValue: sinricProData.rangeValue }, payload.instanceId]);
2731
else reject(new Error('RangeValue undefined'));
2832
});
2933
};

lib/contorllers/speaker_controller.js

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,6 @@ const Bands = (payload, callbacks) => {
1818
});
1919
};
2020

21-
const Mode = (payload, callbacks) => {
22-
const resp = callbacks.setMode(payload.deviceId, payload.value.mode);
23-
return new Promise((resolve, reject) => {
24-
if (resp) resolve(payload.value);
25-
else reject(new Error('Mode undefined'));
26-
});
27-
};
28-
2921
const BandReset = (payload, callbacks) => {
3022
const resp = callbacks.resetBands(payload.deviceId, payload.value);
3123
return new Promise((resolve, reject) => {
@@ -45,6 +37,7 @@ const AdjustBands = (payload, callbacks) => {
4537
else reject(new Error('Rest Bands Failed'));
4638
});
4739
};
40+
4841
module.exports = {
49-
Bands, Mode, BandReset, AdjustBands,
42+
Bands, BandReset, AdjustBands,
5043
};

lib/contorllers/toggle_state_controller.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@
66
*/
77

88
const ToggleState = (payload, callbacks) => {
9-
const resp = callbacks.setToggleState(payload.deviceId, { instanceId: payload.instanceId, value: payload.value.state });
9+
const resp = callbacks.setToggleState(payload.deviceId, payload.value.state, payload.instanceId);
10+
1011
return new Promise((resolve, reject) => {
11-
if (resp) resolve(payload);
12+
if (resp) resolve([payload.value, payload.instanceId]);
1213
else reject(new Error('Toggle State Error'));
1314
});
1415
};

lib/events/event_handler.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,9 @@ const raiseEvent = async (client, eventName, deviceId, value) => {
8686
if (actionArr.includes(eventName)) {
8787
try {
8888
await burstyLimiter.consume('queue');
89-
client.send(JSON.stringify(getJson(client, eventName, deviceId, value)));
89+
const request = JSON.stringify(getJson(client, eventName, deviceId, value));
90+
if (process.env.SR_DEBUG) console.log('>> %j', request);
91+
client.send(request);
9092
} catch (rlRejected) {
9193
console.log('Too many events!');
9294
}

0 commit comments

Comments
 (0)