Move ntfy and presence to automation_devices

This commit is contained in:
2025-08-31 04:57:31 +02:00
parent 03dcd44e0e
commit eb36d41f17
9 changed files with 25 additions and 31 deletions

4
Cargo.lock generated
View File

@@ -131,6 +131,7 @@ dependencies = [
"rumqttc", "rumqttc",
"serde", "serde",
"serde_json", "serde_json",
"serde_repr",
"thiserror 2.0.16", "thiserror 2.0.16",
"tokio", "tokio",
"tracing", "tracing",
@@ -143,18 +144,15 @@ version = "0.1.0"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"automation_cast", "automation_cast",
"automation_macro",
"bytes", "bytes",
"dyn-clone", "dyn-clone",
"futures", "futures",
"google_home", "google_home",
"indexmap", "indexmap",
"mlua", "mlua",
"reqwest",
"rumqttc", "rumqttc",
"serde", "serde",
"serde_json", "serde_json",
"serde_repr",
"thiserror 2.0.16", "thiserror 2.0.16",
"tokio", "tokio",
"tokio-cron-scheduler", "tokio-cron-scheduler",

View File

@@ -12,6 +12,7 @@ async-trait = { workspace = true }
dyn-clone = { workspace = true } dyn-clone = { workspace = true }
rumqttc = { workspace = true } rumqttc = { workspace = true }
tokio = { workspace = true } tokio = { workspace = true }
serde_repr = { workspace = true }
tracing = { workspace = true } tracing = { workspace = true }
serde_json = { workspace = true } serde_json = { workspace = true }
serde = { workspace = true } serde = { workspace = true }

View File

@@ -9,7 +9,6 @@ use automation_lib::error::DeviceConfigError;
use automation_lib::event::{OnMqtt, OnPresence}; use automation_lib::event::{OnMqtt, OnPresence};
use automation_lib::messages::{ContactMessage, PresenceMessage}; use automation_lib::messages::{ContactMessage, PresenceMessage};
use automation_lib::mqtt::WrappedAsyncClient; use automation_lib::mqtt::WrappedAsyncClient;
use automation_lib::presence::DEFAULT_PRESENCE;
use automation_macro::{LuaDevice, LuaDeviceConfig}; use automation_macro::{LuaDevice, LuaDeviceConfig};
use google_home::device; use google_home::device;
use google_home::errors::{DeviceError, ErrorCode}; use google_home::errors::{DeviceError, ErrorCode};
@@ -20,6 +19,8 @@ use tokio::sync::{RwLock, RwLockReadGuard, RwLockWriteGuard};
use tokio::task::JoinHandle; use tokio::task::JoinHandle;
use tracing::{debug, error, trace, warn}; use tracing::{debug, error, trace, warn};
use crate::presence::DEFAULT_PRESENCE;
#[derive(Debug, Clone, Deserialize, PartialEq, Eq, Copy)] #[derive(Debug, Clone, Deserialize, PartialEq, Eq, Copy)]
pub enum SensorType { pub enum SensorType {
Door, Door,

View File

@@ -7,6 +7,8 @@ mod hue_switch;
mod ikea_remote; mod ikea_remote;
mod kasa_outlet; mod kasa_outlet;
mod light_sensor; mod light_sensor;
mod ntfy;
mod presence;
mod wake_on_lan; mod wake_on_lan;
mod washer; mod washer;
mod zigbee; mod zigbee;
@@ -24,6 +26,8 @@ pub use self::hue_switch::HueSwitch;
pub use self::ikea_remote::IkeaRemote; pub use self::ikea_remote::IkeaRemote;
pub use self::kasa_outlet::KasaOutlet; pub use self::kasa_outlet::KasaOutlet;
pub use self::light_sensor::LightSensor; pub use self::light_sensor::LightSensor;
pub use self::ntfy::*;
pub use self::presence::Presence;
pub use self::wake_on_lan::WakeOnLAN; pub use self::wake_on_lan::WakeOnLAN;
pub use self::washer::Washer; pub use self::washer::Washer;
@@ -35,11 +39,6 @@ macro_rules! register_device {
} }
pub fn register_with_lua(lua: &mlua::Lua) -> mlua::Result<()> { pub fn register_with_lua(lua: &mlua::Lua) -> mlua::Result<()> {
register_device!(lua, LightOnOff);
register_device!(lua, LightBrightness);
register_device!(lua, LightColorTemperature);
register_device!(lua, OutletOnOff);
register_device!(lua, OutletPower);
register_device!(lua, AirFilter); register_device!(lua, AirFilter);
register_device!(lua, ContactSensor); register_device!(lua, ContactSensor);
register_device!(lua, DebugBridge); register_device!(lua, DebugBridge);
@@ -48,7 +47,14 @@ pub fn register_with_lua(lua: &mlua::Lua) -> mlua::Result<()> {
register_device!(lua, HueSwitch); register_device!(lua, HueSwitch);
register_device!(lua, IkeaRemote); register_device!(lua, IkeaRemote);
register_device!(lua, KasaOutlet); register_device!(lua, KasaOutlet);
register_device!(lua, LightBrightness);
register_device!(lua, LightColorTemperature);
register_device!(lua, LightOnOff);
register_device!(lua, LightSensor); register_device!(lua, LightSensor);
register_device!(lua, Ntfy);
register_device!(lua, OutletOnOff);
register_device!(lua, OutletPower);
register_device!(lua, Presence);
register_device!(lua, WakeOnLAN); register_device!(lua, WakeOnLAN);
register_device!(lua, Washer); register_device!(lua, Washer);

View File

@@ -2,16 +2,15 @@ use std::collections::HashMap;
use std::convert::Infallible; use std::convert::Infallible;
use async_trait::async_trait; use async_trait::async_trait;
use automation_lib::device::{Device, LuaDeviceCreate};
use automation_lib::event::{self, EventChannel};
use automation_lib::lua::traits::AddAdditionalMethods;
use automation_macro::{LuaDevice, LuaDeviceConfig}; use automation_macro::{LuaDevice, LuaDeviceConfig};
use mlua::LuaSerdeExt; use mlua::LuaSerdeExt;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use serde_repr::*; use serde_repr::*;
use tracing::{error, trace, warn}; use tracing::{error, trace, warn};
use crate::device::{Device, LuaDeviceCreate};
use crate::event::{self, EventChannel};
use crate::lua::traits::AddAdditionalMethods;
#[derive(Debug, Serialize_repr, Deserialize, Clone, Copy)] #[derive(Debug, Serialize_repr, Deserialize, Clone, Copy)]
#[repr(u8)] #[repr(u8)]
#[serde(rename_all = "snake_case")] #[serde(rename_all = "snake_case")]
@@ -123,7 +122,7 @@ pub struct Config {
} }
#[derive(Debug, Clone, LuaDevice)] #[derive(Debug, Clone, LuaDevice)]
#[traits(crate::lua::traits::AddAdditionalMethods)] #[traits(AddAdditionalMethods)]
pub struct Ntfy { pub struct Ntfy {
config: Config, config: Config,
} }

View File

@@ -2,18 +2,17 @@ use std::collections::HashMap;
use std::sync::Arc; use std::sync::Arc;
use async_trait::async_trait; use async_trait::async_trait;
use automation_lib::action_callback::ActionCallback;
use automation_lib::config::MqttDeviceConfig;
use automation_lib::device::{Device, LuaDeviceCreate};
use automation_lib::event::{self, Event, EventChannel, OnMqtt};
use automation_lib::messages::PresenceMessage;
use automation_lib::mqtt::WrappedAsyncClient;
use automation_macro::{LuaDevice, LuaDeviceConfig}; use automation_macro::{LuaDevice, LuaDeviceConfig};
use rumqttc::Publish; use rumqttc::Publish;
use tokio::sync::{RwLock, RwLockReadGuard, RwLockWriteGuard}; use tokio::sync::{RwLock, RwLockReadGuard, RwLockWriteGuard};
use tracing::{debug, trace, warn}; use tracing::{debug, trace, warn};
use crate::action_callback::ActionCallback;
use crate::config::MqttDeviceConfig;
use crate::device::{Device, LuaDeviceCreate};
use crate::event::{self, Event, EventChannel, OnMqtt};
use crate::messages::PresenceMessage;
use crate::mqtt::WrappedAsyncClient;
#[derive(Debug, Clone, LuaDeviceConfig)] #[derive(Debug, Clone, LuaDeviceConfig)]
pub struct Config { pub struct Config {
#[device_config(flatten)] #[device_config(flatten)]

View File

@@ -4,15 +4,12 @@ version = "0.1.0"
edition = "2024" edition = "2024"
[dependencies] [dependencies]
automation_macro = { workspace = true }
automation_cast = { workspace = true } automation_cast = { workspace = true }
google_home = { workspace = true } google_home = { workspace = true }
rumqttc = { workspace = true } rumqttc = { workspace = true }
serde = { workspace = true } serde = { workspace = true }
serde_json = { workspace = true } serde_json = { workspace = true }
tokio = { workspace = true } tokio = { workspace = true }
reqwest = { workspace = true }
serde_repr = { workspace = true }
tracing = { workspace = true } tracing = { workspace = true }
bytes = { workspace = true } bytes = { workspace = true }
async-trait = { workspace = true } async-trait = { workspace = true }

View File

@@ -10,6 +10,4 @@ pub mod helpers;
pub mod lua; pub mod lua;
pub mod messages; pub mod messages;
pub mod mqtt; pub mod mqtt;
pub mod ntfy;
pub mod presence;
pub mod schedule; pub mod schedule;

View File

@@ -9,8 +9,6 @@ use automation_lib::config::{FulfillmentConfig, MqttConfig};
use automation_lib::device_manager::DeviceManager; use automation_lib::device_manager::DeviceManager;
use automation_lib::helpers; use automation_lib::helpers;
use automation_lib::mqtt::{self, WrappedAsyncClient}; use automation_lib::mqtt::{self, WrappedAsyncClient};
use automation_lib::ntfy::Ntfy;
use automation_lib::presence::Presence;
use axum::extract::{FromRef, State}; use axum::extract::{FromRef, State};
use axum::http::StatusCode; use axum::http::StatusCode;
use axum::routing::post; use axum::routing::post;
@@ -118,9 +116,6 @@ async fn app() -> anyhow::Result<()> {
automation_devices::register_with_lua(&lua)?; automation_devices::register_with_lua(&lua)?;
helpers::register_with_lua(&lua)?; helpers::register_with_lua(&lua)?;
lua.globals().set("Ntfy", lua.create_proxy::<Ntfy>()?)?;
lua.globals()
.set("Presence", lua.create_proxy::<Presence>()?)?;
// TODO: Make this not hardcoded // TODO: Make this not hardcoded
let config_filename = std::env::var("AUTOMATION_CONFIG").unwrap_or("./config.lua".into()); let config_filename = std::env::var("AUTOMATION_CONFIG").unwrap_or("./config.lua".into());