aboutsummaryrefslogtreecommitdiff
path: root/examples/sensor.rs
diff options
context:
space:
mode:
authordiogo464 <[email protected]>2025-12-06 14:31:54 +0000
committerdiogo464 <[email protected]>2025-12-06 14:31:54 +0000
commite5416e848c8caeed59e8aca6fb3e191fbc621b1b (patch)
treebd086e6d96f7acf2e051d29c5ce2fee3be4ea5f5 /examples/sensor.rs
parent0fbce715a32f5e05c2a66e5cc401105f72083ff5 (diff)
Refactor sensor API to support generic sensor types with configurable display precision
Replaced TemperatureSensor with a generic Sensor type that accepts sensor class, state class, unit, and display precision to support various sensor types. Added suggested_display_precision field to control decimal places in Home Assistant UI. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
Diffstat (limited to 'examples/sensor.rs')
-rw-r--r--examples/sensor.rs74
1 files changed, 74 insertions, 0 deletions
diff --git a/examples/sensor.rs b/examples/sensor.rs
new file mode 100644
index 0000000..69bd87a
--- /dev/null
+++ b/examples/sensor.rs
@@ -0,0 +1,74 @@
1mod common;
2
3use common::AsyncTcp;
4use embassy_executor::{Executor, Spawner};
5use embassy_time::Timer;
6use static_cell::StaticCell;
7
8static RESOURCES: StaticCell<embassy_ha::DeviceResources> = StaticCell::new();
9
10#[embassy_executor::task]
11async fn main_task(spawner: Spawner) {
12 let mut stream = AsyncTcp::connect(std::env!("MQTT_ADDRESS"));
13
14 let mut device = embassy_ha::Device::new(
15 RESOURCES.init(Default::default()),
16 embassy_ha::DeviceConfig {
17 device_id: "example-device-id",
18 device_name: "Example Device Name",
19 manufacturer: "Example Device Manufacturer",
20 model: "Example Device Model",
21 },
22 );
23
24 let temperature_sensor = device.create_sensor(
25 "random-temperature-sensor-id",
26 embassy_ha::SensorConfig {
27 common: embassy_ha::EntityCommonConfig {
28 name: Some("Random Temperature Sensor"),
29 ..Default::default()
30 },
31 class: embassy_ha::SensorClass::Temperature,
32 state_class: embassy_ha::StateClass::Measurement,
33 unit: Some(embassy_ha::constants::HA_UNIT_TEMPERATURE_CELSIUS),
34 suggested_display_precision: Some(1),
35 },
36 );
37
38 let humidity_sensor = device.create_sensor(
39 "random-humidity-sensor-id",
40 embassy_ha::SensorConfig {
41 common: embassy_ha::EntityCommonConfig {
42 name: Some("Random Humidity Sensor"),
43 ..Default::default()
44 },
45 class: embassy_ha::SensorClass::Humidity,
46 state_class: embassy_ha::StateClass::Measurement,
47 unit: Some(embassy_ha::constants::HA_UNIT_PERCENTAGE),
48 suggested_display_precision: Some(0),
49 },
50 );
51
52 spawner.must_spawn(random_temperature_task(temperature_sensor));
53 spawner.must_spawn(random_humidity_task(humidity_sensor));
54
55 device.run(&mut stream).await.unwrap();
56}
57
58#[embassy_executor::task]
59async fn random_temperature_task(mut sensor: embassy_ha::Sensor<'static>) {
60 loop {
61 sensor.publish(rand::random_range(0.0..50.0));
62 Timer::after_secs(1).await;
63 }
64}
65
66#[embassy_executor::task]
67async fn random_humidity_task(mut sensor: embassy_ha::Sensor<'static>) {
68 loop {
69 sensor.publish(rand::random_range(0.0..100.0));
70 Timer::after_secs(1).await;
71 }
72}
73
74example_main!();