From ed4672f326cb9174b67e07a180252436e1847843 Mon Sep 17 00:00:00 2001 From: Tuxilio <mail@tuxil.io> Date: Fri, 6 Dec 2024 16:09:33 +0100 Subject: [PATCH] LED colors are changing on click, send to right MQTT topic --- init.lua | 61 +++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 45 insertions(+), 16 deletions(-) diff --git a/init.lua b/init.lua index 08c06b1..069c2eb 100644 --- a/init.lua +++ b/init.lua @@ -12,16 +12,33 @@ local data = { password = "eZcKn1zBE6KtbeFnZ33lV1EKnr9Bcn8B", } +local ledCount = 10 + +local led_textures = { + "black", + "blue", + "cyan", + "gray", + "green", + "magenta", + "red", + "white", + "yellow", +} + +local led_colors = {} + +local active_pos +local active_id + local mqttBaseTopic = core.settings:get("ledtree_base_topic") or "ledtree" local client = mqtt.connect(data.url, data.clientId, data.username, data.password) -mqtt.subscribe(client, "ledtree/led/1", function(topic, payload) - core.chat_send_all("Received message from topic "..topic..": "..payload) - end -) - -local change_color = function(player, led_id) +local change_color = function(player, led_id, pos) + local pos_string = core.serialize(pos) + active_pos = pos + active_id = led_id local formspec = "size[3,3]" .. "image_button[0,0;1,1;red.png;red;red;false;false;]" .. "image_button[1,0;1,1;green.png;green;green;false;false;]" .. @@ -40,14 +57,23 @@ local function send_mqtt(id, rgb) mqtt.publish(client, mqttBaseTopic.."/led/"..id, "["..rgb.."]") end -for id=1, 10, 1 do - core.register_node("ledtree:led"..id, { - description = "LED"..id, - --tiles = "", - on_rightclick = function(pos, node, player, itemstack, pointed_thing) - change_color(player, id) - end, - }) +local function replace_block(pos, id, new_texture) + --local node = core.get_node(pos) + local node_name = "ledtree:led" .. id .. "_" .. new_texture + core.set_node(pos, {name = node_name}) +end + +for id = 1, ledCount do + led_colors[id] = "" + for index, texture in ipairs(led_textures) do + core.register_node("ledtree:led" .. id .. "_" .. texture, { + description = "LED" .. id .." " .. texture, + tiles = {texture .. ".png",}, + on_rightclick = function(pos, node, player, itemstack, pointed_thing) + change_color(player, id, pos) + end, + }) + end end core.register_on_player_receive_fields(function(player, formname, fields) @@ -76,8 +102,11 @@ core.register_on_player_receive_fields(function(player, formname, fields) end if rgb ~= "" then - core.chat_send_player(player:get_player_name(), "RGB: " .. rgb) - send_mqtt(1, rgb) + core.chat_send_player(player:get_player_name(), "LED: ".. active_id .. " - RGB: " .. rgb .. " ("..color..")") + send_mqtt(active_id, rgb) + replace_block(active_pos, active_id, color) + + core.close_formspec(player:get_player_name(), "ledtree:colorpicker") end end end -- GitLab