implemented method to toggle nightlight on some SP3 devices (#159)
* implemented method to toggle nightlight on some SP3 devices * implement nightlight feature to cli * check_power/check_nightligh fixes for py2.7
This commit is contained in:
parent
39cc64efce
commit
33a2e4ae54
2 changed files with 51 additions and 4 deletions
|
@ -391,7 +391,20 @@ class sp2(device):
|
||||||
"""Sets the power state of the smart plug."""
|
"""Sets the power state of the smart plug."""
|
||||||
packet = bytearray(16)
|
packet = bytearray(16)
|
||||||
packet[0] = 2
|
packet[0] = 2
|
||||||
packet[4] = 1 if state else 0
|
if self.check_nightlight():
|
||||||
|
packet[4] = 3 if state else 2
|
||||||
|
else:
|
||||||
|
packet[4] = 1 if state else 0
|
||||||
|
self.send_packet(0x6a, packet)
|
||||||
|
|
||||||
|
def set_nightlight(self, state):
|
||||||
|
"""Sets the night light state of the smart plug"""
|
||||||
|
packet = bytearray(16)
|
||||||
|
packet[0] = 2
|
||||||
|
if self.check_power():
|
||||||
|
packet[4] = 3 if state else 1
|
||||||
|
else:
|
||||||
|
packet[4] = 2 if state else 0
|
||||||
self.send_packet(0x6a, packet)
|
self.send_packet(0x6a, packet)
|
||||||
|
|
||||||
def check_power(self):
|
def check_power(self):
|
||||||
|
@ -402,10 +415,24 @@ class sp2(device):
|
||||||
err = response[0x22] | (response[0x23] << 8)
|
err = response[0x22] | (response[0x23] << 8)
|
||||||
if err == 0:
|
if err == 0:
|
||||||
payload = self.decrypt(bytes(response[0x38:]))
|
payload = self.decrypt(bytes(response[0x38:]))
|
||||||
if type(payload[0x4]) == int:
|
if ord(payload[0x4]) == 1 or ord(payload[0x4]) == 3:
|
||||||
state = bool(payload[0x4])
|
state = True
|
||||||
else:
|
else:
|
||||||
state = bool(ord(payload[0x4]))
|
state = False
|
||||||
|
return state
|
||||||
|
|
||||||
|
def check_nightlight(self):
|
||||||
|
"""Returns the power state of the smart plug."""
|
||||||
|
packet = bytearray(16)
|
||||||
|
packet[0] = 1
|
||||||
|
response = self.send_packet(0x6a, packet)
|
||||||
|
err = response[0x22] | (response[0x23] << 8)
|
||||||
|
if err == 0:
|
||||||
|
payload = self.decrypt(bytes(response[0x38:]))
|
||||||
|
if ord(payload[0x4]) == 2 or ord(payload[0x4]) == 3:
|
||||||
|
state = True
|
||||||
|
else:
|
||||||
|
state = False
|
||||||
return state
|
return state
|
||||||
|
|
||||||
def get_energy(self):
|
def get_energy(self):
|
||||||
|
|
|
@ -69,8 +69,11 @@ parser.add_argument("--host", help="host address")
|
||||||
parser.add_argument("--mac", help="mac address (hex reverse), as used by python-broadlink library")
|
parser.add_argument("--mac", help="mac address (hex reverse), as used by python-broadlink library")
|
||||||
parser.add_argument("--temperature",action="store_true", help="request temperature from device")
|
parser.add_argument("--temperature",action="store_true", help="request temperature from device")
|
||||||
parser.add_argument("--check", action="store_true", help="check current power state")
|
parser.add_argument("--check", action="store_true", help="check current power state")
|
||||||
|
parser.add_argument("--checknl", action="store_true", help="check current nightlight state")
|
||||||
parser.add_argument("--turnon", action="store_true", help="turn on device")
|
parser.add_argument("--turnon", action="store_true", help="turn on device")
|
||||||
parser.add_argument("--turnoff", action="store_true", help="turn off device")
|
parser.add_argument("--turnoff", action="store_true", help="turn off device")
|
||||||
|
parser.add_argument("--turnnlon", action="store_true", help="turn on nightlight on the device")
|
||||||
|
parser.add_argument("--turnnloff", action="store_true", help="turn off nightlight on the device")
|
||||||
parser.add_argument("--switch", action="store_true", help="switch state from on to off and off to on")
|
parser.add_argument("--switch", action="store_true", help="switch state from on to off and off to on")
|
||||||
parser.add_argument("--send", action="store_true", help="send command")
|
parser.add_argument("--send", action="store_true", help="send command")
|
||||||
parser.add_argument("--sensors", action="store_true", help="check all sensors")
|
parser.add_argument("--sensors", action="store_true", help="check all sensors")
|
||||||
|
@ -139,6 +142,11 @@ if args.check:
|
||||||
print '* ON *'
|
print '* ON *'
|
||||||
else:
|
else:
|
||||||
print '* OFF *'
|
print '* OFF *'
|
||||||
|
if args.checknl:
|
||||||
|
if dev.check_nightlight():
|
||||||
|
print '* ON *'
|
||||||
|
else:
|
||||||
|
print '* OFF *'
|
||||||
if args.turnon:
|
if args.turnon:
|
||||||
dev.set_power(True)
|
dev.set_power(True)
|
||||||
if dev.check_power():
|
if dev.check_power():
|
||||||
|
@ -151,6 +159,18 @@ if args.turnoff:
|
||||||
print '!! Still ON !!'
|
print '!! Still ON !!'
|
||||||
else:
|
else:
|
||||||
print '== Turned * OFF * =='
|
print '== Turned * OFF * =='
|
||||||
|
if args.turnnlon:
|
||||||
|
dev.set_nightlight(True)
|
||||||
|
if dev.check_nightlight():
|
||||||
|
print '== Turned * ON * =='
|
||||||
|
else:
|
||||||
|
print '!! Still OFF !!'
|
||||||
|
if args.turnnloff:
|
||||||
|
dev.set_nightlight(False)
|
||||||
|
if dev.check_nightlight():
|
||||||
|
print '!! Still ON !!'
|
||||||
|
else:
|
||||||
|
print '== Turned * OFF * =='
|
||||||
if args.switch:
|
if args.switch:
|
||||||
if dev.check_power():
|
if dev.check_power():
|
||||||
dev.set_power(False)
|
dev.set_power(False)
|
||||||
|
|
Loading…
Reference in a new issue