Rust websocket/Ryzen サーバー電力測定④

e-tipsmemo.hatenablog.com
の続きで
e-tipsmemo.hatenablog.com
ができるようになったので。

測定された時刻、電圧、電流、ワット数をserde_jsonシリアライズして送信
Cargo.toml

serde = "1.0"
serde_derive = "1.0"
serde_json = "1.0"
#[derive(Serialize, Deserialize, Debug)]
struct Measdata{
    time: String,
    voltage: f32,
    current: f32,
    wattage: f32,
}

fn parse_data(d: Vec<u8>) -> Measdata
{
    let t = format!("20{:02}/{:02}/{:02} {:02}:{:02}:{:02}", d[19], d[18], d[17], d[16], d[15], d[14]);
    let c = ((d[7] as u32) << 16)|((d[6] as u32) << 8)|((d[5] as u32));
    let v = ((d[10] as u32) << 16)|((d[9] as u32) << 8)|((d[8] as u32));
    let p = ((d[13] as u32) << 16)|((d[12] as u32) << 8)|((d[11] as u32));
    Measdata{time:t,
            voltage:(v as f32)/1000.0,
            current:(c as f32)/128.0,
            wattage:(p as f32)*5.0/1000.0}
}

メインループ

while running.load(Ordering::SeqCst)
{
	match wc.request_measure() {
		Ok(data) => {
			let m = parse_data(data);
			let json_str = serde_json::to_string(&m).unwrap();
			println!("{}", json_str);
			sender.send(json_str);
		},
		Err(e) => eprintln!("{:?}", e),
	}
	thread::sleep(Duration::from_millis(2000));
}

serde_jsonは非常に便利。

f:id:katakanan:20190112003449p:plain

OK
あとはこのjsonからグラフ化してみる予定。

Ryzenは(Ryzen5 2600Xを使用している)エンコ爆速なんだけどアイドル高めだという噂なので気になる。

PLEX 地上デジタル・BS・CS対応TVチューナー PX-W3PE4

PLEX 地上デジタル・BS・CS対応TVチューナー PX-W3PE4

AMD CPU Ryzen 5 2600X with Wraith Spire cooler YD260XBCAFBOX

AMD CPU Ryzen 5 2600X with Wraith Spire cooler YD260XBCAFBOX