Page 1 of 1

LUA kod ?

Posted: 16 Jun 2018, 11:52
by Texan
Hej!
Jag skulle vilja ha hjälp med lua kod för att styra 2 pluggar.
Plugg1 ska trigga plugg2 att sätta på när plugg 1 överstiger XX-watt, och plugg1 ska stänga av plugg2 efter Xmin när plugg1 är understiger XX-watt.

Re: LUA kod ?

Posted: 16 Jun 2018, 16:25
by RH_Dreambox
Så här skulle man kunna göra. Power-värdet på plugg 1 triggar en körning av skriptet så skriptet skall inte autostartas.
Byt ut mina enhetsvärden samt sätt rätt effekt då Plugg 2 skall slås på och av.

Code: Select all

--[[
%% properties
75 power
%% weather
%% events
%% globals
--]]

-- Glöm inte att sätta enhets-ID för "Plugg_1 power" ovan

if fibaro:countScenes() > 1 then fibaro:abort() end -- Förhindra multipla scener

	local startSource = fibaro:getSourceTrigger();
    local Plugg_1 = 75  -- Enhets ID för Plugg_1
    local Plugg_2 = 15  -- Enhets ID för Plugg_2
    local Power_High = 2000  -- Värde då Plugg_2 skall sättas på
    local Power_Low = 1000   -- Värde då Plugg_ skall stängas av

if (
 ( tonumber(fibaro:getValue(Plugg_1, "power")) >= Power_High )
)
then
	fibaro:call(Plugg_2, "turnOn");
	fibaro:debug("Satte på Plugg 2");

elseif (
 ( tonumber(fibaro:getValue(Plugg_1, "power")) < Power_Low )
)
then
	fibaro:call(Plugg_2, "turnOff");  
	fibaro:debug("Stängde av Plugg 2");
  
end

Re: LUA kod ?

Posted: 17 Jun 2018, 11:58
by Texan
RH_Dreambox wrote: 16 Jun 2018, 16:25 Så här skulle man kunna göra. Power-värdet på plugg 1 triggar en körning av skriptet så skriptet skall inte autostartas.
Byt ut mina enhetsvärden samt sätt rätt effekt då Plugg 2 skall slås på och av.

Code: Select all

--[[
%% properties
75 power
%% weather
%% events
%% globals
--]]

-- Glöm inte att sätta enhets-ID för "Plugg_1 power" ovan

if fibaro:countScenes() > 1 then fibaro:abort() end -- Förhindra multipla scener

	local startSource = fibaro:getSourceTrigger();
    local Plugg_1 = 75  -- Enhets ID för Plugg_1
    local Plugg_2 = 15  -- Enhets ID för Plugg_2
    local Power_High = 2000  -- Värde då Plugg_2 skall sättas på
    local Power_Low = 1000   -- Värde då Plugg_ skall stängas av

if (
 ( tonumber(fibaro:getValue(Plugg_1, "power")) >= Power_High )
)
then
	fibaro:call(Plugg_2, "turnOn");
	fibaro:debug("Satte på Plugg 2");

elseif (
 ( tonumber(fibaro:getValue(Plugg_1, "power")) < Power_Low )
)
then
	fibaro:call(Plugg_2, "turnOff");  
	fibaro:debug("Stängde av Plugg 2");
  
end
Hej,
Tack - går det att addera in en tid när den ska stänga av plugg_2?
Vill att den ska stänga av om värdet på plugg_1 har varit under XXX i 1min, då stäng av plugg_2.

Re: LUA kod ?

Posted: 18 Jun 2018, 10:48
by jang
en sån här variant borde funka (har inte haft tid att testa själv)

Code: Select all

--[[
%% properties
75 power
%% weather
%% events
%% globals
--]]

-- Glöm inte att sätta enhets-ID för "Plugg_1 power" ovan

