[PYTHON] Informationen zur Verarbeitung der IoT-Zeitreihendatenaggregationsverarbeitung in Azure Time Series Insights

Überblick

Azure Time Series Insights fungiert als temporärer Speicher für Zeitreihendaten. Im IoT sind Daten häufig Zeitreihen. Da es sich um Daten von Sensoren handelt, müssen die Daten vor der Visualisierung oder Analyse verarbeitet werden. Insbesondere müssen Zeitreihendaten häufig auf Datenverlust, Ungleichmäßigkeit der Zeitintervalle, Rauschen usw. hin verarbeitet werden. Wenn die verarbeiteten Daten in regelmäßigen Zeitintervallen ausgegeben werden können, ist dies als temporärer Speicher sehr nützlich.

ts1.png

Mit Azure Time Series Insights können Sie verschiedene Aggregationsprozesse mit API- und JSON-basierter Abfragesprache ausführen. Ich möchte einen API-Aufruf von Python aus durchführen. Verwenden Sie die im vorherigen Artikel erstellte Umgebung.

ts2.png

Die Azure-API verwendet Oauth 2.0 als Authentifizierung für die Authentifizierung. Die Verarbeitung erfolgt in der folgenden Reihenfolge.

Registrieren Sie sich im Verzeichnis und geben Sie den Schlüssel aus

Registrieren Sie den Antrag und notieren Sie sich die folgenden drei Punkte.

A: Verzeichnis-ID

B: Anwendungs-ID

C: Schlüssel

Festlegen von Zugriffsrechten für Anwendungen, die in Ressourcen (Diensten) registriert sind. Gehen Sie zur Portalseite von Time Series Insights und konfigurieren Sie die Einstellungen.

keypub.jpg

Ausgabe von Zugriffstoken per API

URL ENCODIEREN Sie den Inhalt, den Sie im vorherigen Schritt in den Nachrichtentext geschrieben haben, und senden Sie ihn mit https an die API-URL.

AUTH_API_URL = "https://login.windows.net/Verzeichnis-ID von A./oauth2/token?api-version=1.0"
 token_query = {
      'grant_type': 'client_credentials',
      'resource': 'https://api.timeseries.azure.com/',
      'client_id':B Anwendungs-ID', 
      'client_secret':'C-Taste'
 }
 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)

Erstellen Sie Einblicke in Zeitreihen und zeichnen Sie den vollqualifizierten Domänennamen auf

Die Erstellungsmethode finden Sie unter hier. Notieren Sie sich den FQDN von D.

fqdn.jpg

Verwenden Sie den Dienst mithilfe des Zugriffstokens

Wenn das oben genannte erfolgreich ist, wird ein Token für den Zugriff zurückgegeben. Verwenden Sie dieses Token, um auf die Aggregationsfunktion von Time Series Insights zuzugreifen.

Die Aggregation wird durchgeführt, indem eine Abfrage im JSON-Format definiert und an die Websocket-API gesendet wird. Die API-Referenz lautet hier.

Schreiben Sie die Abfrage in JSON. Die Referenz ist hier.

Unten finden Sie eine Beispielabfrage, die Temperatur und Luftfeuchtigkeit aggregiert. Es wird in 1-Minuten-Einheiten summiert. Durch diesen Vorgang wird das Zeitintervall konstant gehalten (gemittelt).

{
  "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": "Setzen Sie das Zugriffstoken"
  }
}

Dies ist Python-Code, der eine Abfrage sendet und das Ergebnis im CSV-Format anzeigt.

AUTH_API_URL = "https://login.windows.net/Verzeichnis-ID von 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':'Anwendungs-ID von B.', 
      'client_secret':'C-Taste'
        }
         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') --Lesen einer JSON-Abfrage aus einer Datei
          request_query=json.load(query_file)
          request_query['headers']['Authorization']="Bearer "+token['access_token']--Legen Sie das Zugriffstoken in der Abfrage fest

          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)--Konvertieren Sie empfangenes JSON in Python-Objekt
          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

Informationen zur Verarbeitung der IoT-Zeitreihendatenaggregationsverarbeitung in Azure Time Series Insights
Informationen zur Parameterverarbeitung in Flask's request.args
Über Zeitreihendaten und Übertraining
Bequeme Zeitreihenaggregation mit TimeGrouper von Pandas
Ich habe mich eingehend mit der Verarbeitung von Variablen in Python befasst
Eine clevere Möglichkeit zur Zeitverarbeitung mit Python
Lesen von Zeitreihendaten in PyTorch