Skip to content

Commit

Permalink
Make connection error handling generic
Browse files Browse the repository at this point in the history
  • Loading branch information
amaximus committed Mar 29, 2024
1 parent bdaa7b6 commit 376341c
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 15 deletions.
2 changes: 1 addition & 1 deletion custom_components/bkk_stop/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@
"codeowners": ["@amaximus"],
"iot_class": "cloud_polling",
"requirements": [],
"version": "2.9.8"
"version": "2.9.9"
}
37 changes: 23 additions & 14 deletions custom_components/bkk_stop/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from datetime import datetime
import logging
import pytz
import time
import voluptuous as vol

from homeassistant.components.sensor import PLATFORM_SCHEMA, ENTITY_ID_FORMAT
Expand Down Expand Up @@ -74,6 +75,9 @@ async def async_setup_platform(hass, config, async_add_devices, discovery_info=N
async_add_devices(
[BKKPublicTransportSensor(hass, name, entityid, stopid, minsafter, wheelchair, bikes, colors, ignorenow, maxitems, routes, inpredicted, apikey, headsigns, minsbefore)],update_before_add=True)

def _sleep(secs):
time.sleep(secs)

class BKKPublicTransportSensor(Entity):

def __init__(self, hass, name, entityid, stopid, minsafter, wheelchair, bikes, colors, ignorenow, maxitems, routes, inpredicted, apikey, headsigns, minsbefore):
Expand Down Expand Up @@ -107,8 +111,11 @@ def extra_state_attributes(self):
bkkdata = self._bkkdata
itemnr = 0

if bkkdata["status"] != "OK":
return None
if 'status' in bkkdata:
if bkkdata["status"] != "OK":
return None
else:
return None

bkkjson["stationName"] = bkkdata["data"]["references"]["stops"][self._stopid]["name"]
bkkjson["vehicles"] = []
Expand Down Expand Up @@ -170,16 +177,10 @@ def extra_state_attributes(self):

return bkkjson

def _sleep(secs):
time.sleep(secs)

async def async_update(self):
_session = async_get_clientsession(self._hass)

_LOGGER.debug("bkk_stop update for " + self._stopid)
## headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.3'}
# BKKURL="http://go.bkk.hu/bkk-utvonaltervezo-api/ws/otp/api/where/arrivals-and-departures-for-stop.json?key=apaiary-test&version=3&appVersion=apiary-1.0&onlyDepartures=true&stopId=" + self._stopid + "&minutesAfter=" + self._minsafter
# As of 2019-07-02 upgrade:
BKKURL="https://go.bkk.hu/api/query/v1/ws/otp/api/where/arrivals-and-departures-for-stop.json?key=" + self._apikey + "&version=3&appVersion=apiary-1.0&onlyDepartures=true&stopId=" + self._stopid + "&minutesAfter=" + self._minsafter + "&minutesBefore=" + self._minsbefore

for i in range(MAX_RETRIES):
Expand All @@ -188,21 +189,29 @@ async def async_update(self):
self._bkkdata = await response.json(content_type=None)

if not response.status // 100 == 2:
_LOGGER.debug("Fetch attempt " + str(i+1) + ": unexpected response " + str(reposnse.status))
_LOGGER.debug("Fetch attempt " + str(i+1) + ": unexpected response " + str(response.status))
await self._hass.async_add_executor_job(_sleep, 10)
else:
break
except (aiohttp.ContentTypeError, aiohttp.ServerDisconnectedError, asyncio.TimeoutError, ClientConnectorError) as err:
except Exception as err:
_LOGGER.debug("Fetch attempt " + str(i+1) + " failed for " + BKKURL)
_LOGGER.error(err)
_LOGGER.error(f'error: {err} of type: {type(err)}')
await self._hass.async_add_executor_job(_sleep, 10)

if self._bkkdata["status"] != "OK":
self._state = 1

if 'status' in self._bkkdata:
if self._bkkdata["status"] != "OK":
self._state = None
else:
self._state = None

if len(self._bkkdata["data"]["entry"]["stopTimes"]) == 0:
if 'data' in self._bkkdata:
if len(self._bkkdata["data"]["entry"]["stopTimes"]) == 0:
self._state = None
else:
self._state = None
self._state = 1

return self._state

@property
Expand Down

0 comments on commit 376341c

Please sign in to comment.