Saltar al contenido principal

wiki-Documentación-

Ver en Git


Documentación

Metos

Este servicio funciona como el backend de la extensión de Metos.

Se encarga de manejar las credenciales de metos de los usuarios (OAuth2), sincronizar las estaciones de las cuentas de metos, y de realizar periódicamente la ingesta.

Se autentica contra aurapi y consulta el servicio de sensores como cualquier otra extensión desarrollada por un tercero lo haría.

Se utiliza la base de datos de sensores para almacenar información sobre los usuarios, aunque no está vinculada con ninguna tabla de sensores (podría estar totalmente separada).

Integraciones

Este servicio se utiliza en 2 extensiones. Una es telefónica y la otra es Metos. Ambas tienen las mismas funcionalidades y se diferencian en cómo el usuario se autentica y carga sus estaciones.

  • En el caso de telefónica, todas las estaciones de los clientes se registran en la cuenta de Metos de telefónica. Los usuarios solo deben indicar su número de serie y este servicio, mediante API_KEY, realiza la ingesta. Sólo funciona para estaciones dentro de esta cuenta.
  • Para el caso de Metos, Auravant se encuentra registrada como app en Metos. Los usuarios mediante OAuth2 autorizan a Auravant a consultar las estaciones de su cuenta. Este servicio registra las credenciales y realiza la ingesta en nombre del usuario.

Flujo

  1. La extensión consulta este servicio para verificar si el usuario ya ingresó sus credenciales.
  2. Si no tiene credenciales, se inicia el flujo de OAuth2 en Metos, que termina redirigiendo al usuario a este servicio con el resultado de la operación. Se almacena el refresh_token.
  3. Una vez que se tienen las credenciales del usuario, se sincronizan las estaciones que el mismo tiene en Metos. Eso implica consultar a Metos por todas las estaciones y luego crearlas como grupos de variables en el servicio de ensores. Para esto se formatea la información para llevarla al modelo de sensores. LICENSE README.md init.py core docker docker-compose.yml docs features requirements.txt run.py Por cada estación se crea un grupo de variables, mientras que por cada sensor, una variable. LICENSE README.md init.py core docker docker-compose.yml docs features requirements.txt run.py Ciertas cuentas pagas de metos disponen de modelos de enfermedades. Estos son cálculos que se realizan a partir de las variables climáticas que permiten estimar por ejemplo las probabilidades que un cultivo se infecte con cierta plaga. Estas se almacenan en sensores como variables del grupo.
  4. Luego de crear las estaciones, se dispara el ingesta de los últimos 10 mil puntos.
  5. Cada hora se dispara la ingesta de todas las estaciones sincronizadas.
  6. El usuario puede borrar de sensores la estación, lo que hará que se deje de sincronizar.

El el caso de telefónica, los puntos 1,2,3 no se realizan. El usuario sólo indica su número de serie para indicar la estación a sincronizar.

Modelo de datos

  • tabla metos_users LICENSE README.md init.py core docker docker-compose.yml docs features requirements.txt run.py Se registran los usuarios de metos y su refresh_token
  • tabla metos_auravant_user_map LICENSE README.md init.py core docker docker-compose.yml docs features requirements.txt run.py Se registra el vínculo entre un usuario de auravant y un usuario de metos. Más de un registro de esta tabla de vincula a un único usuario de metos. El refresh_token cambia cada vez que se usa, por lo que es necesario que cuando cambia, lo haga para todos los usuario, explicando el por qué de esta tabla.
  • tabla metos_sensor_codes LICENSE README.md init.py core docker docker-compose.yml docs features requirements.txt run.py Tiene las constantes de Metos. La API de Metos entrega códigos, por ejemplo el tipo de sensor (Viento, humedad, etc) Esta tabla guarda las equivalencias para mostrar al usuario texto
  • tabla metos_disease_models LICENSE README.md init.py core docker docker-compose.yml docs features requirements.txt run.py Igual que la tabla anterior pero para los modelos de enferemedades.
  • tabla metos_synced_stations LICENSE README.md init.py core docker docker-compose.yml docs features requirements.txt run.py Un registro de las estaciones que tiene cada usuario, si está vigente o no, y si pertenecen a la integración de Telefónica o a la genérica de Metos de manera de autenticarsee de la manera correcta.

Funcionamiento

Este servicio consulta aurapi y sensores como si fuese una extensión desarrollada por terceros. Por eso se verá en el .env variables que permiten identificar la extensión, tanto la de metos como la de telefónica.

El servicio solicita el auth jwt offline de cada usuario a aurapi (/api/extensions/auth/offline), para lo cual el mismo debe tener autorizada la funcionalidad AuthOffline. Luego consulta el servicio de sensores utilizando este jwt, actuando en nombre del usuario.

En el archivo ìngest_control.py se encuentran los métodos principales de la ingesta.

  • metos_sincronizer: para disparar la ingesta para todos o un usuario.
  • run_metos_data_ingest: realizar la ingesta para una estación específica.
  • run_metos_ingest_by_group_uuid: llama al método anterior, pero sólo necesita los uuid de las estaciones.

En el archivo ìngest.py se encuentran los métodos que descargan los datos de Metos. Los endpoints y los formatos son distintos para los modelos de enfermedades que para las variables, por lo que se realizan por separado. La API de Metos tiene cosas que no están muy claras en la documentación, como por ejemplo los tz de los timestamps, o el uso de filtro. La complejidad de estos métodos radica justamente ahí, sumado a que es necesario re-formatear los datos para luego enviarlos al servicio de sensores.