Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ def requirements_from_file(filename="requirements.txt"):


setup(
version="1.0.8.dev10",
version="1.0.8",
packages=["apyhiveapi", "apyhiveapi.api", "apyhiveapi.helper"],
package_dir={"apyhiveapi": "src"},
package_data={"data": ["*.json"]},
Expand Down
11 changes: 9 additions & 2 deletions src/action.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,14 @@ async def getAction(self, device: dict):
Returns:
dict: Updated device.
"""
if self.session.shouldUseCachedData():
cached = self.session.getCachedDevice(device)
if cached is not None:
_LOGGER.debug(
"Returning cached state for action %s (slow/busy poll).",
device["haName"],
)
return cached
dev_data = {}

if device["hiveID"] in self.data["action"]:
Expand All @@ -47,8 +55,7 @@ async def getAction(self, device: dict):
"custom": device.get("custom", None),
}

self.session.devices.update({device["hiveID"]: dev_data})
return self.session.devices[device["hiveID"]]
return self.session.setCachedDevice(device, dev_data)
else:
exists = self.session.data.actions.get("hiveID", False)
if exists is False:
Expand Down
11 changes: 9 additions & 2 deletions src/alarm.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,14 @@ async def getAlarm(self, device: dict):
Returns:
dict: Updated device.
"""
if self.session.shouldUseCachedData():
cached = self.session.getCachedDevice(device)
if cached is not None:
_LOGGER.debug(
"Returning cached state for alarm %s (slow/busy poll).",
device["haName"],
)
return cached
device["deviceData"].update(
{"online": await self.session.attr.onlineOffline(device["device_id"])}
)
Expand Down Expand Up @@ -125,8 +133,7 @@ async def getAlarm(self, device: dict):
),
}

self.session.devices.update({device["hiveID"]: dev_data})
return self.session.devices[device["hiveID"]]
return self.session.setCachedDevice(device, dev_data)
else:
await self.session.helper.errorCheck(
device["device_id"], "ERROR", device["deviceData"]["online"]
Expand Down
6 changes: 3 additions & 3 deletions src/api/hive_auth_async.py
Original file line number Diff line number Diff line change
Expand Up @@ -425,9 +425,9 @@ async def login(self):
self.device_group_key = result["AuthenticationResult"][
"NewDeviceMetadata"
]["DeviceGroupKey"]
self.device_key = result["AuthenticationResult"][
"NewDeviceMetadata"
]["DeviceKey"]
self.device_key = result["AuthenticationResult"]["NewDeviceMetadata"][
"DeviceKey"
]

_LOGGER.debug("SRP auth challenge completed successfully.")
return result
Expand Down
11 changes: 9 additions & 2 deletions src/camera.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,14 @@ async def getCamera(self, device: dict):
Returns:
dict: Updated device.
"""
if self.session.shouldUseCachedData():
cached = self.session.getCachedDevice(device)
if cached is not None:
_LOGGER.debug(
"Returning cached state for camera %s (slow/busy poll).",
device["haName"],
)
return cached
device["deviceData"].update(
{"online": await self.session.attr.onlineOffline(device["device_id"])}
)
Expand Down Expand Up @@ -183,8 +191,7 @@ async def getCamera(self, device: dict):
),
}

self.session.devices.update({device["hiveID"]: dev_data})
return self.session.devices[device["hiveID"]]
return self.session.setCachedDevice(device, dev_data)
else:
await self.session.helper.errorCheck(
device["device_id"], "ERROR", device["deviceData"]["online"]
Expand Down
19 changes: 9 additions & 10 deletions src/heating.py
Original file line number Diff line number Diff line change
Expand Up @@ -476,6 +476,14 @@ async def getClimate(self, device: dict):
Returns:
dict: Updated device.
"""
if self.session.shouldUseCachedData():
cached = self.session.getCachedDevice(device)
if cached is not None:
_LOGGER.debug(
"Returning cached state for climate %s (slow/busy poll).",
device["haName"],
)
return cached
device["deviceData"].update(
{"online": await self.session.attr.onlineOffline(device["device_id"])}
)
Expand Down Expand Up @@ -510,20 +518,11 @@ async def getClimate(self, device: dict):
device["device_id"], device["hiveType"]
),
}
self.session.devices.update({device["hiveID"]: dev_data})
return self.session.devices[device["hiveID"]]
return self.session.setCachedDevice(device, dev_data)
else:
await self.session.helper.errorCheck(
device["device_id"], "ERROR", device["deviceData"]["online"]
)
if self.session._lastPollSlow:
cached = self.session.devices.get(device["hiveID"])
if cached is not None:
_LOGGER.debug(
"Returning cached state for offline climate %s (slow poll).",
device["haName"],
)
return cached
device.setdefault(
"status",
{
Expand Down
12 changes: 5 additions & 7 deletions src/helper/hive_helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,13 +84,11 @@ def getDeviceFromID(self, n_id: str):
Returns:
dict: Device data.
"""
data = False
try:
data = self.session.devices[n_id]
except KeyError:
pass

return data
if hasattr(self.session, "entityCache"):
for cached in self.session.entityCache.values():
if cached.get("hiveID") == n_id or cached.get("device_id") == n_id:
return cached
return False

def getDeviceData(self, product: dict):
"""Get device from product data.
Expand Down
43 changes: 21 additions & 22 deletions src/hotwater.py
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ def __init__(self, session: object = None):
"""
self.session = session

async def getWaterHeater(self, device: dict):
async def getWaterHeater(self, device: dict):
"""Update water heater device.

Args:
Expand All @@ -230,11 +230,19 @@ async def getWaterHeater(self, device: dict):
Returns:
dict: Updated device.
"""
device["deviceData"].update(
{"online": await self.session.attr.onlineOffline(device["device_id"])}
)

if device["deviceData"]["online"]:
if self.session.shouldUseCachedData():
cached = self.session.getCachedDevice(device)
if cached is not None:
_LOGGER.debug(
"Returning cached state for water heater %s (slow/busy poll).",
device["haName"],
)
return cached
device["deviceData"].update(
{"online": await self.session.attr.onlineOffline(device["device_id"])}
)

if device["deviceData"]["online"]:

dev_data = {}
self.session.helper.deviceRecovered(device["device_id"])
Expand All @@ -257,22 +265,13 @@ async def getWaterHeater(self, device: dict):
),
}

self.session.devices.update({device["hiveID"]: dev_data})
return self.session.devices[device["hiveID"]]
else:
await self.session.helper.errorCheck(
device["device_id"], "ERROR", device["deviceData"]["online"]
)
if self.session._lastPollSlow:
cached = self.session.devices.get(device["hiveID"])
if cached is not None:
_LOGGER.debug(
"Returning cached state for offline water heater %s (slow poll).",
device["haName"],
)
return cached
device.setdefault("status", {"current_operation": None})
return device
return self.session.setCachedDevice(device, dev_data)
else:
await self.session.helper.errorCheck(
device["device_id"], "ERROR", device["deviceData"]["online"]
)
device.setdefault("status", {"current_operation": None})
return device

async def getScheduleNowNextLater(self, device: dict):
"""Hive get hotwater schedule now, next and later.
Expand Down
19 changes: 9 additions & 10 deletions src/light.py
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,14 @@ async def getLight(self, device: dict):
Returns:
dict: Updated device.
"""
if self.session.shouldUseCachedData():
cached = self.session.getCachedDevice(device)
if cached is not None:
_LOGGER.debug(
"Returning cached state for light %s (slow/busy poll).",
device["haName"],
)
return cached
device["deviceData"].update(
{"online": await self.session.attr.onlineOffline(device["device_id"])}
)
Expand Down Expand Up @@ -414,20 +422,11 @@ async def getLight(self, device: dict):
}
)

self.session.devices.update({device["hiveID"]: dev_data})
return self.session.devices[device["hiveID"]]
return self.session.setCachedDevice(device, dev_data)
else:
await self.session.helper.errorCheck(
device["device_id"], "ERROR", device["deviceData"]["online"]
)
if self.session._lastPollSlow:
cached = self.session.devices.get(device["hiveID"])
if cached is not None:
_LOGGER.debug(
"Returning cached state for light %s (slow poll).",
device["haName"],
)
return cached
device.setdefault("status", {"state": None})
return device

Expand Down
19 changes: 9 additions & 10 deletions src/plug.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,14 @@ async def getSwitch(self, device: dict):
Returns:
dict: Return device after update is complete.
"""
if self.session.shouldUseCachedData():
cached = self.session.getCachedDevice(device)
if cached is not None:
_LOGGER.debug(
"Returning cached state for switch %s (slow/busy poll).",
device["haName"],
)
return cached
device["deviceData"].update(
{"online": await self.session.attr.onlineOffline(device["device_id"])}
)
Expand Down Expand Up @@ -174,20 +182,11 @@ async def getSwitch(self, device: dict):
}
)

