[PYTHON] Klicken Sie auf die API von Nature Remo, um die Raumtemperatur mit Azure-Funktionen und CosmosDB aufzuzeichnen

Es gibt eine intelligente Fernbedienung namens Nature Remo. Ich benutze es seit letztem Jahr, weil ich Haushaltsgeräte über Smartphone-Apps und Google Home bedienen kann. Dieses Remo ist mit Sensoren ausgestattet, mit denen Sie Temperatur, Luftfeuchtigkeit, Beleuchtungsstärke und menschliche Bewegung über die API abrufen können (Remo mini ist nur Temperatur). Dieses Mal möchte ich Saas of Azure verwenden, um den Prozess abzuschließen, indem ich auf diese API klicke und Daten nur in der Cloud sammle.

Warum ich es in der Cloud vervollständigen wollte

Ich dachte, es wäre einfacher, es mit einem Raspeltorte zu bauen, aber manchmal wurde das Heimnetzwerk abgeschnitten, und ich dachte darüber nach, es von außen zu überprüfen, also tat ich es in der Cloud.

Was zu verwenden

Vorbereitungen

Da diesmal Funktionen in Python verwendet werden, können Sie den Code im Portal nicht bearbeiten. Bereitstellung von VVScode in Azure. Bereiten Sie daher VScode und die folgenden Erweiterungen vor.

VScode-Erweiterung

Azure Functions Core Tool https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-run-local?tabs=windows%2Ccsharp%2Cbash

Melden Sie sich mit VScode bei Azure an

Drücken Sie nach der Installation der obigen Erweiterung F1 auf VScode und dann Azure: Anmelden. Sie können sich mit VScode bei Azure anmelden, indem Sie sich im geöffneten Browser anmelden.

Bereiten Sie Azure-Ressourcen vor

CosmosDB Erstellen Sie eine CosmosDB. Dies kann über das Portal erfolgen oder über VScode bereitgestellt werden. Beim Erstellen mit VScode

  1. Drücken Sie F1 auf VScode und wählen Sie CosmosDB: Konto erstellen ...
  2. Geben Sie einen beliebigen Namen für den Kontonamen ein. (Weltweit einzigartig)
  3. Wählen Sie Core (SQL) als API für CosomosDB.
  4. Lassen Sie Apply Free Tier Discount anwenden.
  5. Beantworten Sie nacheinander die anderen Fragen.

https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-integrate-store-unstructured-data-cosmosdb?tabs=javascript

CosmosDB verfügt über eine freie Reichweite und Sie können 400 HE / s und 5 GB Speicher kostenlos verwenden, wie in den folgenden FAQ beschrieben. https://azure.microsoft.com/pricing/details/cosmos-db/

Functions

Funktionen werden aus VScode erstellt, da sie diesmal in Python erstellt werden.

  1. Drücken Sie F1 in VScode.
  2. Suchen Sie nach Funktionen und führen Sie Azure-Funktionen aus: Erstellen Sie ein neues Projekt.
  3. Wählen Sie ein Verzeichnis aus, das lokal entwickelt werden soll
  4. Wählen Sie Python aus und wählen Sie die lokal installierte ausführbare Datei des Python-Hauptteils aus.
  5. Wählen Sie Trigger. Diesmal machen wir das mit TimerTrigger.
  6. Geben Sie einen Namen für die Funktion ein.
  7. Geben Sie die Ausführungshäufigkeit von TimerTrigger mit dem CRON-Ausdruck ein. Die Standardeinstellung `0 * / 5 * * * *` wird alle 5 Minuten ausgeführt.

Sie haben jetzt lokal eine Projekt- und Funktionsvorlage.

Funktionserstellung

Stellen Sie zunächst sicher, dass Sie Remos API in Python normal aufrufen können. Ich habe den Python-Code im folgenden Artikel verwendet. Holen Sie sich ein Zugriffstoken und stellen Sie sicher, dass Sie die API lokal aufrufen können. Achten Sie, wie in diesem Artikel erwähnt, darauf, dass Sie Ihren API-Schlüssel nicht verlieren. Sie können Haushaltsgeräte von anderen über die API frei bedienen. https://qiita.com/sohsatoh/items/b710ab3fa05e77ab2b0a

Das Ergebnis ist der folgende JSON. Da Remo mini verwendet wird, wird nur die Temperatur im Element `te``` in` latest_event``` ausgegeben.

