@@ -146,6 +146,20 @@ async fn handle_sensor_data(
146
146
client : & mut MqttClientImpl < ' _ > ,
147
147
display : & mut Display < ' static , Delay > ,
148
148
sensor_data : SensorData ,
149
+ ) -> Result < ( ) , Error > {
150
+ if sensor_data. publish {
151
+ process_mqtt ( client, & sensor_data) . await ?;
152
+ } else {
153
+ println ! ( "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
println ! ( "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
println ! ( "Water level is full, stopping pump" ) ;
187
- update_pump_state ( false ) ;
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
println ! ( "Soil moisture is low, starting pump" ) ;
192
204
update_pump_state ( true ) ;
@@ -216,8 +228,6 @@ async fn handle_sensor_data(
216
228
. await ?;
217
229
}
218
230
219
- display. write_multiline ( & format ! ( "{}" , sensor_data) ) ?;
220
-
221
231
let pump_topic = format ! ( "{}/pump/state" , DEVICE_ID ) ;
222
232
let message = "OFF" ;
223
233
println ! (
@@ -234,11 +244,16 @@ async fn handle_sensor_data(
234
244
false ,
235
245
)
236
246
. await ?;
247
+ Ok ( ( ) )
248
+ }
237
249
250
+ async fn process_display (
251
+ display : & mut Display < ' static , Delay > ,
252
+ sensor_data : & SensorData ,
253
+ ) -> Result < ( ) , Error > {
254
+ display. write_multiline ( & format ! ( "{}" , sensor_data) ) ?;
238
255
Timer :: after ( Duration :: from_secs ( AWAKE_DURATION_SECONDS ) ) . await ;
239
-
240
256
display. enable_powersave ( ) ?;
241
-
242
257
Ok ( ( ) )
243
258
}
244
259
0 commit comments