mirror of
https://github.com/italicsjenga/mppt-modbus.git
synced 2024-12-23 16:51:30 +11:00
add "print-json" command
This commit is contained in:
parent
41a607c8c2
commit
87ee197f01
24
Cargo.lock
generated
24
Cargo.lock
generated
|
@ -302,6 +302,12 @@ dependencies = [
|
|||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "itoa"
|
||||
version = "1.0.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440"
|
||||
|
||||
[[package]]
|
||||
name = "kernel32-sys"
|
||||
version = "0.2.2"
|
||||
|
@ -423,6 +429,7 @@ dependencies = [
|
|||
"clap 4.0.29",
|
||||
"libmodbus-rs",
|
||||
"serde",
|
||||
"serde_json",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -594,6 +601,12 @@ dependencies = [
|
|||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ryu"
|
||||
version = "1.0.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde"
|
||||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.151"
|
||||
|
@ -614,6 +627,17 @@ dependencies = [
|
|||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_json"
|
||||
version = "1.0.90"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8778cc0b528968fe72abec38b5db5a20a70d148116cd9325d2bc5f5180ca3faf"
|
||||
dependencies = [
|
||||
"itoa",
|
||||
"ryu",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "strsim"
|
||||
version = "0.8.0"
|
||||
|
|
|
@ -14,3 +14,4 @@ libmodbus-rs = "0.8.3"
|
|||
clap = { version = "4.0", features = ["derive"] }
|
||||
bincode = "1.3"
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
serde_json = "1.0"
|
|
@ -1,4 +1,5 @@
|
|||
use crate::INFO_SCALE;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::fmt::{self, Debug};
|
||||
|
||||
pub trait DataPoint {
|
||||
|
@ -22,7 +23,7 @@ impl fmt::Debug for dyn DataPoint {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Copy)]
|
||||
pub struct Voltage {
|
||||
data: u16,
|
||||
}
|
||||
|
@ -59,7 +60,7 @@ impl DataPoint for Voltage {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Copy)]
|
||||
pub struct Current {
|
||||
data: u16,
|
||||
}
|
||||
|
@ -96,7 +97,7 @@ impl DataPoint for Current {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Copy)]
|
||||
pub struct VoltagePercentage {
|
||||
data: u16,
|
||||
}
|
||||
|
@ -131,7 +132,7 @@ impl DataPoint for VoltagePercentage {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Copy)]
|
||||
pub struct Tempcomp {
|
||||
data: u16,
|
||||
}
|
||||
|
@ -168,7 +169,7 @@ impl DataPoint for Tempcomp {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Copy)]
|
||||
pub struct Raw {
|
||||
data: u16,
|
||||
}
|
||||
|
|
15
src/main.rs
15
src/main.rs
|
@ -4,7 +4,7 @@ mod datatypes;
|
|||
mod mppt_structs;
|
||||
mod offsets;
|
||||
use crate::datatypes::*;
|
||||
use crate::mppt_structs::{MpptEeprom, MpptRam};
|
||||
use crate::mppt_structs::{MpptData, MpptEeprom, MpptRam};
|
||||
use crate::offsets::{OffsetsEeprom, OffsetsRam};
|
||||
use clap::{Parser, Subcommand};
|
||||
use libmodbus_rs::{Modbus, ModbusClient, ModbusRTU};
|
||||
|
@ -58,6 +58,9 @@ enum Commands {
|
|||
|
||||
/// Get all RAM values
|
||||
GetRam,
|
||||
|
||||
/// Print RAM and EEPROM values to JSON
|
||||
PrintJSON,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
|
@ -164,6 +167,16 @@ fn main() {
|
|||
Some(Commands::GetRam) => {
|
||||
println!("ram: {:#?}", ram_data);
|
||||
}
|
||||
Some(Commands::PrintJSON) => {
|
||||
println!(
|
||||
"{}",
|
||||
serde_json::to_string(&MpptData {
|
||||
ram: ram_data,
|
||||
eeprom: eeprom_data
|
||||
})
|
||||
.expect("Could not format data as JSON!")
|
||||
);
|
||||
}
|
||||
None => {
|
||||
println!("{eeprom_data}");
|
||||
}
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
use crate::datatypes::*;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::fmt::{self, Debug, Display};
|
||||
|
||||
#[derive(Debug)]
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct MpptRam {
|
||||
// scaling values
|
||||
pub v_pu: f32,
|
||||
|
@ -140,7 +141,7 @@ impl MpptRam {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct MpptEeprom {
|
||||
pub ev_absorp: Voltage,
|
||||
pub ev_float: Voltage,
|
||||
|
@ -266,3 +267,9 @@ eva_ref_fixed_pct_init: {}",
|
|||
)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
pub struct MpptData {
|
||||
pub ram: MpptRam,
|
||||
pub eeprom: MpptEeprom,
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue