Azure Time Series Insights agit comme un magasin temporaire pour les données de séries chronologiques. Dans l'IoT, les données sont souvent des séries chronologiques, et comme il s'agit de données provenant de capteurs, il est nécessaire de traiter les données avant la visualisation ou l'analyse. En particulier, les données de séries chronologiques doivent souvent être traitées pour la perte de données, la non-uniformité des intervalles de temps, le bruit, etc. Si les données traitées peuvent être sorties à intervalles de temps réguliers, elles seront très utiles comme stockage temporaire.
Azure Time Series Insights vous permet d'effectuer divers processus d'agrégation avec une API et un langage de requête basé sur JSON. Je voudrais faire un appel API depuis Python. Utilisez l'environnement créé dans l'article précédent.
L'API Azure utilise Oauth 2.0 comme authentification pour l'authentification. Le traitement est effectué dans l'ordre suivant.
Enregistrez l'application et notez les trois éléments suivants.
A: ID de répertoire
B: ID de l'application
C: clé
Définissez les droits d'accès pour les applications enregistrées dans les ressources (services). Accédez à la page du portail Time Series Insights et configurez les paramètres.
URL ENCODE le contenu que vous avez noté à l'étape précédente dans le corps du message et POSTEZ-le dans l'URL de l'API avec https.
AUTH_API_URL = "https://login.windows.net/ID de répertoire de A/oauth2/token?api-version=1.0"
token_query = {
'grant_type': 'client_credentials',
'resource': 'https://api.timeseries.azure.com/',
'client_id':ID de l'application ’B',
'client_secret':'Touche C'
}
token_request = urllib2.Request(AUTH_API_URL,urllib.urlencode(token_query))
token_request.add_header('Content-Type','application/x-www-form-urlencoded')
response = urllib2.urlopen(token_request)
Veuillez consulter ici pour la méthode de création. Notez le nom de domaine complet de D.
Si ce qui précède réussit, un jeton d'accès sera retourné. Utilisez ce jeton pour accéder à la fonctionnalité d'agrégation de Time Series Insights.
L'agrégation est effectuée en définissant une requête au format JSON et en l'envoyant à l'API Websocket. La référence API est ici.
Écrivez la requête en JSON. La référence est ici.
Voici un exemple de requête qui agrège la température et l'humidité. Il est totalisé en unités de 1 minute. Par ce processus, l'intervalle de temps est maintenu constant (moyenné).
{
"content": {
"searchSpan": {
"from": "2017-08-08T00:00:00.000Z",
"to": "2017-08-08T02:00:00.000Z"
},
"aggregates": [
{
"dimension": {
"dateHistogram": {
"input": {
"builtInProperty": "$ts"
},
"breaks": { "size": "1m" }
}
},
"measures": [
{
"avg": {
"input": {
"property": "temperature",
"type": "Double"
}
}
},
{
"avg": {
"input": {
"property": "humidity",
"type": "Double"
}
}
},
{
"count": { }
}
]
}
]
},
"headers": {
"Authorization": "Définir le jeton d'accès"
}
}
Il s'agit du code Python qui envoie une requête et affiche le résultat au format CSV.
AUTH_API_URL = "https://login.windows.net/ID de répertoire de A/oauth2/token?api-version=1.0"
REST_API_URL = "wss://D FQDN.env.timeseries.azure.com/aggregates?api-version=2016-12-12"
import urllib2
import urllib
import json
import websocket
import ssl
try:
token_query = {
'grant_type': 'client_credentials',
'resource': 'https://api.timeseries.azure.com/',
'client_id':'ID d'application de B',
'client_secret':'Touche C'
}
token_request = urllib2.Request(AUTH_API_URL,urllib.urlencode(token_query))
token_request.add_header('Content-Type','application/x-www-form-urlencoded')
response = urllib2.urlopen(token_request)
result_token=response.read()
token=json.loads(result_token)
query_file = open('c:\\local\query4.json') --Lire une requête JSON à partir d'un fichier
request_query=json.load(query_file)
request_query['headers']['Authorization']="Bearer "+token['access_token']--Définir le jeton d'accès dans la requête
wSocket = websocket.create_connection(REST_API_URL,sslopt={"cert_reqs": ssl.CERT_NONE})
wSocket.send(json.dumps(request_query))
result_wSocket = wSocket.recv()
dataset=json.loads(result_wSocket)--Convertir le JSON reçu en objet Python
index=0
print "timestamp,","temperature,","humidity"
for dimension in dataset['content'][0]['dimension']:
print dimension,",",dataset['content'][0]['measures'][index][0],",",dataset['content'][0]['measures'][index][1]
index=index+1
wSocket.close()
except urllib2.HTTPError as e:
print("HTTP Error: {0} - {1}".format(e.code, e.reason))
except urllib2.URLError as e:
print("URL Error: {0}".format(e.reason))
except Exception as e:
print("General Exception: {0}".format(e))
Recommended Posts