diff --git a/custom_components/georide/__init__.py b/custom_components/georide/__init__.py index 1ea84e0..2ff357c 100644 --- a/custom_components/georide/__init__.py +++ b/custom_components/georide/__init__.py @@ -62,23 +62,11 @@ async def async_setup(hass, config): ) ) - # Return boolean to indicate that initialization was successful. - return True - - -def connect_socket(hass, component): - """subscribe to georide socket""" - context = hass.data[DOMAIN]["context"] - - socket = GeorideSocket() - socket.subscribe_locked(context.on_lock_callback) - socket.subscribe_device(context.on_device_callback) - socket.subscribe_position(context.on_position_callback) + - context.socket = socket - socket.init() - socket.connect(context.async_get_token()) + # Return boolean to indicate that initialization was successful. + return True async def async_setup_entry(hass, entry): @@ -93,7 +81,9 @@ async def async_setup_entry(hass, entry): password, token ) - + + _LOGGER.info("Context-setup and start the thread") + _LOGGER.info("Thread started") hass.data[DOMAIN]["context"] = context @@ -108,12 +98,9 @@ async def async_setup_entry(hass, entry): hass.async_create_task( hass.config_entries.async_forward_entry_setup(entry, "sensor")) - thread = Thread(target=connect_socket, args=(hass, entry)) - thread.start() - - return True + async def async_unload_entry(hass, entry): """Unload an Georide config entry.""" @@ -128,6 +115,19 @@ async def async_unload_entry(hass, entry): return True +def connect_socket(context): + """subscribe to georide socket""" + _LOGGER.info("Georide socket connexion") + socket = GeorideSocket() + socket.subscribe_locked(context.on_lock_callback) + socket.subscribe_device(context.on_device_callback) + socket.subscribe_position(context.on_position_callback) + + context.socket = socket + + socket.init() + socket.connect(context.get_token()) + class GeorideContext: """Hold the current Georide context.""" @@ -140,6 +140,7 @@ class GeorideContext: self._georide_trackers = defaultdict(set) self._token = token self._socket = None + self._thread_started = False @property def hass(self): @@ -191,6 +192,11 @@ class GeorideContext: def get_tracker(self, tracker_id): """ here we return last tracker by id""" + if not self._thread_started: + _LOGGER.info("Satr the thread") + self._hass.async_add_executor_job(connect_socket, self) + self._thread_started = True + for tracker in self._georide_trackers: if tracker.tracker_id == tracker_id: return tracker @@ -206,7 +212,6 @@ class GeorideContext: """set the georide socket""" self._socket = socket - @callback def on_lock_callback(self, data): """on lock callback""" diff --git a/custom_components/georide/device_tracker.py b/custom_components/georide/device_tracker.py index 8e3dc21..6589936 100644 --- a/custom_components/georide/device_tracker.py +++ b/custom_components/georide/device_tracker.py @@ -117,9 +117,9 @@ class GeorideTrackerEntity(TrackerEntity): """No polling needed.""" return True - async def async_update(self): + def update(self): """ update the current tracker""" + _LOGGER.info('update') self._data = self._get_tracker_callback(self._tracker_id) self._name = self._data.tracker_name - return \ No newline at end of file diff --git a/custom_components/georide/manifest.json b/custom_components/georide/manifest.json index 7a11df4..635646b 100644 --- a/custom_components/georide/manifest.json +++ b/custom_components/georide/manifest.json @@ -4,7 +4,7 @@ "config_flow": true, "documentation": "https://git.tontontux.fr/mduval/GeorideHA", "requirements": [ - "georideapilib>=0.4.3", + "georideapilib>=0.4.4", "pyjwt>=1.7.1" ], "dependencies": [], diff --git a/custom_components/georide/sensor.py b/custom_components/georide/sensor.py index ba8ace6..aa3d4ed 100644 --- a/custom_components/georide/sensor.py +++ b/custom_components/georide/sensor.py @@ -52,7 +52,7 @@ class GeorideOdometerSensorEntity(SwitchDevice): def update(self): """ update the current tracker""" - _LOGGER.info('async_update ') + _LOGGER.info('update') self._data = self._get_tracker_callback(self._tracker_id) self._name = self._data.tracker_name self._state = self._data.odometer diff --git a/custom_components/georide/switch.py b/custom_components/georide/switch.py index 76b59cb..5c3d881 100644 --- a/custom_components/georide/switch.py +++ b/custom_components/georide/switch.py @@ -80,7 +80,7 @@ class GeorideLockSwitchEntity(SwitchDevice): def update(self): """ update the current tracker""" - _LOGGER.info('async_update ') + _LOGGER.info('update') self._data = self._get_tracker_callback(self._tracker_id) self._name = self._data.tracker_name self._is_on = self._data.is_locked