v0.14.0
This commit is contained in:
@@ -204,6 +204,43 @@ pub async fn read_entity(
|
||||
response.json().await.context("invalid Home Assistant JSON")
|
||||
}
|
||||
|
||||
/// Read the Home Assistant state registry. Callers must filter the result before exposing it.
|
||||
pub async fn list_entities(
|
||||
default_client: &reqwest::Client,
|
||||
settings: &HomeAssistantSettings,
|
||||
) -> Result<Vec<Value>> {
|
||||
if settings.url.trim().is_empty() {
|
||||
bail!("Home Assistant URL is not configured")
|
||||
}
|
||||
if settings.token.trim().is_empty() {
|
||||
bail!("Home Assistant token is not configured")
|
||||
}
|
||||
let mut base = Url::parse(settings.url.trim()).context("invalid Home Assistant URL")?;
|
||||
if !matches!(base.scheme(), "http" | "https") {
|
||||
bail!("Home Assistant URL must use http or https")
|
||||
}
|
||||
base = base.join("api/states").context("cannot build Home Assistant API URL")?;
|
||||
let response = request_client(default_client, settings)?
|
||||
.get(base)
|
||||
.bearer_auth(settings.token.trim())
|
||||
.header("Accept", "application/json")
|
||||
.send()
|
||||
.await
|
||||
.context("Home Assistant state registry request failed")?;
|
||||
let status = response.status();
|
||||
if !status.is_success() {
|
||||
let body = response.text().await.unwrap_or_default();
|
||||
bail!(
|
||||
"Home Assistant returned {status}: {}",
|
||||
body.chars().take(200).collect::<String>()
|
||||
)
|
||||
}
|
||||
response
|
||||
.json::<Vec<Value>>()
|
||||
.await
|
||||
.context("invalid Home Assistant state registry JSON")
|
||||
}
|
||||
|
||||
/// Read the raw Home Assistant state for Flow conditions. Unlike `read_temperature`, this
|
||||
/// intentionally keeps the state as text so binary_sensor, switch, input_boolean and custom
|
||||
/// entities can participate in visual automations.
|
||||
|
||||
Reference in New Issue
Block a user