EventRunner

MastrUsr
Medlem
Posts: 90
Joined: 25 Apr 2017, 07:24

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 med

Code: Select all

  rule("@00:00:00 => vdID:btn=1; vdID:btn=2; log('pressed button 1 and 2')")
och det funkar bra så det får vara så!

Tack för engagemanget!
sonnyboy
Proffsmedlem
Posts: 623
Joined: 26 Sep 2013, 08:05
Location: Västerås

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.
Fibaro HomeCenter 2
Fw 4.543 Beta
BeyondMeasure 1.10
EventRunner
jang
Medlem
Posts: 110
Joined: 05 Jan 2014, 00:44
Location: Stockholm

15 Apr 2019, 13:29

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.
Vad man kan göra är att wrappa allt i en Lua funktion och sedan anropa den från en regel.
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()"
RH_Dreambox
Proffsmedlem
Posts: 946
Joined: 03 Jan 2015, 16:49
Location: Vegby
Contact:

15 Apr 2019, 16:30

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 med

Code: Select all

  rule("@00:00:00 => vdID:btn=1; vdID:btn=2; log('pressed button 1 and 2')")
Du får nog förklara lite tydligare vad du vill göra.
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'")
2 st HC2 4.543 Beta
MastrUsr
Medlem
Posts: 90
Joined: 25 Apr 2017, 07:24

15 Apr 2019, 16:58

RH_Dreambox wrote:
15 Apr 2019, 16:30
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 med

Code: Select all

  rule("@00:00:00 => vdID:btn=1; vdID:btn=2; log('pressed button 1 and 2')")
Du får nog förklara lite tydligare vad du vill göra.
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'")

Jag har lite knapert med tid för att sitta med automationen just nu ( :cry: ) men ja ska gräva lite djupare i detta när jag hinner. Hittade detta av en slump för någon vecka sedan:
https://forum.fibaro.com/topic/43533-sa ... er-change/


Det jag vill göra är att ändra en enhets-parameter, i mitt fall par. 19 för en fibaro dimmer 2, till olika värden. Det sätt som tidigare funkade i en scen får jag inte att funka längre (och jag har inte kommit fram till varför, HC2 update?). Det sätt jag använt med en VD funkar fortfarande så jag kallar på den istället.

ER:

Code: Select all

vdID = 331
rule("@00:00:00 => vdID:btn=1; vdID:btn=2; log('pressed button 1 and 2')")
VD:

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
RH_Dreambox
Proffsmedlem
Posts: 946
Joined: 03 Jan 2015, 16:49
Location: Vegby
Contact:

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")
2 st HC2 4.543 Beta
jang
Medlem
Posts: 110
Joined: 05 Jan 2014, 00:44
Location: Stockholm

16 Apr 2019, 12:54

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")
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...
Kommentera bort regeln nu så ni får sova så ska jag försöka förstå vad som händer till helgen.
/J
RH_Dreambox
Proffsmedlem
Posts: 946
Joined: 03 Jan 2015, 16:49
Location: Vegby
Contact:

16 Apr 2019, 16:00

För alla eventualiteters skull så tar jag med det här också. Jag har även en annan scen med Earth Hour som jag lagt in tidigare.
Men den scenen var, och är fortfarande "Disabled", så den borde inte kunna köra.

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)
2 st HC2 4.543 Beta
sonnyboy
Proffsmedlem
Posts: 623
Joined: 26 Sep 2013, 08:05
Location: Västerås

16 Apr 2019, 20:22

jang wrote:
15 Apr 2019, 13:29
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.
Vad man kan göra är att wrappa allt i en Lua funktion och sedan anropa den från en regel.
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()"
Prövade detta idag tyvärr så funkade det inte som tänkt, alla lampor tändes samtidigt,
Kan tänka mig att det är fibaro:sleep(math.random(5000,12000)) som ställer till det då ER inte gillade "sleep" kommandot.
Har du något mera tips?
Fibaro HomeCenter 2
Fw 4.543 Beta
BeyondMeasure 1.10
EventRunner
jang
Medlem
Posts: 110
Joined: 05 Jan 2014, 00:44
Location: Stockholm

17 Apr 2019, 15:11

sonnyboy wrote:
16 Apr 2019, 20:22
jang wrote:
15 Apr 2019, 13:29
Prövade detta idag tyvärr så funkade det inte som tänkt, alla lampor tändes samtidigt,
Kan tänka mig att det är fibaro:sleep(math.random(5000,12000)) som ställer till det då ER inte gillade "sleep" kommandot.
Har du något mera tips?
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.
Jag skulle göra såhär istället.

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å istället för att plocka ut ID slumpmässigt ur en lista och sedan vänta (slumpmässigt) mellan varje turnOn så tänder du dom slumpmässigt istället. Slipper använda sleep.
I ER regler använder man wait(sec) som pausar en regel utan att stanna upp alla andra regler.
Last edited by jang on 19 Apr 2019, 13:30, edited 1 time in total.
jang
Medlem
Posts: 110
Joined: 05 Jan 2014, 00:44
Location: Stockholm

19 Apr 2019, 13:29

jang wrote:
17 Apr 2019, 15:11
Så istället för att plocka ut ID slumpmässigt ur en lista och sedan vänta (slumpmässigt) mellan varje turnOn så tänder du dom slumpmässigt istället. Slipper använda sleep.
I ER regler använder man wait(sec) som pausar en regel utan att stanna upp alla andra regler.
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

jang
Medlem
Posts: 110
Joined: 05 Jan 2014, 00:44
Location: Stockholm

20 Apr 2019, 17:43

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")
Så det var en bugg.... kanske...
Det visar sig att setTimeout (som jag använder flitigt) inte kan ta en tidsperiod längre än ca 74 dagar (längre än 6442450943ms för att vara mer exakt)
https://forum.fibaro.com/topic/45200-se ... d-74-days/
Det var inte ett så stort problem förut eftersom de ignorerades (och alla startar om sin HC2:a oftare än var 74:e dag...). Någon gång på senare tid verkar beteendet på HC2:an ändrats och tyvärr gick din regel igång mitt i natten.
Min egen implementation av setTimeout i emulatorn lider inte av den "defekten" så jag upptäckte inte det i mina egna tester.
Nåväl, jag har laddat upp en ny version av EventRunner.lua där jag har "patchat" setTimeout så att den funkar bättre och man kan schedulera timers åtminstone några år i framtiden. Då borde även earthHour funka.
Tack för att du hjälpte mig hitta en svårfångad bugg.
RH_Dreambox
Proffsmedlem
Posts: 946
Joined: 03 Jan 2015, 16:49
Location: Vegby
Contact:

20 Apr 2019, 17:56

Tack Jang för info. Det låter rimligt det du beskriver, så då gör vi ett nytt försök :D
2 st HC2 4.543 Beta
maxxar
Medlem
Posts: 111
Joined: 06 Sep 2012, 13:30

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 scen

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
sonnyboy
Proffsmedlem
Posts: 623
Joined: 26 Sep 2013, 08:05
Location: Västerås

22 Apr 2019, 07:49

jang wrote:
19 Apr 2019, 13:29
jang wrote:
17 Apr 2019, 15:11
Så istället för att plocka ut ID slumpmässigt ur en lista och sedan vänta (slumpmässigt) mellan varje turnOn så tänder du dom slumpmässigt istället. Slipper använda sleep.
I ER regler använder man wait(sec) som pausar en regel utan att stanna upp alla andra regler.
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

Detta fungerar super, snyggt med hur lång tid det är kvar innan lampan tänds i debug fönstret :)
Stort tack för hjälpen.
Fibaro HomeCenter 2
Fw 4.543 Beta
BeyondMeasure 1.10
EventRunner
jang
Medlem
Posts: 110
Joined: 05 Jan 2014, 00:44
Location: Stockholm