[
    {
        "name": "Remomini",
        "id": <your remo id>,
        "created_at": "2019-07-21T13:01:54Z",
        "updated_at": "2020-04-29T05:18:05Z",
        "mac_address": <your remo mac address>,
        "serial_number": <your remo serial number>,
        "firmware_version": "Remo-mini/1.0.92-g86d241a",
        "temperature_offset": 0,
        "humidity_offset": 0,
        "users": [
            {
                "id": <your id>,
                "nickname": <your nickname>,
                "superuser": true
            }
        ],
        "newest_events": {
            "te": {
                "val": 23,
                "created_at": "2020-04-30T05:10:10Z"
            }
        }
    }
]

created_atDatum und Uhrzeit der Einstellung von remo,updated_atDatum und Uhrzeit der Aktualisierung von remo(Wird es automatisch aktualisiert?)Wie es scheint.

Dieses Mal möchte ich `latest_event``` wissen, also werde ich den Inhalt und die Zeit, zu der ich die API drücke, an CosmosDB senden. Dieses created_at``` unterscheidet sich von dem Zeitpunkt, an dem Sie die API aufgerufen haben, da latest_events` eine Spezifikation zu sein scheint, die aktualisiert wird, wenn sich der Sensorwert ändert.

Ich werde diesen Code in den Vorlagencode von timetrigger einfügen.

__init__.py
import datetime
import logging
import json
import requests
import azure.functions as func


def main(mytimer: func.TimerRequest, doc: func.Out[func.Document]) -> func.HttpResponse:
    utc_timestamp = datetime.datetime.utcnow().replace(
        tzinfo=datetime.timezone.utc).isoformat()

    if mytimer.past_due:
        logging.info('The timer is past due!')

    apikey= "<your remo API key>"
    # get JSON
    headers = {
        'accept' : 'application/json',
        'Authorization' : 'Bearer ' + apikey ,
    }
    response = requests.get('https://api.nature.global/1/devices', headers= headers, verify=False)
    rjson = response.json()
    res_json = rjson[0]["newest_events"]["te"]
    res_json["request_time"]= utc_timestamp
    res_json = json.dumps(res_json,indent=2)
    logging.info('Python timer trigger function ran at %s', utc_timestamp)
    doc.set(func.Document.from_json(res_json))

