ThingsBoardを利用する 2.

今回は、Rustのプログラムを書いて、
実際のデータを使って、何秒か一回にデータが送られるようにする。

reqwest

e-tipsmemo.hatenablog.com
前回はreqwestを使って単発で送ったので
今回は昔の電力測定プログラムを合わせるだけ。

fn main() {
    println!("Hello, world!");
    let mut wc = WattChecker::default();
    wc.init();
    wc.start_measure();

    let running = Arc::new(AtomicBool::new(true));
    let r = running.clone();
    ctrlc::set_handler(move || {
        r.store(false, Ordering::SeqCst);
    }).expect("Error setting Ctrl-C handler");

    let token = " ************** "; //デバイスのアクセストークンキーを入れる
    let str_url = format!("http://192.168.0.14:8080/api/v1/{}/telemetry", token);
    let url = reqwest::Url::parse(&str_url).unwrap();
    let client = reqwest::Client::new();
   
    while running.load(Ordering::SeqCst)
    {
        match wc.request_measure() {
            Ok(cmd) => {
                disp_data(&cmd);
                let map = parse_data(&cmd);

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

                println!("{}", res.status());
            
            },
            Err(e) => eprintln!("{:?}", e),
        }

        thread::sleep(Duration::from_millis(2000));
    }

    println!("stop measuring");
    wc.stop_measure();
}

結果

f:id:katakanan:20191006054339p:plain
どうやらHTTPのリクエストが遅くなって前の測定から2秒以上かかってしまうことがあるらしいので、
これは非同期に処理しなければいけないのかもしれない。
あとリクエストを投げ続けていると、とまってしまう。

とりあえず次は、thingsboardのログ表示部分を作る。