Implementación de la API Pharo Netatmo para productos Legrand Netatmo.
Productos compatibles:
No se puede acceder a los datos directamente desde los dispositivos: Netatmo no proporciona eso por el momento. La única forma de acceder a los datos y a los dispositivos es a través de los servidores de Netatmo. Necesita estar conectado a Internet para obtener datos de sus dispositivos.
El acceso requiere una autenticación OAuth2 para obtener un token de acceso. Este token debe actualizarse a tiempo con otra solicitud de autenticación. Para obtener más detalles sobre la seguridad, consulte el enlace a la documentación oficial de Netatmo al final de esta página.
La autenticación OAuth2 funciona en este proyecto utilizando Zinc y se puede utilizar para aplicaciones web o de escritorio.
Cuando se recupere su token, use la API con él durante el tiempo de validez del token.
Metacello new
baseline: ' NetatmoAPI ' ;
repository: ' github://labordep/ PharoNetatmoAPI :main ' ;
onConflictUseIncoming;
ignoreImage;
load.
Cree un acceso a la aplicación con su cuenta de Netatmo Connect para obtener sus datos client_id y client_secret. Consulte la sección inferior para utilizar la autenticación OAuth2 en este proyecto.
Para obtener más detalles, consulte las pautas oficiales.
Esta sección describe cómo autenticarse y obtener un token de acceso. Este paso no es obligatorio si obtiene un token manualmente, por ejemplo, directamente a través del sitio web de una cuenta de Netamo u otra biblioteca proveedora. Cuando obtienes un token, puedes usar la API; consulta la siguiente sección para ver algunos ejemplos.
Primero, instancia un nuevo NetatmoAPIAuthentificator
con tus datos client_id y client_secret. Debe especificar el alcance de sus datos, por ejemplo: temperatura del termostato, humedad, etc. Si no está seguro o si necesita todos, use NetatmoScopeEnum allReadScopes
para obtener todos los datos que se pueden leer.
authenticator := NetatmoAPIAuthentificator
clientId: ' myClientId '
clientSecret: ' myClientSecret '
scopes: ( NetatmoScopeEnum allReadScopes).
Ahora cree una nueva sesión para solicitar la autenticación. Este método devuelve una ZnOAuth2Session
que proporciona el proceso de conexión OAuth2.
session := authenticator createOAuth2Session.
Si este es el primer intento de obtener un token, la sesión no está activa. Llame al método requestUserAuthentication
para abrir su navegador web y validar la autenticación mediante el formulario en línea de Netatmo.
session isLive ifFalse: [
authenticator requestUserAuthentication.
].
En este paso, su navegador web predeterminado abre el formulario de autenticación en línea de Netatmo:
Marque y acepte si está de acuerdo. Se muestra una página de resultados básica para confirmar la buena autenticación; cierre esta página cuando aparezca:
Obteniendo tu token:
token := session liveAccessToken.
Instanciante NetatmoAPI
para tener que solicitar datos de la API. Utilice un token para configurar la conexión.
| api |
api := NetatmoAPI new .
api token: ' yourAccess|tokenHere '
Utilice métodos de categoría "api" para solicitar datos.
Obtenga todos los dispositivos y devuelva una lista de NetatmoDevice
. La lista puede cambiar según la autorización de la sesión.
| devices |
devices := api getDevices.
Obtenga todos los dispositivos y devuelva una lista de dispositivos NetatmoStation
.
| devices |
devices := api getStationDevices.
Obtenga un dispositivo específico de la dirección mac (id) y devuelva una lista de dispositivos NetatmoStation
.
| devices |
devices := api getStationDevice:: ' 01:23:45:67:89:ab ' .
Obtenga todos los dispositivos y devuelva una lista de dispositivos NetatmoHealthyHomeCoach
.
| devices |
devices := api getHealthyHomeCoachDevices.
Obtenga un dispositivo específico de la dirección mac (id) y devuelva una lista de dispositivos NetatmoHealthyHomeCoach
.
| devices |
devices := api getHealthyHomeCoachDevice: ' 01:23:45:67:89:ab ' .
Utilice la API para obtener medidas desde un dispositivo y devolver una lista de medidas de NetatmoMeasure
. Cada NetatmoMeasure
contiene datos (por ejemplo 56
), tipo (por ejemplo 'humidity'
), unidad (por ejemplo '%'
), unidad de datos (por ejemplo Number
) y una DateTime
de la medida. Cuando se solicita una medida de los types:
para elegir el tipo de datos pasando una lista de NetatmoMeasureType
.
Obtenga un tipo de datos de un dispositivo.
| measures |
measures := api getMeasures: (device id)
types: NetatmoMeasureType humidity.
Obtenga múltiples tipos de datos desde un dispositivo.
| measures |
measures := api getMeasures: (device id)
types: ( OrderedCollection
with: NetatmoMeasureType temperature
with: NetatmoMeasureType humidity).
Es posible solicitar un intervalo de fecha y hora de medida, con una escala para la muestra. Ejemplo: obtener la temperatura todos los días a la hora actual de la última semana.
| measures |
measures := api getMeasures: (device id)
types: NetatmoMeasureType temperature
scale: 1 day
dateTimeBegin: ( DateAndTime now - 7 day)
dateTimeEnd: DateAndTime now.
El paquete NetatmoAPI-Examples
contiene algunos ejemplos de uso de API con interfaces de usuario básicas que utilizan Spec
y Roassal
.
Una lista de dispositivos disponibles (con subdispositivos):
Una lista de las medidas de Healthy Home Coach de los últimos 7 días:
Un panel de la estación meteorológica:
Una Estación Meteorológica dura 7 días humedad interior y exterior:
Etc.
Usando las API de Netatmo Connect tendrás acceso a información muy sensible. Esto es particularmente cierto si su aplicación accede a nuestras Cámaras (transmisión en vivo o videos). Asegúrese de respetar la privacidad del usuario y de tener una política de privacidad sólida.
Términos de uso de las API de Netatmo Connect
Estos recursos son mi referencia para implementar esta API. Hay dos grupos de productos API: Clima/Seguridad/Energía y HomeCoach/Aircare.
Documentación general de Netatmo
API de productos más específicos:
Documentación de la API de Netatmo Aircare
Este proyecto es un trabajo personal, no estoy afiliado a Legrand.
Este proyecto tiene la licencia MIT; consulte el archivo de LICENCIA para obtener más detalles.