3
Help us understand the problem. What are the problem?

posted at

updated at

時系列DB InfluxDB2.0(APIを使用)メモ

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]をクリック
image.png

userとpassword、organization name、bucket name(DB名みたいなもの?)を登録
image.png
[Quick Start]をクリック
image.png
なんか動きました。
image.png
データは c:\user\ユーザーフォルダ\.infulxdbv2 に保存されていくみたいです。

Bucketの設定

[Data]の[Buckets]タブの初期設定で作ったbucketの枠内の[Settings]をクリック
image.png
1週間で消える設定にしてみました。こういうのが出来て楽ですよね。[Save Changes]をクリック
image.png

認証のためのToken発行

データ書込みにはTokenが必要なので作成します。
[Data]の[Tokens]タブの[+ Generate Taken]をクリック "Read/Write Token"を選択します。
image.png
書込みだけでOKなのでWrite Tokenを作ります。Write側の書き込むBucketsを選択し [Save]をクリックします。
image.png

生成されたTokenをコピーし、Tokenの部分を書き換えます。日付を参考に今作ったTokenの方を選びます。この画面で名前が変更できるのでわかりやすくしておくのも手ですね。名前の部分をクリックするとTokenが見れるのでクリップボードにコピーしてどこかに保存しておきましょう。
image.png
image.png

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名になります。

image.png

確認

[Data Explorer]でデータを確認しましょう。
下の欄のデータを選択していき最後に[Submit]をクリックするとグラフが表示されます。

image.png

カッコ良くBoard表示にしてみましょう。

左のBoardを選択し、新しく作ります。Add Cellで足していきます。
さっきのクエリと一緒ですね。最後に右上のチェックをします。
image.png
色々足すとこんな感じで表示できます。
image.png

参考 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

‎ポイントは、計測名、タグセット、タイムスタンプによって一意に識別されます。同じ測定、タグセット、タイムスタンプを使用して行プロトコルを送信する場合、フィールドセットは古いフィールドセットと新しいフィールドセットの和集合となり、競合が新しいフィールドセットを優先します。‎

参考にしたところ

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
3
Help us understand the problem. What are the problem?