@@ -3,7 +3,7 @@ use alloc::{
3
3
string:: { String , ToString } ,
4
4
} ;
5
5
use core:: { num:: ParseIntError , str} ;
6
- use defmt:: { error, info} ;
6
+ use defmt:: { error, info, warn } ;
7
7
use embassy_futures:: select:: { select, Either } ;
8
8
use embassy_net:: {
9
9
dns:: { DnsQueryType , Error as DnsError } ,
@@ -146,6 +146,20 @@ async fn handle_sensor_data(
146
146
client : & mut MqttClientImpl < ' _ > ,
147
147
display : & mut Display < ' static > ,
148
148
sensor_data : SensorData ,
149
+ ) -> Result < ( ) , Error > {
150
+ if sensor_data. publish {
151
+ process_mqtt ( client, & sensor_data) . await ?;
152
+ } else {
153
+ warn ! ( "skipping publishing to MQTT" ) ;
154
+ }
155
+
156
+ process_display ( display, & sensor_data) . await ?;
157
+ Ok ( ( ) )
158
+ }
159
+
160
+ async fn process_mqtt (
161
+ client : & mut MqttClientImpl < ' _ > ,
162
+ sensor_data : & SensorData ,
149
163
) -> Result < ( ) , Error > {
150
164
let discovery_messages_sent = unsafe { DISCOVERY_MESSAGES_SENT } ;
151
165
if !discovery_messages_sent {
@@ -179,14 +193,12 @@ async fn handle_sensor_data(
179
193
info ! ( "Discovery messages already sent" ) ;
180
194
}
181
195
182
- // act on sensor data - turn pump on/off
196
+ // Act on sensor data - turn pump on/off
183
197
sensor_data. data . iter ( ) . for_each ( |entry| {
184
198
if let Sensor :: WaterLevel ( WaterLevel :: Full ) = entry {
185
- // Water level is full, stop the pump in any case if it's running
186
199
info ! ( "Water level is full, stopping pump" ) ;
187
200
ENABLE_PUMP . signal ( false ) ;
188
201
} else if let Sensor :: PumpTrigger ( enabled) = entry {
189
- // Pump trigger is enabled, start the pump
190
202
if * enabled {
191
203
info ! ( "Soil moisture is low, starting pump" ) ;
192
204
ENABLE_PUMP . signal ( true ) ;
@@ -199,7 +211,6 @@ async fn handle_sensor_data(
199
211
let value = s. value ( ) ;
200
212
let message = json ! ( { "value" : value } ) . to_string ( ) ;
201
213
let topic_name = format ! ( "{}/{}" , DEVICE_ID , key) ;
202
-
203
214
info ! (
204
215
"Publishing to topic {}, message: {}" ,
205
216
topic_name. as_str( ) ,
@@ -216,8 +227,6 @@ async fn handle_sensor_data(
216
227
. await ?;
217
228
}
218
229
219
- display. write_multiline ( & format ! ( "{}" , sensor_data) ) ?;
220
-
221
230
let pump_topic = format ! ( "{}/pump/state" , DEVICE_ID ) ;
222
231
let message = "OFF" ;
223
232
info ! (
@@ -234,11 +243,16 @@ async fn handle_sensor_data(
234
243
false ,
235
244
)
236
245
. await ?;
246
+ Ok ( ( ) )
247
+ }
237
248
249
+ async fn process_display (
250
+ display : & mut Display < ' static > ,
251
+ sensor_data : & SensorData ,
252
+ ) -> Result < ( ) , Error > {
253
+ display. write_multiline ( & format ! ( "{}" , sensor_data) ) ?;
238
254
Timer :: after ( Duration :: from_secs ( AWAKE_DURATION_SECONDS ) ) . await ;
239
-
240
255
display. enable_powersave ( ) ?;
241
-
242
256
Ok ( ( ) )
243
257
}
244
258
0 commit comments