- Din varukorg är tom!
- H-Support
Sök
Fibaro - The Button LUA mot Telldus ZNet
- Publicerat: 2016-12-27
- Kategori:
- ▸ Wiki
- ▸ Hemautomation
- ▸ Z-Wave
![](https://www.lohelectronics.se/image/cache/catalog/wiki/znetlua-600x600.jpg)
I denna guide hade vi tänkt gå igenom lite grund-kodning i LUA för att använda en Fibaro The Button för att styra lite lampor.
Vi börjar med att logga in lokalt på ZNet'en via IP-adressen i nätverket.
I vårt fall så är det 192.168.1.100, men är det inte det för dig så rekommenderar vi att använda detta program för att söka IP--adresser i inom ditt nätverk. http://www.advanced-ip-scanner.com/.
Efter att du installerat programmet så startar du upp det och anger IP--adresser inom din gateway. Vanligast är 192.168.1.1 - 192.168.1.255, men är du osäker så kan du kolla upp det via kommandotolken.
Notera att det är viktigt att ni varit i kontakt med Telldus om att aktivera Beta LUA på er enhet. Om ni inte gjort det så kan ni kontakta Telldus på http://support.telldus.com/ så hjälper dem er att få tillgång till detta. - Detta har ändrats och du behöver inte längre kontakta Telldus för detta!
För att kolla detta via kommandotolken så börjar vi med att öppna cmd genom " + R" sedan skriv "cmd". Nu när kommandotolken är öppen så skriver du "ipconfig" och scrollar upp för att leta efter "Standard--gateway". Där har du dina sökvärden för Advanced ip scanner.
Och eftersom vi vill söka hela nätverket så skriver vi helt enkelt från port "1" till port "255" som är det högsta värdet.
Skriv in ip-adresserna du tänkt söka igenom och klicka på "SCAN". Leta sedan efter "Manufacturer" där det ska stå "Telldus Technologies AB".
När du går in på den IP-adressen som din ZNet använder så behöver du bara skriva in inloggningsuppgifterna som du använder för ditt Telldus Live så är vi good to go!
Eftersom detta är en grov BETA så möts man inte av så speciellt mycket just nu. Men vi navigerar helt enkelt till det vi är ute efter och det är "Lua scripts (beta)". Sedan klickar vi på "NEW SCRIPT" till höger, anger scriptets namn och sedan klickar på "CREATE" enligt bilden.
Mellanrum på namnet spelar ingen roll då detta kommer skippas när du klickar på "CREATE".
Så fort du skapar ditt första script så kommer det finnas en onInit() funktion som bara är en initieringskod för att bekräfta att LUA är aktivt. Svart på onInit funktionen ser du direkt i "Console" under textfältet.
Script RedButton.lua loaded
Hello world
Nu börjar det roliga.
Vi börjar med sätta upp variabler som vi kommer hämta data från under hela scriptet.
-- Namn på alla enheter: local knapp = "The Button" -- Knappen local enhet1 = "Enhet 1 klick" -- Enhet vid 1 klick local enhet2 = "Enhet 2 klick" -- Enhet vid 2 klick local enhet3 = "Enhet 3 klick" -- Enhet vid 3 klick local enhet4 = "Enhet 4 klick" -- Enhet vid 4 klick local enhet5 = "Enhet 5 klick" -- Enhet vid 5 klick -- The Button, Enhet 1 klick, osv ska ändras till dina enheters namn i Telldus Live!
Sedan fångar vi upp lite rådata där vi kollar av så att koden gäller rätt knapp och även upprättar anslutning mot DeviceManager.
COMMAND_CLASS_CENTRAL_SCENE = 0x5B CENTRAL_SCENE_NOTIFICATION = 0x03 local deviceManager = require "telldus.DeviceManager" function onZwaveMessageReceived(device, flags, cmdClass, cmd, data) if device:name() ~= knapp then return end if cmdClass ~= COMMAND_CLASS_CENTRAL_SCENE or cmd ~= CENTRAL_SCENE_NOTIFICATION then return end local sequence = data[0] local action = data[1] local scene = data[2] print("CENTRAL_SCENE_NOTIFICATION from Device: %s, Scene: %s, Action: %s", device:name(), scene, action)
Nu börjar vi koda så att knapptryckningarna får sina funktioner.
-- 1 Klick if action == 0 then local device = deviceManager:findByName(enhet1) device:command("turnon", nil, "Scene") print("Startar enhet: %s", enhet1) -- 2 Klick elseif action == 3 then local device = deviceManager:findByName(enhet2) device:command("turnon", nil, "Scene") print("Startar enhet: %s", enhet2) -- 3 Klick elseif action == 4 then local device = deviceManager:findByName(enhet3) device:command("turnon", nil, "Scene") print("Startar enhet: %s", enhet3) -- 4 Klick elseif action == 5 then local device = deviceManager:findByName(enhet4) device:command("turnon", nil, "Scene") print("Startar enhet: %s", enhet4) -- 5 Klick elseif action == 6 then local device = deviceManager:findByName(enhet5) device:command("turnon", nil, "Scene") print("Startar enhet: %s", enhet5) -- Stäng av enheter (Tryck och håll) elseif action == 2 then -- Enhet 1 local device = deviceManager:findByName(enhet1) device:command("turnoff", nil, "Scene") print("Stänger av enhet: %s", enhet1) -- Enhet 2 local device = deviceManager:findByName(enhet2) device:command("turnoff", nil, "Scene") print("Stänger av enhet: %s", enhet2) -- Enhet 3 local device = deviceManager:findByName(enhet3) device:command("turnoff", nil, "Scene") print("Stänger av enhet: %s", enhet3) -- Enhet 4 local device = deviceManager:findByName(enhet4) device:command("turnoff", nil, "Scene") print("Stänger av enhet: %s", enhet4) -- Enhet 5 local device = deviceManager:findByName(enhet5) device:command("turnoff", nil, "Scene") print("Stänger av enhet: %s", enhet5) end end
Så som detta script fungerar så startar du enheterna genom att klicka 1 gång, 2 gånger, 3 gånger osv. Men sen för att du ska kunna släcka alla enheter samtidigt så håller vi in knappen ca 1--2 sekunder för att stänga av alla 5 enheterna.
Detta går självklart att göra på en mängd olika sätt.
Säg t.ex. att ni vill starta alla lampor med ett knapptryck och sedan stänga av dem med att hålla in knappen.
-- Starta enheter if action == 0 then -- 1 Klick -- Enhet 1 local device = deviceManager:findByName(enhet1) device:command("turnon", nil, "Scene") print("Startar enhet: %s", enhet1) -- Enhet 2 local device = deviceManager:findByName(enhet2) device:command("turnon", nil, "Scene") print("Startar enhet: %s", enhet2) -- Enhet 3 local device = deviceManager:findByName(enhet3) device:command("turnon", nil, "Scene") print("Startar enhet: %s", enhet3) -- Enhet 4 local device = deviceManager:findByName(enhet4) device:command("turnon", nil, "Scene") print("Startar enhet: %s", enhet4) -- Enhet 5 local device = deviceManager:findByName(enhet5) device:command("turnon", nil, "Scene") print("Startar enhet: %s", enhet5) -- Stäng av enheter elseif action == 2 then -- Tryck och håll -- Enhet 1 local device = deviceManager:findByName(enhet1) device:command("turnoff", nil, "Scene") print("Stänger av enhet: %s", enhet1) -- Enhet 2 local device = deviceManager:findByName(enhet2) device:command("turnoff", nil, "Scene") print("Stänger av enhet: %s", enhet2) -- Enhet 3 local device = deviceManager:findByName(enhet3) device:command("turnoff", nil, "Scene") print("Stänger av enhet: %s", enhet3) -- Enhet 4 local device = deviceManager:findByName(enhet4) device:command("turnoff", nil, "Scene") print("Stänger av enhet: %s", enhet4) -- Enhet 5 local device = deviceManager:findByName(enhet5) device:command("turnoff", nil, "Scene") print("Stänger av enhet: %s", enhet5) end end
Notera att det är ej ett måste att använda upp till 5 knapptryckningar, men om ni vill så går det.
Så för att summera kodningen. -- Starta enheterna separat men stänga av på samma kommando.
-- Namn på alla enheter: local knapp = "The Button" -- Knappen local enhet1 = "Enhet 1 klick" -- Enhet vid 1 klick local enhet2 = "Enhet 2 klick" -- Enhet vid 2 klick local enhet3 = "Enhet 3 klick" -- Enhet vid 3 klick local enhet4 = "Enhet 4 klick" -- Enhet vid 4 klick local enhet5 = "Enhet 5 klick" -- Enhet vid 5 klick -- The Button, Enhet 1 klick, osv ska ändras till dina enheters namn i Telldus Live! COMMAND_CLASS_CENTRAL_SCENE = 0x5B CENTRAL_SCENE_NOTIFICATION = 0x03 local deviceManager = require "telldus.DeviceManager" function onZwaveMessageReceived(device, flags, cmdClass, cmd, data) if device:name() ~= knapp then return end if cmdClass ~= COMMAND_CLASS_CENTRAL_SCENE or cmd ~= CENTRAL_SCENE_NOTIFICATION then return end local sequence = data[0] local action = data[1] local scene = data[2] print("CENTRAL_SCENE_NOTIFICATION from Device: %s, Scene: %s, Action: %s", device:name(), scene, action) -- 1 Klick if action == 0 then local device = deviceManager:findByName(enhet1) device:command("turnon", nil, "Scene") print("Startar enhet: %s", enhet1) -- 2 Klick elseif action == 3 then local device = deviceManager:findByName(enhet2) device:command("turnon", nil, "Scene") print("Startar enhet: %s", enhet2) -- 3 Klick elseif action == 4 then local device = deviceManager:findByName(enhet3) device:command("turnon", nil, "Scene") print("Startar enhet: %s", enhet3) -- 4 Klick elseif action == 5 then local device = deviceManager:findByName(enhet4) device:command("turnon", nil, "Scene") print("Startar enhet: %s", enhet4) -- 5 Klick elseif action == 6 then local device = deviceManager:findByName(enhet5) device:command("turnon", nil, "Scene") print("Startar enhet: %s", enhet5) -- Stäng av enheter (Tryck och håll) elseif action == 2 then -- Enhet 1 local device = deviceManager:findByName(enhet1) device:command("turnoff", nil, "Scene") print("Stänger av enhet: %s", enhet1) -- Enhet 2 local device = deviceManager:findByName(enhet2) device:command("turnoff", nil, "Scene") print("Stänger av enhet: %s", enhet2) -- Enhet 3 local device = deviceManager:findByName(enhet3) device:command("turnoff", nil, "Scene") print("Stänger av enhet: %s", enhet3) -- Enhet 4 local device = deviceManager:findByName(enhet4) device:command("turnoff", nil, "Scene") print("Stänger av enhet: %s", enhet4) -- Enhet 5 local device = deviceManager:findByName(enhet5) device:command("turnoff", nil, "Scene") print("Stänger av enhet: %s", enhet5) end end
Kod för att starta alla enheter med en knapptryckning, och stänga av dem genom att hålla in knappen:
-- Namn på alla enheter: local knapp = "The Button" -- Knappen local enhet1 = "Enhet 1 klick" -- Enhet vid 1 klick local enhet2 = "Enhet 2 klick" -- Enhet vid 2 klick local enhet3 = "Enhet 3 klick" -- Enhet vid 3 klick local enhet4 = "Enhet 4 klick" -- Enhet vid 4 klick local enhet5 = "Enhet 5 klick" -- Enhet vid 5 klick -- The Button, Enhet 1 klick, osv ska ändras till dina enheters namn i Telldus Live! COMMAND_CLASS_CENTRAL_SCENE = 0x5B CENTRAL_SCENE_NOTIFICATION = 0x03 local deviceManager = require "telldus.DeviceManager" function onZwaveMessageReceived(device, flags, cmdClass, cmd, data) if device:name() ~= knapp then return end if cmdClass ~= COMMAND_CLASS_CENTRAL_SCENE or cmd ~= CENTRAL_SCENE_NOTIFICATION then return end local sequence = data[0] local action = data[1] local scene = data[2] print("CENTRAL_SCENE_NOTIFICATION from Device: %s, Scene: %s, Action: %s", device:name(), scene, action) -- Starta enheter if action == 0 then -- 1 Klick -- Enhet 1 local device = deviceManager:findByName(enhet1) device:command("turnon", nil, "Scene") print("Startar enhet: %s", enhet1) -- Enhet 2 local device = deviceManager:findByName(enhet2) device:command("turnon", nil, "Scene") print("Startar enhet: %s", enhet2) -- Enhet 3 local device = deviceManager:findByName(enhet3) device:command("turnon", nil, "Scene") print("Startar enhet: %s", enhet3) -- Enhet 4 local device = deviceManager:findByName(enhet4) device:command("turnon", nil, "Scene") print("Startar enhet: %s", enhet4) -- Enhet 5 local device = deviceManager:findByName(enhet5) device:command("turnon", nil, "Scene") print("Startar enhet: %s", enhet5) -- Stäng av enheter elseif action == 2 then -- Tryck och håll -- Enhet 1 local device = deviceManager:findByName(enhet1) device:command("turnoff", nil, "Scene") print("Stänger av enhet: %s", enhet1) -- Enhet 2 local device = deviceManager:findByName(enhet2) device:command("turnoff", nil, "Scene") print("Stänger av enhet: %s", enhet2) -- Enhet 3 local device = deviceManager:findByName(enhet3) device:command("turnoff", nil, "Scene") print("Stänger av enhet: %s", enhet3) -- Enhet 4 local device = deviceManager:findByName(enhet4) device:command("turnoff", nil, "Scene") print("Stänger av enhet: %s", enhet4) -- Enhet 5 local device = deviceManager:findByName(enhet5) device:command("turnoff", nil, "Scene") print("Stänger av enhet: %s", enhet5) end end
Ett enkelt tips för att hålla all kod ren och snygg så kopiera in dessa script, markera allt i textfältet för ditt script och tryck "TAB" 2-3 gånger, sedan "SHIFT + TAB" en gång.