local Plugg_1 = 75  -- Enhets ID för Plugg_1
local Plugg_2 = 15  -- Enhets ID för Plugg_2
local Power_High = 2000  -- Värde då Plugg_2 skall sättas på
local Power_Low = 1000   -- Värde då Plugg_2 skall stängas av
local Sleep = 60         -- Sekunder Plugg_1 ska vara mindre än Power_Low 
local Power_1 = tonumber(fibaro:getValue(Plugg_1, "power"))
local Plugg_2_on = tonumber(fibaro:getValue(Plugg_2, "value")) > 0

if Power_1 >= Power_High and not Plug_2_on then -- Slå på plugg
  fibaro:call(Plugg_2, "turnOn")
  fibaro:debug("Satte på Plugg 2")
elseif Power_1 < Power_Low and Plug_2_on and fibaro:countScenes() == 1 then 
  -- Värde lågt och plugg_2 på och väntar inte redan på att släcka...
  fibaro:sleep(1000*Sleep) -- Vänta x sekunder och stäng av Plugg_2, om inte ngn annan trigger tar död på oss innan...
  fibaro:call(Plugg_2, "turnOff");  
  fibaro:debug("Stängde av Plugg 2");
end
if Power_1 >= Power_Low then -- Ta död på eventuell 'sovande/väntande' instans...
  fibaro:killScenes(__fibaroSceneId)
end

Re: LUA kod ?

Posted: 20 Jun 2018, 23:02
by Texan
Vet inte ifall jag gör fel eller ifall koden inte fungerar, men jag får den inte att stänga av Plugg_2 efter 30 sekunder.

Code: Select all

--[[
%% properties
281 power
%% weather
%% events
%% globals
--]]

-- Glöm inte att sätta enhets-ID för "Plugg_1 power" ovan

local Plugg_1 = 281  -- Enhets ID för Plugg_1
local Plugg_2 = 283  -- Enhets ID för Plugg_2
local Power_High = 50  -- Värde då Plugg_2 skall sättas på
local Power_Low = 10   -- Värde då Plugg_2 skall stängas av
local Sleep = 30         -- Sekunder Plugg_1 ska vara mindre än Power_Low 
local Power_1 = tonumber(fibaro:getValue(Plugg_1, "power"))
local Plugg_2_on = tonumber(fibaro:getValue(Plugg_2, "value")) > 0

if Power_1 >= Power_High and not Plug_2_on then -- Slå på plugg
  fibaro:call(Plugg_2, "turnOn")
  fibaro:debug("Satte på Plugg 2")
elseif Power_1 < Power_Low and Plug_2_on and fibaro:countScenes() == 1 then 
  -- Värde lågt och plugg_2 på och väntar inte redan på att släcka...
  fibaro:sleep(60*Sleep) -- Vänta x sekunder och stäng av Plugg_2, om inte ngn annan trigger tar död på oss innan...
  fibaro:call(Plugg_2, "turnOff");  
  fibaro:debug("Stängde av Plugg 2");
end
if Power_1 >= Power_Low then -- Ta död på eventuell 'sovande/väntande' instans...
  fibaro:killScenes(__fibaroSceneId)
end

Re: LUA kod ?

Posted: 21 Jun 2018, 06:48
by jang
Well, jag kan inte stava till Plugg/Plug :-)
Dessutom, fibaro:sleep tar tid i millisekunder så det ska stå fibaro:sleep(1000*Sleep). Blir 30sekunder som det står i koden nu.
Lagt till en rad som skriver ut Plugg_1 power och om Plugg_2 är på.
Nytt försök

Code: Select all

--[[
%% properties
281 power
%% weather
%% events
%% globals
--]]

-- Glöm inte att sätta enhets-ID för "Plugg_1 power" ovan

local Plugg_1 = 281  -- Enhets ID för Plugg_1
local Plugg_2 = 283  -- Enhets ID för Plugg_2
local Power_High = 50  -- Värde då Plugg_2 skall sättas på
local Power_Low = 10   -- Värde då Plugg_2 skall stängas av
local Sleep = 30         -- Sekunder Plugg_1 ska vara mindre än Power_Low 
local Power_1 = tonumber(fibaro:getValue(Plugg_1, "power"))
local Plugg_2_on = tonumber(fibaro:getValue(Plugg_2, "value")) > 0

