127 lines
2.8 KiB
Lua
127 lines
2.8 KiB
Lua
local battery = require("config.battery")
|
|
local devices = require("automation:devices")
|
|
local helper = require("config.helper")
|
|
local hue_bridge = require("config.hue_bridge")
|
|
local presence = require("config.presence")
|
|
local windows = require("config.windows")
|
|
|
|
--- @type Module
|
|
local module = {}
|
|
|
|
function module.setup(mqtt_client)
|
|
local lights = devices.HueGroup.new({
|
|
identifier = "living_lights",
|
|
ip = hue_bridge.ip,
|
|
login = hue_bridge.token,
|
|
group_id = 1,
|
|
scene_id = "SNZw7jUhQ3cXSjkj",
|
|
})
|
|
|
|
local lights_relax = devices.HueGroup.new({
|
|
identifier = "living_lights_relax",
|
|
ip = hue_bridge.ip,
|
|
login = hue_bridge.token,
|
|
group_id = 1,
|
|
scene_id = "eRJ3fvGHCcb6yNw",
|
|
})
|
|
|
|
local switch = devices.HueSwitch.new({
|
|
name = "Switch",
|
|
room = "Living",
|
|
client = mqtt_client,
|
|
topic = helper.mqtt_z2m("living/switch"),
|
|
left_callback = require("config.rooms.kitchen").toggle_lights,
|
|
right_callback = function()
|
|
lights:set_on(not lights:on())
|
|
end,
|
|
right_hold_callback = function()
|
|
lights_relax:set_on(true)
|
|
end,
|
|
battery_callback = battery.callback,
|
|
})
|
|
|
|
local pc = devices.WakeOnLAN.new({
|
|
name = "Zeus",
|
|
room = "Living Room",
|
|
topic = helper.mqtt_automation("appliance/living_room/zeus"),
|
|
client = mqtt_client,
|
|
mac_address = "30:9c:23:60:9c:13",
|
|
broadcast_ip = "10.0.3.255",
|
|
})
|
|
|
|
local mixer = devices.OutletOnOff.new({
|
|
name = "Mixer",
|
|
room = "Living Room",
|
|
topic = helper.mqtt_z2m("living/mixer"),
|
|
client = mqtt_client,
|
|
})
|
|
presence.turn_off_when_away(mixer)
|
|
|
|
local speakers = devices.OutletOnOff.new({
|
|
name = "Speakers",
|
|
room = "Living Room",
|
|
topic = helper.mqtt_z2m("living/speakers"),
|
|
client = mqtt_client,
|
|
})
|
|
presence.turn_off_when_away(speakers)
|
|
|
|
local audio_remote = devices.IkeaRemote.new({
|
|
name = "Remote",
|
|
room = "Living Room",
|
|
client = mqtt_client,
|
|
topic = helper.mqtt_z2m("living/remote"),
|
|
single_button = true,
|
|
callback = function(_, on)
|
|
if on then
|
|
if mixer:on() then
|
|
mixer:set_on(false)
|
|
speakers:set_on(false)
|
|
else
|
|
mixer:set_on(true)
|
|
speakers:set_on(true)
|
|
end
|
|
else
|
|
if not mixer:on() then
|
|
mixer:set_on(true)
|
|
else
|
|
speakers:set_on(not speakers:on())
|
|
end
|
|
end
|
|
end,
|
|
battery_callback = battery.callback,
|
|
})
|
|
|
|
local balcony = devices.ContactSensor.new({
|
|
name = "Balcony",
|
|
room = "Living Room",
|
|
sensor_type = "Door",
|
|
topic = helper.mqtt_z2m("living/balcony"),
|
|
client = mqtt_client,
|
|
battery_callback = battery.callback,
|
|
})
|
|
windows.add(balcony)
|
|
local window = devices.ContactSensor.new({
|
|
name = "Window",
|
|
room = "Living Room",
|
|
topic = helper.mqtt_z2m("living/window"),
|
|
client = mqtt_client,
|
|
battery_callback = battery.callback,
|
|
})
|
|
windows.add(window)
|
|
|
|
--- @type Module
|
|
return {
|
|
lights,
|
|
lights_relax,
|
|
switch,
|
|
pc,
|
|
mixer,
|
|
speakers,
|
|
audio_remote,
|
|
balcony,
|
|
window,
|
|
}
|
|
end
|
|
|
|
return module
|