22 Apr 2019, 09:16

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 scen

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
Tänd/släck problemet verkar konstigt.
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 stilen

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 ")
Kan du göra mig en tjänst och köra

Code: Select all

 rule("api.get(frm('/devices/%s',garage.portbelysning)).actions",true)
 rule("api.get(frm('/devices/%s',garage.fasadbak)).actions",true)
så att den skriver ut vilka actions de supportrar, och posta mig vad den loggar?

Ja man kan sätta en VD label.

Code: Select all

  rule("@22:18 =>label(720,'lblGuestMode')='Ja' ")
  -- Från en global variabel
  rule("@22:18 =>label(720,'lblGuestMode')=$GestStatus ")
Liknande med en 'slider'

Code: Select all

  rule("@22:18 =>slider(720,'lblGuestModeSlider')=50' ")
och man hämtar värden med samma funktion

Code: Select all

  rule("log('Värdet är:%s',label(720,'lblGuestMode'))")
Tyvärr hade jag inte lagt in support för definierade email. Jag har pushat en ny version B18 med support
Man kan skicka egna med

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')")
2 är user id. Header och Body är separerade med ett ':'

Eller nu också med fördefinerade meddelanden

Code: Select all

rule("365:value > 0 =>  2:defemail=1")
--alt. samma till flera
rule("365:value > 0 => {2,32,33}:defemail=1")
maxxar
Medlem
Posts: 111
Joined: 06 Sep 2012, 13:30

22 Apr 2019, 11:13

jang wrote:
22 Apr 2019, 09:16
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?


Tänd/släck problemet verkar konstigt.
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 stilen

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 ")
Kan du göra mig en tjänst och köra

Code: Select all

 rule("api.get(frm('/devices/%s',garage.portbelysning)).actions",true)
 rule("api.get(frm('/devices/%s',garage.fasadbak)).actions",true)
så att den skriver ut vilka actions de supportrar, och posta mig vad den loggar?


[/code]

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}
jang
Medlem
Posts: 110
Joined: 05 Jan 2014, 00:44
Location: Stockholm

22 Apr 2019, 11:53

Så ganska många har Philips Hue lampor eller liknande (Trådfri).
Fibaro har lite support för det men vanligt är att man styr de med att trycka på knappar på en VD, antingen Fibaro's egen eller någon från forumet.
I ER går det att integrera Hue lampor så att de liknar vanliga Z-wave devices, vilket har fördelen att man kan skriva regler generellt istället för att ha specialregler och specialkommandon för Hue lampor.
Vad man måste göra är att definiera adressen till sin Hue hub före main() i ER

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}}
Den viktiga variabeln är _HueHubs som ska innehålla en tabell per Hue hub man har (vissa har många). Den ska ha namn (inte viktigt men 'Hue' är ett bra default). User som är den hemliga nyckeln man får när man registrerar sig på en Hue hub. Samt IP adress till hubben. Man kan använda sig av ex Sankotronics Hue setup VD för att få nyckel samt IP.

Sedan måsta man mappa sina Hue devices till sina egna (påhittade deviceIDs) inuti main(). Det går att lösa på olika sätt men typ såhär gör jag. I det här fallet använder jag de namn som mina Hue devices har i Hue appen (de måste vara unika).
I början har jag min HomeTable med mina devices och deras ID. Jag har också mina Hue devices där med påhittade deviceID med värden som startar från 12000 (måste vara över 10000)

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
 
Har jag satt upp det kan jag göra

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
Vilket också gör att det funkar i ER regler. (devs.dev.X här för jag använder hometable utanför en ER regel)

Code: Select all

rule("@10:00 => leftwindow:on")
-- eller mixa vanliga och Hue lampor
rule("@10:00 => {leftwindow, rightwindow}:on")
I mitt fall är det så att "Living room" är en Hue grupp, som jag mappar till 12000, som är "living" i min hometable. Den funkar också med on/off

Code: Select all

