---@meta local devices ---@class KasaOutletConfig ---@field identifier string ---@field ip string local KasaOutletConfig ---@class KasaOutlet: InterfaceDevice, InterfaceOnOff local KasaOutlet devices.KasaOutlet = {} ---@param config KasaOutletConfig ---@return KasaOutlet function devices.KasaOutlet.new(config) end ---@class AirFilter: InterfaceDevice, InterfaceOnOff local AirFilter devices.AirFilter = {} ---@param config AirFilterConfig ---@return AirFilter function devices.AirFilter.new(config) end ---@class AirFilterConfig ---@field name string ---@field room string? ---@field url string local AirFilterConfig ---@class Presence: InterfaceDevice local Presence devices.Presence = {} ---@param config PresenceConfig ---@return Presence function devices.Presence.new(config) end ---@class PresenceConfig ---@field topic string ---@field callback fun(_: Presence, _: boolean) | fun(_: Presence, _: boolean)[]? ---@field client AsyncClient local PresenceConfig ---@class FlagIDs ---@field presence integer ---@field darkness integer local FlagIDs ---@class HueBridgeConfig ---@field identifier string ---@field ip string ---@field login string ---@field flags FlagIDs local HueBridgeConfig ---@class HueBridge: InterfaceDevice local HueBridge devices.HueBridge = {} ---@param config HueBridgeConfig ---@return HueBridge function devices.HueBridge.new(config) end ---@class WasherConfig ---@field identifier string ---@field topic string ---@field threshold number ---@field done_callback fun(_: Washer) | fun(_: Washer)[]? ---@field client AsyncClient local WasherConfig ---@class Washer: InterfaceDevice local Washer devices.Washer = {} ---@param config WasherConfig ---@return Washer function devices.Washer.new(config) end ---@class LightSensor: InterfaceDevice local LightSensor devices.LightSensor = {} ---@param config LightSensorConfig ---@return LightSensor function devices.LightSensor.new(config) end ---@class LightSensorConfig ---@field identifier string ---@field topic string ---@field min integer ---@field max integer ---@field callback fun(_: LightSensor, _: boolean) | fun(_: LightSensor, _: boolean)[]? ---@field client AsyncClient local LightSensorConfig ---@class HueGroupConfig ---@field identifier string ---@field ip string ---@field login string ---@field group_id integer ---@field scene_id string local HueGroupConfig ---@class HueGroup: InterfaceDevice, InterfaceOnOff local HueGroup devices.HueGroup = {} ---@param config HueGroupConfig ---@return HueGroup function devices.HueGroup.new(config) end ---@class IkeaRemote: InterfaceDevice local IkeaRemote devices.IkeaRemote = {} ---@param config IkeaRemoteConfig ---@return IkeaRemote function devices.IkeaRemote.new(config) end ---@class IkeaRemoteConfig ---@field name string ---@field room string? ---@field single_button boolean? ---@field topic string ---@field client AsyncClient ---@field callback fun(_: IkeaRemote, _: boolean) | fun(_: IkeaRemote, _: boolean)[]? ---@field battery_callback fun(_: IkeaRemote, _: number) | fun(_: IkeaRemote, _: number)[]? local IkeaRemoteConfig ---@class WolConfig ---@field name string ---@field room string? ---@field topic string ---@field mac_address string ---@field broadcast_ip string? ---@field client AsyncClient local WolConfig ---@class WakeOnLAN: InterfaceDevice local WakeOnLAN devices.WakeOnLAN = {} ---@param config WolConfig ---@return WakeOnLAN function devices.WakeOnLAN.new(config) end ---@class ConfigOutletOutletStateOnOff ---@field name string ---@field room string? ---@field topic string ---@field outlet_type OutletType? ---@field callback fun(_: OutletOnOff, _: OutletStateOnOff) | fun(_: OutletOnOff, _: OutletStateOnOff)[]? ---@field client AsyncClient local ConfigOutletOutletStateOnOff ---@class OutletStatePower ---@field state boolean ---@field power number local OutletStatePower ---@class ConfigOutletOutletStatePower ---@field name string ---@field room string? ---@field topic string ---@field outlet_type OutletType? ---@field callback fun(_: OutletPower, _: OutletStatePower) | fun(_: OutletPower, _: OutletStatePower)[]? ---@field client AsyncClient local ConfigOutletOutletStatePower ---@alias OutletType ---| "Outlet" ---| "Kettle" ---@class OutletStateOnOff ---@field state boolean local OutletStateOnOff ---@class OutletOnOff: InterfaceDevice, InterfaceOnOff local OutletOnOff devices.OutletOnOff = {} ---@param config ConfigOutletOutletStateOnOff ---@return OutletOnOff function devices.OutletOnOff.new(config) end ---@class OutletPower: InterfaceDevice, InterfaceOnOff local OutletPower devices.OutletPower = {} ---@param config ConfigOutletOutletStatePower ---@return OutletPower function devices.OutletPower.new(config) end ---@class ContactSensorConfig ---@field name string ---@field room string? ---@field topic string ---@field sensor_type SensorType? ---@field callback fun(_: ContactSensor, _: boolean) | fun(_: ContactSensor, _: boolean)[]? ---@field battery_callback fun(_: ContactSensor, _: number) | fun(_: ContactSensor, _: number)[]? ---@field client AsyncClient? local ContactSensorConfig ---@alias SensorType ---| "Door" ---| "Drawer" ---| "Window" ---@class ContactSensor: InterfaceDevice, InterfaceOpenClose local ContactSensor devices.ContactSensor = {} ---@param config ContactSensorConfig ---@return ContactSensor function devices.ContactSensor.new(config) end ---@class LightStateOnOff ---@field state boolean local LightStateOnOff ---@class ConfigLightLightStateColorTemperature ---@field name string ---@field room string? ---@field topic string ---@field callback fun(_: LightColorTemperature, _: LightStateColorTemperature) | fun(_: LightColorTemperature, _: LightStateColorTemperature)[]? ---@field client AsyncClient? local ConfigLightLightStateColorTemperature ---@class LightStateBrightness ---@field state boolean ---@field brightness number local LightStateBrightness ---@class LightStateColorTemperature ---@field state boolean ---@field brightness number ---@field color_temp integer local LightStateColorTemperature ---@class LightBrightness: InterfaceDevice, InterfaceOnOff, InterfaceBrightness local LightBrightness devices.LightBrightness = {} ---@param config ConfigLightLightStateBrightness ---@return LightBrightness function devices.LightBrightness.new(config) end ---@class LightColorTemperature: InterfaceDevice, InterfaceOnOff, InterfaceBrightness, InterfaceColorSetting local LightColorTemperature devices.LightColorTemperature = {} ---@param config ConfigLightLightStateColorTemperature ---@return LightColorTemperature function devices.LightColorTemperature.new(config) end ---@class ConfigLightLightStateOnOff ---@field name string ---@field room string? ---@field topic string ---@field callback fun(_: LightOnOff, _: LightStateOnOff) | fun(_: LightOnOff, _: LightStateOnOff)[]? ---@field client AsyncClient? local ConfigLightLightStateOnOff ---@class ConfigLightLightStateBrightness ---@field name string ---@field room string? ---@field topic string ---@field callback fun(_: LightBrightness, _: LightStateBrightness) | fun(_: LightBrightness, _: LightStateBrightness)[]? ---@field client AsyncClient? local ConfigLightLightStateBrightness ---@class LightOnOff: InterfaceDevice, InterfaceOnOff local LightOnOff devices.LightOnOff = {} ---@param config ConfigLightLightStateOnOff ---@return LightOnOff function devices.LightOnOff.new(config) end ---@class Action ---@field action ---| "broadcast" ---@field extras table? ---@field label string ---@field clear boolean? local Action ---@class NtfyConfig ---@field url string? ---@field topic string local NtfyConfig ---@class Notification ---@field title string ---@field message string? ---@field tags string[]? ---@field priority Priority? ---@field actions Action[]? local Notification ---@alias Priority ---| "min" ---| "low" ---| "default" ---| "high" ---| "max" ---@class Ntfy: InterfaceDevice local Ntfy devices.Ntfy = {} ---@param config NtfyConfig ---@return Ntfy function devices.Ntfy.new(config) end ---@class HueSwitch: InterfaceDevice local HueSwitch devices.HueSwitch = {} ---@param config HueSwitchConfig ---@return HueSwitch function devices.HueSwitch.new(config) end ---@class HueSwitchConfig ---@field name string ---@field room string? ---@field topic string ---@field client AsyncClient ---@field left_callback fun(_: HueSwitch) | fun(_: HueSwitch)[]? ---@field right_callback fun(_: HueSwitch) | fun(_: HueSwitch)[]? ---@field left_hold_callback fun(_: HueSwitch) | fun(_: HueSwitch)[]? ---@field right_hold_callback fun(_: HueSwitch) | fun(_: HueSwitch)[]? ---@field battery_callback fun(_: HueSwitch, _: number) | fun(_: HueSwitch, _: number)[]? local HueSwitchConfig return devices