Fibaro에서 제공하는 자동화 중 상세한 설정을 할 수 있는 Lua Coding시 피바로는 연결된 장치(Device, Scene, Virtual Devide, User ID 등) 의 아이디를 사용한다.
장치 ID인 숫자는 인식하기 불편하기 때문에 쉽게 기억할 수 있는 이름으로 지정하고 사용하면 편리하다.
(숫자로 되어 있는 IP주소를 문자인 도메인 주소로 사용하는것과 같다고 보면된다.)
Device 등이 바뀌거나 삭제, 추가 될 때 관련된 모든 Lua Code 수정하지 않고 변수로 지정된 내용만 관리하면 되기에 작성해 두고 사용하는 것이 편리하다.
아직 설치된 Fibaro Device가 많지 않지만 Lua로 자동화를 만들기 위해서 조금씩 공부하고 설정해 두려한다.
Home Table 작성에 대한 Fibaro 카페(https://cafe.naver.com/fibarokorea)의 내용을 토대로
Fibaro유저포럼 : 네이버 카페
Fibaro및 유럽스마트홈 시스템.인테리어 디자인 중심의 스마트홈
cafe.naver.com
적용해 보면서 내 장비에 맞게 수정한 내용을 블로그에 작성해 본다.
1. Fibaro HomeCenter Panels에서 변수를 만들어 준다.
Panels → Variables Panel → Predefined variables에서 Add 버튼 눌러 Name에는 HomeTable로 입력하고 저장한다.
(Name는 자신이 알아보기 편한 이름으로 작성하면 된다.)
2. 만들어진 HomeTable 변수에 장치 ID 데이터 입력은 Scene을 만들어서 입력한다.
Scenes → Add scene, New Scene에서 Add secne in LUA로 Add
General 탭에서 Name, Room, Category를 설정하고
Advanced 탭에 아래 Lua 코드를 입력한다.
==========================================================================
--[[
%% autostart
%% properties
%% events
%% globals
--]]
local debug = true --set to false to stop debug messages
-- HOME TABLE FOR ANYTHING IN ADDITION TO DEVICES, VDs, iOS DEVICES
-- EDIT TO YOUR NEEDS OR KEEP BLANK: jsonHome = {}
jsonHome = { ← jsonHome = { } 안에 본문처럼 직접 작성해도 된다.
scene = { Reboot = 30, Mesh = 20 }, jsonHome 도 변수명이니 작명은 마음대로
users = { admin = 2, sjhwoong = 1003, grace = 1004 },
Lr = { Temp = 54, Motion = 53, Lux = 55, Wall = 120, DysonTemp = 81, DysonCheck = 80,
Plug = 59, MidSpot = 12001, RightSpot = 12002, CurtainHue = 12004 },
Hw = {
Motion = 95,
Lux = 97,
Temp = 96,
Strip = 12007,
},
Dr = {
RightSpot = 12005,
LeftSpot = 12006,
},
Br = { Strip = 12008 },
Kt = { Strip = 12009 },
HueMap = {
["Mid Spot"] = 12001,
["Left Spot"] = 12003,
["Right Spot"] = 12002,
["Curtain Hue"] = 12004,
["Hallway Hue"] = 12007,
["Bedroom Hue"] = 12008,
["Kitchen Hue"] = 12009,
["Dr Right Spot"] = 12005,
["Dr Left Spot"] = 12006
}
}
아래 부터는 개발자가 수정하지 말라는 부분으로 홈센터에 등록되어 있는 장치를 스크립트로 발췌하여
자동 등록하는 부분
-- NO USER EDITS NEEDED BELOW
local function log(str) if debug then fibaro:debug(str); end; end
여기부터
devices=fibaro:getDevicesId({visible = true, enabled = true}) -- get list of all visible and enabled devices
log("Fill hometable with "..#devices.." devices")
-- FILL THE HOMETABLE WITH ALL VDs, DEVICES AND iOS DEVICES
for k,i in ipairs(devices) do
deviceName=string.gsub(fibaro:getName(i), "%s+", "") -- eliminate spaces in devicename
-- Uncomment this to eliminate all non-alphanumeric characters in devicename
-- deviceName=string.gsub(fibaro:getName(i), "%W", "")
if fibaro:getType(i) == "virtual_device" then -- Add VDs to Hometable
if jsonHome.VD == nil then -- Add VD to the table
jsonHome.VD = {}
end
jsonHome.VD[deviceName]=i
log("i="..i..", type="..fibaro:getType(i)..", device="..deviceName)
elseif fibaro:getType(i) == "iOS_device" then -- Add iOS devices to Hometable
if jsonHome.iOS == nil then -- Add iOS devices to the table
jsonHome.iOS = {}
end
jsonHome.iOS[deviceName]=i
log("i="..i..", type="..fibaro:getType(i)..", device="..deviceName)
else -- Add all other devices to the table
roomID = fibaro:getRoomID(i)
if roomID == 0 then
roomname = "Unallocated"
else
roomname=string.gsub(fibaro:getRoomName(roomID), "%s+", "") -- eliminate spaces in roomname
-- Uncomment this to eliminate all non-alphanumeric characters in roomname
-- roomname=string.gsub(fibaro:getRoomName(roomID), "%W", "")
end
if jsonHome[roomname] == nil then -- Add room to the table
jsonHome[roomname] = {}
end
jsonHome[roomname][deviceName]=i
log("i="..i..", type="..fibaro:getType(i)..", device="..deviceName..", room="..roomname)
end
end
여기까지는 스크립트로 자동으로 읽어 오는 부분으로 자동 싫으면 삭제해도 됨.
jHomeTable = json.encode(jsonHome) -- ENCODES THE DATA IN JSON FORMAT BEFORE STORING
아래 라인 ""(따옴표) 안에 Panels에서 만들어 준 변수명 넣으면 된다. 난 변수명을 HomeTable로 했음으로..
fibaro:setGlobal("HomeTable", jHomeTable) -- THIS STORES THE DATA IN THE VARIABLE
log("global jTable created:") -- STANDARD DEBUGLINE TO DISPLAY A MESSAGE
log(jHomeTable)
-- I then like to read back a entry from the table to show that the table didnt get corrupt in the process.
local jT = json.decode(fibaro:getGlobalValue("HomeTable")) -- REFERENCE TO DECODE TABLE
log(jT.scene.test) -- DISPLAY ONE VARIALE
============================================================================
마지막 log(jT.scene.test)는 jT 변수에 저장된 테이블에서 scene에 test의 저장값을 보여주라는 의미
스크립트에 기존에 만들어 둔 scene을 읽는 내용이 없는거 같은데 이해 안되는 부분..
Lua를 모르니 어쩔수 없다. 다만, 직접 입력한 scene 중 Reboot이 있으니 log(jT.scene.Reboot) 바꾸어서 실행(저장)시 설정해둔 30이 출력되면 작성된 변수 테이블에 잘 저장 된거다.
본문과 같이 테이블에 없는거 값 표시하라고 하면 없다고 nil이라 표시됨.. Lua에서 nil은 값이 없다라는 의미란다.
위와 같이 마지막에 사용자 Scene의 반환값 출력되면 OK,
스크트로 자동으로 값을 읽어 저장하게 했다면, 위와 같이 옆으로 줄줄이 나열된 값을 보기 좋게 표시하여
정리한다. 내가 작명하여 장치 번호 할당해 준 테이블이지만, 잊어버린다. ㅋㅋ
'[DEBUG] 14:29:04: global jTable created:' 의 다음줄 괄호{ }의 내용을( 괄호포함 ) 복사하여
http://jsonprettyprint.net/에서 실행하여 알아보기 쉽게 정리한다.
✅ JSON Pretty Print 😀
JSON Pretty Print Paste your JSON and pretty print it. That's it - it's the easiest tool to JSON pretty print. Copy-paste the JSON that you want to pretty print below. Press the button JSON Pretty Print. And see pretty printed JSON that is more easy to rea
jsonprettyprint.net
위에 코드 상단에 jsonHome = { } 에 정리된 내용을 입력하고 저장해 두는 것이 좋다.
Lua 스크립트 editor인 Zerobrance로 https://studio.zerobrane.com/download 작성하여 PC저장해도 된다.
Download - ZeroBrane Studio - Lua IDE/editor/debugger for Windows, Mac OSX, and Linux
Download ZeroBrane Studio v1.90 (Feb 09 2020) If you paid for ZeroBrane Studio, thank you for your contribution. If you have not, please consider supporting the project. What are the most significant changes in this version? Added support for macOS Catalin
studio.zerobrane.com
무료 프로그램에 Fibaro에 연결하여 Lua 수정 가능하고 편리하다고 한다.
https://forum.fibaro.com/topic/24319-tutorial-zerobrane-usage-lua-coding/
[TUTORIAL] ZeroBrane Usage (Lua Coding)
Latest version of Lualibs = Please login or register to see this attachment. Changelog for v1.0.1 (thank to @petergebruers) - fix HC user authentication (was: user:password in URL, is now: basic authentication).- fix chunked responses (was: use only chunk
forum.fibaro.com