質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
InfluxDB

InfluxDBは、InfluxDataによって開発された時系列データベースです。オープンソースであり、Go言語で記述されています。

Grafana

Grafanaは、Grafana Labsが公開しているオープンソースのデータ時系列分析用ダッシュボードツール。1つのWebインターフェースで複数データソースの統計情報を確認することが可能です。リッチなグラフ描画により、リアルタイムでステータスを把握できます。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

0回答

288閲覧

InfluxDBに土壌センサーのデータを保存したい

CIT.soke

総合スコア7

InfluxDB

InfluxDBは、InfluxDataによって開発された時系列データベースです。オープンソースであり、Go言語で記述されています。

Grafana

Grafanaは、Grafana Labsが公開しているオープンソースのデータ時系列分析用ダッシュボードツール。1つのWebインターフェースで複数データソースの統計情報を確認することが可能です。リッチなグラフ描画により、リアルタイムでステータスを把握できます。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2023/09/13 13:26

実現したいこと

  • influxDBに土壌センサーからの電圧情報と、Timestampを記録する
  • influxDBに保存されたデータをGrafanaで可視化する

前提

Raspberry pi model4Bにて実行。
influxDBへの保存の際、エラーが発生せずに、書き込みが行われません。
純粋にコードにエラーがあるのだと思います。

発生している問題・エラーメッセージ

以下のように、コード自体は問題なく実行できるのですが、influxDBに保存できず、何も保存できませんでした。
私の知識が足りないことが原因だと思いますが、どこが原因か教えていただけるとありがたいです。

pi@raspberrypi:~/Desktop $ python3 dbdb_water.py on_minute I2C device not found on_minute {'soil_moisture': 20108} on_minute {'soil_moisture': 22351} on_minute I2C device not found ^Cintrrupted Ctrl-C pi@raspberrypi:~/Desktop $ influx Connected to http://localhost:8086 version 1.6.7~rc0 InfluxDB shell version: 1.6.7~rc0 > use mydb Using database mydb > SELECT * FROM sensore > exit

該当のソースコード

python

1import influxdb 2import schedule 3import datetime 4import sys, time 5import math 6import Adafruit_ADS1x15 7 8adc = Adafruit_ADS1x15.ADS1115() 9GAIN = 1 10LOG_FILE = "/home/pi/Desktop/water.log" 11 12# dbへのアクセス 13influx = influxdb.InfluxDBClient( 14 host='localhost', 15 port=8086, 16 database='mydb', 17 username='python', 18 password='python' 19) 20 21device_id='sensor01' 22 23def get_data(): 24 # 土壌センサーの値を取得 25 soil_moisture = adc.read_adc(0, gain=GAIN) 26 27 # データを辞書型のオブジェクトに格納 28 data = {} 29 data['soil_moisture'] = soil_moisture 30 31 return data 32 33def write_to_influxdb(data): # time 34 # タイムスタンプを取得 35 timestamp = datetime.datetime.now() 36 37 # データをInfluxDBに書き込む 38 json_body = [{ 39 'measurement': 'soil_moisture', 40 'tags': {'macaddr': device_id}, 41 'time': timestamp, 42 'fields': data 43 }] 44 influx.write_points(json_body) 45 46def on_minute(): 47 print('on_minute') 48 try: 49 data = get_data() 50 print(data) 51 write_to_influxdb(data) 52 except OSError as e: 53 if e.errno == 121: 54 print("I2C device not found") 55 else: 56 raise 57 58def main(): 59 try: 60 schedule.every(10).seconds.do(on_minute) 61 while True: 62 schedule.run_pending() 63 time.sleep(1) 64 except KeyboardInterrupt: 65 print("intrrupted Ctrl-C") 66 sys.exit(1) 67 68if __name__ == '__main__': 69 main() 70

試したこと

influxDBに書き込むためのコードはJsonではないと動かないと聞いたため、色々と書き換えた結果が上のコードです。
完全に私の知識不足なのですが、誰かご存知の方、教えてください。

Version情報

  • influx shell version 1.6.7~rc0
  • Linux raspberrypi 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr 3 17:24:16 BST 2023 aarch64 GNU/Linux
  • Python 3.9.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2023/09/14 04:36

どちらかmeasurement名が間違っていないでしょうか? ターミナルでは「sensore」コードでは「soil_moisture」と異なっているようです。
CIT.soke

2023/09/14 11:43

あっ、本当です 直してみます。
CIT.soke

2023/09/14 12:24

うまくいきました! ありがとうございました。 pi@raspberrypi:/etc/vnc/config.d $ influx Connected to http://localhost:8086 version 1.6.7~rc0 InfluxDB shell version: 1.6.7~rc0 > use mydb Using database mydb > SELECT * FROM soil_moisture name: soil_moisture time humidity macaddr temperature timestamp ---- -------- ------- ----------- --------- 1694692215343250000 22627 sensor01 11169 2023-09-14 20:50:15 1694692225419462000 22622 sensor01 11172 2023-09-14 20:50:25 1694692235458969000 22628 sensor01 11132 2023-09-14 20:50:35 > exit
can110

2023/09/14 12:30

よかったです。こちらでも単純な検証コードでちゃんと動いたので。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問