mytimer: func.TimerRequest ist azurblau.Timer vom Funktionsbaustein


 , `` `Doc: func.Out [func.Document]` `` bedeutet die Ausgabe von azure.functions.

 Sie können ausgeben, indem Sie einen Wert in der soeben festgelegten Variablen `` `doc``` festlegen. Beschreiben Sie, dass die Variable `` `doc``` der Wert ist, der an CosmosDB in`` function.json``` gesendet werden soll, der beim Erstellen der Funktion generiert wird.

## Funktions-App-Einstellungen

 1. Drücken Sie F1, um das Befehlsterminal aufzurufen, geben Sie Bindung ein und wählen Sie Azure-Funktionen: Bindung hinzufügen. (Sie können auch mit der rechten Maustaste auf die lokale Funktion klicken, die Sie gerade über das Azure-Logo in der Seitenleiste erstellt haben.)
 2. Wählen Sie die gerade erstellte Funktion aus.
 3. Diesmal ist es eine Ausgabe, also wählen Sie aus.
 4. Wählen Sie Azure Cosmos DB aus.
 5. Geben Sie den Variablennamen ein, der in der Funktion verwendet werden soll. Sagen wir diesmal "doc".
 6. Geben Sie den Datenbanknamen in CosmosDB ein. Sagen wir diesmal "Zuhause".
 7. Geben Sie den Sammlungsnamen in die Datenbank ein. Stellen Sie diesmal "Temperatur" ein.
 8. Legen Sie `` `true``` fest, ob die DB erstellt werden soll, wenn sie nicht vorhanden ist.
 9. Sie werden nach den Einstellungen der lokalen Umgebung gefragt. Erstellen Sie sie daher mit "Neue lokale App-Einstellung erstellen".
 10. Wenn Sie nach dem Datenbankkonto gefragt werden, wählen Sie das von Ihnen erstellte `` `home``` aus.
 11. Der Partitionsschlüssel ist optional. Gehen wir also weiter.

 Der Datenbankname muss global eindeutig sein. Verwenden Sie daher einen beliebigen Namen

 Dadurch wird function.json Folgendes hinzugefügt:

{
  "type": "cosmosDB",
  "direction": "out",
  "name": "doc",
  "databaseName": "home",
  "collectionName": "temperature",
  "createIfNotExists": "true",
  "connectionStringSetting": "cielohome_DOCUMENTDB"
}

 Sie haben jetzt die Ausgabe eingestellt. Der CosmosDB connectionString ist in `` `local.settings.json``` im selben Verzeichnis aufgeführt.

"cielohome_DOCUMENTDB": "AccountEndpoint=https://hogehoge.documents.azure.com:443/;AccountKey=fugafuga;"


## Vor Ort testen

 Holen Sie sich die Module, die Sie lokal testen müssen. Diesmal sind die erforderlichen Module `` `Azure-Funktionen```,` `` Anfragen```. Beschreiben Sie sie daher in der Datei require.txt im selben Verzeichnis.

azure-functions requests

 Holen Sie sich dies mit `` `pip install require.txt```.

 Sie können debuggen, indem Sie die Taste F5 drücken.

## Bereitstellen für Funktionen

 1. Öffnen Sie das Befehlsterminal mit der Taste F1, suchen Sie nach Bereitstellen und wählen Sie `` `Azure-Funktionen: Bereitstellen für Funktions-App ....` ``.
 2. Wählen Sie `` `Neue Funktions-App in Azure (Erweitert)` `` erstellen
 3. Geben Sie einen beliebigen Ressourcennamen ein. (Weltweit eindeutiger Name)
 4. Wählen Sie Python 3.7.
 5. Wählen Sie Coonsumption. Es ist Pay-as-you-go. Funktionen haben auch einen freien Rahmen, so dass Sie im Grunde nicht berechnet werden, wenn es etwa alle 5 Minuten ist.
 6. Wählen Sie eine Ressourcengruppe aus. Verwenden Sie dieselbe Ressourcengruppe wie CosmosDB. Verschiedene sind in Ordnung. Beachten Sie, dass Python-Apps nur funktionieren, wenn die Ressourcengruppe auf Linux basiert.
 7. Wählen Sie ein Speicherkonto aus.
 8. Wählen Sie Application Insights. Es ist Saas, der das Protokoll sieht.

 Die Bereitstellung ist jetzt abgeschlossen.

## Überprüfen Sie die Daten mit CosmosDB

 Schauen wir uns nach der Bereitstellung der Funktion die Daten an.
 Klicken Sie auf das Azure-Logo in VScode, um die Cosmos-Datenbank in der Seitenleiste zu überprüfen. Wenn Sie die Datenbank öffnen, wird sie in `` `Temperatur``` dokumentiert.

"val": 24.2, "created_at": "2020-05-02T13:49:12Z", "request_time": "2020-05-02T14:00:00.007771+00:00"

 Dies ist abgeschlossen.

## Zusammenfassung

 Sie können Ihre Daten jetzt in Azure mithilfe von Funktionen und CosmosDB speichern. Nächstes Mal möchte ich diese Daten visualisieren.

## Referenz
https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-integrate-store-unstructured-data-cosmosdb?tabs=javascript
https://docs.microsoft.com/ja-jp/azure/azure-functions/
https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-reference-python
 <a target = "_ blank" href = "https://www.amazon.co.jp/gp/product/B07CWNLHJ8/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B07CWNLHJ8&linkCode=d22 > Nature Smart-Fernbedienung Nature Remo Mini-Haushaltsgerätesteuerung Amazon Alexa / Google Home / Siri-kompatibler GPS-verbundener Temperatursensor Remo-2W1 </a> <img src = "// ir-jp.amazon-adsystem.com/e/ir?t = shirou463-22 & l = am2 & o = 9 & a = B07CWNLHJ8 "width =" 1 "height =" 1 "border =" 0 "alt =" "style =" border: none! Wichtig; Rand: 0px! Wichtig; "/>

## Bonus
 Es gibt eine Software namens PowerBI Desktop von Microsoft. Als ich versuchte, sie einfach zu visualisieren, sah sie so aus. Es ist einfach, weil es einfach ist, eine Verbindung mit Azure herzustellen.

 ![キャプチャ1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/550841/c28f406c-18d8-5d29-2a2e-4d354b1bb394.png)



Recommended Posts

Klicken Sie auf die API von Nature Remo, um die Raumtemperatur mit Azure-Funktionen und CosmosDB aufzuzeichnen
Greifen Sie mit Spring Boot auf Azure Cosmos DB zu
Verwenden Sie Python und MeCab mit Azure-Funktionen
Versuchen Sie, das Dokument der Azure-Dokumentdatenbank mit pydocumentdb zu extrahieren
Notieren Sie Temperatur und Luftfeuchtigkeit mit systemd auf Raspberry Pi
Probieren Sie die DB-Operation mit Python aus und visualisieren Sie sie mit d3