Skip to content

Commit ad235d7

Browse files
committed
send mqtt msgs about inventory status + cleanup
1 parent 3a2c635 commit ad235d7

File tree

1 file changed

+84
-61
lines changed

1 file changed

+84
-61
lines changed

src/main.rs

Lines changed: 84 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,10 @@ async fn main(spawner: Spawner) {
358358
PRESSURE_DATA.borrow(cs).borrow_mut().value = pres;
359359
});
360360

361+
let hotdog_amount = critical_section::with(|cs| HOTDOG.borrow(cs).borrow().amount);
362+
let sandwich_amount = critical_section::with(|cs| SANDWICH.borrow(cs).borrow().amount);
363+
let energy_drink_amount = critical_section::with(|cs| ENERGY_DRINK.borrow(cs).borrow().amount);
364+
361365
println!("|========================|");
362366
println!("| Temperature {:.2}°C |", temp);
363367
println!("| Humidity {:.2}% |", hum);
@@ -378,9 +382,18 @@ async fn main(spawner: Spawner) {
378382
let mut gas_string: String<32> = String::new();
379383
write!(gas_string, "{:.2}", gas).expect("write! failed!");
380384

385+
let mut hotdog_string: String<32> = String::new();
386+
write!(hotdog_string, "{}", hotdog_amount).expect("write! failed!");
387+
388+
let mut sandwich_string: String<32> = String::new();
389+
write!(sandwich_string, "{}", sandwich_amount).expect("write! failed!");
390+
391+
let mut energy_drink_string: String<32> = String::new();
392+
write!(energy_drink_string, "{}", energy_drink_amount).expect("write! failed!");
393+
381394
match client
382395
.send_message(
383-
"Temperature",
396+
"espbox/sensor/Temperature",
384397
temperature_string.as_bytes(),
385398
rust_mqtt::packet::v5::publish_packet::QualityOfService::QoS1,
386399
true,
@@ -402,7 +415,7 @@ async fn main(spawner: Spawner) {
402415

403416
match client
404417
.send_message(
405-
"Pressure",
418+
"espbox/sensor/Pressure",
406419
pressure_string.as_bytes(),
407420
rust_mqtt::packet::v5::publish_packet::QualityOfService::QoS1,
408421
true,
@@ -424,7 +437,7 @@ async fn main(spawner: Spawner) {
424437

425438
match client
426439
.send_message(
427-
"Humidity",
440+
"espbox/sensor/Humidity",
428441
humidity_string.as_bytes(),
429442
rust_mqtt::packet::v5::publish_packet::QualityOfService::QoS1,
430443
true,
@@ -446,7 +459,7 @@ async fn main(spawner: Spawner) {
446459

447460
match client
448461
.send_message(
449-
"Gas",
462+
"espbox/sensor/Gas",
450463
gas_string.as_bytes(),
451464
rust_mqtt::packet::v5::publish_packet::QualityOfService::QoS1,
452465
true,
@@ -466,6 +479,72 @@ async fn main(spawner: Spawner) {
466479
},
467480
}
468481

482+
match client
483+
.send_message(
484+
"espbox/inventory/Hotdog",
485+
hotdog_string.as_bytes(),
486+
rust_mqtt::packet::v5::publish_packet::QualityOfService::QoS1,
487+
true,
488+
)
489+
.await
490+
{
491+
Ok(()) => {}
492+
Err(mqtt_error) => match mqtt_error {
493+
ReasonCode::NetworkError => {
494+
println!("MQTT Network Error");
495+
continue;
496+
}
497+
_ => {
498+
println!("Other MQTT Error: {:?}", mqtt_error);
499+
continue;
500+
}
501+
},
502+
}
503+
504+
match client
505+
.send_message(
506+
"espbox/inventory/Sandwich",
507+
sandwich_string.as_bytes(),
508+
rust_mqtt::packet::v5::publish_packet::QualityOfService::QoS1,
509+
true,
510+
)
511+
.await
512+
{
513+
Ok(()) => {}
514+
Err(mqtt_error) => match mqtt_error {
515+
ReasonCode::NetworkError => {
516+
println!("MQTT Network Error");
517+
continue;
518+
}
519+
_ => {
520+
println!("Other MQTT Error: {:?}", mqtt_error);
521+
continue;
522+
}
523+
},
524+
}
525+
526+
match client
527+
.send_message(
528+
"espbox/inventory/EnergyDrink",
529+
energy_drink_string.as_bytes(),
530+
rust_mqtt::packet::v5::publish_packet::QualityOfService::QoS1,
531+
true,
532+
)
533+
.await
534+
{
535+
Ok(()) => {}
536+
Err(mqtt_error) => match mqtt_error {
537+
ReasonCode::NetworkError => {
538+
println!("MQTT Network Error");
539+
continue;
540+
}
541+
_ => {
542+
println!("Other MQTT Error: {:?}", mqtt_error);
543+
continue;
544+
}
545+
},
546+
}
547+
469548
sleep(30000).await;
470549
}
471550
}
@@ -620,60 +699,4 @@ async fn touch_controller_task(mut touch_controller: TT21100<I2C<'static, I2C0>,
620699

621700
pub async fn sleep(millis: u32) {
622701
Timer::after(Duration::from_millis(millis as u64)).await;
623-
}
624-
625-
const MEASUREMENT_INTERVAL: u32 = 59_000; // 59 seconds in milliseconds
626-
627-
#[embassy_executor::task]
628-
async fn sensor_data_task(mut bme: Bme680<I2C<'static, I2C1>, Delay>, mut client: MqttClient<'static, AsyncConnectedSession<'static, TcpSocket<'static>, 4096>, 5, CountingRng>, clocks: Clocks<'static>) {
629-
loop {
630-
bme.set_sensor_mode(&mut Delay::new(&clocks), PowerMode::ForcedMode).expect("Failed to set sensor mode");
631-
632-
let settings = SettingsBuilder::new() // Use the same settings as before
633-
// ... rest of settings
634-
.build();
635-
636-
let profile_duration = bme.get_profile_dur(&settings.0).expect("Failed to get profile duration");
637-
let duration_ms = profile_duration.as_millis() as u32;
638-
Delay::new(&clocks).delay_ms(duration_ms);
639-
640-
let (data, _state) = bme.get_sensor_data(&mut Delay::new(&clocks)).expect("Failed to get sensor data");
641-
642-
// Temperature, humidity, pressure, and gas measurements
643-
let temp = data.temperature_celsius();
644-
let hum = data.humidity_percent();
645-
let pres = data.pressure_hpa();
646-
647-
// Update the global data for display (if needed)
648-
critical_section::with(|cs| {
649-
TEMPERATURE_DATA.borrow(cs).borrow_mut().value = temp;
650-
HUMIDITY_DATA.borrow(cs).borrow_mut().value = hum;
651-
PRESSURE_DATA.borrow(cs).borrow_mut().value = pres;
652-
});
653-
654-
// Send MQTT messages
655-
publish_mqtt(&mut client, "Temperature", temp).await;
656-
publish_mqtt(&mut client, "Humidity", hum).await;
657-
publish_mqtt(&mut client, "Pressure", pres).await;
658-
659-
// Sleep until the next measurement
660-
sleep(MEASUREMENT_INTERVAL).await;
661-
}
662-
}
663-
664-
async fn publish_mqtt(client: &mut MqttClient<'_, AsyncConnectedSession<'_, TcpSocket<'_>, 4096>, 5, CountingRng>, topic: &str, value: f32) {
665-
let mut data_string: String<32> = String::new();
666-
write!(data_string, "{:.2}", value).unwrap();
667-
668-
match client.send_message(
669-
topic,
670-
data_string.as_bytes(),
671-
rust_mqtt::packet::v5::publish_packet::QualityOfService::QoS1,
672-
true,
673-
).await {
674-
Ok(()) => {}
675-
Err(mqtt_error) => {
676-
println!("MQTT Error: {:?}", mqtt_error);
677-
}
678-
}
679-
}
702+
}

0 commit comments

Comments
 (0)