added custom overrides, motion-sensors and more...
This commit is contained in:
parent
53466eed17
commit
ff423fc029
11 changed files with 348 additions and 26 deletions
79
timer.lua.broken
Normal file
79
timer.lua.broken
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
local timer_box = { type = "fixed", fixed = {{-0.5, -0.5, 0.4, 0.5, 0.5, 0.5}} }
|
||||
|
||||
minetest.register_node("smart_light:timer", {
|
||||
description = "Smart Light Zeitschaltuhr",
|
||||
tiles = {
|
||||
"smart_light_panel_sides.png", "smart_light_panel_sides.png",
|
||||
"smart_light_panel_sides.png", "smart_light_panel_sides.png",
|
||||
"smart_light_panel_sides.png", "smart_light_panel_front_timer.png"
|
||||
},
|
||||
drawtype = "nodebox", paramtype = "light", paramtype2 = "facedir",
|
||||
groups = {cracky = 2, oddly_breakable_by_hand = 1},
|
||||
node_box = timer_box,
|
||||
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("infotext", "Zeitschaltuhr (nicht konfiguriert)")
|
||||
end,
|
||||
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local area = meta:get_string("area_id")
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
if area == "" then
|
||||
minetest.chat_send_player(name, "Bitte zuerst Area mit dem Programmer zuweisen!")
|
||||
return
|
||||
end
|
||||
|
||||
local fs = "size[11,9]label[0.5,0.2;Zeitschaltuhr: " .. area:upper() .. "]"
|
||||
local y, x, count, channels = 1.2, 0.5, 0, {}
|
||||
|
||||
if smart_light.registry.areas[area] and smart_light.registry.areas[area].channels then
|
||||
for c_id, _ in pairs(smart_light.registry.areas[area].channels) do table.insert(channels, c_id) end
|
||||
table.sort(channels)
|
||||
for _, c_id in ipairs(channels) do
|
||||
local c_data = smart_light.registry.areas[area].channels[c_id]
|
||||
local t_status = (c_data.timer and c_data.timer.enabled) and "AN" or "AUS"
|
||||
-- WICHTIG: Neues Kürzel tmr_m:
|
||||
fs = fs .. "button["..x..","..y..";2.5,0.8;tmr_ch_"..c_id..";" .. c_id .. "\n(TIMER: "..t_status..")]"
|
||||
x, count = x + 2.6, count + 1
|
||||
if count % 4 == 0 then x, y = 0.5, y + 1 end
|
||||
end
|
||||
else
|
||||
fs = fs .. "label[0.5,2;Keine Kanäle in dieser Area gefunden.]"
|
||||
end
|
||||
minetest.show_formspec(name, "tmr_m:" .. minetest.pos_to_string(pos), fs)
|
||||
end,
|
||||
|
||||
on_timer = function(pos, elapsed)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local area_id = meta:get_string("area_id")
|
||||
if area_id == "" or not smart_light.registry.areas[area_id] then return true end
|
||||
|
||||
local time = minetest.get_timeofday() * 24
|
||||
|
||||
for c_id, c_data in pairs(smart_light.registry.areas[area_id].channels) do
|
||||
if c_data.timer and c_data.timer.enabled then
|
||||
local t = c_data.timer
|
||||
local should_be_on = false
|
||||
if t.start_h < t.end_h then
|
||||
if time >= t.start_h and time < t.end_h then should_be_on = true end
|
||||
else
|
||||
if time >= t.start_h or time < t.end_h then should_be_on = true end
|
||||
end
|
||||
|
||||
local current_status = smart_light.get_status_text(area_id, c_id)
|
||||
if should_be_on and current_status == "AUS" then
|
||||
smart_light.switch_channel(area_id, c_id, "on")
|
||||
elseif not should_be_on and current_status == "AN" then
|
||||
local now = minetest.get_gametime()
|
||||
if not c_data.ms_deadline or now >= c_data.ms_deadline then
|
||||
smart_light.switch_channel(area_id, c_id, "off")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return true
|
||||
end,
|
||||
})
|
||||
Loading…
Add table
Add a link
Reference in a new issue