Repository navigation
getLoginInfo broken: sso.hivehome.com now uses single-quoted window.HiveSSO* values (JSON decode error at char 19) #181
Description
Summary
HiveApi.getLoginInfo() can no longer parse the config embedded in https://sso.hivehome.com/, so every Home Assistant setup or reload of the Hive integration fails. This is persistent, not transient: sso.hivehome.com returns HTTP 200 from inside the HA container, the Hive mobile app works normally, and repeated reloads fail identically.
Root cause
getLoginInfo turns the first <script> into JSON with string replacements, which assumes the old single-line format (window.HiveSSOPoolId="...",window...):
json_data = json.loads(
'{"'
+ (html("script:first").text())
.replace(",", ', "')
.replace("=", '":')
.replace("window.", "")
+ "}"
)The page now uses separate statements, with spaces around = and single-quoted values:
window.HiveSSOPoolId = 'eu-west-1_SamNfoWtf'
window.HiveSSOCognitoClientId = 'jivhemv3fvn8cr32qrggqpcf8'
window.HiveSSOPublicCognitoClientId = '3rl4i0ajrmtdm8sbre54p9dvd9'
window.HiveSSOState = '%%STATE%%'
The first line becomes {"HiveSSOPoolId ": 'eu-west-1..., which is invalid JSON at character 19, exactly the reported Expecting value: line 1 column 20 (char 19). getLoginInfo then logs the error and returns None, so async_init fails with AttributeError: 'NoneType' object has no attribute 'get' on self.data.get("UPID").
Tested fix
Replacing the PyQuery / json.loads block with a regex that accepts either quote style and any spacing fixed it on a live account. The integration loads and all entities return:
import re as _re
json_data = dict(
_re.findall(r"window\.(\w+)\s*=\s*[\"']([^\"']*)[\"']", data.text)
)The rest of the function (the UPID / CLIID / REGION mapping and the exception handling) is unchanged, and KeyError is still raised if a key ever goes missing. PyQuery is no longer needed in this function.
It may also be worth raising a typed exception, rather than returning None, when parsing fails, so that callers can tell a parse failure from a configuration problem.
Environment
- Home Assistant: 2026.10.0 (Container, aarch64, Raspberry Pi 5)
- Python: 3.14.6
- pyhive-integration: unknown
Logs
ERROR [apyhiveapi.api.hive_api] Failed to get login info: Expecting value: line 1 column 20 (char 19)
ERROR [apyhiveapi.api.hive_api] API error occurred - returning error response
ERROR [homeassistant.config_entries] Error setting up entry <redacted> for hive
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/components/hive/__init__.py", line 40, in async_setup_entry
devices = await hive.session.startSession(hive_config)
File "/usr/local/lib/python3.14/site-packages/apyhiveapi/session.py", line 853, in startSession
await self.getDevices("No_ID")
File "/usr/local/lib/python3.14/site-packages/apyhiveapi/session.py", line 698, in getDevices
await self.hiveRefreshTokens()
File "/usr/local/lib/python3.14/site-packages/apyhiveapi/session.py", line 528, in hiveRefreshTokens
result = await self.auth.refresh_token(
File "/usr/local/lib/python3.14/site-packages/apyhiveapi/api/hive_auth_async.py", line 612, in refresh_token
await self.async_init()
File "/usr/local/lib/python3.14/site-packages/apyhiveapi/api/hive_auth_async.py", line 110, in async_init
self.__pool_id = self.data.get("UPID")
AttributeError: 'NoneType' object has no attribute 'get'
Reproduce
docker exec homeassistant python3 -c "import requests;t=requests.get('https://sso.hivehome.com/',timeout=10).text;print([l.strip()[:200] for l in t.splitlines() if 'HiveSSO' in l][:5])"Related: home-assistant/core#182752 (the same setup path, triggered there by a timeout rather than a parse failure).
Activity
domgiles commentedon Oct 21, 2026
Issue and suggested fix tested.
chickey commentedon Oct 22, 2026
Confirmed on HA OS 2026.10.2 (amd64, Python 3.14). Same 200 response with single-quoted window.HiveSSO* values, and the regex patch fixes it.