@@ -25,7 +25,11 @@ type Result<T> = std::result::Result<T, Box<dyn std::error::Error + Send + Sync>
25
25
26
26
#[ derive( Debug , Deserialize ) ]
27
27
pub struct BatteryData {
28
- pub battery_level : f32 ,
28
+ pub battery_level_percentage : Option < f32 > ,
29
+ pub battery_level_wh : Option < u64 > ,
30
+ pub battery_capacity_wh : Option < u64 > ,
31
+ pub reference_air_density : Option < f32 > ,
32
+ pub external_temp_celsius : Option < f32 > ,
29
33
}
30
34
31
35
fn scale_percent_to_value ( percent : f32 , max_value : u64 ) -> u64 {
@@ -34,13 +38,7 @@ fn scale_percent_to_value(percent: f32, max_value: u64) -> u64 {
34
38
}
35
39
36
40
/// EV sensor batch data send
37
- pub async fn send_ev_data (
38
- tx : Sender < Packet > ,
39
- level : f32 ,
40
- sensor_ch : u8 ,
41
- ev_battery_capacity : u64 ,
42
- ev_factor : f32 ,
43
- ) -> Result < ( ) > {
41
+ pub async fn send_ev_data ( tx : Sender < Packet > , sensor_ch : u8 , batt : BatteryData ) -> Result < ( ) > {
44
42
// obtain binary model data
45
43
let model_path: PathBuf = PathBuf :: from ( EV_MODEL_FILE ) ;
46
44
let data = if fs:: try_exists ( & model_path) . await ? {
@@ -55,42 +53,42 @@ pub async fn send_ev_data(
55
53
let mut msg = SensorBatch :: parse_from_bytes ( & data) ?;
56
54
57
55
// apply our changes
58
- msg . energy_model_control [ 0 ] . u1 . as_mut ( ) . unwrap ( ) . u6 = 1.0 ;
59
- msg. energy_model_control [ 0 ]
60
- . u1
61
- . as_mut ( )
62
- . unwrap ( )
63
- . u2
64
- . as_mut ( )
65
- . unwrap ( )
66
- . u1 = 1 ;
67
- msg . energy_model_control [ 0 ]
68
- . u2
69
- . as_mut ( )
70
- . unwrap ( )
71
- . u3
72
- . as_mut ( )
73
- . unwrap ( )
74
- . u1 = ev_factor ;
75
-
76
- // kwh in battery?
77
- msg . energy_model_control [ 0 ]
78
- . u1
79
- . as_mut ( )
80
- . unwrap ( )
81
- . u3
82
- . as_mut ( )
83
- . unwrap ( )
84
- . u1 = scale_percent_to_value ( level , ev_battery_capacity ) ;
85
- // max battery kwh?
86
- msg. energy_model_control [ 0 ]
87
- . u1
88
- . as_mut ( )
89
- . unwrap ( )
90
- . u4
91
- . as_mut ( )
92
- . unwrap ( )
93
- . u1 = ev_battery_capacity ;
56
+ if let Some ( capacity_wh ) = batt . battery_capacity_wh {
57
+ msg. energy_model_control [ 0 ]
58
+ . u1
59
+ . as_mut ( )
60
+ . unwrap ( )
61
+ . u4
62
+ . as_mut ( )
63
+ . unwrap ( )
64
+ . u1 = capacity_wh ;
65
+ }
66
+ if let Some ( level_wh ) = batt . battery_level_wh {
67
+ msg . energy_model_control [ 0 ]
68
+ . u1
69
+ . as_mut ( )
70
+ . unwrap ( )
71
+ . u3
72
+ . as_mut ( )
73
+ . unwrap ( )
74
+ . u1 = level_wh ;
75
+ }
76
+ if let Some ( level ) = batt . battery_level_percentage {
77
+ msg . energy_model_control [ 0 ]
78
+ . u1
79
+ . as_mut ( )
80
+ . unwrap ( )
81
+ . u3
82
+ . as_mut ( )
83
+ . unwrap ( )
84
+ . u1 = scale_percent_to_value ( level , msg. energy_model_control [ 0 ] . u1 . u4 . u1 ) ;
85
+ }
86
+ if let Some ( reference_air_density ) = batt . reference_air_density {
87
+ msg . energy_model_control [ 0 ] . u1 . as_mut ( ) . unwrap ( ) . u6 = reference_air_density ;
88
+ }
89
+ if let Some ( external_temp_celsius ) = batt . external_temp_celsius {
90
+ msg . energy_model_control [ 0 ] . u1 . as_mut ( ) . unwrap ( ) . u7 = external_temp_celsius ;
91
+ }
94
92
95
93
// creating back binary data for sending
96
94
let mut payload: Vec < u8 > = msg. write_to_bytes ( ) ?;
0 commit comments