power: use a mutex to prevent concurrent device requests
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
parent
724c29c4a7
commit
0917536ccc
|
@ -13,7 +13,7 @@ import socket
|
||||||
import gpiod
|
import gpiod
|
||||||
from tornado.ioloop import IOLoop
|
from tornado.ioloop import IOLoop
|
||||||
from tornado.iostream import IOStream
|
from tornado.iostream import IOStream
|
||||||
from tornado import gen
|
from tornado.locks import Lock
|
||||||
from tornado.httpclient import AsyncHTTPClient
|
from tornado.httpclient import AsyncHTTPClient
|
||||||
from tornado.escape import json_decode
|
from tornado.escape import json_decode
|
||||||
|
|
||||||
|
@ -238,6 +238,7 @@ class HTTPDevice(PowerDevice):
|
||||||
default_user=None, default_password=None):
|
default_user=None, default_password=None):
|
||||||
super().__init__(config)
|
super().__init__(config)
|
||||||
self.client = AsyncHTTPClient()
|
self.client = AsyncHTTPClient()
|
||||||
|
self.request_mutex = Lock()
|
||||||
self.addr = config.get("address")
|
self.addr = config.get("address")
|
||||||
self.port = config.getint("port", default_port)
|
self.port = config.getint("port", default_port)
|
||||||
self.user = config.get("user", default_user)
|
self.user = config.get("user", default_user)
|
||||||
|
@ -265,6 +266,7 @@ class HTTPDevice(PowerDevice):
|
||||||
"_send_status_request must be implemented by children")
|
"_send_status_request must be implemented by children")
|
||||||
|
|
||||||
async def refresh_status(self):
|
async def refresh_status(self):
|
||||||
|
async with self.request_mutex:
|
||||||
try:
|
try:
|
||||||
state = await self._send_status_request()
|
state = await self._send_status_request()
|
||||||
except Exception:
|
except Exception:
|
||||||
|
@ -275,6 +277,7 @@ class HTTPDevice(PowerDevice):
|
||||||
self.state = state
|
self.state = state
|
||||||
|
|
||||||
async def set_power(self, state):
|
async def set_power(self, state):
|
||||||
|
async with self.request_mutex:
|
||||||
try:
|
try:
|
||||||
state = await self._send_power_request(state)
|
state = await self._send_power_request(state)
|
||||||
except Exception:
|
except Exception:
|
||||||
|
@ -381,6 +384,7 @@ class TPLinkSmartPlug(PowerDevice):
|
||||||
START_KEY = 0xAB
|
START_KEY = 0xAB
|
||||||
def __init__(self, config):
|
def __init__(self, config):
|
||||||
super().__init__(config)
|
super().__init__(config)
|
||||||
|
self.request_mutex = Lock()
|
||||||
self.addr = config.get("address").split('/')
|
self.addr = config.get("address").split('/')
|
||||||
self.port = config.getint("port", 9999)
|
self.port = config.getint("port", 9999)
|
||||||
|
|
||||||
|
@ -448,6 +452,7 @@ class TPLinkSmartPlug(PowerDevice):
|
||||||
await self.refresh_status()
|
await self.refresh_status()
|
||||||
|
|
||||||
async def refresh_status(self):
|
async def refresh_status(self):
|
||||||
|
async with self.request_mutex:
|
||||||
try:
|
try:
|
||||||
res = await self._send_tplink_command("info")
|
res = await self._send_tplink_command("info")
|
||||||
if len(self.addr) == 2:
|
if len(self.addr) == 2:
|
||||||
|
@ -464,6 +469,7 @@ class TPLinkSmartPlug(PowerDevice):
|
||||||
self.state = "on" if state else "off"
|
self.state = "on" if state else "off"
|
||||||
|
|
||||||
async def set_power(self, state):
|
async def set_power(self, state):
|
||||||
|
async with self.request_mutex:
|
||||||
try:
|
try:
|
||||||
res = await self._send_tplink_command(state)
|
res = await self._send_tplink_command(state)
|
||||||
err = res['system']['set_relay_state']['err_code']
|
err = res['system']['set_relay_state']['err_code']
|
||||||
|
|
Loading…
Reference in New Issue