Jump to content

Welcome to Smart Home Forum by FIBARO

Dear Guest,

 

as you can notice parts of Smart Home Forum by FIBARO is not available for you. You have to register in order to view all content and post in our community. Don't worry! Registration is a simple free process that requires minimal information for you to sign up. Become a part of of Smart Home Forum by FIBARO by creating an account.

 

As a member you can:

  •     Start new topics and reply to others
  •     Follow topics and users to get email updates
  •     Get your own profile page and make new friends
  •     Send personal messages
  •     ... and learn a lot about our system!

 

Regards,

Smart Home Forum by FIBARO Team


Search the Community

Showing results for tags 'LUA'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • FIBARO Community
    • FIBARO Portal and Forum policy
    • FIBARO
    • Say hello!
    • Off-topics
  • FIBARO Update
    • FIBARO System Update
    • FIBARO Mobile Update
  • FIBARO Community Support
    • Scenes and Interface
    • FIBARO Products
    • FIBARO Mobile
    • FIBARO HomeKit
    • FIBARO Assistant Integrations
    • Other Devices / Third-party devices
    • Tutorials and Guides
    • Home Automation
    • Suggestions
  • FIBARO Społeczność
    • FIBARO
    • Przywitaj się!
    • Off-topic
  • FIBARO Aktualizacja
    • FIBARO System Aktualizacja
    • FIBARO Mobile Aktualizacja
  • FIBARO Wsparcie Społeczności
    • Sceny i Interfejs
    • FIBARO Urządzenia
    • FIBARO Mobilnie
    • FIBARO HomeKit
    • Integracja z Amazon Alexa i Google Home
    • Urządzenia Firm Trzecich
    • Poradniki
    • Automatyka Domowa
    • Sugestie

Categories

  • Scenes
  • Virtual Devices
  • Quick Apps
  • Icons

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Facebook


Google+


Skype


Website URL


WhatsApp


Country


Gateway/s


