55 * This file is part of the Sinric Pro (https://github.com/sinricpro/)
66"""
77
8+ from re import X
89from ._powerController import PowerController
910from ._brightnessController import BrightnessController
1011from ._jsoncommands import JSON_COMMANDS
1617from ._temperatureController import TemperatureController
1718from ._tvcontorller import TvController
1819from ._speakerController import SpeakerController
20+ from ._modeController import ModeController
1921from json import dumps , load , dump
2022from time import time , sleep
2123from uuid import uuid4
2224from ._lockController import LockStateController
2325from ._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
3032class 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 )
0 commit comments