rule("@10:00 =>living:on")
'setValue' fungerar också och sätter dimm värdet på en lampa (0-99 som en fibaro dimmer)

Code: Select all

rule("@10:00 => leftwindow:value=50")
It also supports 'setColor' vilket med ER regel blir

Code: Select all

rule("@10:00 => leftwindow:color={99,0,0}")
'setValue' kan också ta en tabell som då skickas som argument till Hue device.

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
Fungerar motsvarande för ER regler.

Om man gör

Code: Select all

rule("@10:00 => leftwindow:on")
så kommer ett event av typen {type='property', deviceID=leftwindow>, propertyName='value', value=99} att genereras som man kan trigga på.
Detta pga att jag postar ett sådant event när någon gör ett :on kommando på en Hue device... Men, om man slår av/på en Hue lampa med deras app eller med en strömbrytare så får vi inga event. Det enda sättet att göra det är att polla devices med jämna mellanrum.
Det finns support för det

Code: Select all

Hue.monitor(devs.dev.leftwindow,1000) -- monitor Hue lamp every 1 second.
Tiden anges i millisekunder. Om leftwindow ändrar status så skickas en trigger vilket gör att vi kan skriva regler som

Code: Select all

  rule("leftwindow:isOn => log('Someone turned on lamp')")
Om någon har en Hue knapp kan jag visa hur man får den att se ut som en fibaro switch också...
jang
Medlem
Posts: 110
Joined: 05 Jan 2014, 00:44
Location: Stockholm

22 Apr 2019, 12:00

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}
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.
Om den kör kan det vara strul med att Z-wave kommandot inte kommer fram. Isåfall kan du prova att slå på igen om det inte fungerade första gången.

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 ")
Har själv inte drabbats av det (förutom då enheter har dött och måste väckas upp).
RH_Dreambox
Proffsmedlem
Posts: 946
Joined: 03 Jan 2015, 16:49
Location: Vegby
Contact:

22 Apr 2019, 12:07

@jang, är det problem med den senaste versionen av HC2.lua ("0.8","fix2")? Version "0.5","fix6" fungerar utan problem.
Den här loggen får jag...

Program starting as '"D:\Hemautomation\Zero Brane Studio\bin\lua.exe" -e "io.stdout:setvbuf('no')" "C:\Users\RH\AppData\Local\Temp\.1E42.tmp"'.
Program 'lua.exe' started in 'D:\Hemautomation\Zero Brane Studio\myprograms' (pid: 7444).
Debugging session started in 'D:\Hemautomation\Zero Brane Studio\myprograms\'.
HC2.lua:554: No such file:EventRunner-18.lua
stack traceback:
[C]: in function 'error'
HC2.lua:554: in function 'parseHeaders'
HC2.lua:477: in function 'load'
HC2.lua:650: in function 'registerScene'
HC2.lua:1078: in function 'loadEmbedded'
HC2.lua:82: in function 'main'
HC2.lua:207: in function 'startup'
HC2.lua:3169: in main chunk
[C]: in function 'dofile'
Event Runner/EventRunner-18.lua:12: in main chunk
Debugging session completed (traced 0 instructions).
[33mMon/Apr/22,11:49:25:[HC2 ] HC2 SceneRunner v0.8 fix2[0m
[33mMon/Apr/22,11:49:25:[HC2 ] Local mode, will not access resources on HC2[0m
[32mMon/Apr/22,11:49:25:[HC2 ] Created Event server at 192.168.1.20:6872[0m
[32mMon/Apr/22,11:49:25:[HC2 ] Web GUI at http://192.168.1.20:6872/emu/main[0m
[35mMon/Apr/22,11:49:25:[HC2 ] No HC2 data file found (HC2.data)[0m
[35mMon/Apr/22,11:49:25:[HC2 ] Configuration from file, Globals:0, Scenes:0, Device:0, Rooms:0[0m
Program completed in 3.18 seconds (pid: 7444).
2 st HC2 4.543 Beta
Post Reply