LUA kod ?

Post Reply
Texan
Medlem
Posts: 95
Joined: 25 Dec 2015, 15:07

16 Jun 2018, 11:52

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

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
2 st HC2 4.520, Recovery-stickorna ligger i skrivbordslådan nu!
Texan
Medlem
Posts: 95
Joined: 25 Dec 2015, 15:07

17 Jun 2018, 11:58

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.
jang
Ny medlem
Posts: 19
Joined: 05 Jan 2014, 00:44

18 Jun 2018, 10:48

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
Texan
Medlem
Posts: 95
Joined: 25 Dec 2015, 15:07

20 Jun 2018, 23:02

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
jang
Ny medlem
Posts: 19
Joined: 05 Jan 2014, 00:44

21 Jun 2018, 06:48

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
Texan
Medlem
Posts: 95
Joined: 25 Dec 2015, 15:07

21 Jun 2018, 22:51

: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?
Attachments
Screen Shot 2018-06-21 at 22.47.16.png
jang
Ny medlem
Posts: 19
Joined: 05 Jan 2014, 00:44

22 Jun 2018, 03:26

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.
Texan
Medlem
Posts: 95
Joined: 25 Dec 2015, 15:07

24 Jun 2018, 15:24

:D
Tack för all hjälp med koden - den fungerar perfekt - super.
Texan
Medlem
Posts: 95
Joined: 25 Dec 2015, 15:07

28 Nov 2018, 23:35

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

jang
Ny medlem
Posts: 19
Joined: 05 Jan 2014, 00:44

29 Nov 2018, 08:00

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
Post Reply