@@ -32,6 +32,8 @@ pub struct BatteryData {
32
32
#[ derive( Clone ) ]
33
33
pub struct RestContext {
34
34
pub sensor_channel : Option < u8 > ,
35
+ pub ev_battery_capacity : u64 ,
36
+ pub ev_factor : f32 ,
35
37
}
36
38
37
39
pub async fn rest_server ( tx : Sender < Packet > , ctx : Arc < Mutex < RestContext > > ) -> Result < ( ) > {
@@ -59,7 +61,14 @@ pub async fn rest_server(tx: Sender<Packet>, ctx: Arc<Mutex<RestContext>>) -> Re
59
61
info ! ( "{} Received battery level: {}" , NAME , data. battery_level) ;
60
62
let rest_ctx = ctx. lock ( ) . await ;
61
63
if let Some ( ch) = rest_ctx. sensor_channel {
62
- let _ = send_ev_data ( tx, data. battery_level , ch) . await ;
64
+ let _ = send_ev_data (
65
+ tx,
66
+ data. battery_level ,
67
+ ch,
68
+ rest_ctx. ev_battery_capacity ,
69
+ rest_ctx. ev_factor ,
70
+ )
71
+ . await ;
63
72
} else {
64
73
warn ! ( "{} Not sending packet because no sensor channel yet" , NAME ) ;
65
74
}
@@ -84,7 +93,13 @@ fn scale_percent_to_value(percent: f32, max_value: u64) -> u64 {
84
93
}
85
94
86
95
/// EV sensor batch data send
87
- pub async fn send_ev_data ( tx : Sender < Packet > , level : f32 , sensor_ch : u8 ) -> Result < ( ) > {
96
+ pub async fn send_ev_data (
97
+ tx : Sender < Packet > ,
98
+ level : f32 ,
99
+ sensor_ch : u8 ,
100
+ ev_battery_capacity : u64 ,
101
+ ev_factor : f32 ,
102
+ ) -> Result < ( ) > {
88
103
// parse initial sample Ford data
89
104
let mut msg = SensorBatch :: parse_from_bytes ( FORD_EV_MODEL ) ?;
90
105
@@ -105,7 +120,7 @@ pub async fn send_ev_data(tx: Sender<Packet>, level: f32, sensor_ch: u8) -> Resu
105
120
. u3
106
121
. as_mut ( )
107
122
. unwrap ( )
108
- . u1 = 0.075 ;
123
+ . u1 = ev_factor ;
109
124
110
125
// kwh in battery?
111
126
msg. energy_model_control [ 0 ]
@@ -115,7 +130,7 @@ pub async fn send_ev_data(tx: Sender<Packet>, level: f32, sensor_ch: u8) -> Resu
115
130
. u3
116
131
. as_mut ( )
117
132
. unwrap ( )
118
- . u1 = scale_percent_to_value ( level, 22000 ) ;
133
+ . u1 = scale_percent_to_value ( level, ev_battery_capacity ) ;
119
134
// max battery kwh?
120
135
msg. energy_model_control [ 0 ]
121
136
. u1
@@ -124,7 +139,7 @@ pub async fn send_ev_data(tx: Sender<Packet>, level: f32, sensor_ch: u8) -> Resu
124
139
. u4
125
140
. as_mut ( )
126
141
. unwrap ( )
127
- . u1 = 22000 ;
142
+ . u1 = ev_battery_capacity ;
128
143
129
144
// creating back binary data for sending
130
145
let mut payload: Vec < u8 > = msg. write_to_bytes ( ) ?;
0 commit comments