Introduccion
De alguna manera, el rastreador GPS chino ST-901 cayó en mis manos. El dispositivo está diseñado principalmente para su uso en tecnología de automóviles y motocicletas, tiene un módulo gsm 2G para la comunicación con el mundo exterior, una carcasa sellada a prueba de agua, una pequeña batería incorporada que le permite trabajar unos 2-3 días sin alimentación externa cuando transmite una señal cada 3 minutos, así como un cable de encendido de señal, que le permite advertir sobre el arranque del motor. Puede administrar este rastreador mediante comandos de SMS al número del rastreador, y comunicarse y recibir notificaciones tanto por SMS como conectándolo a la nube a través de GPRS. Después de jugar con él por un tiempo, lo tiré en un cajón hasta que HomeAssistant apareció en casa. Hubo una idea de conectarlo a una casa inteligente.
Las tareas
Para conectar el rastreador a HomeAssistant, debe resolver dos problemas: obtener las coordenadas del rastreador y escribirlas en HomeAssistant. Si para la segunda tarea hay varias soluciones posibles a la vez (por ejemplo,
gpslogger o
owntracks_http ), la solución a la primera tarea en mi caso se complicó por el hecho de que en la configuración del rastreador para transferir coordenadas puede especificar solo una dirección IP, no un nombre de dominio. Como no tengo una dirección estática en casa, surgió la idea de utilizar un intermediario.
Observo que de esta manera, puede conectar casi cualquier rastreador GPS (y no solo considerado en mi artículo), compatible con los recursos de un intermediario . Todos los que estén interesados en lo que vino de esto, bienvenidos a cat.
Idea
Como dije anteriormente, este rastreador se puede conectar a muchos servicios en la nube. Algunos de ellos con ciertas restricciones le permiten utilizar los servicios de forma gratuita. Algunos servicios tienen API completas para interactuar con ellas, pero no las he encontrado entre las gratuitas. Pero casi todos los servicios brindan el servicio de "compartir" la ubicación del rastreador a través de un enlace permanente. Después de pasar por varios de estos servicios y hurgar en el código fuente de las páginas compartidas, encontré lo que estaba buscando en el servicio
livegpstracks : una solicitud de coordenadas. Por lo tanto, el esquema general de trabajo es el siguiente: el rastreador se conecta al servicio livegpstracks y transmite sus coordenadas, HomeAssistant periódicamente realiza una solicitud http al servicio y recibe las últimas coordenadas registradas, que se escriben en HomeAssistant por otra solicitud http. Aquí hay un
enlace a una lista de todos los rastreadores compatibles con el servicio.
Implementación
1. Obteniendo coordenadas por solicitudNos registramos en el servicio
livegpstracks y conectamos nuestro rastreador (el sitio tiene instrucciones detalladas para varios modelos). Después de eso, a través de la barra de herramientas en el sitio, cree un enlace privado para el seguimiento. El enlace tiene la forma:
https://livegpstracks.com/dv_USERID.html
donde USERID es la identificación digital de tus bolas.
Eso es todo. Puede acceder al servicio a través de solicitudes. Para no atormentarte por mucho tiempo, solo daré el formato de solicitud:
https://livegpstracks.com/viewer_coos_s.php?username=USER&ctp=one&code=USERID&tgst=site&tgsv=12&tkv11=TIMENOWMS
Aquí USER es el usuario bajo el cual se registró en el servicio livegpstracks, USERID es la identificación digital asignada al enlace compartido, TIMENOWMS es la hora actual en milisegundos (tiempo unix).
Una respuesta típica es:
[{"code":"xxx","id":"xxx","lat":"44","lng":"48","speed":"0","azimuth":"0","d":"2018-06-19","t":"09:35:17","altitude":"0","battery":"0","gpsaccuracy":""}]
Nota: reduje significativamente la salida y también cambié el código de parámetros, id, lat, lng.
El método para obtener coordenadas en Python se ve así:
def getInfoFrom(self): timenow = int(datetime.now().strftime("%s")) * 1000 response = requests.get('https://livegpstracks.com/viewer_coos_s.php', params={'username': self._user, 'ctp': 'one', 'code': self._myid, 'tgst': 'site', 'tgsv': 12, 'tkv11': timenow}) data = response.json() self._lat = data[0]["lat"] self._lon = data[0]["lng"] self._speed = data[0]["speed"] self._direction = data[0]["azimuth"] self._last_time_rcv = data[0]["d"] + ' ' + data[0]["t"]
Creo que no necesita explicar nada en este código: obtenemos la hora actual, hacemos una solicitud de obtención, recibimos json en respuesta, analizamos y obtenemos la latitud, longitud, velocidad, dirección del movimiento y la hora en que el servidor recibió las coordenadas por última vez.
2. Registro de coordenadasPara la grabación, utilicé el módulo GPSLogger para HomeAssistant, ya que funciona a través de una solicitud http y le permite usar una contraseña separada, diferente de la contraseña para toda la HA. La documentación (
gpslogger ) muestra que la solicitud tiene el siguiente formato:
https://HAADRESS:HAPORT/api/gpslogger?latitude=LAT&longitude=LON&device=DEV&accuracy=ACC&speed=SPD&direction=DIR&api_password=PASS
Aquí HAADRESS es la dirección IP o el nombre del servidor con HA, HAPORT es el puerto del servidor, LAT es la latitud, LON es la longitud, DEV es el nombre del dispositivo para mostrar en HA, ACC es la precisión para determinar las coordenadas (por alguna razón no funciona en HA, da un error, I no lo usó), SPD - velocidad, DIR - dirección del movimiento, PASS - contraseña para transmitir coordenadas
El método para escribir coordenadas en Python se ve así:
def putInfoTo(self): if self._lat != '' and self._lon != '': req_str = self._haddr+'/api/gpslogger' response = requests.get(req_str, params={'latitude': self._lat, 'longitude': self._lon, 'accuracy': 30, 'speed': self._speed, 'direction': self._direction, 'device': self._name, ' api_password': self._pwd}) self._last_time_upd = time.strftime("%Y.%m.%d %H:%M")
Creo que aquí también los comentarios son superfluos.
3. MóduloEl código completo del módulo para recibir y grabar coordenadas se proporciona a continuación.
Para conectar este módulo, el código debe copiarse en el directorio "config_folder_homeassistant / custom_components / sensor / car_location.py", y también agregar las siguientes líneas a la configuración:
device_tracker: - platform: gpslogger password: !secret gpslogger_password sensor: - platform: car_location name: car_sensor user: USER myid: USERID haddr: YOUR_HA_ADDRESS pwd: !secret gpslogger_password
Aquí están todas las variables de la sección "Obtención de coordenadas por solicitud".
Este módulo ha estado trabajando en HA por más de un mes sin fallas u otros problemas.
Eso es todo, gracias por su atención.
UPD:HomeAssistant actualizó el componente GPSLogger, en relación con el cual una nueva versión del mod y la configuración:
nueva configuración device_tracker: - platform: gpslogger sensor: - platform: car_location name: car_sensor user: USER myid: USERID haddr: YOUR_HA_ADDRESS_WEBHOOK
YOUR_HA_ADDRESS_WEBHOOK - dirección de weblog de GPSLogger, puede obtenerla en la sección Configuración - Integraciones - GPSLogger.
UPD2:HomeAssistant actualizó la lógica de trabajo desde la versión 0.88, en relación con la cual la nueva versión del mod:
sensorUPD3:Nueva versión de integración. El proyecto se trasladó a
GitHub . La versión actual está ahí.