Interests

  1. **MAJOR UPDATE TO THIS TUTORIAL** Hi, This tutorial has been going through a major update and expansion since the first release. Special thanks deserved to @petergebruers and others for helping me understand many of the underlying table concepts and for also contributing a lot to this tutorial. It may be a good idea to paste some of the code in this tutorial into a test scene to understand how they work by reviewing the output Topics covered with lots of sample code and expected outputs Table basics Creating tables and printing (ordered, non-ordered, numerical and non numerical keys) #operator - pros and cons kv pairs - advantages Updating tables - adding adding, inserting values Nested Tables - printing, updating, inserting, Summary of key points Storing tables in global variables I would have found this very useful when I started so hopefully some users will find it useful as well. -frank & peter Tables A table is a tree structure, consisting of field and each field has a "key" and "value" pair. The key can be any Lua value except nil and NaN. A table can store anything except nil. The name of the table is the variable that stores a reference to the table so it can be accessed Creating Tables and displaying the table data a = {} This is the smallest table and stores the reference to the table {} in the variable a Consider the following table print("table with numerical keys") fav = {[1] = "4FM", [2] = "96FM", [3] = "Calm", [4] = "Heart", [5] = "Red_FM"} fav is the table (or at least the name of the variable where the table is stored), in the above table 'fav', it has 5 fields and each field consists of a key/value pair 4 is the key and 4FM is the value , 2 is a key and 96FM is the value, etc You can display all the key/value pairs using the following ... print("table with numerical keys and using k/v pairs to display the fields but they won't be in order") fav = {[1] = "4FM", [2] = "96FM", [3] = "Calm", [4] = "Heart", [5] = "Red_FM"} for k,v in pairs(fav) do print("k: " ..k..", v: "..v) end the result is ... and you'll notice that the results are NOT returned in order if you have numerical keys [1], [2] then you will need to use ipairs to return them in order print("table with numerical keys and using k/v ipairs to display the fields in order") fav = {[1] = "4FM", [2] = "96FM", [3] = "Calm", [4] = "Heart", [5] = "Red_FM"} for k,v in ipairs(fav) do print("k: " ..k..", v: "..v) end #operator The #operator (#tablename) is used by a lot of people to identify the length of the table and use this to iterate through the table but it is not always recommended an example of where it will work is here print("table with numerical keys and using the #operator to iterate through the table") radio = {"4FM", "96FM", "Calm", "Heart", "Red_FM"} print("#operator: "..#radio) for i = 1, #radio do print(radio[i]) end if the table keys are numerical and contiguous, it will work.. ....but if they are not or you have inserted or removed values then it won't work A good example of where it doesn't work very well is here print("table where numerical keys are not explicitly defined but are still the table keys") print(" example where the #operator doesnt return the correct count") radio = {"4FM", "96FM", "Calm", "Heart", "Red_FM"} for k,v in pairs(radio) do print("k: " ..k..", v: "..v) end print("#operator: "..#radio) -- remove one value, set it to nil radio[3] = nil for k,v in pairs(radio) do print("k: " ..k..", v: "..v) end print("#operator: "..#radio) you can see that the second loop in the debug is showing an #operator value of 5 (because it is the last key but there are only 4 key/value pairs as we removed one Another approach that is recommended to use is as follows use the k/v approach to count the fields and then use the counter to iterate through.. print("table where numerical keys are not explicitly defined but are still the table keys") print(" example using k/v pairs to calculate the correct table field count") radio = {"4FM", "96FM", "Calm", "Heart", "Red_FM"} counter = 0 for k,v in pairs(radio) do counter=counter+1 end print("counter: "..counter) for i = 1, counter do print(radio[i]) end radio[3] = nil -- remove the row by setting the key to nil counter = 0 for k,v in pairs(radio) do counter=counter+1 end print("counter: "..counter) for i = 1, counter do print(radio[i]) end and you can see that the counter is correct in both loops Updating Tables you can update a table by setting Key/Value pairs or delete a value as follows print("table where numerical keys are not explicitly defined but are still the table keys") print("examples of updating the table") fav = {"4FM", "96FM", "Calm", "Heart", "Red_FM"} -- update one value add another value fav[2] = "Soul" fav[4] = "Classic" -- delete value at key 1 fav[1] = nil for k,v in pairs(fav) do print("k: " ..k..", v: "..v) end if the k/v pair already exists it overwrites it or of the k/v pair didn't exist, it simply adds it as above This is the same example but the table has the numerical keys explicitly defined print("updating a table") fav = { [1] = "4FM", [2] = "96FM", [3] = "Calm", } fav[2] = "Soul" fav[4] = "Classic" for k,v in ipairs(fav) do print("k: " ..k..", v: "..v) end Example of adding key/value pairs to this table using table.insert fav= {"4FM","96FM", "Soul", "Jazz"} table.insert(fav, "Calm") table.insert(fav, "Red_FM") table.insert(fav, "Heart") for k,v in pairs(fav) do print("k: " ..k..", v: "..v) end The extra key/value pairs will be added as extra fields as you cannot specify the exact field you want to update as in the approach above Tables with non-numerical keys are also possible as shown below print("Table initialiser with alpha keys") fav = { ["a"] = "4FM", ["b"] = "96FM", ["c"] = "Calm", ["d"] = "Heart", ["e"] = "Red_FM"} for k,v in pairs(fav) do print("k: " ..k..", v: "..v) end the same table can be represented in a simpler form print("Table initialiser with alpha keys - simplified") fav = { a = "4FM", b= "96FM", c= "Calm", d = "Heart", e= "Red_FM"} for k,v in pairs(fav) do print("k: " ..k..", v: "..v) end If you chose or have to use non numerical keys or a mix, then Lua makes no guarantee on order as the spec says random. The only way to order a table with non-numerical keys (such as alphabetical order) is to use an external reference. Nested Tables Lets take the following table, it looks like each value in the key/value pair is a table in itself as if one table is nested inside the other table = { [1] = {loc="utility_room", name="HeatingTemp"}, [2] = {loc="bed_room", name="FreezerTemp"}, } for k,v in pairs(table) do print(k,v) end if you run the usual k/v code you will see the second/nested set of tables To list the k/v inside the second table you need to iterate through the first table we use a counter like before to find out how many fields are in the outer most table There are two tables nested within the outer most table table [1] which has two fields with k/v pairs table [2] which has two fields with k/v pairs print("Nested table example") table = { [1] = {loc="utility_room", name="HeatingTemp"}, [2] = {loc="bed_room", name="FreezerTemp"}, } for k,v in pairs(table) do print("first level key: " ..k..", first level value: "..tostring(v)) for k2,v2 in pairs(v) do -- This works because we KNOW v is a table. print(" second level key: " ..k2..", second level value: "..v2) end end we then use the counter to expose the k/v pairs at table[1] and table [2] with the following result You could also expose specific values (in the nested able) using the following table = { [1] = {loc="utility_room", name="HeatingTemp"}, [2] = {loc="bed_room", name="FreezerTemp"}, } for k,v in pairs(table) do print("location: "..table[k].loc) end with the following expected result You could also have used the #operator that we discussed earlier BUT only because the key's in the outer-most table are numerical and contingous for i = 1, #table do -- #list refers to the max number of items in the table fibaro:debug(table[i].ip, table[i].port) end Updating a value in a nested table If you want to update a specific value in the nested table you need to use the k/v method we have discussed fav = { [1] = {loc="utility_room", name="HeatingTemp"}, [2] = {loc="bed_room", name="FreezerTemp"}, } -- update nested table on the second field with a new value fav[2].loc = "kitchen" fav[2].name = "Hobtemp" -- or you could use the following format to do accomplish the same update fav[2]["loc"] = "kitchen" fav[2]["name"] = "Hobtemp" -- print out the updated table... for k,v in pairs(fav) do for k,v in pairs(fav[k]) do print("k: " ..k..", v: "..v) end end -- second option to print out the updated table with more explanation for k,v in pairs(fav) do print("first level key: " ..k..", first level value: "..tostring(v)) for k2,v2 in pairs(v) do -- This works because we KNOW v is a table. print(" second level key: " ..k2..", second level value: "..v2) end end the result is If you want to add/insert a new k/v pair in the nested level, you can use the table.insert method fav = { [1] = {loc="utility_room", name="HeatingTemp"}, [2] = {loc="bed_room", name="FreezerTemp"}, } -- insert a new value table.insert(fav,{loc="bedroom", name="sinktemp"}) -- print out the updated table... for k,v in pairs(fav) do for k,v in pairs(fav[k]) do print("k: " ..k..", v: "..v) end end -- second option to print out the updated table with more explanation for k,v in pairs(fav) do print("first level key: " ..k..", first level value: "..tostring(v)) for k2,v2 in pairs(v) do -- This works because we KNOW v is a table. print(" second level key: " ..k2..", second level value: "..v2) end end and the result is three fields in the table So before we go to the last task of storing the table in a global variable, I thought it would be good to have a quick recap.. Summary A table is a tree structure, consisting of field and each field has a "key" and "value" pair. The name of the table is the variable that stores a reference to the table so it can be accessed you can explicitly declare a numerical key in a table but you don't have to for a table with a numerical key - use ipairs to print the table fields in order #operator can be used but ONLY for tables with numerical keys that are contiguous it is recommended to use the standard k/v approach to count the number of fields remove a value by setting its key = nil update a table using the table[key] method add a new field using table.insert(table, "value") and will add a numerical key table.insert will not work with tables with non-numerical keys tables with non-numerical keys cannot be printed in order by ipairs, result will be random nested tables require iteration to print the inner-most tables multiple levels of iteration required for multi-nested tables updating nested table - iterate with k/v and use table[key].nested-key = "value" inserting into nested table - iterate with k/v and use table.insert(table,{key="value, key="value} tables can be very confusing and frustrating to us newbie's , so take your time Storing a table in a global variable if you take the following table structure Table = { group = { option1=1560,option2=1507,option3=881 }, } If you want to store this table in a global variable you will need to encode the table as a string. One of the most common formats to encode a table (structure) is json from json.org "JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate." To save the table you need to encode it and then save it to the global variable jTable = json.encode(table) fibaro:setGlobal("StateTable", jTable) In order to read back a single value you need to decode the string local jT = json.decode(fibaro:getGlobalValue("Table")) once it's decoded you can then read one of the values or manipulate the table fibaro:debug(jT.group.option1) Updating a single value - assign the new value, encode it and the store it..... jT.group.option3 = 987 jTable = json.encode(jT) fibaro:setGlobal("StateTable", jTable) Making json strings/output easier to read... Sometimes a json string can be difficult to read and understand its structure. Typically they would look something like this... {"widget": {"debug": "on","window": {"title": "Sample Konfabulator Widget","name": "main_window","width": 500,"height": 500},"image": {"src": "Images/Sun.png","name": "sun1","hOffset": 250, "vOffset": 250,"alignment": "center"},"text": {"data": "Click Here","size": 36,"style": "bold","name": "text1","hOffset": 250,"vOffset": 100,"alignment": "center","onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"}}} There are a number of websites that will 'pretify' the string make it easier to read the structure and enable you to understand how you might navigate it. If you take json string above and paste it into http://jsonprettyprint.com/ it will display it more like a table This format is easier to understand { "widget": { "debug": "on", "window": { "title": "Sample Konfabulator Widget", "name": "main_window", "width": 500, "height": 500 }, "image": { "src": "Images\/Sun.png", "name": "sun1", "hOffset": 250, "vOffset": 250, "alignment": "center" }, "text": { "data": "Click Here", "size": 36, "style": "bold", "name": "text1", "hOffset": 250, "vOffset": 100, "alignment": "center", "onMouseUp": "sun1.opacity = (sun1.opacity \/ 100) * 90;" } } } Finally.... There is a very good discussion on using a table in a predefined variables to store the ID's of scenes and devices for the HC2 - https://forum.fibaro.com/index.php?/topic/23942-tutorial-using-a-hometable-to-store-device-and-scene-ids/ suggestions to improve welcome -f
  2. Hi I recently figured out that my scenes with sending picture to e-mail from a ip camera not working anymore. It stops working around November 2017, I think after update to 4.150 or 4.140. Now running 4.170 on HC2 and command "sendPhotoToUser" not working. Button with camera logo on the device which used to send a snapshot to mail, also doesn't work. Has anyone else same issue? Code which should send a picture looks like this: Exactly the same code coming from block scene, when I making new scene now and converting to lua. --[[ %% properties 874 value %% weather %% events %% globals --]] local startSource = fibaro:getSourceTrigger(); if ( ( tonumber(fibaro:getValue(874, "value")) > 0 ) -- id 874 is triggering device or startSource["type"] == "other" ) then fibaro:call(648, "sendPhotoToUser", "2"); -- 648 is a camera id, 2 is a user id end Camera's settings and plugins/for cameras wasn't changed since this worked.
  3. Hello I'm new at lua programming and trying to use a variable to change light on or off, from a second button. But i can't get the variable to work. What is wrong here. Declaration { conditions = { { id = 187, isTrigger = true, operator = "==", property = "state", type = "device", value = false } }, operator = "all" } Actions local Status_186 = fibaro.getValue(186, "value") if Status_186 == 'ON' then fibaro.call(186, 'turnOff') else fibaro.call(186, 'turnOn') end
  4. Próbuję właśnie napisać scenę aktywowaną KeyFob, która w zależności od stanu żaluzji będzie kontynuowała poprzedni kierunek działania lub zatrzymywała żaluzję. Natrafiłem na pewne braki w dokumentacji, wiem tylko jak pobrać poziom zamknięcia rolet: fibaro.getValue(117, "value") Wiem też że za pomocą kilku warunków mogę napisać funkcję sprawdzającą czy ta wartość się nie zmienia. Szukałem jednak w internecie jakie inne własności urządzenia mogę pobrać za pomocą `getValue` niestety jednak nie znalazłem nic na ten temat. Czy ktoś może wie gdzie taka dokumentacja może się znajdować?
  5. Hi, I would like to set a device parameter thru either a virtual device (preferred) or a scene In my example, I have a doorlock (IDLock 101) and would like to set parameter number 1 (autolock mode) The parameter can set the lock to autolock(arm or not armed) or manual (arm or not armed) https://idlock.no/wp-content/uploads/2018/03/IDL-Operational-Manual-EN-v1.3.pdf Is it possible thru LUA or do I need to set it another way? Regards
  6. Hello, I am trying to build a Lua script that will tell Fibaro if I am working from home, working at home or off work. Here is what I have so far but I need some help to get the scene trigger when either I am at home or at work when all the conditions have been met at the specific times. Does anyone have a similar scene or suggestions? --[[ %% properties %% events %% globals --]] local currentDate = os.date("*t"); local time=os.date('*t'); local ct=os.date('*t'),os.date("%H:%M",os.time()) if (fibaro:countScenes() > 1) then fibaro:abort(); end if ((fibaro:getGlobalValue("AndyPresentstate") == "Home") and (currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6) and ((ct>= "08:30") and (ct<"17:00")) ) then fibaro:setGlobal("Working", "At Home"); fibaro:debug("working at home"); elseif ((fibaro:getGlobalValue("AndyPresentstate") == "Home") and (currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6) and ((ct>= "17:00") or (ct<"08:30"))) then fibaro:setGlobal("Working", "Off Work"); fibaro:debug("off work"); elseif (fibaro:getGlobalValue("AndyPresentstate") == "Away" and (currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6) and ((ct>= "08:30") and (ct<"17:00")) ) then fibaro:setGlobal("Working", "At Work"); fibaro:debug("Working at Work"); end
  7. Witajcie. Jak macie rozwiązane opóźnienie nawadniania? Korzystam z wbudowanych danych centralki HC-2. Chciałbym żeby podczas deszczu automatycznie mi opóźniał nawadnianie o, powiedzmy 12 godzin. Jak to zrobić w LUA?
  8. Hi everybody, I seem to be stuck in my search how to implement a (large) mobile popup, triggered in a LUA scene in HC3. I found this example for HC2: https://manuals.fibaro.com/knowledge-base-browse/how-to-create-mobile-pop-up/ This is actually what I want to create, a large popup with buttons and actions connected to it. But the example (obviously) does not work in HC3. I am using the following code and the fibaro.homeCenter.notificationService.publish function with type set to MobilePopupNotification as described in https://manuals.fibaro.com/home-center-3-lua-scenes/ local function popupMessage(message) local request = { type = "MobilePopupNotification", priority = "warning", data = { title = "Door(s) Open", text = message, } } local response, code = fibaro.homeCenter.notificationService.publish(request) fibaro.debug("Scene109", json.encode(response)) fibaro.debug("Scene109", code) end The debug responses are: for response: {"data":{"title":"Door(s) Open","buttons":[],"text":"Alarm in kelder en begane grond armed"},"created":1586512755,"type":"MobilePopupNotification","id":208,"priority":"warning","wasRead":false,"canBeDeleted":true} for code: 200 My Notification page in the web interface displays the warning as "Notification title" but no mobile notification is received. I also had this scene running with fibaro.alert() but that did not give me the desired large popup, only a smal one with limited text and not button options. BTW: I couldn't get the button functionality to work in any way. Tried arrays, objects, array of objects, object of objects etc but always got an error code 400 or simply a load error code ((load):34: unexpected symbol near '[') So, can anybody point me in the right direction, or tell me if what I want is possible in HC3? Thanks a lot
  9. How do I create a Global Variable from LUA in HC3? I'm trying to create a light dimmer function for Philips HUE using a Logic Group Matrix ZDB5100 switch so when I hold the Button its starts dimming up or down. But to keep track if the button is released and pressed again I need to keep track of the direction from last time it was pressed. So I'm thinking of using an Enumerated global variable "dimDirection" that can be set to Up or Down. I want the code to create the variable if not present. My working code whiteout remembering dimDirection is here https://pastebin.pl/view/d74c93bb In HC2 i used this snippet of code. But how is it in HC3 ? local ProjectorStatus = {On="Tændt", Off="Slukket"}; -- in code you then declare predefined global variable using users mapped values: local varName = { ["Projector"] = { value = ProjectorStatus.On, isEnum = true, isTable = false, enumValue = {ProjectorStatus.On, ProjectorStatus.Off} }, } function checkGlobalVariable(varName) -- Check if variable exist for i , v in pairs(varName) do if fibaro:getGlobalValue(i) == nil then api.post("/globalVariables/", { name = i }); fibaro:sleep(400) api.put("/globalVariables/"..i, { name = i, value = v.value, isEnum = v.isEnum, enumValues = v.enumValue }) if v.isTable then ok, msg = pcall(function() wT = json.decode(fibaro:getGlobalValue(i)) if type(wT) ~= "table" then error() end end ) if not ok then fibaro:debug("ERROR - Creating table was unsuccessful, error code: "..msg) else fibaro:debug("Variable '"..i.."' created successfully."); end else if fibaro:getGlobalValue(i) ~= nil then fibaro:debug("Variable '"..i.."' created successfully."); else fibaro:debug("ERROR - Variable '"..i.."' was NOT created!") end end end -- update all predefined global variables in case user changed default values if v.isEnum then fibaro:debug("Variable '"..i.."' allready exists."); local value = fibaro:getGlobalValue(i) for i,m in pairs(v.enumValue) do if m == value then v.value = value end end if v.value == value then fibaro:debug("For variable '"..i.."' found current value ("..value..") and will keep it") else fibaro:debug("For variable '"..i.."' NOT found current value, will set default value ("..value..")") end api.put("/globalVariables/"..i, { name = i, value = v.value, isEnum = v.isEnum, enumValues = v.enumValue }) fibaro:sleep(400) end end updateVar = true end checkGlobalVariable(varName)
  10. Witam, Ciekaw jestem, czy można napisać scenę LUA, która da odpowiedź w formie debug lub wyśle rezultat na maila odnośnie wyszukania, w których scenach znajduje się, jest użyte dane ID urządzenia. Np. chcę poszukać, w których scenach jest załączane lub wyłączane światło przed domem o ID 1101. Wiem, że jak wejdę w urządzenie o ID 1101, to zobaczę wynik dla if lub then ale okazuje się, że nie są to wszystkie sceny... Pozdrawiam, Łukasz
  11. I have moved to the HC3 and trying to work out how the LUA programming works. The HC2 programming seemed a lot more logical and I am struggling to work out how to convert some of my old routines over. One of the first routines is remotes. Setting this up by blocks wouldn't work as it looks like I'd have to setup a scene for each button for each remote. Could someone help tell me how to convert this simple program into a HC3 computable version? --[[%% properties13 sceneActivation%% globals--]]local buttonPressed = fibaro:getValue(13, "sceneActivation")if ( tonumber(buttonPressed) == 1) thenfibaro:debug("MiniMote button 1 pressed")elseif ( tonumber(buttonPressed) == 2) thenfibaro:debug("MiniMote button 2 pressed")elseif ( tonumber(buttonPressed) == 3) thenfibaro:call(4, "turnOn")fibaro:debug("MiniMote button 3 pressed - Light ON")elseif ( tonumber(buttonPressed) == 4) thenfibaro:call(4, "turnOff")fibaro:debug("MiniMote button 4 pressed - Light OFF")elseif ( tonumber(buttonPressed) == 5) thenfibaro:debug("MiniMote button 5 pressed")elseif ( tonumber(buttonPressed) == 6) thenfibaro:debug("MiniMote button 6 pressed")elseif ( tonumber(buttonPressed) == 7) thenfibaro:debug("MiniMote button 7 pressed")elseif ( tonumber(buttonPressed) == ? thenfibaro:debug("MiniMote button 8 pressed")elsefibaro:debug("No response")end Thanks
  12. I'm using a ZRC-90EU and everything works fine but I don't like the way I need to assign a action to a button (function). As you can see in the picture, in the Advanced page of the device you can assign an action to each button but you have to start from scratch every time (I can not assign an existing scene to a button).... With a block scene it is possible as well but if you want to assign 1 function/scene to one button and you know that every button has 4 options (1x,released, held and 2x) than I have to create 32 scenes.... I am new and have a HC3 so I never had HC2, HCL .... but once I've seen a LUA script that contained all button options and in the script it was possible to assign a function/scene to every possible option per button within that script so you could assign existing scenes as well. I already tried some HC2 LUA scripts and they don't work in HC3 so copying the script from HC2 isn't an option (+ I can(t find it anymore ) Does someone have a solution so I can use a LUA script or a QA to assign functions/scenes to the buttons without creating a new scene per button .... ? Thank you
  13. Yes/no and run/cancel are the only options when using block scenes. Can I use LUA to make an interactive push notification that lets me choose between 2 or more scenes to run? If so, how?
  14. response, status = api.get("/scenes") fibaro:sleep(1000) if (status == 200) then fibaro:debug("Get Scenes Successful") created = true else fibaro:debug("Failed to get Scenes " ) end for _,s1 in ipairs(response) do local s2 = api.get("/scenes/"..s1.id) if s1.name == gSceneName then fibaro:debug("SceneName: " .. s1.name .. " Scene ID: " ..s1.id) print (s1.isLua) -- ** gets correctly print (s1.lua) -- <=== RETURNS a null --- HOW do I get this print (s1.roomID) -- ** gets correctly print (s1.iconID) -- ** gets correctly print (s1.sortOrder) -- ** gets correctly SceneID= s1.id fibaro:sleep(1000) Essentially I'm trying to get the Lua code from a scene so I jason encode it so I can then populate another scene with the same lua code. I'm trying to automatically update/create Lua scenes without having to go in and edit each one individually. I can populate the "lua " field with an API PUT ... But I can't read it back. The code above returns all the other fields but not the s1.lua Any help would be greatly appreciated - thanks.
  15. Witam, Scena LUA utworzona ze sceny blokowej mi nie działa. Tak w danym moncie aktywna jest tylko jedna z dwóch scen. Scena blokowa: Utworzona z niej scena LUA: Ktoś ma pojęcie o co chodzi?
  16. Fetch data from wunderground.com, send morning and afternoon forecast to your smartphone using Fibaro app, Telegram or Pushover. Data from wunderground.com can be from a PersonalWeatherStation(PWS) or nearest LocationID(LOCID) Example of forecast and pushoptions to use. 1'st value is smartphoneID, 2'nd value is morning forecast, 3'rd is afternoon forecast, 4'th is pushoption smartphoneID_and_fcst ={{281, "06:30", "17:00", "Telegram"},{320, "08:00", "17:00", "Pushover"},{32, "08:00", "17:00", "Fibaro"}} Sending as Pushover message requires an own scene that monitors Pushover variable, read about it here: http://forum.fibaro.com/index.php?/topic/17422-tutorial-pushover-lua-vd-global-function/#entry55857 All important keys like API keys, tokens etc will be saved to variable panel. Supports many languages (EN, FR, SW, PL, NL, DE, NO, RO, CZ, GR, PT, RU (default is en)) Complete lua code (save in a new scene) --[[ %% autostart %% properties %% globals --]] ------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------- -- HOWTO -- -- 1. Create a virtual device with 9 labels and set the ID to like below, else this scene will not work. -- 2. lblTemp, lblHum, lblBar, lblWind, lblRain, lblFcst, lblStation, lblUpdate, lblNotify -- 3. Change ID of virtual device in WU.selfId -- FIRST TIME USERS NEEDS TO COPY ALL CODE TO SCENE, after version 2.5.0 it should only be neccessary to update from "UPDATE FROM HERE" text -- NOTE -- -- Scheduled time you set for forecast push is just an indication of time. -- Real time will be the hour you set + minute of when scene starts. -- Script will check server version for new updated version (default = true) -- WU WeatherData - Fetch weather data from wunderground.com. Multilanguage support! -- Inspired by GEA(steven), stevenvd, Krikroff and many other users. -- Source - forum.fibaro.com, domotique-fibaro.fr and worldwideweb -- Special thanks to petergebruers from forum.fibaro.com with demo script -- -- -- PWS = Personal Weather Station -- LOCID = Public station -- -- -- 2014-03-22 - Permissions granted from Krikroff -- 2014-03-23 - Added rain and forecast, Added FR language. -- 2014-03-23 - Language variable changed to get the translation from wunderground.com in forcast -- 2014-03-24 - Added PL language -- 2014-03-24 - Select between PWS or LOCID to download weather data -- 2015-10-23 - New source code. -- 2015-10-23 - Added NL translation -- 2015-11-16 - Added DE, FR translation. Fixed some bug in the code(hardcoded smartphoneID,inch to metric for rain value) -- 2015-11-18 - Script moved to scene instead of mainloop in VD. VD is only used as GUI. -- 2015-11-18 - Send push if script cannot fetch data -- 2015-11-26 - adjustment of code. Function from sebcbien at domotique-fibaro.fr -- 2015-11-27 - Oops! Removed forecast push by mistace. -- 2016-02-11 - send push if new version of script is out -- 2016-03-31 - Added NO translation, did cleanup the code a little bit. -- 2016-03-31 - It is now posible to use Telegram as push. Change WU.pushOption value to Telegram or Fibaro. -- - also change WU.Telegramtoken and WU.Telegramchat_id to your values -- 2016-04-01 - Fixed bug when using Telegram push, forecast must send with lowercases. -- 2016-05-26 - Added support for multiple smartphone id when sending push -- 2016-05-30 - Implemented "UPDATE SECTION" -- 2016-07-13 - Bug fixed some code for sendPush to fibaro app -- 2016-07-14 - Telegram, possible to have forecast pushed to 2 different chat_id's -- 2016-07-15 - Save all importent values to variable. -- 2016-07-15 - Added RO, GR, PT, RU and CZ translation -- 2016-07-16 - Possible to have different time for push to all smartphones -- 2016.07-17 - Bugfixes. Changed layout of JSON table for smartphoneID, time and push option -- 2016-07-18 - Bugfixes and better error reporting. Supports Pushover (works together with -- 2016-07-19 - Bugfixes again. -- 2016-07-22 - Added seconde forcast to both morning and afternoon push message. Added parse_mode for bold telegram text message -- 2016-07-24 - Added ES (Spanish) translation -- 2016-08-03 - Bugfixes (in WU.dualChat_ID part of code) WU = {} versionCheck = true -- check if new version of script exist on server WU.language = "SW"; -- EN, FR, SW, PL, NL, DE, NO, RO, CZ, GR, PT, RU, ES (default is en) ---- UPDATE FROM HERE ---- -- WU settings if not fibaro:getGlobal("WUAPI") == nil then WU.APIkey = fibaro:getGlobal("WUAPI") else -- [CHANGE THIS IF VALUES ARE NOT STORED IN VARIABLE PANEL] WU.APIkey = "14eaffxxxxxxxxxxxxxx" --Put your WU api key here end WU.PWS = "IGVLEBOR5" -- The PWS location to get data for (Personal Weather Station) WU.LOCID = "SWXX0076" -- The location ID to get data for (City location) WU.station = "PWS" -- PWS or LOCID ---- UPDATE FROM HERE ---- version = "{V3.0.5}" -- Other settings smartphoneID_and_fcst ={{281, "06:30", "21:10", "Telegram"},{32, "08:00", "16:00", "Fibaro"}} -- ID, time for morning and afternoon forecast and what push to use WU.sendPush = true -- send forecast with push -- Telegram settings -- IMPORTANT -- -- Telegramtoken needs to splitted into 2 parts. First part1 is before the ":", part2 is after the ":" if not fibaro:getGlobal("Telegramtoken1_part1") == nil then WU.Telegramtoken1_part1 = fibaro:getGlobal("Telegramtoken1_part1") else -- [CHANGE THIS IF VALUES ARE NOT STORED IN VARIABLE PANEL] Telegramtoken needs to splitted into 2 parts. First part1 is before the ":", part2 is after the ":" WU.Telegramtoken1_part1 = "187xxxxxx" -- ******** end if not fibaro:getGlobal("Telegramtoken1_part2") == nil then WU.Telegramtoken1_part2 = fibaro:getGlobal("Telegramtoken1_part2") else -- [CHANGE THIS IF VALUES ARE NOT STORED IN VARIABLE PANEL]Telegramtoken needs to splitted into 2 parts. First part1 is before the ":", part2 is after the ":" WU.Telegramtoken1_part2 = "AAHfzhTcsKloviNxxxxxxxxxxxxxxxxx" -- ******** end if not fibaro:getGlobal("Telegramchat_id1") == nil then WU.Telegramchat_id1 = fibaro:getGlobal("Telegramchat_id1") else -- [CHANGE THIS IF VALUES ARE NOT STORED IN VARIABLE PANEL] Telegramtoken chat_id 1 WU.Telegramchat_id1 = "2025xxxxx" -- ******** end -- If you want forecast to be pushed to a second phone WU.dualChat_ID = false -- set to true if more then 1 smartphone that should have forecast pushed. if not fibaro:getGlobal("Telegramtoken2_part1") == nil then WU.Telegramtoken2_part1 = fibaro:getGlobal("Telegramtoken2_part1") else -- [CHANGE THIS IF VALUES ARE NOT STORED IN VARIABLE PANEL] Telegramtoken needs to splitted into 2 parts. First part1 is before the ":", part2 is after the ":" WU.Telegramtoken2_part1 = "187xxxxxx" end if not fibaro:getGlobal("Telegramtoken2_part2") == nil then WU.Telegramtoken2_part2 = fibaro:getGlobal("Telegramtoken2_part2") else -- [CHANGE THIS IF VALUES ARE NOT STORED IN VARIABLE PANEL] Telegramtoken needs to splitted into 2 parts. First part1 is before the ":", part2 is after the ":" WU.Telegramtoken2_part2 = "AAHfzhTcsKloviNxxxxxxxxxxxxxxxxx" -- ******** end if not fibaro:getGlobal("Telegramchat_id2") == nil then WU.Telegramchat_id2 = fibaro:getGlobal("Telegramchat_id2") else -- [CHANGE THIS IF VALUES ARE NOT STORED IN VARIABLE PANEL]Telegramtoken chat_id 2 WU.Telegramchat_id2 = "2025xxxxx" -- ******** end updateEvery = 5 -- get data every xx minutes WU.selfId = 150 -- ID of virtual device WU.translation = {true} WU.currentDate = os.date("*t"); DoNotRecheckBefore = os.time() WU.scheduler = os.time()+60*updateEvery WU.translation["EN"] = { Exiting_loop_push = "Exiting_loop_push", Push_forecast = "Push forecast", Temperature = "Temperature", Humidity = "Humidity", Pressure = "Pressure", Wind = "Wind", Rain = "Rain", Forecast = "Forecast", Station = "Station", Fetched = "Fetched", Data_processed = "Data processed", Update_interval = "Next update will be in (min)", No_data_fetched = "No data fetched", new_version = "New version of WUWeather.lua script is out! ", script_url = "http://jonnylarsson.se/JL/", NO_STATIONID_FOUND = "No stationID found", NO_DATA_FOUND = "No data found" } WU.translation["FR"] = { Exiting_loop_push = "Exiting_loop_push", Push_forecast = "Push prévisions", Temperature = "Température", Humidity = "Humidité", Pressure = "Pression", Wind = "Vent", Rain = "Pluie", Forecast = "Prévisions", Station = "Station", Fetched = "Reçu", Data_processed = "Données Analysées", Update_interval = "Prochaine update prévue dans (min)", No_data_fetched = "Pas de données reçues", new_version = "New version of WUWeather.lua script is out! ", script_url = "http://jonnylarsson.se/JL/", NO_STATIONID_FOUND = "StationID non trouvée", NO_DATA_FOUND = "Pas de données disponibles" } WU.translation["SW"] = { Exiting_loop_push = "Push loop avslutad", Push_forecast = "Push forecast", Temperature = "Temperatur", Humidity = "Fuktighet", Pressure = "Barometer", Wind = "Vind", Rain = "Regn", Forecast = "Prognos", Station = "Station", Fetched = "Hämtat", Data_processed = "All data processat", new_version = "New version of WUWeather.lua script is out! ", script_url = "http://jonnylarsson.se/JL/", Update_interval = "Nästa uppdatering är om (min)", No_data_fetched = "Inget data hämtat", NO_STATIONID_FOUND = "StationID ej funnet", NO_DATA_FOUND = "Ingen data hos WU" } WU.translation["PL"] = { Exiting_loop_push = "Kończę pętlę PUSH", Push_forecast = "PUSH prognozy", Temperature = "Temperatura", Humidity = "Wilgotność", Pressure = "Ciśnienie", Wind = "Wiatr", Rain = "Deszcz", Forecast = "Prognoza", Station = "Stacja", Fetched = "Nie pobrano danych", Data_processed = "Dane przetworzone", new_version = "Dostępna nowa wersja skryptu WUWeather.lua ! ", script_url = "http://jonnylarsson.se/JL/", No_data_fetched = "Brak danych", Update_interval = "Następna aktualizacja za (min)", NO_STATIONID_FOUND = "Nie znaleziono ID Stacji", NO_DATA_FOUND = "Brak danych" } WU.translation["NL"] = { Exiting_loop_push = "Exiting_loop_push", Push_forecast = "Push verwachting", Temperature = "Temperatuur", Humidity = "Vochtigheid", Pressure = "Druk", Wind = "Wind", Rain = "Regen", Forecast = "Verwachting", Station = "Weerstation", Fetched = "Ontvangen", Data_processed = "Gegevens verwerkt", new_version = "New version of WUWeather.lua script is out! ", script_url = "http://jonnylarsson.se/JL/", Update_interval = "Volgende update in (min)", No_data_fetched = "Geen gegevens ontvangen", NO_STATIONID_FOUND = "Geen stationID gevonden", NO_DATA_FOUND = "Geen gegevens gevonden" } WU.translation["DE"] = { Exiting_loop_push = "Exiting_loop_push", Push_forecast = "Push vorhersage", Temperature = "Temperatur", Humidity = "Luftfeuchtigkeit", Pressure = "Luftdruck", Wind = "Wind", Rain = "Regen", Forecast = "Vorhersage", Station = "Station", Fetched = "Abgerufen", Data_processed = "Daten verarbeitet", new_version = "New version of WUWeather.lua script is out! ", script_url = "http://jonnylarsson.se/JL/", No_data_fetched = "Keine Daten abgerufen", Update_interval = "Das nächste Update in (min)", NO_STATIONID_FOUND = "Keine stationID gefunden", NO_DATA_FOUND = "Keine Daten gefunden" } WU.translation["NO"] = { Exiting_loop_push = "Exiting_loop_push", Push_forecast = "Push værmelding", Temperature = "Temperatur", Humidity = "Fuktighet", Pressure = "Barometer", Wind = "Vind", Rain = "Regn", Forecast = "Prognose", Station = "Stasjon", Fetched = "Hentet", Data_processed = "All data prosessert", Update_interval = "Neste oppdatering om (min)", No_data_fetched = "Ingen data hentet", NO_STATIONID_FOUND = "StasjonID ikke funnet", NO_DATA_FOUND = "Ingen data hos WU" } WU.translation["CZ"] = { Exiting_loop_push = "Exiting_loop_push", Push_forecast = "Push forecast", Temperature = "Teplota", Humidity = "Vlhkost", Pressure = "(Atmosférický) Tlak", Wind = "Vítr", Rain = "Déšť ", Forecast = "Předpověď", Station = "Stanice", Fetched = "Předána", Data_processed = "Data_zpracována", Update_interval = "Časová_prodleva_mezi_aktualizacemi", No_data_fetched = "Data_nebyla_předána", NO_STATIONID_FOUND = "Stanice_nenalezena", NO_DATA_FOUND = "Data_Nenalezena" } WU.translation["RO"] = { Exiting_loop_push = "Exiting_loop_push", Push_forecast = "Prognoza apăsare", Temperature = "Temperatura", Humidity = "Umiditate", Pressure = "Presiune", Wind = "Vant", Rain = "Ploaie", Forecast = "Prognoza", Station = "Statie", Fetched = "Preluat", Data_processed = "Datele prelucrate", Update_interval = "Urmatorul update va fi in (min)", No_data_fetched = "Nu exista date preluate", NO_STATIONID_FOUND = "Nu a fost gasit stationID ", NO_DATA_FOUND = "Datele nu au fost gasite" } WU.translation["GR"] = { Exiting_loop_push = "Exiting_loop_push", Push_forecast = "Πρόγνωση push", Temperature = "Θερμοκρασία", Humidity = "Υγρασία", Pressure = "Πίεση", Wind = "Άνεμος", Rain = "Βροχή", Forecast = "Πρόβλεψη", Station = "Σταθμός", Fetched = "Παραλήφθηκαν", Data_processed = "Επεξεργασμένα δεδομένα", Update_interval = "Η επόμενη ενημέρωση θα γίνει σε (min)", No_data_fetched = "Δεν παραλήφθηκαν δεδομένα", NO_STATIONID_FOUND = "Δεν βρέθηκε το Station ID", NO_DATA_FOUND = "Δεν βρέθηκαν δεδομένα" } WU.translation["PT"] = { Exiting_loop_push = "Exiting_loop_push", Push_forecast = "Previsão do impulso", Temperature = "Temperatura", Humidity = "Humidade", Pressure = "Pressão", Wind = "Vento", Rain = "Chuva", Forecast = "Previsão", Station = "Estação", Fetched = "Procurar", Data_processed = "Dados processados", Update_interval = "Próxima atualização será em (min)", No_data_fetched = "Não foram encontrados dados", NO_STATIONID_FOUND = "Não foi detetada nenhuma estação", NO_DATA_FOUND = "Não foram encontrados dados" } WU.translation["RU"] = { Exiting_loop_push = "Exiting_loop_push", Push_forecast = "Прогноз Нажмите", Temperature = "Температура", Humidity = "Влажность", Pressure = "Давление", Wind = "Ветер", Rain = "Дождь", Forecast = "Прогноз", Station = "Станция", Fetched = "Получено", Data_processed = "Данные обработаны", Update_interval = "Следующее обновление через (мин.)", No_data_fetched = "Данные не получены", NO_STATIONID_FOUND = "Данная станция не найдена", NO_DATA_FOUND = "Данные не найдены" } WU.translation["ES"] = { Exiting_loop_push = "Exiting_loop_push", Push_forecast = "Pronóstico enviado", Temperature = "Temperatura", Humidity = "Humedad", Pressure = "Presión", Wind = "Viento", Rain = "Precipitaciones", Forecast = "Pronóstico", Station = "Estación", Fetched = "Extraído", Data_processed = "Datos procesados", Update_interval = "La próxima actualización será en (min)", No_data_fetched = "Ningún dato extraído", new_version = "Nueva versión del script WUWeather.lua disponible! ", script_url = "http://jonnylarsson.se/JL/", NO_STATIONID_FOUND = "No se ha encontrado la stationID", NO_DATA_FOUND = "Datos no encontrados" } if WU.station == "LOCID" then locationID = WU.LOCID elseif WU.station == "PWS" then locationID = WU.PWS end Debug = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, message, "span")); end function log(str) if debug then fibaro:debug(str); end end function errorlog(str) fibaro:debug("<font color='red'>"..str.."</font>") end function Telegrambot(msg) -- Read settings from variable WU.Telegramtoken1 = fibaro:getGlobal("Telegramtoken1_part1")..":"..fibaro:getGlobal("Telegramtoken1_part2") WU.Telegramchat_id1 = fibaro:getGlobal("Telegramchat_id1") WU.Telegramurl1 = "https://api.telegram.org/bot"..WU.Telegramtoken1.."/sendMessage?chat_id="..WU.Telegramchat_id1.."&text=" if WU.dualChat_ID then WU.Telegramtoken2 = fibaro:getGlobal("Telegramtoken2_part1")..":"..fibaro:getGlobal("Telegramtoken2_part2") WU.Telegramchat_id2 = fibaro:getGlobal("Telegramchat_id2") WU.Telegramurl2 = "https://api.telegram.org/bot"..WU.Telegramtoken2.."/sendMessage?chat_id="..WU.Telegramchat_id2.."&text=" end -- End read settings from variable local selfhttp = net.HTTPClient({timeout=2000}) url = WU.Telegramurl1 .. msg selfhttp:request(url, { options={ headers = selfhttp.controlHeaders, data = requestBody, method = 'GET' }, success = function(status) local result = json.decode(status.data); if result.ok == true then Debug("grey", "Sucessfully sent message to Telegram Bot...") else --errorlog("failed"); print(status.data); end end, error = function(error) --errorlog("ERROR") Debug("red", error) end }) if WU.dualChat_ID then url2 = WU.Telegramurl2 .. msg selfhttp:request(url2, { options={ headers = selfhttp.controlHeaders, data = requestBody, method = 'GET' }, success = function(status) local result = json.decode(status.data); if result.ok == true then Debug("grey", "Sucessfully sent message to Telegram Bot...") else --errorlog("failed"); print(status.data); end end, error = function(error) --errorlog("ERROR") Debug("red", error) end }) end end function versionChecker() local function getMethod(requestUrl, successCallback, errorCallback) local http = net.HTTPClient() http:request(requestUrl, { options = { method = 'GET', headers = { }, }, success = successCallback, error = errorCallback }) end content = "WUWeather.lua" local url = 'http://jonnylarsson.se/JL/'..content getMethod(url, function(resp) s = resp.data serverVersion = string.match(s, "{V(.-)}"); scriptVersion = string.match(version, "{V(.-)}"); if serverVersion > scriptVersion then Debug("grey", "Checking script version...") Debug("yellow", "There is a new version out! "..'<a href="http://jonnylarsson.se/JL/WUWeather.lua" target="_blank" style="display:inline;color:Cyan">Get it!</a>') if WU.sendPush then for k,smartphoneID_and_fcst in ipairs(smartphoneID_and_fcst) do if smartphoneID_and_fcst[4] == "Fibaro" then fibaro:call(smartphoneID_and_fcst[1] , "sendPush", WU.translation[WU.language]["new_version"].." "..WU.translation[WU.language]["script_url"]) elseif smartphoneID_and_fcst[4] == "Telegram" then Telegrambot(WU.translation[WU.language]["new_version"].." "..WU.translation[WU.language]["script_url"]) end end end end end, function(err) print('error' .. err) end ) end local http = net.HTTPClient() local function errorWU(err) if WU.pushOption == "Fibaro" then fibaro:call(WU.smartphoneID , "sendPush", "[WUWeather scene]. Error: "..err ) elseif WU.pushOption == "Telegram" then Telegrambot("[WUWeather scene]. Error: "..err ) end Debug( "red", "[HTTPClient:request]. Error: "..err ); end local function sendPopup() -- variable containing path of Motion Sensor’s icon local imgUrl = popupIMG -- pop-up call HomeCenter.PopupService.publish({ -- title (required) title = 'Weather forecast', -- subtitle(optional), e.g. time and date of the pop-up call subtitle = os.date("%I:%M:%S %p | %B %d, %Y"), -- content header (optional) contentTitle = 'Forecast from WU Weather', -- content (required) contentBody = fcastday.." - "..fcast, -- notification image (assigned from the variable) img = imgUrl, -- type of the pop-up type = 'Info', }) end function createGlobalIfNotExists(varName, defaultValue) if (fibaro:getGlobal(varName) == nil) then Debug("cyan", "Creating the variable: "..varName.." with value: "..defaultValue) newVar = {} newVar.name = varName newVar.value = defaultValue local http = net.HTTPClient() http:request("http://127.0.0.1:11111/api/globalVariables", { options = { method = 'POST', data = json.encode(newVar)}}) end end local function processWU(response) http:request("http://api.wunderground.com/api/"..WU.APIkey.."/conditions/forecast/lang:"..WU.language.."/q/"..WU.station..":"..locationID..".json",{ options = {method = 'GET'}, success = processWU, error = errorWU }) Debug( "green", "Now downloading data from www.wunderground.com"); if response then -- the first time you enter the loop, this will be nil jsonTable = json.decode(response.data) if jsonTable.response.error ~= nil then Debug( "red", jsonTable.response.error.description) else jsonTable = json.decode(response.data) WU.now = os.date("%H:%M") stationID = jsonTable.current_observation.station_id city = jsonTable.current_observation.observation_location.city humidity = jsonTable.current_observation.relative_humidity temperature = jsonTable.current_observation.temp_c pression = jsonTable.current_observation.pressure_mb wind = jsonTable.current_observation.wind_kph rain = jsonTable.current_observation.precip_today_metric icon = jsonTable.current_observation.icon weathericon = jsonTable.current_observation.icon_url fcstday1 = jsonTable.forecast.txt_forecast.forecastday[1].title fcst1 = jsonTable.forecast.txt_forecast.forecastday[1].fcttext_metric fcst1icon = jsonTable.forecast.txt_forecast.forecastday[1].icon_url fcstday2 = jsonTable.forecast.txt_forecast.forecastday[2].title fcst2 = jsonTable.forecast.txt_forecast.forecastday[2].fcttext_metric fcst2icon = jsonTable.forecast.txt_forecast.forecastday[2].icon_url fcstday3 = jsonTable.forecast.txt_forecast.forecastday[3].title fcst3 = jsonTable.forecast.txt_forecast.forecastday[3].fcttext_metric fcst3icon = jsonTable.forecast.txt_forecast.forecastday[3].icon_url fcst1_mobile = jsonTable.forecast.simpleforecast.forecastday[1].conditions fcst2_mobile = jsonTable.forecast.simpleforecast.forecastday[2].conditions if (stationID ~= nil) then fibaro:call(WU.selfId , "setProperty", "ui.lblStation.value", locationID); fibaro:call(WU.selfId , "setProperty", "ui.lblCity.value", city); fibaro:call(WU.selfId , "setProperty", "ui.lblTemp.value", WU.translation[WU.language]["Temperature"].." "..temperature.." °C"); fibaro:call(WU.selfId , "setProperty", "ui.lblHum.value", WU.translation[WU.language]["Humidity"].." "..humidity); fibaro:call(WU.selfId , "setProperty", "ui.lblBar.value", WU.translation[WU.language]["Pressure"].." "..pression.." mb"); fibaro:call(WU.selfId , "setProperty", "ui.lblWind.value", WU.translation[WU.language]["Wind"].." "..wind.." km/h"); fibaro:call(WU.selfId , "setProperty", "ui.lblRain.value", WU.translation[WU.language]["Rain"].." "..rain.." mm"); if (WU.now >= "03:00" and WU.now <= "15:59") then fibaro:call(WU.selfId , "setProperty", "ui.lblFcst.value",WU.translation[WU.language]["Forecast"].." "..fcstday1.." - "..fcst1_mobile); --fibaro:call(WU.selfId , "setProperty", "ui.lblIcon.value","<img src=http://jonnylarsson.se/JL/png/"..icon..".png>"); elseif (WU.now >= "16:00" and WU.now <= "23:59") then --fibaro:call(WU.selfId , "setProperty", "ui.lblIcon.value","<img src=http://jonnylarsson.se/JL/png/nt_"..icon..".png>"); fibaro:call(WU.selfId , "setProperty", "ui.lblFcst.value", WU.translation[WU.language]["Forecast"].." "..fcstday2.." - "..fcst2_mobile); end if WU.sendPush then for k,smartphoneID_and_fcst in ipairs(smartphoneID_and_fcst) do if (os.date("%H:%M") == smartphoneID_and_fcst[2]) then if versionCheck then versionChecker() end if smartphoneID_and_fcst[4] == "Fibaro" then fcastday = fcstday1 fcast = fcst1 fibaro:call(smartphoneID_and_fcst[1], "sendPush", fcstday1.." - "..fcst1) popupIMG = "http://jonnylarsson.se/JL/png/"..icon..".png" sendPopup() Debug("grey", "Sucessfully sent push message to "..smartphoneID_and_fcst[1]) elseif smartphoneID_and_fcst[4] == "Telegram" then Telegrambot(fcstday1.."%0A"..string.lower(fcst1).."%0A"..fcst1icon.."%0A".."%0A"..fcstday2.."%0A"..string.lower(fcst2)) elseif smartphoneID_and_fcst[4] == "Pushover" then fibaro:setGlobal("pushoverBody", fcstday1.." - "..string.lower(fcst1).." - "..fcst1icon) end end end for k,smartphoneID_and_fcst in ipairs(smartphoneID_and_fcst) do if (os.date("%H:%M") == smartphoneID_and_fcst[3]) then if smartphoneID_and_fcst[4] == "Fibaro" then fcastday = fcstday2 fcast = fcst2 fibaro:call(smartphoneID_and_fcst[1] , "sendPush", fcstday2.."\n"..string.lower(fcst2).."\n"..fcst2icon.."\n".."\n"..fcstday3.."\n"..string.lower(fcst3)) popupIMG = "http://jonnylarsson.se/JL/png/nt_"..icon..".png" sendPopup() Debug("grey", "Sucessfully sent push message to "..smartphoneID_and_fcst[1]) elseif smartphoneID_and_fcst[4] == "Telegram" then Telegrambot(fcstday2.."%0A"..string.lower(fcst2).."%0A"..fcst2icon.."%0A".."%0A"..fcstday3.."%0A"..string.lower(fcst3)) elseif smartphoneID_and_fcst[4] == "Pushover" then fibaro:setGlobal("pushoverBody", fcstday2.."\n"..string.lower(fcst2).."\n"..fcst2icon.."\n".."\n"..fcstday3.."\n"..string.lower(fcst3)) end end end end if WU.sendPush then fibaro:call(WU.selfId , "setProperty", "ui.lblNotify.value", WU.translation[WU.language]["Push_forecast"].." = true"); else fibaro:call(WU.selfId , "setProperty", "ui.lblNotify.value",WU.translation[WU.language]["Push_forecast"].." = false"); end WU.scheduler = os.time()+updateEvery*60 fibaro:call(WU.selfId, "setProperty", "ui.lblUpdate.value", os.date("%c")); fibaro:debug(WU.translation[WU.language]["Data_processed"]) fibaro:debug(WU.translation[WU.language]["Update_interval"].." "..updateEvery) else fibaro:debug(WU.translation[WU.language]["NO_STATIONID_FOUND"]) end end sleepAndcheck = 0 while sleepAndcheck <= 20*updateEvery do fibaro:sleep(3000) sleepAndcheck = sleepAndcheck+1 for k,smartphoneID_and_fcst in ipairs(smartphoneID_and_fcst) do if (DoNotRecheckBefore <= os.time()) and ((WU.scheduler == os.time) or (os.date("%H:%M") == smartphoneID_and_fcst[2]) or (os.date("%H:%M") == smartphoneID_and_fcst[3])) then fibaro:debug(WU.translation[WU.language]["Push_forecast"]) Debug("orange", WU.translation[WU.language]["Exiting_loop_push"]); DoNotRecheckBefore = os.time()+60 sleepAndcheck = 20*updateEvery end end end end end Debug( "orange", "WU Weather - LUA Scripting by Jonny Larsson 2015/2016" ); Debug( "orange", "Version: "..version); if versionCheck then versionChecker() end createGlobalIfNotExists("WUAPI", WU.APIkey) createGlobalIfNotExists("Telegramtoken1_part1", WU.Telegramtoken1_part1) createGlobalIfNotExists("Telegramtoken1_part2", WU.Telegramtoken1_part2) createGlobalIfNotExists("Telegramchat_id1", WU.Telegramchat_id1) if WU.dualChat_ID then createGlobalIfNotExists("Telegramtoken2_part1", WU.Telegramtoken2_part1) createGlobalIfNotExists("Telegramtoken2_part2", WU.Telegramtoken2_part2) createGlobalIfNotExists("Telegramchat_id2", WU.Telegramchat_id2) end for k,smartphoneID_and_fcst in ipairs(smartphoneID_and_fcst) do Debug( "yellow", "Morning forecast push will be for ID: "..smartphoneID_and_fcst[1].." @ "..smartphoneID_and_fcst[2].." with "..smartphoneID_and_fcst[4]); Debug( "yellow", "Afternoon forecast push will be for ID: "..smartphoneID_and_fcst[1].." @ "..smartphoneID_and_fcst[3].." with "..smartphoneID_and_fcst[4]); end processWU() --this starts an endless loop, until an error occurs ---- END OF UPDATE ----
  17. Hi all Is there a fibaro killscene and startscene command similar to hc2? Thanks
  18. Dear All, I'm confused to run scene with or without "while true do" cycle to use scene all triggered command change. I have the following easy code without "while true do" to change the airfresh working status if the alarm system is on or off. Work without an problem, if the alarm system status ( thrue smart implant input ) is changed the wall plug of the airfresh also changed Here is the LUA code: --[[ %% autostart %% properties 34 value %% events %% globals --]] local alarm local airfreshId = 55; local airfreshStatus function airfresh() alarm = tonumber(fibaro:getValue(34, 'value')); airfreshStatus = tonumber(fibaro:getValue(airfreshId, 'value')); if ( alarm == 0 and airfreshStatus == 0 ) then fibaro:call(airfreshId, "turnOn"); elseif ( alarm == 1 and airfreshStatus == 1 ) then fibaro:call(airfreshId, "turnOff"); end; end; -- Main program airfresh(); And here is the similar LUA code when I need to switch on or off the bathroom electrical radiator heating. If I use this LUA code without "while true do" cycle and I change the termostat adjustment no any action happened. If I use the same code with "while true do" cycle this work perfect. --[[ %% autostart %% properties 28 value 29 value 281 value 272 value %% events %% globals --]] local thermostat -- id:28 radiator thermosztat local roomtemp -- id:29 room temperature local radiatorheatId = 54; -- id:54 radiator heating local heatingwater -- id:281 boiler heating water temp local heatingwaterpump -- id:272 heating water pump local tempswitch = true; function radiator() thermostat = tonumber(fibaro:getValue(28, 'value')); roomtemp = tonumber(fibaro:getValue(29, 'value')); heatingwater = tonumber(fibaro:getValue(281, "value")); heatingwaterpump = tonumber(fibaro:getValue(272, "value")); if ( (roomtemp - thermostat) >= 0 ) then tempswitch = false; else tempswitch = true; end; if ( ( tempswitch == true and heatingwater < 30 and heatingwaterpump == 0 ) ) then fibaro:call(radiatorheatId, "turnOn"); else fibaro:call(radiatorheatId, "turnOff"); end; end; -- Main program while true do radiator(); fibaro:sleep(60000); -- Wait 1 minute end; Can you please advise why I need to run while true do cycle in the 2nd program, if the 1st program run without this cycle perfect ? Thank you
  19. Hello, I'm interested to learn more about scripting to automate the home with HC3. Which "languages" would you recommend to learn? I know there is documentation about LUA on manuals.fibaro.com, but I don't have any "programming skills" yet. So that a step to far for me at the moment. I also found this app https://getmimo.com/ (not sponsored content), maybe this is something easy to understand the basics. Let me know if you have any other suggestion!
  20. Hi guys I ask for Lua scene to control the lights automatically into star's by motion detection bt problem not for that The problem is I want that scene work between 6 pm to 7am and if motion detection don't detect any move then turn off light after 20 minutes Any one hare can help my to do that And Thanks for every one
  21. I use the following code and it gives me nicely a table of devices when applied in a scene, however when I apply it in Main of a VD, it returns null. Anyone a suggestion ? local data = { args = { 1 }, filters = { { filter = "hasProperty", value = { "power" } } } } local devices = fibaro:callGroupAction("deviceID", data)
  22. Hi Everyone Smart Message Hub v1.2 (SMsgH v1.2) is now available. This release includes fixes tor three bugs that had various impacts and support for international characters. Thanks to @Sankotronic and @szmyk for locating the faults and extra feature for international characters "FIRST TIME USERS" - Please read below and follow the instructions laid out for first time users UPGRADING FROM 1.1b to 1.2 - Please use this Post - if you are a current user and may wish to consider avail of the fixes or extra feature This scene enables a user to send a message from either a scene or a virtual device to a number of notification and TTS services with a startScene call fibaro:startScene(682, {message, target}) -- Using ID of scene fibaro:startScene(SMsgH, {message, target}) -- Using HomeTable reference The scene also enables messages to be re-routed or queued depending on whether the house is set to Away mode, Sleep mode or if internet is not available. (See below for more details) A demo VD {v1.1} is also available to help demonstrate the scene features. SCENE FEATURES Smart Configuration options include the ability to re-route and/or queue all messages under certain conditions. (Internet unavailability , home occupancy mode presentState = Away) Messages with international characters are also supported Notification messages can be redirected to Home Center 2 Popup notification service if the internet is offline or unavailable Notification messages can be queued if the internet is offline or unavailable. All Messages in the queue will be released as one combined message once the internet come s back online. All TTS messages can be redirected to Home Center 2 Popup notification service if the internet is unavailable or offline or if the sonosAPI is offline if this solution is being leveraged All TTS messages can be queued if presentsState = Away. All TTS messages in the queue will be announced once presentsState = Home Simplified the message invocation method to startScene Invoked via startScene(SMsgHid, {message string} (SMsgHid is the id of the SMsgH scene when it is saved to your system ) See below for examples messageHub global no longer required (please delete when you have migrated all your scenes to using 1.1) Added support for sleepState (no TTS messages if set to Sleep) Additional support for HC2 popup notifications Types (Critical, Successs, Info, Warning) Images (use full url) Buttons (represented as a table) - See @Sankotronic [TUTORIAL] on popup notifications to see how to format Added ability to delay unloading of TTS messages by predefined time in seconds Added support for custom language in for TTS and Notify redirects default Popup title and subtitle Minor bug fixing and code cleaning Configuration options also include a default message notification target, title, subtitle and volume but all these can also be specified as part of the message invocation. There are three levels of debug verbosity. In normal mode there is a minimal amount of information displayed as the scene is triggered. The two other modes allow for much more expressive displaying of scene variables as well as configuration settings if enabled deBgVar is enabled in the scene so you can see the interactions- it can be disabled in normal running mode SCENE MESSAGING OPTIONS The supported services in this release include the following (supported in 1.0 & 1.1) Pushover Notifications -------------------------------------------------------> [TUTORIAL] on creating Pushover account and set up allinone ( jompa68 scene) Telegram messages hc2email (Home Center 2 email service) hc2push (Home Center 2 push notification service) hc2popup (Home Center 2 Popup Notification service) -------------------> [TUTORIAL} Popup Noification and Custom Inages Sonos-api based TTS --------------------------------------------------------> [TUTORIAL] Setting up and using Alternative Sonos VD using node-sonos-api Sonos VD Remote based TTS -----------------------------------------------> Discussion on Sonos Remote V1.0.0 beta I have also included a Companion Demo VD. The virtual device will allow the user to demonstrate the scenes queuing/unloading capabilities. CAUTION: The companion VD in demo mode can adjust the presentState and sleepState globals and will cause any other scene you may have with this as a trigger to execute A simplified version of the LAN Monitor VD called the WWWAPI Monitor will monitor just the sonos-api if desired and does not any in-built notification options like the LAN Monitor VD 2.5.Smart Message Hub users should use either the WWWAPI Monitor or LAN Monitor 2.6 Special thanks extended to @Sankotronic @petergebruers, @jompa68 and @szmyk for their contributions leading to 1.2 Once the scene configuration is complete I would recommend running the demonstration virtual device. This will give you a better understanding of the options and features as well providing some sample messages that you can run. Ideas for subsequent revisions are always welcome _f RELEASE CHANGELOG v1.0 - First release (march 4th 2017) v1.1 - Second release (march 17th 2017) v1.2 - Third Release (june 24th 2017) ================================================ FIRST TIME USERS - INSTALLATION & CONFIGURATION ================================================ The code is available in both lua and txt format below Paste code into scene and run - All global variables will be automatically created (Please do not adjust global triggers in scene header) Configure options as required at top of scene (line 100 onwards) Configure enable smart redirects Configure HC2 email settings, HC2 push settings and TTS services Configure default message titles, subtitles and volume Configuration notification settings, tokens, etc Enable/Disable increased debug and config verbosity for troubleshooting MESSAGE INVOCATION This message hub can be called from either a scene or a virtual device using a startScene call. The following is an example Sample invocations are included below Please see the section on Message Invocation lower down in this post of you wish to send messages with international characters local message = "Warning: Utility room freezer temperature is 10 degrees" local target = "hc2popup" local volume = "25" -- (can be left as "" if not TTS message) local title = "new alert title" local subtitle = "new subtitle" local popType = "Critcal" local popImg = "" local popButtons = "" fibaro:startScene(IDofSMsgHscene, {message, target, volume, title, subtitle, popType, popImg, popButtons}) Note: Replace IDofSMsgHscene with HomeTable reference of numerical ID of the SMsgH scene when it is installed on your system You need to include all parameters up to last one you populate. For example, if you want to specify a subtitle, you need to include message, target, volume and title as well. You CANNOT leave out a parameter in the call. Leave as "" if not used/required and default will be invoked. **USER CONFIGURATIONS & SETTINGS** OPTIONS FOR SMART RE-ROUTING OF MESSAGES The following four options can be set to true or false depending on what features you wish to enable. local tts2popup = "true" Set to true to enables re-routing of sonos TTS messages from either the Sonos VD or the sonos-api solution to HC2 notification Popup if the sonos-http-api or Internet is unavailable/offline to your local LAN local tts2queue = "true" Enable to Silence TTS announcement in sleepState, TTS announcements are NOT queued, they are simply discarded local tts2sleep = "true" Enable a Delay before TTS announcements are unloaded (seconds). Leave as "" for no delay local ttsUnloadDelay = "" -- seconds Set to true to enable Sonos TTS messages to queue when presentState = 'Away'. When presentState is set to Home it triggers the scene to automatically unload all the messages in the TTS queue to the default player that has been named in the configuration section local notify2popup = "true" Set to true to enable all notifications to re-route to HC2Popup notifications if the internet is unavailable/offline to your local LAN local notify2queue = "true" Set to true to enable all notifications to queue when presentState= 'Away'. When presentState is set to Home it triggers the scene automatically and unloads the message in the notifications queue to the default notification service that has been named in the configuration section below The scene as provided has all these 4 options set to true and this is the recommended setup if you wish to leverage full functionality and the demo OPTIONS TO MONITOR THE INTERNET STATUS To achieve the most benefit from this scene the internet and sonos-api should be dynamically monitored. Dynamically monitoring the internet will enable messages (TTS and notifications) to be queued while the internet if offline. Queued message can also be sent as hc2 pop notifications on the local LAN. The preferred monitoring option is named here. The example below is setup to use the LAN Monitor VD 2.5 local ipMonitor = "networkTable" There are 3 options available: Select 'manual' if you wish internet and sonos-api to be permanently set to online. Please note that this option does NOT enable queuing of notification messages. Select 'networkTable' to leverage the LAN Monitor VD 2.5, Select 'wwwapiTable' to leverage the new simplified WWWAPI Monitor 1.0 HC2 EMAIL CONFIGURATION hc2emailUsers = {["su"]="2", ["frank"]="1564", ["sylvia"]="1565"} List all users that you want to be able send messages to. The user id's are located from the HC2. Select Configuration, then Access Control to see the current users. HC2 PUSH CONFIGURATION hc2pushUsers = {["DadiPh"]="563", ["MumiPh"]="155", ["DogiPa"]="175"} List all users that you want to be able send push messages to. The mobile devices ID can be found by going to http://<HC_IP>/docs/ and looking under iosDevices section. local defhc2pushUser = "563" -- identify default hc2push user Select a default user from this list and this is used if there is no user specified as part of the message invocation. TTS PREFERENCES Select your TTS preference. If you use the sonos-http-api solution please enter API. If you use the Sonos VD Remote solution please enter REM. local ttsMethod = "API" Default volume for TTS announcements local defTTSvolume = "12" This allows you to select a default volume and this aplies to both the API and REM sonos solutions. This volume can be changed by including a different volume in the message invocation SONOS-API PREFERENCES Configure this section if you have selected API in the above section. APIplayers = {"hallway","kitchen","bed5_office","landing"} List all the sonos players you want to send TTS messages to. The zone/player names must match exactly what is on your sonos native application local defAPIzone = "bed5_office" The default player/zone selected is used to unload the TTS message when presentState = Home. The default player must be included in the overall players list above local APIipaddress = "192.168.1.89" local APIport = "5005" The ip address and port are of the device that is hosting the sonos-api local defAPIlanguage = "Amy" The final item here is the language or voice code for the respective TTS service. Thisoculd be something like en-gb for google or Amy for AWS Polly SONOS REMOTE VD PREFERENCES Configure this section if you have selected REM in the above section. REMplayers = { ["kitchen"] = {vd="295", btn="28"}, ["hall"] = {vd="765", btn="27"}, } List all the sonos player virtual devices you want to send TTS messages to. The virtual device id's and process button id’s much match exactly what is on your HC2 for each virtual device. Please note the process button may differ if you have modified the standard virtual device. local defREMvd = "hall" -- Id of player vd for unloading queue The default player/zone is user to unload the TTS message when presentState = Home. This zone must be included in the overall REMplayers table and the name must match exactly. local defREMlanguage = "en-gb" The final item in this section is the language or voice code for the respective TTS service DEFAULT TITLES AND SUBTITLES This scene has default titles and subtitles and these are used if no title or subtitle is included in the message invocation. local defTitle = "Alert Title" local defSubtitle = "Alert Subtitle" Adjust the default titles and subtitles as you require. Note: Subtitles are only used for PopUp Notifications NOTIFICATION SERVICES There is a broad range of notification services available to use. Some are native to the home center and others are third party services provided by external vendors. local defmessageSvc = "pushover" Select the default notification service that you wish to use. This default service will be used if no service is invoked in the message and is also used as the service to unload the queued messages when presentState = Home PUSHOVER CONFIGURATION This service is provided by pushover.org. You will need to register with them and obtain a token and user key. local POtkn = "" local POusr = "" Once registered you will need to select the devices that you wish to send the pushover notifications to. Once they are added to your pushover account you will need to add their details below. Currently there is only one setting for device which means that all messages to pushover will be send to the devices named in this list. Priority can be set at ) like I have below local POdevice = "Dad_Ph, Kit_iPad, Landing iPad" local POpriority = "0" TELEGRAM CONFIGURATION This service is provided by telegram.org. You will need to register with them and obtain a token and a chat ID local TGtoken = "" local TGchatID = "" DEBUG VERBOSITY OPTIONS This allows a number of levels of debug verbosity. There is a minimal amount of debug window responses running in normal mode but these two capabilities allow the user to observe extra information in the debug window when the scene is running. local deBugVar = true -- deBugVar will display the scene variables local deBugCfg = false -- deBugCfg will display the scene configaution that you have set OCCUPANCY/PRESENCE STATE I am also supporting the presentState as it is defined by Sankotronic and others. -- "PresentState" is predefined global value that determines if you are at home -- or away. This variable value is set by other scene or VD. Enter name of your -- global variable between "" if called different or leave as it is local presentState = "PresentState"; -- Enter corresponding values that you use for presence in your language. Change -- the one in quotes or leave as it is local presentStateMapping = {Home="Home", Away="Away"}; HOMETABLE There is also support for the hometable solution. Hometable is a approach to storing all device ID in a global variable. Please Uncomment the following line if you wish to use Hometable data in scene -- local jT = json.decode(fibaro:getGlobalValue("HomeTable")); POPUP MESSAGE TYPES Default popup message type, possible values: Success, Info, Warning, Critical. Please define popup message default popup type, button caption and buttons if you wish These defaults can be left as is or modified/translated into your own language local defPopType = "Info" local defPopCaption = "OK" local defPopButton = { { caption = defPopCaption, sceneId = 0 }} Please refer to Sankotronic Tutorial "Popup Notifications and Custom Images" for format and examples POPUP REDIRECT TITLES AND SUBTITLES Please amend the text sent to PopUp Notification when Internet or TTS is offline to your own language if you wish. Both Title and subtitle can be modified local TTSofflineTitle = "Announcement" local TTSofflineSubtitle = "TTS is offline, TTS announcement sent as popup notification" local WWWofflineSubtitle = "Internet is offline, TTS announcement sent as popup notification" SAMPLE MESSAGE INVOCATIONS The message function can be invoked with as little as one parameter or as many as five parameters. The following examples will provide a good understanding. Send message to default notification service, with default titles/subtitles fibaro:startScene(682, {message}) -- Replace 682 with id of your SMsgH v1.1 scene or a hometable reference Send message to specific notification service (The notification service must match exactly what is contained in the notifySve table in the variables section) fibaro:startScene(682, {message, target}) (The hc2user in the message invocation must match exactly what is contained in the hc2emailUsers table in the user configuration section) fibaro:startScene(682, {message, "hc2email"}) - send to superuser fibaro:startScene(682, {message, "hc2email frank"}) - send to user frank fibaro:startScene(682, {message, "hc2email frank su"}) - send to user frank and superuser (The hc2push device in the message invocation must match exactly what is contained in the hc2emailUsers table in the user configuration section) fibaro:startScene(682, {message, "hc2push DadiPhone"}) - send to superuser fibaro:startScene(682, {message, "hc2push MumiPhone SarahiPhone"}) - send to mumphone and sarah phone (The sonos player name in the message invocation must match exactly what is contained in either the APIplayers or REMplayers table in the user configuration section) The target can also specify sonos player or VD id for TTS with options fibaro:startScene(682, {message, "kitchen"}) -send TTS to kitchen, default volume fibaro:startScene(682, {message, "hallway", "10"}) -send TTS to kicthen, volume=10 Custom titles and subtitles can also be specified. These will overwrite the default titles and subtitles. Subtitles are only available for HC2 Popup notifications. They can be used with or with a target notification. If the target is omitted it will send to the default notification service that has been named in the configuration section local message = "what ever the message is" fibaro:startScene(682, {message, "", "", "Alert !!", "The wine fridge temp is rising"}) Finally an example of a Message to popup with specified popup type local message = "kitchen window has been breached" fibaro:startScene(682, {message, "hc2popup", "", "Alarm", "House Breach", "Critical"}) MESSAGE WITH INTERNATIONAL CHARACTERS If you want to send message with special characters just use urlencode function: fibaro:startScene(682, {"message", "hc2email", "", "title"}) -- without special chars fibaro:startScene(682, {urlencode("message ąść"), "hc2email", "", "title"}) -- with special chars fibaro:startScene(682, {urlencode("message ąść"), "hc2email", "", urlencode("title ČčĆ抚ĐđŽžáäéè")}) -- with special chars COMPANION DEMONSTRATION VD INSTRUCTIONS (1.1) A number of sample notification and TTS messages can be activated giving the user an understanding of the message invocation format and options Demonstration mode enabled the toggling of 'Internet online/offline', presentState Home/Away, sleepState Sleep/Awake modes. This capability allows the used to observe the queuing and unloading of queued notification messages and TTS messages in action. Import the VD into your home center 2. Review the messages and adjust based on your own implementation of Smart Message Hub Send messages and TTS as required To demonstrate the queuing and unload of queue’s Set demo mode to ON. Send messages and TTS and observe in selected notification services and apps, Set internet to offline, sent messages and observe queuing, Set internet to online, observer unloading of queue. Set presetState to Away, send messages and observe queuing. Set presentState to Home and observe unloading of queue. Set sleepState to Sleep and observe TTS are silenced. For normal operation - set Demo mode to OFF FILES [Smart Message Hub SCENE] SMsgH 1.2.lua (lua file) WWWAPI Monitor Virtual Device [VIRTUAL DEVICE] WWWAPI_Monitor_1.0.vfib Companion Virtual Device [VIRTUAL DEVICE] SMsgH_Demo_1.1.vfib
  23. can someone help me? I am trying to create a scene that checks to see if a variable changes. if variable x=1 don't check variable (do nothing) but if variable x=0 then continuously search to see if a variable x changes from 0 to 1 then the loop stops until variable x changes to 0 again. *yes there is another scene that will change it from 0 to 1. *Edit, I figured this out.
  24. Hi Everyone, Since a couple of weeks im trying to learn a bit about Lua programming. At the moment im struggling to find an answer to my problem. To switch floor heating pump i used a power plug on my central heating boiler to measure the power usage to turn on the power of the floor heating pump (also a power plug). First i made a simple block scene which worked fine at first but now i found out that also when im using tap water the central heating boiler is using a significant amount of power. so the idea is to use the living room temp. sensor and the power measurement of the central heating boiler to switch the floor heating pump. Since the margin is very small im trying to do a double check so check if the conditions match, sleep for 3 minutes and check the conditions again before powering off. This is a bit of the code i used but get a error. if (PowerCV <'1') and (PompStatus >'1') then fibaro:debug('wacht 3 min voor uitschakelen') fibaro:sleep(10000) fibaro:debug(' 3 min later') and (PowerCV <'1') and (PompStatus >'1') then fibaro:call(191, "turnOff") fibaro:debug('Pomp staat nu uit') end it seems like im not able to check another set of conditions after the "sleep". is there a way to do this? all help is appreciated. thank!
  25. I have a scene that gets the sunrise and sunset for the day. I recently noticed that both sunrise and sunset times are not correct. They are about 30min - 1 hour off from what they should be. has anyone else seen this issue? Does anyone know if fibaro is going to fix it? @T.Konopka
×
×
  • Create New...