Skip to content

Commit 2c8a650

Browse files
committed
version updated
2 parents 531d2dd + e1004e8 commit 2c8a650

9 files changed

Lines changed: 84 additions & 81 deletions

File tree

CHANGELOG.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
## [2.6.3]
2+
3+
### Bugfix
4+
* **Exit if the connection closed**
5+
* **Example logging disabled**
6+
7+
## [2.6.2]
8+
9+
### Bugfix
10+
* **'NoneType' object is not callable**
11+
12+
## [2.6.1]
13+
14+
### Features
15+
* **Push notification feature added**
16+
* **Event callbacks fixed**

examples/doorbell.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,15 @@
99
DON'T FORGET TO TURN ON 'Doorbell Press' IN ALEXA APP
1010
'''
1111

12-
def Events():
12+
async def events():
1313
while True:
1414
# client.event_handler.raiseEvent(doorBellId, eventNames['door_bell_event'])
15+
# await sleep(60) # Server will trottle / block IPs sending events too often.
1516
pass
1617

1718
callbacks = {}
18-
19-
eventsCallbacks = {
20-
'Events': Events
21-
}
22-
19+
2320
if __name__ == '__main__':
2421
loop = asyncio.get_event_loop()
25-
client = SinricPro(APP_KEY, [DOORBELL_ID], callbacks, event_callbacks=eventsCallbacks, enable_log=False, restore_states=False, secretKey=APP_SECRET)
22+
client = SinricPro(APP_KEY, [DOORBELL_ID], callbacks, event_callbacks=events, enable_log=True, restore_states=False, secretKey=APP_SECRET)
2623
loop.run_until_complete(client.connect())

examples/push_notification.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from sinric import SinricPro
2+
import asyncio
3+
from asyncio import sleep
4+
from loguru import logger
5+
6+
APP_KEY = ''
7+
APP_SECRET = ''
8+
DEVICE_ID = ''
9+
10+
async def events():
11+
while True:
12+
client.event_handler.raiseEvent(DEVICE_ID, 'pushNotification', data={'alert': "Hello there"})
13+
await sleep(60) # Server will trottle / block IPs sending events too often.
14+
15+
if __name__ == '__main__':
16+
loop = asyncio.get_event_loop()
17+
client = SinricPro(APP_KEY, [DEVICE_ID], {}, event_callbacks=events, enable_log=True, restore_states=False, secretKey=APP_SECRET)
18+
loop.run_until_complete(client.connect())

examples/temperature_sensor.py

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from sinric import SinricPro
2-
from time import sleep
32
import asyncio
3+
from asyncio import sleep
44

55
APP_KEY = ''
66
APP_SECRET = ''
@@ -10,23 +10,18 @@ def power_state(did, state):
1010
print(did, state)
1111
return True, state
1212

13-
def events():
13+
async def events():
1414
while True:
1515
client.event_handler.raiseEvent(TEMPERATURE_SENSOR_ID, 'temperatureHumidityEvent', data={'humidity': 75.3, 'temperature': 24})
16-
sleep(60) # Server will trottle / block IPs sending events too often.
17-
pass
18-
19-
events_callbacks = {
20-
"Events": events
21-
}
16+
await sleep(60) # Server will trottle / block IPs sending events too often.
2217

2318
callbacks = {
2419
'powerState': power_state
2520
}
2621

2722
if __name__ == '__main__':
2823
loop = asyncio.get_event_loop()
29-
client = SinricPro(APP_KEY, [TEMPERATURE_SENSOR_ID], callbacks, event_callbacks=events_callbacks, enable_log=False, restore_states=False, secretKey=APP_SECRET)
24+
client = SinricPro(APP_KEY, [TEMPERATURE_SENSOR_ID], callbacks, event_callbacks=events, enable_log=True, restore_states=False, secretKey=APP_SECRET)
3025
loop.run_until_complete(client.connect())
3126

3227
# To update the temperature on server.

setup.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
if sys.version_info < (3,6):
1111
sys.exit('Sorry, Python < 3.6 is not supported')
1212

13-
VERSION = "2.5.3"
13+
VERSION = "2.6.3"
1414

1515
with open('README.rst', 'r') as f:
1616
long_description = f.read()
@@ -26,8 +26,7 @@
2626
url="https://github.com/sinricpro/python-sdk",
2727
packages=['sinric'],
2828
install_requires=["websockets==10.1","loguru"],
29-
keywords=['alexa', 'alexa-skill', 'sinric', 'sinric-alexa-skill', 'alexa-home-automation', 'sinric-pro',
30-
'sinric-pro-alexa-skill'],
29+
keywords=['sinric', 'sinric-pro'],
3130
classifiers=[
3231
"Programming Language :: Python :: 3",
3332
"Operating System :: OS Independent",

sinric/_cbhandler.py

Lines changed: 11 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,7 @@ def __init__(self, callbacks, trace_bool, logger, enable_track=False, secretKey=
5555
self.trace_response = trace_bool
5656

5757
async def handleCallBacks(self, dataArr, connection, udp_client):
58-
5958
jsn = dataArr[0]
60-
6159
Trace = dataArr[1]
6260

6361
async def handleResponse(response, connection, udp_client):
@@ -253,8 +251,6 @@ def jsnHandle(action, resp, dataDict, instanceId='') -> dict:
253251
except Exception as e:
254252
self.logger.error(str(e))
255253

256-
257-
258254
elif jsn.get('payload').get('action') == JSON_COMMANDS.get('ADJUSTRANGEVALUE'):
259255
try:
260256
assert (self.verifySignature(jsn.get('payload'), jsn.get("signature").get("HMAC")))
@@ -302,7 +298,6 @@ def jsnHandle(action, resp, dataDict, instanceId='') -> dict:
302298
except Exception as e:
303299
self.logger.error(str(e))
304300

305-
306301
elif jsn.get('payload').get('action') == JSON_COMMANDS.get('SETVOLUME'):
307302
try:
308303
assert (self.verifySignature(jsn.get('payload'), jsn.get("signature").get("HMAC")))
@@ -319,8 +314,6 @@ def jsnHandle(action, resp, dataDict, instanceId='') -> dict:
319314
except Exception as e:
320315
self.logger.error(str(e))
321316

322-
323-
324317
elif jsn.get('payload').get('action') == 'adjustVolume':
325318
try:
326319
assert (self.verifySignature(jsn.get('payload'), jsn.get("signature").get("HMAC")))
@@ -337,8 +330,6 @@ def jsnHandle(action, resp, dataDict, instanceId='') -> dict:
337330
except Exception as e:
338331
self.logger.error(str(e))
339332

340-
341-
342333
elif jsn.get('payload').get('action') == 'mediaControl':
343334
try:
344335
assert (self.verifySignature(jsn.get('payload'), jsn.get("signature").get("HMAC")))
@@ -367,7 +358,6 @@ def jsnHandle(action, resp, dataDict, instanceId='') -> dict:
367358
except Exception as e:
368359
self.logger.error(str(e))
369360

370-
371361
elif jsn.get('payload').get('action') == 'changeChannel':
372362
try:
373363
assert (self.verifySignature(jsn.get('payload'), jsn.get("signature").get("HMAC")))
@@ -385,7 +375,6 @@ def jsnHandle(action, resp, dataDict, instanceId='') -> dict:
385375
except Exception as e:
386376
self.logger.error(str(e))
387377

388-
389378
elif jsn.get('payload').get('action') == 'skipChannels':
390379
try:
391380
assert (self.verifySignature(jsn.get('payload'), jsn.get("signature").get("HMAC")))
@@ -458,7 +447,6 @@ def jsnHandle(action, resp, dataDict, instanceId='') -> dict:
458447
except Exception as e:
459448
self.logger.error(str(e))
460449

461-
462450
elif jsn.get('payload').get('action') == 'resetBands':
463451
try:
464452
assert (self.verifySignature(jsn.get('payload'), jsn.get("signature").get("HMAC")))
@@ -484,10 +472,7 @@ def jsnHandle(action, resp, dataDict, instanceId='') -> dict:
484472
self.logger.error("Signature verification failed for " + jsn.get('payload').get('action'))
485473
except Exception as e:
486474
self.logger.error(str(e))
487-
488-
489-
490-
475+
491476
elif jsn.get('payload').get('action') == 'setMode':
492477
try:
493478
assert (self.verifySignature(jsn.get('payload'), jsn.get("signature").get("HMAC")))
@@ -502,8 +487,7 @@ def jsnHandle(action, resp, dataDict, instanceId='') -> dict:
502487
self.logger.error("Signature verification failed for " + jsn.get('payload').get('action'))
503488
except Exception as e:
504489
self.logger.error(str(e))
505-
506-
490+
507491
elif jsn.get('payload').get('action') == 'setLockState':
508492
try:
509493
assert (self.verifySignature(jsn.get('payload'), jsn.get("signature").get("HMAC")))
@@ -519,118 +503,107 @@ def jsnHandle(action, resp, dataDict, instanceId='') -> dict:
519503
except Exception as e:
520504
self.logger.error(str(e))
521505

522-
############################ EVENTS ###########################################################
506+
############################ EVENTS ###########################################################
523507

524508
if Trace == 'doorbell_event_response':
525509
if self.bucket.addDrop():
526510
self.logger.info('Sending Doorbell Event Response')
527511
await connection.send(dumps(jsn))
528512

529-
530513
elif Trace == 'temp_hum_event_response':
531514
if self.bucket.addDrop():
532515
self.logger.info('Sending temperature humidity response')
533516
await connection.send(dumps(jsn))
534517

535-
536518
elif Trace == 'setpowerstate_event_response':
537519
if self.bucket.addDrop():
538520
self.logger.info('Sending setpowerstate_event_response')
539521
await connection.send(dumps(jsn))
540522

541-
542523
elif Trace == 'setPowerLevel_event_response':
543524
if self.bucket.addDrop():
544525
self.logger.info('Sending setPowerLevel_event_response')
545526
await connection.send(dumps(jsn))
546527

547-
548528
elif Trace == 'setBrightness_event_response':
549529
if self.bucket.addDrop():
550530
self.logger.info('Sending setBrightness_event_response')
551531
await connection.send(dumps(jsn))
552532

553-
554533
elif Trace == 'setColor_event_response':
555534
if self.bucket.addDrop():
556535
self.logger.info('Sending setColor_event_response')
557536
await connection.send(dumps(jsn))
558537

559-
560538
elif Trace == 'setColorTemperature_event_response':
561539
if self.bucket.addDrop():
562540
self.logger.info('Sending setColorTemperature_event_response')
563541
await connection.send(dumps(jsn))
564542

565-
566543
elif Trace == 'setThermostatMode_event_response':
567544
if self.bucket.addDrop():
568545
self.logger.info('Sending setThermostatMode_event_response')
569546
await connection.send(dumps(jsn))
570547

571-
572548
elif Trace == 'setRangeValue_event_response':
573549
if self.bucket.addDrop():
574550
self.logger.info('Sending setRangeValue_event_response')
575551
await connection.send(dumps(jsn))
576552

577-
578553
elif Trace == 'motion_event_response':
579554
if self.bucket.addDrop():
580555
self.logger.info('Sending motion_event_response')
581556
await connection.send(dumps(jsn))
582557

583-
584558
elif Trace == 'contact_event_response':
585559
if self.bucket.addDrop():
586560
self.logger.info('Sending contact_event_response')
587561
await connection.send(dumps(jsn))
588562

589-
590563
elif Trace == 'set_volume_event_response':
591564
if self.bucket.addDrop():
592565
self.logger.info('Sending set_volume_event_response')
593566
await connection.send(dumps(jsn))
594567

595-
596568
elif Trace == 'select_input_event_response':
597569
if self.bucket.addDrop():
598570
self.logger.info('Sending select_input_event_response')
599571
await connection.send(dumps(jsn))
600572

601-
602573
elif Trace == 'media_control_event_response':
603574
if self.bucket.addDrop():
604575
self.logger.info('Sending media_control_event_response')
605576
await connection.send(dumps(jsn))
606577

607-
608578
elif Trace == 'change_channel_event_response':
609579
if self.bucket.addDrop():
610580
self.logger.info('Sending change_channel_event_response')
611581
await connection.send(dumps(jsn))
612582

613-
614583
elif Trace == 'set_bands_event_response':
615584
if self.bucket.addDrop():
616585
self.logger.info('Sending set_bands_event_response')
617586
await connection.send(dumps(jsn))
618587

619-
620-
621588
elif Trace == 'set_mode_event_response':
622589
if self.bucket.addDrop():
623590
self.logger.info('Sending set_mode_event_response')
624591
await connection.send(dumps(jsn))
625592

626-
627593
elif Trace == 'set_lock_event_response':
628594
if self.bucket.addDrop():
629595
self.logger.info('Sending set_lock_event_response')
630596
await connection.send(dumps(jsn))
631597

632-
633598
elif Trace == 'reset_bands_event_response':
634599
if self.bucket.addDrop():
635600
self.logger.info('Sending reset_bands_event_response')
636601
await connection.send(dumps(jsn))
602+
603+
elif Trace == 'pushNotification_event_response':
604+
if self.bucket.addDrop():
605+
self.logger.info('Sending pushNotification_event')
606+
await connection.send(dumps(jsn))
607+
608+
#else:
609+
# self.logger.info(Trace + ' not found!')

sinric/_events.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313

1414
eventNames = {
1515
'door_bell_event': 'doorBellEvent',
16-
'th_event': 'temperatureHumidityEvent'
16+
'th_event': 'temperatureHumidityEvent',
17+
'pushNotification_event' : 'pushNotificationEvent'
1718
}
1819

1920

@@ -47,15 +48,14 @@ def jsnHandle(action, deviceId, value, typeI="PHYSICAL_INTERACTION") -> dict:
4748
"type": "event",
4849
"value": value
4950
}
51+
5052
signature = self.getSignature(payload)
5153
return {"header": header, "payload": payload, "signature": signature}
5254

5355
if event_name == JSON_COMMANDS.get('SETPOWERSTATE'):
5456
queue.put([jsnHandle("setPowerState", deviceId, {"state": data.get("state", "Off")}),
5557
'setpowerstate_event_response'])
5658

57-
58-
5959
elif event_name == JSON_COMMANDS.get('SETPOWERLEVEL'):
6060
queue.put([jsnHandle("setPowerLevel", deviceId, {
6161
"powerLevel": data.get('powerLevel')
@@ -77,16 +77,11 @@ def jsnHandle(action, deviceId, value, typeI="PHYSICAL_INTERACTION") -> dict:
7777
}
7878
}), 'setColor_event_response'])
7979

80-
81-
8280
elif event_name == JSON_COMMANDS.get('SETCOLORTEMPERATURE'):
8381
queue.put([jsnHandle("setColorTemperature", deviceId, {
8482
"colorTemperature": 2400
8583
}), 'setColorTemperature_event_response'])
8684

87-
88-
##########################DOOR BELL EVENT####################################
89-
9085
elif event_name == 'doorBellEvent':
9186
queue.put([jsnHandle("DoorbellPress", deviceId, {
9287
"state": "pressed"
@@ -99,6 +94,10 @@ def jsnHandle(action, deviceId, value, typeI="PHYSICAL_INTERACTION") -> dict:
9994
"humidity": round(data.get('humidity'), 1),
10095
}, typeI="PERIODIC_POLL"), 'temp_hum_event_response'])
10196

97+
elif event_name == 'pushNotification':
98+
queue.put([jsnHandle("pushNotification", deviceId, {
99+
"alert": data.get('alert'),
100+
}), 'pushNotification_event_response'])
102101

103102
elif event_name == 'setThermostatMode':
104103
queue.put([jsnHandle("setThermostatMode", deviceId, {
@@ -200,6 +199,8 @@ def jsnHandle(action, deviceId, value, typeI="PHYSICAL_INTERACTION") -> dict:
200199
"mute": data.get('mute', False)
201200
}), 'reset_bands_event_response'])
202201

202+
else:
203+
self.logger.exception('Event :' + event_name + ' not found!')
203204

204205
except Exception:
205206
self.logger.exception('Error Occurred')

0 commit comments

Comments
 (0)