
MQTTで受信したデータをデータベース(Pythonに付いているSQLite)に書き込む事ができるようになった。
世間にあまり例が無かったのでちょっと苦心した。
今回やってみてわかった事。
1) 送信元が複数の時にどうするか。
paho.mqttの関数のsubscribe()の中にtopicを1つづつ入れて全部並べておく。
そんな事だったのか...
2) MQTT受信したデータの扱い。
適当に区切って変数に入れる。
....まあ、そうだろうとは思ったが、通常MQTTはloopで回っているので他に取り出し難かった。変数に入れたらすぐにデータベース書き込みの関数に渡してしまえば良い。グローバル変数にして後で処理は難しくするだけ。
3) データベースへの書き込み。
REPLACE INTOを使うとデータベースの中の表に無かったデータ(主キー)がまだ無いデータは新しい行を作って入れてくれる。もし主キーが既にあればアップデートされる。
今回は主キーをMQTTで使ったtopicにしたので、同じデバイスから送られてくればデータが無限に増える事なく、常に新しいデータに更新する事になる。(過去データを貯めないつもりだから。貯めたい場合は別のやり方が必要。)

ところで、PyCharmでデータベースファイルを見ると文字化けしていた。設定からエンコードを変更しても直らなかった。ここでいろいろやってみるのも面倒臭いので、DB browser for SQLiteと言うフリーソフトで見る事にしたら、ちゃんとデータがデータベースに入っている事が判明。よかった。

さあ、次はデータベースからデータを取り出してWeb表示するところ。来週にしようかな?
世間にあまり例が無かったのでちょっと苦心した。
今回やってみてわかった事。
1) 送信元が複数の時にどうするか。
paho.mqttの関数のsubscribe()の中にtopicを1つづつ入れて全部並べておく。
そんな事だったのか...
2) MQTT受信したデータの扱い。
適当に区切って変数に入れる。
....まあ、そうだろうとは思ったが、通常MQTTはloopで回っているので他に取り出し難かった。変数に入れたらすぐにデータベース書き込みの関数に渡してしまえば良い。グローバル変数にして後で処理は難しくするだけ。
3) データベースへの書き込み。
REPLACE INTOを使うとデータベースの中の表に無かったデータ(主キー)がまだ無いデータは新しい行を作って入れてくれる。もし主キーが既にあればアップデートされる。
今回は主キーをMQTTで使ったtopicにしたので、同じデバイスから送られてくればデータが無限に増える事なく、常に新しいデータに更新する事になる。(過去データを貯めないつもりだから。貯めたい場合は別のやり方が必要。)

ところで、PyCharmでデータベースファイルを見ると文字化けしていた。設定からエンコードを変更しても直らなかった。ここでいろいろやってみるのも面倒臭いので、DB browser for SQLiteと言うフリーソフトで見る事にしたら、ちゃんとデータがデータベースに入っている事が判明。よかった。

さあ、次はデータベースからデータを取り出してWeb表示するところ。来週にしようかな?
※コメント投稿者のブログIDはブログ作成者のみに通知されます