Windows版+M5Stack UIFlowで試したメモです。MQTTを使うと色々設定などが面倒なので直接APIをUIFlowで使ってみます。(代わりにUIFlowがすこし難しくなります)
MQTT経由のメモはこちらを参考に
Node-REDのノードでInfluxDBに書き込む方法も書きました。(大規模なシステムは多分これが本命)
InfluxDB(時系列DB)
時系列DBはリレーショナルDBではない。リレーショナルDBに1億件ぐらいの多量データを入れると、めちゃくちゃ遅くなる。IoTでは、多量のデータを取り扱うのでリレーショナルDBは使いづらい。IoTのセンサーでは、データの更新はほぼなく、時系列で順々にデータが蓄積されて行っているので、検索とかでその特徴を生かされていると思います。
Influxdbはダッシュボードとかもあるので、そのままでも見栄えは良いし、Grafanaを利用したらもっと良くなる?
Influxdbインストール方法
ダウンロード
からダウンロードして、展開して、C:\Program Files\InfluxData\influxdb\
に移動する(管理者権限が必要、フォルダを作成する必要あります。)下記のスクリプトをPowerShell(管理者)で動かしても同じことができます。
wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.0.8-windows-amd64.zip -UseBasicParsing -OutFile influxdb2-2.0.8-windows-amd64.zip
Expand-Archive .\influxdb2-2.0.8-windows-amd64.zip -DestinationPath 'C:\Program Files\InfluxData\'
mv 'C:\Program Files\InfluxData\influxdb2-2.0.8-windows-amd64' 'C:\Program Files\InfluxData\influxdb'
Influxdbの実行
実行
実行はPowerShell(管理者権限)で
cd -Path 'C:\Program Files\InfluxData\influxdb'
./influxd
設定
設定はGUIとCLIがあるらしい。ここではGUIで
ブラウザで localhost:8086を開いて、[Get Startted]をクリック
userとpassword、organization name、bucket name(DB名みたいなもの?)を登録
[Quick Start]をクリック
なんか動きました。
データは c:\user\ユーザーフォルダ\.infulxdbv2 に保存されていくみたいです。
Bucketの設定
[Data]の[Buckets]タブの初期設定で作ったbucketの枠内の[Settings]をクリック
1週間で消える設定にしてみました。こういうのが出来て楽ですよね。[Save Changes]をクリック
認証のためのToken発行
データ書込みにはTokenが必要なので作成します。
[Data]の[Tokens]タブの[+ Generate Taken]をクリック "Read/Write Token"を選択します。
書込みだけでOKなのでWrite Tokenを作ります。Write側の書き込むBucketsを選択し [Save]をクリックします。
生成されたTokenをコピーし、Tokenの部分を書き換えます。日付を参考に今作ったTokenの方を選びます。この画面で名前が変更できるのでわかりやすくしておくのも手ですね。名前の部分をクリックするとTokenが見れるのでクリップボードにコピーしてどこかに保存しておきましょう。
M5Stack(UI Flow)
PCのIPアドレスとorg名、Bucket名、さっきのTokenが必要です。
Labelを2つ置いて、ブロックを組み立てていきます。
Http Requestでします。
MethodはPOST
URLは、http://PCのIPアドレス:8086/api/v2/write?org=ORG名&bucket=Bucket名 例:http://192.168.11.11:8086/api/v2/write?org=home&bucket=Data1
Headerは Key”Authorization” Value”Token Token文字列” 例 Token V0-Jx4VPCtZ-IIPdqqz0r6ICy-nRxGN3qA4ZWRotVWXtPD8eBTRy1DOxVcXHBVA71DeiMLOhrFu1qT-ZOhJ8Ew==
Dataは文字列で”Line Protocol”を書きます。 例ではroom temp=xx.xx
としています。roomがDBでいう所のTable(InfluxDBではMESUREMENTと言う) tempがField名になります。
確認
[Data Explorer]でデータを確認しましょう。
下の欄のデータを選択していき最後に[Submit]をクリックするとグラフが表示されます。
カッコ良くBoard表示にしてみましょう。
左のBoardを選択し、新しく作ります。Add Cellで足していきます。
さっきのクエリと一緒ですね。最後に右上のチェックをします。
色々足すとこんな感じで表示できます。
参考 InfluxDbのデータの書き込み
Line protocol
https://docs.influxdata.com/influxdb/cloud/reference/syntax/line-protocol/
こんな感じで書くらしいです。
measurementName fieldKey="field string value" 1556813561098000000
// Syntax
<measurement>[,<tag_key>=<tag_value>[,<tag_key>=<tag_value>]] <field_key>=<field_value>[,<field_key>=<field_value>] [<timestamp>]
// Example
myMeasurement,tag1=value1,tag2=value2 fieldKey="fieldValue" 1556813561098000000
tag(オプション)はIndexになるもので、Fieldはデータらしいです。Tagがあればそれでグループ化できるみたいです。
改行は newline character \n で表します。 Line protocol では、スペースに気を付けましょう。
Line protocolでは、tagとFieldでは改行**\n**は使えません。
measurementName,tagKey=tagValue fieldKey="fieldValue" 1465839830100400200
--------------- --------------- --------------------- -------------------
| | | |
Measurement Tag set Field set Timestamp
Measurement
(必須) measurement名. InfluxDBは一つのポイントごとに1つの measurement名を付けます。 Measurement名は大文字小文字を区別されます。measurement名は_で始めることはできません。
Data type: String
Tag set
(オプション) tag keyとtag valueの組み合わせになります。 Key-value との関係は**=** で表します。 複数のtag key-value の組み合わせは","で区切ります Tag keys と tag values は大文字小文字が区別されます。Tag keys は_で始めることはできません。
Key data type: String
Value data type: String
Field set
(必須) field keyとfield valueの組み合わせになります。最低1つは必要です。Field keys と string values は大文字小文字が区別されます。 Field keys は_で始めることはできません。
Key data type: String
Value data type: Float | Integer | UInteger | String | Boolean
**"**で始まるのは string field 値です。
measurementName fieldKey="field string value" 1556813561098000000
Timestamp
Optional – The unix timestamp for the data point. InfluxDB accepts one timestamp per point. もしtimestampがない場合は、InfluxDB はHostマシンのsystem time (UTC)を使います。
Data type: Unix timestamp
タイムスタンプに関する注意
数値が観測された時刻 (InfluxDB によって受信されない) がデータ ポイントに含まれるようにするには、タイムスタンプを含めます。
タイムスタンプがナノ秒でない場合は、データをDBに書き込むときのタイムスタンプの精度を指定します。
空白(スペース)
空白はline protocolでは空白を使って値を分けます。 1つ目の空白はmeasurement名・the tag set をfield setと区別します。2つ目の空白はfield setとtimestampを区別します。
measurementName,tagKey=tagValue fieldKey="fieldValue" 1465839830100400200
| |
1st space 2nd space
データの形式
Type | 方法 | 例 |
---|---|---|
Float | IEEE-754 64-bit floating-point numbers. Default numerical type. InfluxDB supports scientific notation in float field values. |
myMeasurement fieldKey=1.0 myMeasurement fieldKey=1 myMeasurement fieldKey=-1.234456e+78 |
Integer | 語尾にiをつける -9223372036854775808i~ 9223372036854775807i |
myMeasurement fieldKey=1i myMeasurement fieldKey=12485903i myMeasurement fieldKey=-12485903i |
UInteger | 語尾にuをつける 0u~18446744073709551615u |
myMeasurement fieldKey=1u myMeasurement fieldKey=12485903u |
String | ダブルコーテーションでくくる 長さは最大64kb |
myMeasurement fieldKey="this is a string" |
Boolean | 以下の表現が使える True t, T, true, True, TRUE False f, F, false, False, FALSE |
myMeasurement fieldKey=true myMeasurement fieldKey=false myMeasurement fieldKey=t myMeasurement fieldKey=f myMeasurement fieldKey=TRUE myMeasurement fieldKey=FALSE |
Unix timestamp | Unix timestamp in a specified precision. Default precision is nanoseconds (ns). -9223372036854775806~ 9223372036854775806 |
myMeasurementName fieldKey="fieldValue" 1556813561098000000 |
引用符
Line protocolは**'と"**が使えます。
Element | Double quotes | Single quotes |
---|---|---|
Measurement | Limited * | Limited * |
Tag key | Limited * | Limited * |
Tag value | Limited * | Limited * |
Field key | Limited * | Limited * |
Field value | 文字列のみ | なし |
Timestamp | なし | なし |
- Line protocolは、計測名、タグキー、タグ値、およびフィールドキーで二重引用符と単一引用符を使用できますが、名前、キー、または値の一部として解釈されます。
特殊文字
Line protocolは特殊文字をstring elementsで使えます。**backslash ()**を使ってescapする必要があります。
Element | Escape characters |
---|---|
Measurement | Comma, Space |
Tag key | Comma, Equals Sign, Space |
Tag value | Comma, Equals Sign, Space |
Field key | Comma, Equals Sign, Space |
Field value | Double quote, Backslash |
ほかの特殊文字はescape不要です。
Examples of special characters in line protocol
# Measurement name with spaces
my\ Measurement fieldKey="string value"
# Double quotes in a string field value
myMeasurement fieldKey="\"string\" within a string"
# Tag keys and values with spaces
myMeasurement,tag\ Key1=tag\ Value1,tag\ Key2=tag\ Value2 fieldKey=100
# Emojis
myMeasurement,tagKey=🍭 fieldKey="Launch 🚀" 1556813561098000000
backslashe\ のエスケープ
Line protocolは、バックスラッシュとエスケープ文字としてのバックスラッシュの両方をサポートします。連続する 2 つのバックスラッシュを使用すると、最初のバックスラッシュはエスケープ文字として解釈されます。例えば:
Backslashes | 解釈 |
---|---|
\ | \ |
\ | \ |
\\ | \ |
\\ | \ |
\\\ | \\ |
\\\ | \\ |
注釈行
Line protocolは行頭に#を使うとコメント行になります。
# This is a comment
myMeasurement fieldKey="string value" 1556813561098000000
名前付けの制限
Measurement names, tag keys, and field keys は最初にアンダーライン_は使えません。_ namespace は予約されています。
Duplicate points
ポイントは、計測名、タグセット、タイムスタンプによって一意に識別されます。同じ測定、タグセット、タイムスタンプを使用して行プロトコルを送信する場合、フィールドセットは古いフィールドセットと新しいフィールドセットの和集合となり、競合が新しいフィールドセットを優先します。
参考にしたところ