e-tipsmemo

ごった煮

ThingsBoardを利用する 1.

e-tipsmemo.hatenablog.com
前回設定したThingsboardを
以前構築した録画サーバーの電力測定とつなげることを考える。

Thingsboardにデータを送るためのAPIドキュメント
ThingsBoard API reference | ThingsBoard

今回はデータを受ける側を準備して、データを投げる側はあまり深入りせずに
最もシンプルな方法で行く。

adminを変更する

Mail Settings | ThingsBoard

デモモードでインストールしなくてもsysadminのアカウントは最初から存在する。
sysadminで入って、右上のプロフィールからパスワードを変更する。
テナントを作ってから、テナントのユーザーアカウントを作る。
この時アクティベーションURLというのが出てくるので、そのURLにログインすると
今作ったテナントアカウントのパスワードを設定することができる。

そして、テナントでログインしなおす。

以下の動画を参考にやっていく。
Getting Started | ThingsBoard

以降はテナントアカウントでログインしている。

アセットを登録する

「資産」と書いてある。
アセット名は、デバイスと紐づけるのでどこにそれがあるかわかったほうが良いのかもしれない。
(普通の部屋だけど)

f:id:katakanan:20191005034831p:plain

バイスを登録する

今回はワットチェッカーだけ。あとあと温度センサー、湿度センサーなどを追加したい。
f:id:katakanan:20191005034924p:plain

紐づけする

アセットの画面からプロパティを変更する画面で「関係」タブで設定する。
先ほど定義したものをここで紐づける。
f:id:katakanan:20191005035031p:plain

Thingsboardにデータを投げる

とりあえずコマンドラインからcurlで投げたデータがThingsboardの画面に出るかを確認する。
ACCESS_TOKENはデバイス画面からコピーする
以下のjsonを送る

{
	"time":2019/01/14 02:50:07,
	"voltage":102.396,
	"current":108.74219,
	"wattage":5.335
}

timeはStringで送らないとダメだった

curl -v -X POST -d "{\"time\":\"2019/01/14 02:50:07\", \"voltage\":102.396, \"current\":108.74219, \"wattage\":5.335}" http://192.168.0.14:8080/api/v1/$ACCESS_TOKEN/telemetry --header "Content-Type:application/json"

これはOK
f:id:katakanan:20191004023829p:plain

ワットチェッカーのデータを投げる

reqwestを使った。

extern crate reqwest;

use std::collections::HashMap;
use reqwest::*;

fn main() {

    let time = "2019/01/14 02:50:07";
    let v = "102";
    let c = "108.9";
    let w = "5";

    let token = " ^^^^^^^^^^^^^ "; //アクセストークンを書く。

    let str_url = format!("http://192.168.0.14:8080/api/v1/{}/telemetry", token);
    let url = Url::parse(&str_url).unwrap();

    let mut map = HashMap::new();
    map.insert("time", time);
    map.insert("voltage", v);
    map.insert("current", c);
    map.insert("wattage", w);

    let client = reqwest::Client::new();

    let mut res = client
        .post(url)
        .json(&map)
        .send()
        .unwrap();

    println!("{}", res.status());
}

とりあえずこれで行けたので
次は、前にRustで作ったワットチェッカーBluetooth経由で取りに行くプログラムを改造する。
時間があればRustのMQTT crateなどを利用して別のプロトコルでも行えることを試してみようかと思う。

実践Rust入門[言語仕様から開発手法まで]

実践Rust入門[言語仕様から開発手法まで]