initial commit
This commit is contained in:
@@ -16,3 +16,8 @@ target/
|
|||||||
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
||||||
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
||||||
#.idea/
|
#.idea/
|
||||||
|
|
||||||
|
|
||||||
|
# Added by cargo
|
||||||
|
|
||||||
|
/target
|
||||||
|
|||||||
Generated
+1521
File diff suppressed because it is too large
Load Diff
+11
@@ -0,0 +1,11 @@
|
|||||||
|
[package]
|
||||||
|
name = "ve-instant-readout"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2024"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
dbus = "0.9.11"
|
||||||
|
hex = "0.4.3"
|
||||||
|
tokio = "1.52.3"
|
||||||
|
tokio-stream = "0.1.18"
|
||||||
|
victron_ble = "1.0.0"
|
||||||
+53
@@ -0,0 +1,53 @@
|
|||||||
|
use std::{env, println};
|
||||||
|
use tokio_stream::StreamExt;
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() {
|
||||||
|
let args: Vec<String> = env::args().collect();
|
||||||
|
println!("{args:?}");
|
||||||
|
|
||||||
|
if args.len() != 3 {
|
||||||
|
println!("Usage: cargo run <victron device name> <victron device encryption key>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let device_name = args.get(1).unwrap();
|
||||||
|
let device_encryption_key = hex::decode(args.get(2).unwrap())
|
||||||
|
.expect("Invalid device encryption key, it should be hex encoded.");
|
||||||
|
|
||||||
|
let mut device_state_stream =
|
||||||
|
victron_ble::open_stream(device_name.into(), device_encryption_key).unwrap();
|
||||||
|
|
||||||
|
while let Some(result) = device_state_stream.next().await {
|
||||||
|
match result {
|
||||||
|
Ok(_device_state) => analyse_result(&_device_state),
|
||||||
|
Err(e) => println!("{e}"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn analyse_result( state: &victron_ble::DeviceState ) {
|
||||||
|
println!("Result:");
|
||||||
|
println!("{state:?}");
|
||||||
|
match state {
|
||||||
|
victron_ble::DeviceState::BatteryMonitor(victron_ble::BatteryMonitorState {
|
||||||
|
battery_voltage_v,
|
||||||
|
aux_input,
|
||||||
|
..
|
||||||
|
}) => {
|
||||||
|
match battery_voltage_v {
|
||||||
|
Some(v) => println!("Voltage: {}V", v),
|
||||||
|
None => {},
|
||||||
|
}
|
||||||
|
|
||||||
|
//println!("{:?}", aux_input);
|
||||||
|
let temp_k = format!("{:?}", aux_input);
|
||||||
|
println!("{}", temp_k);
|
||||||
|
if temp_k.starts_with("TemperatureK") {
|
||||||
|
let temp = &temp_k[13..temp_k.len()-1];
|
||||||
|
println!("Temperature: {}K", temp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => {},
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user