You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							116 lines
						
					
					
						
							3.9 KiB
						
					
					
				
			
		
		
	
	
							116 lines
						
					
					
						
							3.9 KiB
						
					
					
				| """ GeoRide socket-io implementation """
 | |
| import logging
 | |
| import socketio
 | |
| 
 | |
| from georideapilib.api import GEORIDE_SOCKET_HOST
 | |
| 
 | |
| _LOGGER = logging.getLogger(__name__)
 | |
| 
 | |
| sio = socketio.Client(reconnection=True, reconnection_attempts=5, reconnection_delay=1000, reconnection_delay_max=5000, randomization_factor=0.5) # pylint: disable=C0103
 | |
| 
 | |
| @sio.on('connect')
 | |
| def on_connect():
 | |
|     """ event: connected """
 | |
|     _LOGGER.debug('GeoRide socket connected')
 | |
| 
 | |
| @sio.on('disconnect')
 | |
| def on_disconnect():
 | |
|     """ event: disconnected """
 | |
|     _LOGGER.debug('GeoRide socket disconnected')
 | |
| 
 | |
| 
 | |
| class GeoRideSocket():
 | |
|     """docstring for GeoRideSocket"""
 | |
|     def __init__(self):
 | |
|         self._on_message_callback = None
 | |
|         self._on_device_callback = None
 | |
|         self._on_position_callback = None
 | |
|         self._on_alarm_callback = None
 | |
|         self._on_refresh_tracker_callback = None
 | |
|         self._on_locked_callback = None
 | |
|         self._initialised = False
 | |
| 
 | |
| 
 | |
|     def subscribe_on_message(self, callback_function):
 | |
|         """event: tells you authentication informations."""
 | |
|         self._on_message_callback = callback_function
 | |
| 
 | |
|     def subscribe_device(self, callback_function):
 | |
|         """event: tells you when a device is added to the account."""
 | |
|         self._on_device_callback = callback_function
 | |
| 
 | |
|     def subscribe_position(self, callback_function):
 | |
|         """event: tells you when a device sent a position."""
 | |
|         self._on_position_callback = callback_function
 | |
| 
 | |
|     def subscribe_alarm(self, callback_function):
 | |
|         """event: tells you when a device trigger an alarm."""
 | |
|         self._on_alarm_callback = callback_function
 | |
| 
 | |
|     def subscribe_refresh_tracker(self, callback_function):
 | |
|         """event: tells you when you need to refresh your list of trackers"""
 | |
|         self._on_refresh_tracker_callback = callback_function
 | |
| 
 | |
|     def subscribe_locked(self, callback_function):
 | |
|         """event: tells you when a device has been locked or unlocked."""
 | |
|         self._on_locked_callback = callback_function
 | |
| 
 | |
| 
 | |
|     def init(self):
 | |
|         """init the context"""
 | |
|         @sio.on('message')
 | |
|         def on_message(data):
 | |
|             """ on_message """
 | |
|             _LOGGER.debug('Message received: %s', data)
 | |
|             if self._on_message_callback is not None:
 | |
|                 self._on_message_callback(data)
 | |
|         
 | |
|         @sio.on('device')
 | |
|         def on_device(data):
 | |
|             """ on_device """
 | |
|             _LOGGER.debug('Device received: %s', data)
 | |
|             if self._on_device_callback is not None:
 | |
|                 self._on_device_callback(data)
 | |
|         
 | |
|         @sio.on('position')
 | |
|         def on_position(data):
 | |
|             """ on_position """
 | |
|             _LOGGER.debug('Position received:%s', data)
 | |
|             if self._on_position_callback is not None:
 | |
|                 self._on_position_callback(data)
 | |
| 
 | |
|         @sio.on('alarm')
 | |
|         def on_alarm(data):
 | |
|             """ on_alarm """
 | |
|             _LOGGER.debug('Alarm received: %s', data)
 | |
|             if self._on_alarm_callback is not None:
 | |
|                 self._on_alarm_callback(data)
 | |
|             
 | |
|         @sio.on('refreshTrackersInstruction')
 | |
|         def on_refresh_tracker():
 | |
|             """ on_refresh_tracker """
 | |
|             _LOGGER.debug('Refresh tracker received')
 | |
|             if self._on_refresh_tracker_callback is not None:
 | |
|                 self._on_refresh_tracker_callback()
 | |
| 
 | |
|         @sio.on('lockedPosition')
 | |
|         def on_locked(data):
 | |
|             """ on_locked """
 | |
|             _LOGGER.debug('Locked received: %s', data)
 | |
|             if self._on_locked_callback is not None:
 | |
|                 self._on_locked_callback(data)        
 | |
|         self._initialised = True
 | |
| 
 | |
|     def connect(self, auth_token):
 | |
|         """ connect to the georide socket"""
 | |
|         if self._initialised is not False:
 | |
|             sio.connect(GEORIDE_SOCKET_HOST, headers={'token': auth_token})
 | |
|             sio.wait()
 | |
| 
 | |
|         else:
 | |
|             _LOGGER.error("Please call init() before")
 | |
|         
 | |
|     def disconnect(self):
 | |
|         """disconnect from the georide socket"""
 | |
|         sio.disconnect()
 |