fibaro:debug(string.format("Power_1=%s, Plugg_2_on=%s",Power_1,Plugg_2_on))

if Power_1 >= Power_High and not Plugg_2_on then -- Slå på plugg
  fibaro:call(Plugg_2, "turnOn")
  fibaro:debug("Satte på Plugg 2")
elseif Power_1 < Power_Low and Plugg_2_on and fibaro:countScenes() == 1 then 
  -- Värde lågt och plugg_2 på och väntar inte redan på att släcka...
  fibaro:sleep(1000*Sleep) -- Vänta x sekunder och stäng av Plugg_2, om inte ngn annan trigger tar död på oss innan...
  fibaro:call(Plugg_2, "turnOff");  
  fibaro:debug("Stängde av Plugg 2");
end
if Power_1 >= Power_Low then -- Ta död på eventuell 'sovande/väntande' instans...
  fibaro:killScenes(__fibaroSceneId)
end

Re: LUA kod ?

Posted: 21 Jun 2018, 22:51
by Texan
:D Nu fungerar det - Tack!
Tyvärr så kommer detta upp i "Notification center", går det att lösa på något sätt?

Re: LUA kod ?

Posted: 22 Jun 2018, 03:26
by jang
Ja, i HC2:ans web portal där du definerar scenen, i ”General” fliken - där finns ett ”Max. running instances:” fält. Sätt det till 4.

Re: LUA kod ?

Posted: 24 Jun 2018, 15:24
by Texan
:D
Tack för all hjälp med koden - den fungerar perfekt - super.

Re: LUA kod ?

Posted: 28 Nov 2018, 23:35
by Texan
När jag kör scenen i 4.520 så blir allt trögt med fördröjning på upp till 30sek när man gör on/off på pluggar/dimmrar i systemet, vad kan vara fel?

Code: Select all

--[[
%% properties
281 power
%% weather
%% events
%% globals
--]]

-- Glöm inte att sätta enhets-ID för "Plugg_1 power" ovan

local Plugg_1 = 281  -- Enhets ID för Plugg_1
local Plugg_2 = 283  -- Enhets ID för Plugg_2
local Power_High = 7  -- Värde då Plugg_2 skall sättas på
local Power_Low = 4  -- Värde då Plugg_2 skall stängas av
local Sleep = 10  -- Sekunder Plugg_1 ska vara mindre än Power_Low 
local Power_1 = tonumber(fibaro:getValue(Plugg_1, "power"))
local Plugg_2_on = tonumber(fibaro:getValue(Plugg_2, "value")) > 0

fibaro:debug(string.format("Power_1=%s, Plugg_2_on=%s",Power_1,Plugg_2_on))

if Power_1 >= Power_High and not Plugg_2_on then -- Slå på plugg
  fibaro:call(Plugg_2, "turnOn")
  fibaro:debug("Satte på Plugg 2")
elseif Power_1 < Power_Low and Plugg_2_on and fibaro:countScenes() == 1 then 
  -- Värde lågt och plugg_2 på och väntar inte redan på att släcka...
  fibaro:sleep(1000*Sleep) -- Vänta x sekunder och stäng av Plugg_2, om inte ngn annan trigger tar död på oss innan...
  fibaro:call(Plugg_2, "turnOff");  
  fibaro:debug("Stängde av Plugg 2");
end
if Power_1 >= Power_Low then -- Ta död på eventuell 'sovande/väntande' instans...
  fibaro:killScenes(__fibaroSceneId)
end


Re: LUA kod ?

Posted: 29 Nov 2018, 08:00
by jang
Intressant. Får du många triggers från 281? Dvs, många (och ofta) logg utskrifter?
Eftersom det är en plugg med energimätning involverad, har du provat det här ?
https://forum.fibaro.com/topic/32080-sc ... ent=162204