44import socket
55import time
66
7+ from yeelib .exceptions import YeelightError
8+
79__all__ = ('Bulb' , )
810
911logger = logging .getLogger ('yeelib' )
1012
1113
1214class Bulb :
13- def __init__ (self , ip , port = 55443 , status_refresh_interval = 3600 , ** kwargs ):
15+ def __init__ (self , ip , port = 55443 , status_refresh_interval = 3600 , _registry = None , ** kwargs ):
16+ self ._registry = _registry
1417 self .ip = ip
1518 self .port = port
1619 self .status_refresh_interval = status_refresh_interval
@@ -37,10 +40,9 @@ def __repr__(self):
3740 return "<%s: %s>" % (type (self ).__name__ , self .ip )
3841
3942 @property
40- @asyncio .coroutine
41- def socket (self ):
43+ async def socket (self ):
4244 if self .__socket is None :
43- self .__socket = yield from asyncio .open_connection (
45+ self .__socket = await asyncio .open_connection (
4446 self .ip , self .port )
4547 return self .__socket
4648
@@ -52,18 +54,22 @@ def socket(self, value):
5254 pass
5355 else :
5456 writer .close ()
57+ if self ._registry :
58+ del self ._registry [self .id ]
5559 self .__socket = value
5660
57- @asyncio .coroutine
58- def send_command (self , method , params ):
61+ async def send_command (self , method , params ):
62+ if method not in self .support :
63+ msg = "The method '%s' is not supported by this bulb." % method
64+ raise YeelightError (msg )
5965 self .__command_id += 1
6066 data = {
6167 'id' : self .__command_id ,
6268 'method' : method ,
6369 'params' : params ,
6470 }
6571 msg = json .dumps (data ) + '\r \n '
66- reader , writer = yield from self .socket
72+ reader , writer = await self .socket
6773 try :
6874 writer .write (msg .encode ())
6975 logger .debug ("%s: >>> %s" , self .ip , msg .strip ())
@@ -72,7 +78,7 @@ def send_command(self, method, params):
7278 self .socket = None
7379 else :
7480 try :
75- response = (yield from reader .readline ()).decode ()
81+ response = (await reader .readline ()).decode ()
7682 except ConnectionError :
7783 logger .exception ("Connection error" )
7884 socket .socket = None
0 commit comments