Implémentation de l'API Pharo Netatmo pour les produits Legrand Netatmo.
Produits supportés :
Vous ne pouvez pas accéder aux données directement depuis les appareils : Netatmo ne le fournit pas pour le moment. Le seul moyen d'accéder aux données et aux appareils est via les serveurs Netatmo. Vous devez être connecté à Internet pour obtenir les données de vos appareils.
L'accès nécessite une authentification OAuth2 pour obtenir un jeton d'accès. Ce jeton doit être actualisé à temps avec une autre demande d'authentification. Pour plus de détails sur la sécurité, consultez le lien vers la documentation officielle de Netatmo au bas de cette page.
L'authentification OAuth2 fonctionne dans ce projet en utilisant Zinc et peut être utilisée pour les applications de bureau ou Web.
Une fois votre jeton récupéré, utilisez l'API avec lui pendant la durée de validité du jeton.
Metacello new
baseline: ' NetatmoAPI ' ;
repository: ' github://labordep/ PharoNetatmoAPI :main ' ;
onConflictUseIncoming;
ignoreImage;
load.
Créez un accès application avec votre compte Netatmo connect pour obtenir vos données client_id et client_secret. Consultez la section inférieure pour utiliser l'authentification OAuth2 dans ce projet.
Pour plus de détails, consultez les directives officielles.
Cette section décrit comment s'authentifier et obtenir un jeton d'accès. Cette étape n'est pas obligatoire si vous obtenez manuellement un token, par exemple directement via un site de compte Netamo ou une autre bibliothèque prestataire. Lorsque vous obtenez un jeton, vous pouvez utiliser l'API, voir la section suivante pour avoir quelques exemples.
Tout d’abord, instanciez un nouveau NetatmoAPIAuthentificator
avec vos données client_id et client_secret. Vous devez spécifier la portée de vos données, par exemple : température du thermostat, humidité, etc. Si vous n'êtes pas sûr ou si vous avez besoin de toutes, utilisez NetatmoScopeEnum allReadScopes
pour obtenir toutes les données pouvant être lues.
authenticator := NetatmoAPIAuthentificator
clientId: ' myClientId '
clientSecret: ' myClientSecret '
scopes: ( NetatmoScopeEnum allReadScopes).
Créez maintenant une nouvelle session pour demander l'authentification. Cette méthode renvoie une ZnOAuth2Session
qui fournit le processus de connexion OAuth2.
session := authenticator createOAuth2Session.
S'il s'agit de la première tentative d'obtention d'un jeton, la session n'est pas en direct. Appelez la méthode requestUserAuthentication
pour ouvrir votre navigateur web et validez l'authentification à l'aide du formulaire en ligne Netatmo.
session isLive ifFalse: [
authenticator requestUserAuthentication.
].
A cette étape votre navigateur web par défaut ouvre le formulaire d'authentification Netatmo en ligne :
Vérifiez et acceptez si vous êtes d'accord. Une page de résultat basique s'affiche pour confirmer la bonne authentification, fermez cette page lorsqu'elle apparaît :
Récupération de votre token :
token := session liveAccessToken.
Instanciante NetatmoAPI
doit demander des données à l'API. Utilisez un jeton pour configurer la connexion.
| api |
api := NetatmoAPI new .
api token: ' yourAccess|tokenHere '
Utilisez les méthodes de catégorie "api" pour demander des données.
Obtenez tous les appareils, renvoyez une liste de NetatmoDevice
. La liste peut changer en fonction de l'autorisation de session.
| devices |
devices := api getDevices.
Obtenez tous les appareils, renvoie une liste des appareils NetatmoStation
.
| devices |
devices := api getStationDevices.
Obtenez un appareil spécifique à partir de l'adresse Mac (id), renvoie une liste des appareils NetatmoStation
.
| devices |
devices := api getStationDevice:: ' 01:23:45:67:89:ab ' .
Obtenez tous les appareils, renvoyez une liste des appareils NetatmoHealthyHomeCoach
.
| devices |
devices := api getHealthyHomeCoachDevices.
Obtenez un appareil spécifique à partir de l'adresse Mac (id), renvoie une liste des appareils NetatmoHealthyHomeCoach
.
| devices |
devices := api getHealthyHomeCoachDevice: ' 01:23:45:67:89:ab ' .
Utilisez l'API pour obtenir la mesure d'un appareil et renvoyez une liste de mesures NetatmoMeasure
. Chaque NetatmoMeasure
contient des données (par exemple 56
), un type (par exemple 'humidity'
), une unité (par exemple '%'
), une unité de données (par exemple Number
) et un DateTime
de la mesure. Lorsqu'une mesure est demandée par l'API, utilisez types:
pour choisir le type de données en transmettant une liste de NetatmoMeasureType
.
Obtenez un type de données à partir d’un appareil.
| measures |
measures := api getMeasures: (device id)
types: NetatmoMeasureType humidity.
Obtenez plusieurs types de données à partir d’un appareil.
| measures |
measures := api getMeasures: (device id)
types: ( OrderedCollection
with: NetatmoMeasureType temperature
with: NetatmoMeasureType humidity).
Il est possible de demander un intervalle de temps de mesure, avec une échelle pour l'échantillon. Exemple : obtenez la température chaque jour à l'heure actuelle de la semaine dernière.
| measures |
measures := api getMeasures: (device id)
types: NetatmoMeasureType temperature
scale: 1 day
dateTimeBegin: ( DateAndTime now - 7 day)
dateTimeEnd: DateAndTime now.
Le package NetatmoAPI-Examples
contient des exemples d'utilisation d'API avec des interfaces utilisateur de base utilisant Spec
et Roassal
.
Une liste des appareils disponibles (avec sous-appareils) :
Une liste des mesures Healthy Home Coach des 7 derniers jours :
Un tableau de bord Station Météo :
Une Station Météo dure 7 jours humidité intérieure et extérieure :
Etc.
Grâce aux API Netatmo Connect vous aurez accès à des informations très sensibles. Cela est particulièrement vrai si votre application accède à nos caméras (diffusion en direct ou vidéos). Assurez-vous de respecter la vie privée des utilisateurs et d'avoir une politique de confidentialité stricte.
Conditions d'utilisation des API Netatmo Connect
Ces ressources sont ma référence pour implémenter cette API. Il existe deux groupes de produits API : Météo/Sécurité/Énergie et HomeCoach/Aircare.
Documentation générale Netatmo
API produits plus spécifiques :
Documentation de l'API Netatmo Aircare
Ce projet est un travail personnel, je ne suis pas affilié à Legrand.
Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.