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.
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.
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
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.
CosmosDB Erstellen Sie eine CosmosDB. Dies kann über das Portal erfolgen oder über VScode bereitgestellt werden. Beim Erstellen mit VScode
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.
`0 * / 5 * * * *`
wird alle 5 Minuten ausgeführt.Sie haben jetzt lokal eine Projekt- und Funktionsvorlage.
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_at
Datum und Uhrzeit der Einstellung von remo,updated_at
Datum 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