power: add timer option to tplink-smartplug devices
Signed-off-by: Andrew Stowell crashmaxx@gmail.com
This commit is contained in:
parent
562f971c3d
commit
2836600857
|
@ -231,9 +231,12 @@ initial_state: off
|
||||||
# state. Default is off.
|
# state. Default is off.
|
||||||
address:
|
address:
|
||||||
port:
|
port:
|
||||||
|
timer:
|
||||||
# The above options are used for "tplink_smartplug" devices. The
|
# The above options are used for "tplink_smartplug" devices. The
|
||||||
# address should be a valid ip or hostname for the tplink device.
|
# address should be a valid ip or hostname for the tplink device.
|
||||||
# The port should be the port the device is configured to use.
|
# The port should be the port the device is configured to use.
|
||||||
|
# The timer option is used to delay the turn off for x sec when
|
||||||
|
# its already on.
|
||||||
# "Power Strips" can be controlled by including the socket index
|
# "Power Strips" can be controlled by including the socket index
|
||||||
# in the ip address. For example, to control socket index 1:
|
# in the ip address. For example, to control socket index 1:
|
||||||
# 192.168.1.127/1
|
# 192.168.1.127/1
|
||||||
|
|
|
@ -530,6 +530,7 @@ class TPLinkSmartPlug(PowerDevice):
|
||||||
START_KEY = 0xAB
|
START_KEY = 0xAB
|
||||||
def __init__(self, config: ConfigHelper) -> None:
|
def __init__(self, config: ConfigHelper) -> None:
|
||||||
super().__init__(config)
|
super().__init__(config)
|
||||||
|
self.timer = config.get("timer", "")
|
||||||
self.request_mutex = asyncio.Lock()
|
self.request_mutex = asyncio.Lock()
|
||||||
self.addr: List[str] = config.get("address").split('/')
|
self.addr: List[str] = config.get("address").split('/')
|
||||||
self.port = config.getint("port", 9999)
|
self.port = config.getint("port", 9999)
|
||||||
|
@ -551,6 +552,14 @@ class TPLinkSmartPlug(PowerDevice):
|
||||||
}
|
}
|
||||||
elif command == "info":
|
elif command == "info":
|
||||||
out_cmd = {'system': {'get_sysinfo': {}}}
|
out_cmd = {'system': {'get_sysinfo': {}}}
|
||||||
|
elif command == "clear_rules":
|
||||||
|
out_cmd = {'count_down': {'delete_all_rules': None}}
|
||||||
|
elif command == "count_off":
|
||||||
|
out_cmd = {
|
||||||
|
'count_down': {'add_rule':
|
||||||
|
{'enable': 1, 'delay': int(self.timer),
|
||||||
|
'act': 0, 'name': 'turn off'}}
|
||||||
|
}
|
||||||
else:
|
else:
|
||||||
raise self.server.error(f"Invalid tplink command: {command}")
|
raise self.server.error(f"Invalid tplink command: {command}")
|
||||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
@ -622,8 +631,13 @@ class TPLinkSmartPlug(PowerDevice):
|
||||||
async with self.request_mutex:
|
async with self.request_mutex:
|
||||||
err: int
|
err: int
|
||||||
try:
|
try:
|
||||||
res = await self._send_tplink_command(state)
|
if self.timer != "" and state == "off":
|
||||||
err = res['system']['set_relay_state']['err_code']
|
await self._send_tplink_command("clear_rules")
|
||||||
|
res = await self._send_tplink_command("count_off")
|
||||||
|
err = res['count_down']['add_rule']['err_code']
|
||||||
|
else:
|
||||||
|
res = await self._send_tplink_command(state)
|
||||||
|
err = res['system']['set_relay_state']['err_code']
|
||||||
except Exception:
|
except Exception:
|
||||||
err = 1
|
err = 1
|
||||||
logging.exception(f"Power Toggle Error: {self.name}")
|
logging.exception(f"Power Toggle Error: {self.name}")
|
||||||
|
|
Loading…
Reference in New Issue