温度センサーを使用して温湿度のデータをラズパイに蓄積しています。
influxdbを使用し、グラファナに表示させています。
influxdbに蓄積したデータをcsvに書き出しました。
timeがナノタイム?になっていて、いつのデータかわかりません。rfc3339形式に変換して
読めるようにしたいです。
もしくはこれから蓄積されるデータをrfc3339
形式で登録したいです。
調べたのですが、よくわかりません。
丁寧に教えて頂けると幸いです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
データの登録方法次第だとは思うのですが、InfluxDBのデフォルトで登録した場合に、ナノ秒単位でタイムスタンプ情報が登録されているという状況でしょうか。
The timestamp for your data point in nanosecond-precision Unix time. The timestamp is optional in line protocol. If you do not specify a timestamp for your data point InfluxDB uses the server’s local nanosecond timestamp in UTC.
In the example, the timestamp is 1465839830100400200 (that’s 2016-06-13T17:43:50.1004002Z in RFC3339 format). The line protocol below is the same data point but without the timestamp. When InfluxDB writes it to the database it uses your server’s local timestamp instead of 2016-06-13T17:43:50.1004002Z.
もしスクリプトなどで変換可能であれば、RFC3339(or ISO8601)形式への変換処理を書いてみるのはいかがでしょうか。以下はPythonの一例です(マイクロ秒に丸まってしまいますが)。
python
1from datetime import datetime 2time_in_nano_second = 1465839830100400200 3time_in_second = time_in_nano_second / (1000 * 1000 * 1000) 4print(datetime.utcfromtimestamp(time_in_second).isoformat())
2016-06-13T17:43:50.100400
追記 (CSVの変換例)
InfluxDBのV1 APIとPython Scriptを使った場合の例を追記しておきます(あくまで簡易的なサンプルです)。なお、V2 APIの場合には、ISO形式で_time
属性が出力されるようですし、telegrafのプラグインで変換するアプローチもあるようです。
- community.influxdata - Reformatting the CSV Data
- community.influxdata - Newbie Questions: getting data into InfluxDB easily/ timestamp format
InfluxDBへのダミーデータ登録
以下のコマンドを2回実行。
$ curl --request POST \ "http://localhost:8086/api/v2/write?org=sample-org-name&bucket=sample-bucket-name&precision=ns" \ --header "Authorization: Token $TOKEN" \ --header "Content-Type: text/plain; charset=utf-8" \ --header "Accept: application/json" \ --data-binary ' airSensors,sensor_id=TLM0201 temperature=73.97038159354763,humidity=35.23103248356096,co=0.48445310567793615 airSensors,sensor_id=TLM0202 temperature=75.30007505999716,humidity=35.651929918691714,co=0.5141876544505826 '
CSV形式でのエクスポート
$ curl 'http://127.0.0.1:8086/query?db=sample-bucket-1' \ --header "Authorization: Token $TOKEN" \ --header 'Accept: application/csv' \ --data-urlencode 'q=SELECT * FROM airSensors' > input.csv
$ cat input.csv name,tags,time,co,humidity,sensor_id,temperature airSensors,,1672645590018142521,0.48445310567793615,35.23103248356096,TLM0201,73.97038159354763 airSensors,,1672645590018142521,0.5141876544505826,35.651929918691714,TLM0202,75.30007505999716 airSensors,,1672645597434047671,0.48445310567793615,35.23103248356096,TLM0201,73.97038159354763 airSensors,,1672645597434047671,0.5141876544505826,35.651929918691714,TLM0202,75.30007505999716
カラム値の変換
timeカラムの情報からtime_in_iso_formatカラムを作成(UTC時間で出力されるため、日本時間とは9時間ズレます)。
$ python convert.py input.csv output.csv
$ cat output.csv name,tags,time,co,humidity,sensor_id,temperature,time_in_iso_format airSensors,,1672645590018142521,0.48445310567793615,35.23103248356096,TLM0201,73.97038159354763,2023-01-02T07:46:30.018142 airSensors,,1672645590018142521,0.5141876544505826,35.651929918691714,TLM0202,75.30007505999716,2023-01-02T07:46:30.018142 airSensors,,1672645597434047671,0.48445310567793615,35.23103248356096,TLM0201,73.97038159354763,2023-01-02T07:46:37.434048 airSensors,,1672645597434047671,0.5141876544505826,35.651929918691714,TLM0202,75.30007505999716,2023-01-02T07:46:37.434048
スクリプト(あくまで簡易的な例です)
python
1$ cat convert.py 2import csv 3from datetime import datetime 4import sys 5 6input_file = open(sys.argv[1], newline='') 7output_file = open(sys.argv[2], 'w', newline='') 8 9reader = csv.DictReader(input_file) 10new_fieldnames = reader.fieldnames + ['time_in_iso_format'] 11 12writer = csv.DictWriter(output_file, fieldnames=new_fieldnames) 13writer.writeheader() 14 15for row in reader: 16 time_in_nano_second = int(row['time']) 17 time_in_second = time_in_nano_second / (1000 * 1000 * 1000) 18 row['time_in_iso_format'] = datetime.utcfromtimestamp(time_in_second).isoformat() 19 20 writer.writerow(row)
投稿2023/01/01 02:08
編集2023/01/02 08:15総合スコア178
0
ns 単位の時間なら、1000000000で割れば秒が出てきますが、そういうはなしかな?
具体的にどういう数値がでてくるんでしょうか
投稿2022/12/31 10:21
編集2022/12/31 10:22総合スコア88024
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/01/01 05:34
2023/01/02 08:16