filter by characteristic rather than service

This commit is contained in:
Alex Janka 2024-03-09 08:19:12 +11:00
parent 589542ec0b
commit d2bc889b53
2 changed files with 15 additions and 18 deletions

View file

@ -5,7 +5,9 @@ use std::{collections::HashMap, path::PathBuf, time::Duration};
use clap::{Parser, Subcommand};
use futures_util::{pin_mut, StreamExt};
use homekit_controller::{spawn_discover_thread, DeviceConnection, HomekitError, ServiceType};
use homekit_controller::{
spawn_discover_thread, CharacteristicType, DeviceConnection, HomekitError,
};
use server::launch;
mod server;
@ -29,18 +31,14 @@ enum Commands {
Discover,
}
const SENSORS: [ServiceType; 11] = [
ServiceType::AirQualitySensor,
ServiceType::CarbonDioxideSensor,
ServiceType::CarbonMonoxideSensor,
ServiceType::ContactSensor,
ServiceType::HumiditySensor,
ServiceType::LeakSensor,
ServiceType::LightSensor,
ServiceType::MotionSensor,
ServiceType::OccupancySensor,
ServiceType::SmokeSensor,
ServiceType::TemperatureSensor,
const MONITORED_CHARACTERISTICS: [CharacteristicType; 7] = [
CharacteristicType::CurrentTemperature,
CharacteristicType::PM2_5Density,
CharacteristicType::PM10Density,
CharacteristicType::AirQuality,
CharacteristicType::CurrentRelativeHumidity,
CharacteristicType::AirParticulateDensity,
CharacteristicType::AirParticulateSize,
];
#[launch]

View file

@ -3,7 +3,7 @@ use rocket::State;
use std::{collections::HashMap, ops::DerefMut};
use tokio::sync::Mutex;
use crate::SENSORS;
use crate::MONITORED_CHARACTERISTICS;
pub fn launch(
paired: HashMap<String, DeviceConnection>,
@ -25,11 +25,10 @@ pub async fn metrics(state: &State<Mutex<HashMap<String, DeviceConnection>>>) ->
for (aid, accessory) in &connected.accessories {
for service in accessory.services.values() {
if !SENSORS.contains(&service.service_type) {
for (cid, characteristic) in &service.characteristics {
if !MONITORED_CHARACTERISTICS.contains(&characteristic.characteristic_type) {
continue;
}
for (cid, characteristic) in &service.characteristics {
if let Some(value) = &characteristic.value {
if !shown_types.contains(&characteristic.characteristic_type) {
s.push_str(