LUA kod ?

Post Reply
User avatar
Texan
Medlem
Posts: 169
Joined: 25 Dec 2015, 15:07
8

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.
User avatar
RH_Dreambox
Z-Wave Kung
Posts: 1203
Joined: 03 Jan 2015, 16:49
9
Location: Vegby
Contact:

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
Min gamla ombyggda HC2 har fått ett nytt liv och min HC3 är nu nedkopplad.
HC2 med Home Assistant har blivit en riktig Game Changer och nu har jag hemautomatik på riktigt.
https://www.zwaveforum.se/viewtopic.php?t=7087
User avatar
Texan
Medlem
Posts: 169
Joined: 25 Dec 2015, 15:07
8

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

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
User avatar
Texan
Medlem
Posts: 169
Joined: 25 Dec 2015, 15:07
8

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

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
User avatar
Texan
Medlem
Posts: 169
Joined: 25 Dec 2015, 15:07
8

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

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

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

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

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