KATEGORIER

Sök

Fibaro - The Button LUA mot Telldus ZNet

Relaterade produkter


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.

cmd

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.

advanced

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.

Andra inlägg

Produkten är för tillfället slut på lager. Skriv in din e-postadress så meddelar vi dig när den kommit in på lager igen.