On all recent versions (including 2.1.0.3), on the scenario of several alarm l installations present, if one of them is inactive, the API will fail, and block further alarm panel processing
Example:
2023-02-22 18:01:36.340 ERROR (MainThread) [custom_components.securitas.securitas_direct_new_api.apimanager] No hemos podido verificar el estado de tu alarma. Por favor contacta con nosotros a través de MyVerisure
2023-02-22 18:01:36.341 ERROR (MainThread) [homeassistant.components.alarm_control_panel] Error while setting up securitas platform for alarm_control_panel
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 281, in _async_setup_platform
await asyncio.shield(task)
File "/config/custom_components/securitas/alarm_control_panel.py", line 58, in async_setup_entry
current_state: CheckAlarmStatus = await client.update_overview(
File "/config/custom_components/securitas/init.py", line 390, in update_overview
status.status,
AttributeError: 'str' object has no attribute 'status'
This is due to returning a string, instead of SStatus object in check_general_status, in case of errors
I solved using this code change:
async def check_general_status(self, installation: Installation) -> SStatus:
"""Check current status of the alarm."""
content = {
"operationName": "Status",
"variables": {"numinst": str(installation.number)},
"query": "query Status($numinst: String!) {\n xSStatus(numinst: $numinst) {\n status\n timestampUpdate\n }\n}\n",
}
response: ClientResponse = await self._execute_request(content, "Status")
result_json = json.loads(await response.text())
if "errors" in result_json:
error_message = result_json["errors"][0]["message"]
_LOGGER.error(error_message)
time = result_json["errors"][0]["time_thrown"]
return SStatus("ERROR",time)
raw_data = result_json["data"]["xSStatus"]
return SStatus(raw_data["status"], raw_data["timestampUpdate"])
On all recent versions (including 2.1.0.3), on the scenario of several alarm l installations present, if one of them is inactive, the API will fail, and block further alarm panel processing Example:
This is due to returning a string, instead of SStatus object in check_general_status, in case of errors
I solved using this code change: