| Crates.io | embassy-ha |
| lib.rs | embassy-ha |
| version | 0.3.0 |
| created_at | 2025-12-09 23:00:07.081908+00 |
| updated_at | 2026-01-20 15:06:29.557626+00 |
| description | MQTT Home Assistant integration library for Embassy async runtime |
| homepage | |
| repository | https://github.com/diogo464/embassy-ha |
| max_upload_size | |
| id | 1976914 |
| size | 273,515 |
MQTT Home Assistant integration library for the Embassy async runtime.
cargo add embassy-ha
This example does not compile as-is because it requires device-specific setup, but it should be easy to adapt if you already have Embassy running on your microcontroller.
use embassy_executor::Spawner;
use embassy_ha::{DeviceConfig, SensorConfig, SensorClass, StateClass};
use embassy_time::Timer;
use static_cell::StaticCell;
static HA_RESOURCES: StaticCell<embassy_ha::DeviceResources> = StaticCell::new();
#[embassy_executor::main]
async fn main(spawner: Spawner) {
// Initialize your network stack
// This is device specific
let stack: embassy_net::Stack<'static>;
// Create a Home Assistant device
let device = embassy_ha::new(
HA_RESOURCES.init(Default::default()),
DeviceConfig {
device_id: "my-device",
device_name: "My Device",
manufacturer: "ACME Corp",
model: "Model X",
},
);
// Create a temperature sensor
let sensor_config = SensorConfig {
class: SensorClass::Temperature,
state_class: StateClass::Measurement,
unit: Some(embassy_ha::constants::HA_UNIT_TEMPERATURE_CELSIUS),
..Default::default()
};
let mut sensor = embassy_ha::create_sensor(&device, "temp-sensor", sensor_config);
// Spawn the Home Assistant communication task
spawner.spawn(ha_task(stack, device)).unwrap();
// Main loop - read and publish temperature
loop {
// let temperature = read_temperature().await;
sensor.publish(temperature);
Timer::after_secs(60).await;
}
}
#[embassy_executor::task]
async fn ha_task(stack: embassy_net::Stack<'static>, device: embassy_ha::Device<'static>) {
embassy_ha::connect_and_run(stack, device, "mqtt-broker-address").await;
}
The repository includes several examples demonstrating different entity types. To run an example:
export MQTT_ADDRESS="mqtt://your-mqtt-broker:1883"
cargo run --example sensor
Available examples:
sensor - Temperature and humidity sensorsbutton - Triggerable button entityswitch - On/off switch controlbinary_sensor - Binary state sensornumber - Numeric input entitydevice_tracker - Location tracking entityLicensed under either of:
at your option.