Nu kör jag med
Code: Select all
rule("@00:00:00 => vdID:btn=1; vdID:btn=2; log('pressed button 1 and 2')")
Tack för engagemanget!
Code: Select all
rule("@00:00:00 => vdID:btn=1; vdID:btn=2; log('pressed button 1 and 2')")
Vad man kan göra är att wrappa allt i en Lua funktion och sedan anropa den från en regel.sonnyboy wrote: ↑15 Apr 2019, 12:05 Jag har en Scen som @jompa68 & @Bamsefar hjälpte mig med för några år sedan och den funkar riktigt bra, nu funderar jag på om ER skulle kunna ersätta den, GEA klarade inte av det.
Scenen tänder allmänbelysningen i huset, det som är lite speciellt med den är att den tänder lamporna random och med fördröjning.
länk till koden jag använder Här
Har även en global variabel "Sun" som ska vara under 100 för att det ska tändas.
local deviceIDs = { 25, 50, 52 }
function turnOnAllLamps()
math.randomseed(os.time())
local function randomOrder(table)
local new = {}
for j,x in pairs(table) do new[j] = x end
local res = {}
while (#new > #res) do
local index = math.random(1,#new)
if (new[index] > -1) then
res[#res+1] = new[index]
new[index] = -1
end
end
return res
end
for Device,device in pairs(randomOrder(deviceIDs)) do
local lightstatus=tonumber(fibaro:getValue(device, "value"));
fibaro:debug(lightstatus)
if (lightstatus==0) then
fibaro:call(device, "turnOn")
end
fibaro:debug( Device .. " DeviceID: "..device)
fibaro:sleep(math.random(5000,12000))
--fibaro:call(119, "pressButton", "1")--Endast för VD
end
end
rule("@12:00 & sensor:lux < 100 => turnOnAllLamps()"
Du får nog förklara lite tydligare vad du vill göra.MastrUsr wrote: ↑04 Apr 2019, 18:56 Jag har testat alla sätt för att sätta en parameter via en scen, men inget funkar. Strängar, tabeller etc... Alla sätt ger något fel, eller så händer inget.
Nu kör jag medCode: Select all
rule("@00:00:00 => vdID:btn=1; vdID:btn=2; log('pressed button 1 and 2')")
rule("@00:00:00 => $Min_Globala_Variabel = 'Min_Parameter'")
RH_Dreambox wrote: ↑15 Apr 2019, 16:30Du får nog förklara lite tydligare vad du vill göra.MastrUsr wrote: ↑04 Apr 2019, 18:56 Jag har testat alla sätt för att sätta en parameter via en scen, men inget funkar. Strängar, tabeller etc... Alla sätt ger något fel, eller så händer inget.
Nu kör jag medCode: Select all
rule("@00:00:00 => vdID:btn=1; vdID:btn=2; log('pressed button 1 and 2')")
Menar du att du löste problemet genom att låta ER trycka på två VD-knappar, men att du vill sätta din parameter (global variabel) på annat sätt?
Något i stil med.....rule("@00:00:00 => $Min_Globala_Variabel = 'Min_Parameter'")
Code: Select all
vdID = 331
rule("@00:00:00 => vdID:btn=1; vdID:btn=2; log('pressed button 1 and 2')")
Code: Select all
deviceID = "208" -- Example room ID
data = '{"properties": {"parameters":[{"id":19,"size":1,"value":0}]}}'
HOST = Net.FHttp("127.0.0.1",11111);
local response ,status, err = HOST:PUT('/api/devices/'..deviceID, data);
fibaro:debug(' Error code: ' .. err)
if (tonumber(status)==200) then
fibaro:debug('Funkade :)')
else
fibaro:debug('Funkade inte :(')
end
-- EARTH HOUR #######################################
lights={46,156,135,85,81,11,13,23,25,87,7,15,17,9,121}
rule("earthDates={2019/3/30/20:30,2020/3/28/20:30}")
rule("dolist(v,earthDates,log(osdate('Earth hour %c',v)) & post(#earthHour,v))")
rule("#earthHour => states = lights:value; lights:off; wait(01:00); lights:value = states")
Det var både olyckligt och konstigt. Jag lyckas inte upprepa den i min emulator (jag är på resa och kommer hem på lördag). Kan vara något HC2 speciellt...RH_Dreambox wrote: ↑16 Apr 2019, 09:03 Det märkliga är dock att varken datum eller klockslag stämmer mot det som står angivet i regeln.
Så hur kan detta ha gått till?
Här är min Earth Hour-regel...
-- EARTH HOUR #######################################
lights={46,156,135,85,81,11,13,23,25,87,7,15,17,9,121}
rule("earthDates={2019/3/30/20:30,2020/3/28/20:30}")
rule("dolist(v,earthDates,log(osdate('Earth hour %c',v)) & post(#earthHour,v))")
rule("#earthHour => states = lights:value; lights:off; wait(01:00); lights:value = states")
Code: Select all
--[[
%% properties
%% globals
%% autostart
--]]
if dofile and not _EMULATED then _EMBEDDED={name="EarthHour", id=101} dofile("HC2new.lua") end
local earthHourDates = { -- Earth hour dates
os.time{year=2016, month=3, day=26, hour=20, min=30},
os.time{year=2017, month=3, day=25, hour=20, min=30},
os.time{year=2018, month=3, day=31, hour=20, min=30},
os.time{year=2020, month=3, day=28, hour=20, min=30},}
EARTHTIME=60*60 -- Turn off lamps for 1 hour
-- TEST TEST TEST TEST, run earthHour at startup+2s, turning off lamps, and turn back on 10s later
earthHourDates[#earthHourDates+1]=os.time()+2
EARTHTIME=10
---- Alternative 2, with list of lights and restoring light states afterwards
local lights = {46,156,81,85,135,11,13,23,25,87,7,15,17,9,121} -- lights/plugs that should be turned off
function map(fun, list)
local res = {}
for i,v in pairs(list) do res[i] = fun(v) end
return res;
end
map(function(t)
if (t-os.time() < 0) then return end -- Event in the past
fibaro:debug("Förbereder Earth hour för "..os.date("%c",t))
setTimeout(function () -- save old states and turn off lights
-- Notify here that Earth hour started
local states = map(function(id) return {id, fibaro:getValue(id,'value'), fibaro:call(id,'turnOff')} end, lights)
setTimeout(function() -- restore lights after 60min
-- Notify here that Earth hour ended
map(function(v) if v[2]=='1' then fibaro:call(v[1],"turnOn") else fibaro:call(v[1],"setValue",v[2]) end end, states) end,
EARTHTIME*1000)
end,
1000*(t-os.time()))
end, earthHourDates)
Prövade detta idag tyvärr så funkade det inte som tänkt, alla lampor tändes samtidigt,jang wrote: ↑15 Apr 2019, 13:29Vad man kan göra är att wrappa allt i en Lua funktion och sedan anropa den från en regel.sonnyboy wrote: ↑15 Apr 2019, 12:05 Jag har en Scen som @jompa68 & @Bamsefar hjälpte mig med för några år sedan och den funkar riktigt bra, nu funderar jag på om ER skulle kunna ersätta den, GEA klarade inte av det.
Scenen tänder allmänbelysningen i huset, det som är lite speciellt med den är att den tänder lamporna random och med fördröjning.
länk till koden jag använder Här
Har även en global variabel "Sun" som ska vara under 100 för att det ska tändas.local deviceIDs = { 25, 50, 52 }
function turnOnAllLamps()
math.randomseed(os.time())
local function randomOrder(table)
local new = {}
for j,x in pairs(table) do new[j] = x end
local res = {}
while (#new > #res) do
local index = math.random(1,#new)
if (new[index] > -1) then
res[#res+1] = new[index]
new[index] = -1
end
end
return res
end
for Device,device in pairs(randomOrder(deviceIDs)) do
local lightstatus=tonumber(fibaro:getValue(device, "value"));
fibaro:debug(lightstatus)
if (lightstatus==0) then
fibaro:call(device, "turnOn")
end
fibaro:debug( Device .. " DeviceID: "..device)
fibaro:sleep(math.random(5000,12000))
--fibaro:call(119, "pressButton", "1")--Endast för VD
end
end
rule("@12:00 & sensor:lux < 100 => turnOnAllLamps()"
Ja, man får inte använda fibaro:sleep i EventRunner. Anledningen är att allt stannar upp när man gör en sleep så det påverkar andra regler. Jag hade inte tänkt på det när jag skrev svaret.
Code: Select all
function printf(...) fibaro:debug(string.format(...)) end
local deviceIDs = { 25, 50, 52 }
function turnOnAllLamps()
math.randomseed(os.time())
for i,id in ipairs(deviceIDs) do
local lightstatus=tonumber(fibaro:getValue(id, "value"));
if (lightstatus==0) then
local sec = math.random(5,12*#deviceIDs) -- spread, 5 - 12*#deviceIDs
printf("Turning on lamp %s with deviceID:%s in %s seconds",i,id,sec)
setTimeout(function() fibaro:call(id, "turnOn") end, 1000*sec)
else
printf("Lamp %s with deviceID:%s already on",i,id)
end
--fibaro:call(119, "pressButton", "1")--Endast för VD
end
end
rule("@12:00 & sensor:lux < 100 => turnOnAllLamps()")
Så en variant med exakt samma beteende som din ursprungliga kod (utan sleep) blir
Code: Select all
function printf(...) fibaro:debug(string.format(...)) end
math.randomseed(os.time())
local deviceIDs = { 25, 50, 52 }
function turnOnAllLamps()
local ids,sec=_copy(deviceIDs),0
for i=#ids,1,-1 do
local j=math.random(1,i)
local id = ids[j]; table.remove(ids,j)
local lightstatus=tonumber(fibaro:getValue(id, "value"));
if (lightstatus==0) then
sec = sec + math.random(5,12)
printf("Turning on lamp %s with deviceID:%s in %s seconds",i,id,sec)
setTimeout(function() fibaro:call(id, "turnOn") end, 1000*sec)
else
printf("Lamp %s with deviceID:%s already on",i,id)
end
--fibaro:call(119, "pressButton", "1")--Endast för VD
end
end
Så det var en bugg.... kanske...RH_Dreambox wrote: ↑16 Apr 2019, 09:03 @jang, i går kväll hände något riktigt märkligt med Event Runner.
För någon vecka sedan lade jag in din Earth Hour-regel för några år framöver.
I går kväll klockan 22:10:30 släcktes huset ned helt och hållet. Normalt så sker detta stegvis på olika tider, men inte så tidigt som 22:10.
Vi hade precis gått och lagt oss så jag tänkte kolla upp på morgonen vad som hade hänt.
En timma senare kl. 23:10:30 vaknade jag av att hela huset var upptänt igen!
Jag fick masa mig upp ur sängen och släcka ned huset via "paddan" i hallen och jag trodde då att någon hade hackat mitt Fibaro-ID och ville skoja med oss.
Men när jag kollar loggen nu på morgonen så ser jag att det var Earth Hour-regeln som troligtvis orsakat detta.
Alla enheter i regeln hade släckts ned i samma turordning som de var inskrivna, och lika dant var det när de tändes upp igen.
Det märkliga är dock att varken datum eller klockslag stämmer mot det som står angivet i regeln.
Så hur kan detta ha gått till?
Här är min Earth Hour-regel...
-- EARTH HOUR #######################################
lights={46,156,135,85,81,11,13,23,25,87,7,15,17,9,121}
rule("earthDates={2019/3/30/20:30,2020/3/28/20:30}")
rule("dolist(v,earthDates,log(osdate('Earth hour %c',v)) & post(#earthHour,v))")
rule("#earthHour => states = lights:value; lights:off; wait(01:00); lights:value = states")
Code: Select all
--Garage
--Fasadbelysning på baksidan på garaget tänds vid solnedgång +10min
rule("@{catch,sunset+00:10} & sunset+00:10..03:00 => garage.fasadbak:on")
--Fasadbelysning på baksidan på garaget släcks vid soluppgång -10min
rule("@{catch,sunrise-00:10} & sunrise-00:10..15:00 => garage.fasadbak:off")
--Portbelysning på garaget tänds vid solnedgång +10min
rule("@{catch,sunset+00:10} & sunset+00:10..03:00 => garage.portbelysning:on")
--Portbelysning på garaget släcks vid soluppgång -10min
rule("@{catch,sunrise-00:10} & sunrise-00:10..15:00 => garage.portbelysning:off")
Code: Select all
--[[
%% autostart
%% properties
356 value
%% globals
--]]
local startSource = fibaro:getSourceTrigger();
if (
( tonumber(fibaro:getValue(356, "value")) > 0 )
or
startSource["type"] == "other"
)
then
fibaro:call(2, "sendDefinedEmailNotification", "1");
fibaro:call(32, "sendDefinedEmailNotification", "1");
fibaro:call(33, "sendDefinedEmailNotification", "1");
end
Detta fungerar super, snyggt med hur lång tid det är kvar innan lampan tänds i debug fönstretjang wrote: ↑19 Apr 2019, 13:29Så en variant med exakt samma beteende som din ursprungliga kod (utan sleep) blirCode: Select all
function printf(...) fibaro:debug(string.format(...)) end math.randomseed(os.time()) local deviceIDs = { 25, 50, 52 } function turnOnAllLamps() local ids,sec=_copy(deviceIDs),0 for i=#ids,1,-1 do local j=math.random(1,i) local id = ids[j]; table.remove(ids,j) local lightstatus=tonumber(fibaro:getValue(id, "value")); if (lightstatus==0) then sec = sec + math.random(5,12) printf("Turning on lamp %s with deviceID:%s in %s seconds",i,id,sec) setTimeout(function() fibaro:call(id, "turnOn") end, 1000*sec) else printf("Lamp %s with deviceID:%s already on",i,id) end --fibaro:call(119, "pressButton", "1")--Endast för VD end end
Tänd/släck problemet verkar konstigt.maxxar wrote: ↑22 Apr 2019, 00:37 Jag har problem med mina tidsstyrda reler i ER, de tänds inte men släckning går bra.
Men sparar jag om ER scenen så körs tändningen med "catchup" efter solen gått ner utan problem.
Känns som att den inte tar triggern för sunset
Har ändrat om och testat fram och tillbaka och så här ser några exempel ut just nu
Provade även att lägga in den senaste versionen "2.0","B15" (som fanns häromdagen) men verkar inte hjälp,
nu ikväll tändes ej lamporna vid solnedgång +10 min
Code: Select all
--Garage --Fasadbelysning på baksidan på garaget tänds vid solnedgång +10min rule("@{catch,sunset+00:10} & sunset+00:10..03:00 => garage.fasadbak:on") --Fasadbelysning på baksidan på garaget släcks vid soluppgång -10min rule("@{catch,sunrise-00:10} & sunrise-00:10..15:00 => garage.fasadbak:off") --Portbelysning på garaget tänds vid solnedgång +10min rule("@{catch,sunset+00:10} & sunset+00:10..03:00 => garage.portbelysning:on") --Portbelysning på garaget släcks vid soluppgång -10min rule("@{catch,sunrise-00:10} & sunrise-00:10..15:00 => garage.portbelysning:off")
Asså är rätt säker på att det funkat oxå men vet inte när det slutat funka, kan inte se varför det inte skulle funka?
En annan fråga hur uppdaterar jag en VD med exempelvis ett värde från en Global variabel?
Har provat lite olika varianter som denna men får inte till det, men kanske är ute o cyklar med nedanstående försök
--rule("@22:18 => api.put(frm('/devices/%s',720),{id=lblGuestMode,value=Ja})")
Och sista frågan, går det att skicka ett e-post meddelande istället för ett Push?
Vill ersätta följande scenCode: Select all
--[[ %% autostart %% properties 356 value %% globals --]] local startSource = fibaro:getSourceTrigger(); if ( ( tonumber(fibaro:getValue(356, "value")) > 0 ) or startSource["type"] == "other" ) then fibaro:call(2, "sendDefinedEmailNotification", "1"); fibaro:call(32, "sendDefinedEmailNotification", "1"); fibaro:call(33, "sendDefinedEmailNotification", "1"); end
Code: Select all
rule("@{catch,sunset+00:10} & sunset+00:10..03:00 => garage.portbelysning:on; wait(00:00:02); garage.portbelysning:isOff & garage.portbelysning:on ")
Code: Select all
rule("api.get(frm('/devices/%s',garage.portbelysning)).actions",true)
rule("api.get(frm('/devices/%s',garage.fasadbak)).actions",true)
Code: Select all
rule("@22:18 =>label(720,'lblGuestMode')='Ja' ")
-- Från en global variabel
rule("@22:18 =>label(720,'lblGuestMode')=$GestStatus ")
Code: Select all
rule("@22:18 =>slider(720,'lblGuestModeSlider')=50' ")
Code: Select all
rule("log('Värdet är:%s',label(720,'lblGuestMode'))")
Code: Select all
rule("365:value > 0 => 2:email=frm('%s:%s','This is the header','This is the body')")
--alt. samma till flera
rule("365:value > 0 => {2,32,33}:email=frm('%s:%s','This is the header','This is the body')")
Code: Select all
rule("365:value > 0 => 2:defemail=1")
--alt. samma till flera
rule("365:value > 0 => {2,32,33}:defemail=1")
jang wrote: ↑22 Apr 2019, 09:16Tänd/släck problemet verkar konstigt.maxxar wrote: ↑22 Apr 2019, 00:37 Jag har problem med mina tidsstyrda reler i ER, de tänds inte men släckning går bra.
Men sparar jag om ER scenen så körs tändningen med "catchup" efter solen gått ner utan problem.
Känns som att den inte tar triggern för sunset
Har ändrat om och testat fram och tillbaka och så här ser några exempel ut just nu
Provade även att lägga in den senaste versionen "2.0","B15" (som fanns häromdagen) men verkar inte hjälp,
nu ikväll tändes ej lamporna vid solnedgång +10 min
Code: Select all
--Garage --Fasadbelysning på baksidan på garaget tänds vid solnedgång +10min rule("@{catch,sunset+00:10} & sunset+00:10..03:00 => garage.fasadbak:on") --Fasadbelysning på baksidan på garaget släcks vid soluppgång -10min rule("@{catch,sunrise-00:10} & sunrise-00:10..15:00 => garage.fasadbak:off") --Portbelysning på garaget tänds vid solnedgång +10min rule("@{catch,sunset+00:10} & sunset+00:10..03:00 => garage.portbelysning:on") --Portbelysning på garaget släcks vid soluppgång -10min rule("@{catch,sunrise-00:10} & sunrise-00:10..15:00 => garage.portbelysning:off")
Asså är rätt säker på att det funkat oxå men vet inte när det slutat funka, kan inte se varför det inte skulle funka?
Om du har satt _debugFlags fcall=true i början av scenen så loggar den alla fibaro:call. Ser du att den gör fibaro:call(...,"turnOn") vid rätt tid?
Är det en dimmer eller en plug? Det funkar bra när jag testar motsvarande så jag undrar om det kan vara lite speciella enheter som jag missar?
Det går också historier om att z-wave kommandon ibland inte lyckas komma fram för att styra enheter...
Om det är problemet kan man prova något i den här stilenKan du göra mig en tjänst och köraCode: Select all
rule("@{catch,sunset+00:10} & sunset+00:10..03:00 => garage.portbelysning:on; wait(00:00:02); garage.portbelysning:isOff & garage.portbelysning:on ")
så att den skriver ut vilka actions de supportrar, och posta mig vad den loggar?Code: Select all
rule("api.get(frm('/devices/%s',garage.portbelysning)).actions",true) rule("api.get(frm('/devices/%s',garage.fasadbak)).actions",true)
[/code]
Code: Select all
[DEBUG] 10:54:08: api.get(frm('/devices/%s',garage.portbelysning)).actions = {"turnOff":0,"turnOn":0,"reset":0,"reconfigure":0}
[DEBUG] 10:54:08: api.get(frm('/devices/%s',garage.fasadbak)).actions = {"turnOff":0,"turnOn":0,"reconfigure":0}
Code: Select all
_HueUserName="sdsdeLpWdYsdfedf0GsNPJsdsdeEa-"
_HueIP = "192.168.1.153"
_HueHubs = {{name='Hue',user=_HueUserName,ip=_HueIP}} -- Hue bridges, Ex. {{name='Hue',user=_HueUserName,ip=_HueIP}}
Code: Select all
devs.dev={ -- Hometable
lucia=24,keyfob=5,rightwindow=17,tim=20,door=26,temp=27,ute=37,
kitchensensor=44,
living=12000,leftwindow=12001,middlewindow=12002,
globe=12004,bedroof=12005,timroof=12006,bedroom=12007
}
Util.defvars(devs.dev) -- Map names for access in rules
devs.hueMap={ Map from my own deviceIDs to Hue device names
[12000]='Living room',
[12001]="Left window",
[12002]="Middle window",
[12004]="Globe",
[12005]="Roof lamp",
[12006]="Tim",
[12007]="Bedroom",
}
for id, name in pairs(devs.hueMap) do Hue.define(name, nil,id) end -- Define Hue devices as deviceIDs
Code: Select all
fibaro:call(devs.dev.leftwindow,"turnOn") -- turn on lamp
fibaro:call(devs.dev.leftwindow,"turnOff") -- turn off lamp
fibaro:call(devs.dev.leftwindow,"setValue",50) -- dim lamp to 50%
fibaro:call(devs.dev.living,"turnOn") -- turn on group
fibaro:call(devs.dev.living,"turnOff") -- turn off group
fibaro:call(devs.dev.living,"setValue",50) -- dim group to 50%
fibaro:call(devs.dev.bedroof,"turnOn") -- turn on RGB lamp
fibaro:call(devs.dev.bedroof,"setColor",99,0,0) -- set RGB lamp to red
fibaro:call(devs.dev.bedroof,"setColor",0,99,0,50) -- set RGB lamp to blue 50% dimmed
fibaro:getValue(devs.dev.leftwindow,"value") -- returns 0 if 'reachable'==false or 'on'==false, otherwise 'bri' value
Code: Select all
rule("@10:00 => leftwindow:on")
-- eller mixa vanliga och Hue lampor
rule("@10:00 => {leftwindow, rightwindow}:on")
Code: Select all
rule("@10:00 =>living:on")
Code: Select all
rule("@10:00 => leftwindow:value=50")
Code: Select all
rule("@10:00 => leftwindow:color={99,0,0}")
Code: Select all
fibaro:call(bedroom.lamp,"setValue",{effect='colorloop',bri=50}) -- pass properties to Hue lamp
fibaro:call(kitchen.spots,"setValue",'Night scene') -- Set light group to Hue scene
fibaro:getValue(kitchen.lamp,"values") -- returns table of all Hue properties for lamp
Code: Select all
rule("@10:00 => leftwindow:on")
Code: Select all
Hue.monitor(devs.dev.leftwindow,1000) -- monitor Hue lamp every 1 second.
Code: Select all
rule("leftwindow:isOn => log('Someone turned on lamp')")
Eftersom det släcks men inte tänds så verkar det som min kod skickar rätt kommandon. Sätt _debugFlags fcall=true och se om kommandot skickas, då vet vi om regeln triggas.maxxar wrote: ↑22 Apr 2019, 11:13 Detta är det som loggas
Code: Select all
[DEBUG] 10:54:08: api.get(frm('/devices/%s',garage.portbelysning)).actions = {"turnOff":0,"turnOn":0,"reset":0,"reconfigure":0} [DEBUG] 10:54:08: api.get(frm('/devices/%s',garage.fasadbak)).actions = {"turnOff":0,"turnOn":0,"reconfigure":0}
Code: Select all
rule("@{catch,sunset+00:10} & sunset+00:10..03:00 => garage.portbelysning:on; wait(00:00:02); garage.portbelysning:isOff & garage.portbelysning:on ")