self.session.devices.update({device["hiveID"]: dev_data})
return self.session.devices[device["hiveID"]]
return self.session.setCachedDevice(device, dev_data)
else:
await self.session.helper.errorCheck(
device["device_id"], "ERROR", device["deviceData"]["online"]
)
if self.session._lastPollSlow:
cached = self.session.devices.get(device["hiveID"])
if cached is not None:
_LOGGER.debug(
"Returning cached state for offline switch %s (slow poll).",
device["haName"],
)
return cached
device.setdefault("status", {"state": None})
return device

Expand Down
43 changes: 21 additions & 22 deletions src/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,19 +74,27 @@ def __init__(self, session: object = None):
"""
self.session = session

async def getSensor(self, device: dict):
"""Gets updated sensor data.
async def getSensor(self, device: dict):
"""Gets updated sensor data.

Args:
device (dict): Device to update.

Returns:
dict: Updated device.
"""
device["deviceData"].update(
{"online": await self.session.attr.onlineOffline(device["device_id"])}
)
data = {}
if self.session.shouldUseCachedData():
cached = self.session.getCachedDevice(device)
if cached is not None:
_LOGGER.debug(
"Returning cached state for sensor %s (slow/busy poll).",
device["haName"],
)
return cached
device["deviceData"].update(
{"online": await self.session.attr.onlineOffline(device["device_id"])}
)
data = {}

if device["deviceData"]["online"] or device["hiveType"] in (
"Availability",
Expand Down Expand Up @@ -146,19 +154,10 @@ async def getSensor(self, device: dict):
}
)

self.session.devices.update({device["hiveID"]: dev_data})
return self.session.devices[device["hiveID"]]
else:
await self.session.helper.errorCheck(
device["device_id"], "ERROR", device["deviceData"]["online"]
)
if self.session._lastPollSlow:
cached = self.session.devices.get(device["hiveID"])
if cached is not None:
_LOGGER.debug(
"Returning cached state for offline sensor %s (slow poll).",
device["haName"],
)
return cached
device.setdefault("status", {"state": None})
return device
return self.session.setCachedDevice(device, dev_data)
else:
await self.session.helper.errorCheck(
device["device_id"], "ERROR", device["deviceData"]["online"]
)
device.setdefault("status", {"state": None})
return device
Loading
Loading