Skip to content

Commit 2e805a3

Browse files
Merge pull request #32 from sinricpro/feature/custom-devices
Custom device implementation and bug fixes
2 parents cba5118 + 0ce95af commit 2e805a3

6 files changed

Lines changed: 37 additions & 15 deletions

File tree

sinric/_cbhandler.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
* This file is part of the Sinric Pro (https://github.com/sinricpro/)
66
"""
77

8+
from re import X
89
from ._powerController import PowerController
910
from ._brightnessController import BrightnessController
1011
from ._jsoncommands import JSON_COMMANDS
@@ -16,20 +17,21 @@
1617
from ._temperatureController import TemperatureController
1718
from ._tvcontorller import TvController
1819
from ._speakerController import SpeakerController
20+
from ._modeController import ModeController
1921
from json import dumps, load, dump
2022
from time import time, sleep
2123
from uuid import uuid4
2224
from ._lockController import LockStateController
2325
from ._signature import Signature
24-
from ._leafyBucket import LeakyBucket
26+
from ._leakyBucket import LeakyBucket
2527

2628

2729
# TODO fix target temperature Duration
2830

2931
# noinspection PyBroadException
3032
class CallBackHandler(PowerLevel, PowerController, BrightnessController, ColorController, ColorTemperatureController,
3133
ThermostateMode, RangeValueController, TemperatureController, TvController, SpeakerController,
32-
LockStateController, Signature):
34+
LockStateController, ModeController, Signature):
3335
def __init__(self, callbacks, trace_bool, logger, enable_track=False, secretKey=""):
3436
self.myHmac = None
3537
self.secretKey = secretKey
@@ -46,6 +48,7 @@ def __init__(self, callbacks, trace_bool, logger, enable_track=False, secretKey=
4648
LockStateController.__init__(self)
4749
Signature.__init__(self, self.secretKey)
4850
SpeakerController.__init__(self, 0)
51+
ModeController.__init__(self, 0)
4952
ColorTemperatureController.__init__(self, 0, [2200, 2700, 4000, 5500, 7000])
5053
self.callbacks = callbacks
5154
self.logger = logger
@@ -65,7 +68,7 @@ async def handleResponse(response, connection, udp_client):
6568
elif Trace == 'udp_response' and udp_client != None :
6669
udp_client.sendResponse(dumps(response).encode('ascii'), dataArr[2])
6770

68-
def jsnHandle(action, resp, dataDict) -> dict:
71+
def jsnHandle(action, resp, dataDict, instanceId='') -> dict:
6972
header = {
7073
"payloadVersion": 2,
7174
"signatureVersion": 1
@@ -81,6 +84,9 @@ def jsnHandle(action, resp, dataDict) -> dict:
8184
"type": "response",
8285
"value": dataDict
8386
}
87+
88+
if instanceId:
89+
payload['instanceId'] = instanceId
8490

8591
signature = self.getSignature(payload)
8692

@@ -235,10 +241,10 @@ def jsnHandle(action, resp, dataDict) -> dict:
235241
elif jsn.get('payload').get('action') == JSON_COMMANDS.get('SETRANGEVALUE'):
236242
try:
237243
assert (self.verifySignature(jsn.get('payload'), jsn.get("signature").get("HMAC")))
238-
resp, value = await self.setRangeValue(jsn, self.callbacks.get('setRangeValue'))
244+
resp, value, instanceId = await self.setRangeValue(jsn, self.callbacks.get('setRangeValue'))
239245
response = jsnHandle(action="setRangeValue", resp=resp, dataDict={
240-
"rangeValue": value
241-
})
246+
"rangeValue": value
247+
}, instanceId=instanceId)
242248

243249
if resp:
244250
await handleResponse(response, connection, udp_client)
@@ -485,10 +491,10 @@ def jsnHandle(action, resp, dataDict) -> dict:
485491
elif jsn.get('payload').get('action') == 'setMode':
486492
try:
487493
assert (self.verifySignature(jsn.get('payload'), jsn.get("signature").get("HMAC")))
488-
resp, value = await self.setMode(jsn, self.callbacks.get('setMode'))
494+
resp, value, instanceId = await self.setMode(jsn, self.callbacks.get('setMode'))
489495
response = jsnHandle(action="setMode", resp=resp, dataDict={
490496
"mode": value
491-
})
497+
}, instanceId=instanceId)
492498

493499
if resp:
494500
await handleResponse(response, connection, udp_client)

sinric/_jsoncommands.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,5 @@
4646
'ADJUSTVOLUME': 'adjustVolume',
4747
'SETMUTE': 'setMute',
4848
'MEDIACONTROL': 'mediaControl',
49-
49+
'INSTANCE_ID' : 'instanceId'
5050
}

sinric/_modeController.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
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+
from ._jsoncommands import JSON_COMMANDS
9+
10+
class ModeController:
11+
def __init__(self, x):
12+
self.instanceId = ''
13+
14+
15+
async def setMode(self, jsn, callback):
16+
self.instanceId= jsn.get("payload").get(JSON_COMMANDS['INSTANCE_ID'], '')
17+
return callback(jsn.get("payload").get(JSON_COMMANDS.get('DEVICEID')), jsn.get("payload").get('value').get('mode'), self.instanceId)

sinric/_rangeValueController.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,17 @@
1010
class RangeValueController:
1111
def __init__(self, k):
1212
self.rangeValue = 0
13+
self.instanceId = ''
1314

1415
async def setRangeValue(self, jsn, range_callback):
1516
self.rangeValue= jsn.get("payload").get(JSON_COMMANDS['VALUE']).get('rangeValue')
16-
return range_callback(jsn.get(JSON_COMMANDS.get('DEVICEID')), self.rangeValue)
17+
self.instanceId= jsn.get("payload").get(JSON_COMMANDS['INSTANCE_ID'], '')
18+
return range_callback(jsn.get("payload").get(JSON_COMMANDS.get('DEVICEID')), self.rangeValue, self.instanceId)
1719

1820
async def adjustRangeValue(self, jsn, callback):
1921
self.rangeValue += jsn.get("payload").get(JSON_COMMANDS['VALUE']).get('rangeValue')
2022
if self.rangeValue > 100:
2123
self.rangeValue = 100
2224
elif self.rangeValue < 0:
2325
self.rangeValue = 0
24-
return callback(jsn.get(JSON_COMMANDS.get('DEVICEID')), self.rangeValue)
26+
return callback(jsn.get("payload").get(JSON_COMMANDS.get('DEVICEID')), self.rangeValue)

sinric/_speakerController.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,4 @@ async def resetBands(self, jsn, callback):
3434
band1 = value.get('bands')[0]
3535
band2 = value.get('bands')[1]
3636
band3 = value.get('bands')[2]
37-
return callback(jsn.get("payload").get(JSON_COMMANDS.get('DEVICEID')), band1, band2, band3)
38-
39-
async def setMode(self, jsn, callback):
40-
return callback(jsn.get("payload").get(JSON_COMMANDS.get('DEVICEID')), jsn.get("payload").get('value').get('mode'))
37+
return callback(jsn.get("payload").get(JSON_COMMANDS.get('DEVICEID')), band1, band2, band3)

0 commit comments

Comments
 (0)