温度センサーを使用して温湿度のデータをラズパイに蓄積しています。
influxdbを使用し、グラファナに表示させています。
influxdbに蓄積したデータをcsvに書き出しました。
timeがナノタイム?になっていて、いつのデータかわかりません。rfc3339形式に変換して
読めるようにしたいです。
もしくはこれから蓄積されるデータをrfc3339
形式で登録したいです。
調べたのですが、よくわかりません。
丁寧に教えて頂けると幸いです。
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
下記のような質問は推奨されていません。
- 質問になっていない投稿
- スパムや攻撃的な表現を用いた投稿
適切な質問に修正を依頼しましょう。
回答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総合スコア86794
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
回答へのコメント
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
関連した質問
意見交換
クローズ
HTMLファイル一つでどこまでできるのか
回答20
クリップ0
更新
2023/05/27
Q&A
受付中
タブの切り替え時にふわっと表示させたい。
回答2
クリップ0
更新
2023/06/06
意見交換
受付中
Python経験2年からゲームプログラマーになるためには
回答18
クリップ2
更新
2023/05/31
Q&A
解決済
自作した確率密度による確率分布に従うランダムなデータをn件生成するには?
回答1
クリップ0
更新
2023/06/07
意見交換
クローズ
プログラミングの設計が分からない
回答24
クリップ11
更新
2023/04/17
意見交換
受付中
大規模言語モデル ファインチューニングの方法
回答5
クリップ1
更新
2023/06/07
Q&A
解決済
時系列の足し算、欠損値=0の場合、どう書き換えたらいいですか
回答2
クリップ0
更新
2023/06/07
意見交換
受付中
データ分析、機械学習や人工知能にPythonが使われている理由に関して。
回答11
クリップ2
更新
2023/06/07
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2023/01/01 05:34
2023/01/02 08:16