Lua kod för att styra lampor beroende på veckor?

Texan
Medlem
Posts: 127
Joined: 25 Dec 2015, 15:07

04 Nov 2019, 23:32

:D Tackar, blir perfekt
Texan
Medlem
Posts: 127
Joined: 25 Dec 2015, 15:07

18 Nov 2019, 22:01

Är detta rätt tolkat, släck lampa, jämna veckor mon-fre, 10 minuter före soluppgång och +00:10 blir efter soluppgång?
rule("@sunrise-00:10 & wday('mon-fri') & wnum % 2 == 0 => kitchen.lampaTak:value=0")
jang
Medlem
Posts: 193
Joined: 05 Jan 2014, 00:44
Location: Stockholm

19 Nov 2019, 00:34

Texan wrote:
18 Nov 2019, 22:01
Är detta rätt tolkat, släck lampa, jämna veckor mon-fre, 10 minuter före soluppgång och +00:10 blir efter soluppgång?
rule("@sunrise-00:10 & wday('mon-fri') & wnum % 2 == 0 => kitchen.lampaTak:value=0")
Ja, -10:00 blir före soluppgången. +10:00 efter.
Om du ska släcka en lampa kan du använda :off

Code: Select all

rule("@sunrise-00:10 & wday('mon-fri') & wnum % 2 == 0 => kitchen.lampaTak:off")
Texan
Medlem
Posts: 127
Joined: 25 Dec 2015, 15:07

19 Nov 2019, 19:56

Är det en fördel att skriva :off istället för value=0 eller spelar det ingen roll?

Hur gör man för styra Philips hue lampor, några exempel?
jang
Medlem
Posts: 193
Joined: 05 Jan 2014, 00:44
Location: Stockholm

20 Nov 2019, 11:11

Texan wrote:
19 Nov 2019, 19:56
Är det en fördel att skriva :off istället för value=0 eller spelar det ingen roll?

Hur gör man för styra Philips hue lampor, några exempel?
:value=0 översätts till fibaro:call(ID,'setValue',0) och :off fibaro:call(ID,"turnOff") - dvs ingen större skillnad. Tycker om att använda :off när jag släcker lampor då koden känns mer "självdokumenterande"

Ja de går att styra Hue lampor.

Först måste du definiera

Code: Select all

local _HueUserName = ".........."                -- Hue API key
local _HueIP       = "192.168.1.XX"                         -- Hue bridge IP
I början på filen. Finns lite hjälp här hur du hittar API key
https://www.markdubois.info/weblog/2016 ... s-hue-api/ eller så använder du ngt annat verktyg.

Sedan avkommentera raden med HueSetup

Code: Select all

-- Hue setup before main() starts. You can add more Hue.connect() inside this if you have more Hue bridges.
function HueSetup() if _HueUserName and _HueIP then Hue.connect(_HueUserName,_HueIP,"Hue") end end
Sedan måste du ta reda på vilka namn dina Hue enheter har i Hue appen.
Du kan köra

Code: Select all

Hue.dump()
inuti main så loggar den alla Hue enheter (men du måste ha satt up enligt ovan först)

Anta att du har en lampa som heter "Window lamp" i Hue.
Du tilldelar då din Hue lampa ett fejkar devideID nummer. Fejkade deviceID nummer måste vara > 10000.

Code: Select all

Hue.define("Window lamp",12001)
sedan kan du i regler använda 12001 som en vanlig deviceID lampa

Code: Select all

Rule.eval("@07:00 => 12001:on") -- Turn on lamp
Rule.eval("@07:00 => 12001:value=50") -- Dim to 50%
I din HomeTable kan du definiera

Code: Select all

HomeTable = {
   kitchen = { lamp = 12001 }
}
och skriva

Code: Select all

Rule.eval("@07:00 => kitchen.lamp:on")
Texan
Medlem
Posts: 127
Joined: 25 Dec 2015, 15:07

20 Nov 2019, 21:47

:oops: Vart exakt skall jag lägga in och de övriga

Hue.dump()




--------- Main ------------ Here goes your rules ----------------
function main()
local rule,define = Rule.eval, Util.defvar

if _EMULATED then
--_System.speed(true) -- run emulator faster than real-time
--_System.setRemote("devices",{5}) -- make device 5 remote (call HC2 with api)
--_System.installProxy() -- Install HC2 proxy sending sourcetriggers back to emulator
end

local HT = -- Example of in-line "home table"
{
dev =
{ livingroom = {lampaTak = 206, lampaBed = 205},
kitchen = {lampaBord = 33, lampaTak = 68},
bathroom = {lampaBad = 329, lampaMirr = 335},
},
other = "other"
}

--or read in "HomeTable" from a fibaro global variable (or scene)
--local HT = type(_homeTable)=='number' and api.get("/scenes/".._homeTable).lua or fibaro:getGlobalValue(_homeTable)
--HT = type(HT) == 'string' and json.decode(HT) or HT
Util.defvars(HT.dev) -- Make HomeTable variables available in EventScript
Util.reverseMapDef(HT.dev) -- Make HomeTable variable names available for logger

-- Dina regler
--rule("@sunset-00:10 & wnum % 2 == 1 => kitchen.lampaTak:value=30") -- Sätt till 30%, udda veckor, solnedgång-10min
-- Tänd och släck jämna veckor ( Jämn vecka = 0 )
rule("@05:28 & wday('mon-thu') & wnum%2 == 0 => kitchen.lampaTak:value=20") -- Sätt till 20%, jämna veckor, soluppgång-10min
rule("@05:29 & wday('mon-thu') & wnum%2 == 0 => kitchen.lampaBord:value=1") -- Sätt till on%, jämna veckor, soluppgång-10min
rule("@05:29 & wday('mon-thu') & wnum%2 == 0 => livingroom.lampaTak:value=1")
rule("@05:28 & wday('fri') & wnum%2 == 0 => kitchen.lampaTak:value=20") -- Sätt till 20%, jämna veckor, soluppgång-10min
rule("@05:29 & wday('fri') & wnum%2 == 0 => kitchen.lampaBord:value=1") -- Sätt till on%, jämna veckor, soluppgång-10min
rule("@05:29 & wday('fri') & wnum%2 == 0 => livingroom.lampaTak:value=1")
rule("@07:10 & wday('mon-fri') & wnum%2 == 0 => kitchen.lampaTak:value=0")
rule("@08:15 & wday('mon-fri') & wnum%2 == 0 => kitchen.lampaBord:value=0")
rule("@07:35 & wday('mon-fri') & wnum%2 == 0 => livingroom.lampaTak:value=0")
--
jang
Medlem
Posts: 193
Joined: 05 Jan 2014, 00:44
Location: Stockholm

21 Nov 2019, 09:24

Har markerat I bold det du ska lägga till. /J
--------------------
--[[
%% properties
%% events
%% globals
%% autostart
--]]

if dofile and not _EMULATED then _EMULATED={name="EventRunner",id=99,maxtime=44} dofile("HC2.lua") end -- For HC2 emulator

local _version,_fix = "3.0","B83" -- Nov 17, 2019

local _sceneName = "Demo" -- Set to scene/script name
local _homeTable = "devicemap" -- Name of your HomeTable variable (fibaro global)
local _HueUserName = ".........." -- Hue API key
local _HueIP = "192.168.1.XX" -- Hue bridge IP


-- debug flags for various subsystems (global)
_debugFlags = {
post=true,invoke=true,triggers=true,dailys=false,rule=true,ruleTrue=false,
fcall=true, fglobal=false, fget=false, fother=false, hue=true, telegram=false, nodered=false,
}
-- options for various subsystems (global)
_options=_options or {}

-- Hue setup before main() starts. You can add more Hue.connect() inside this if you have more Hue bridges.
function HueSetup() if _HueUserName and _HueIP then Hue.connect(_HueUserName,_HueIP,"Hue") end end
--------- Main ------------ Here goes your rules ----------------
function main()
local rule,define = Rule.eval, Util.defvar

if _EMULATED then
--_System.speed(true) -- run emulator faster than real-time
--_System.setRemote("devices",{5}) -- make device 5 remote (call HC2 with api)
--_System.installProxy() -- Install HC2 proxy sending sourcetriggers back to emulator
end

local HT = -- Example of in-line "home table"
{
dev =
{ livingroom = {lampaTak = 206, lampaBed = 205, lampaFonster=12001},
kitchen = {lampaBord = 33, lampaTak = 68},
bathroom = {lampaBad = 329, lampaMirr = 335},
},
other = "other"
}

--or read in "HomeTable" from a fibaro global variable (or scene)
--local HT = type(_homeTable)=='number' and api.get("/scenes/".._homeTable).lua or fibaro:getGlobalValue(_homeTable)
--HT = type(HT) == 'string' and json.decode(HT) or HT
Util.defvars(HT.dev) -- Make HomeTable variables available in EventScript
Util.reverseMapDef(HT.dev) -- Make HomeTable variable names available for logger

Hue.dump() -- Kör en gång för att få Hue namn. Kommentera sedan bort den
--Hue.define("Window lamp",12001) -- Avkommentera när du har rätt namn

-- Dina regler
rule("@now+00:00:02 => livingroom. lampaFonster:on") -- Test light, turn on 2 seconds after ER started/saved.

--rule("@sunset-00:10 & wnum % 2 == 1 => kitchen.lampaTak:value=30") -- Sätt till 30%, udda veckor, solnedgång-10min
-- Tänd och släck jämna veckor ( Jämn vecka = 0 )
rule("@05:28 & wday('mon-thu') & wnum%2 == 0 => kitchen.lampaTak:value=20") -- Sätt till 20%, jämna veckor, soluppgång-10min
rule("@05:29 & wday('mon-thu') & wnum%2 == 0 => kitchen.lampaBord:value=1") -- Sätt till on%, jämna veckor, soluppgång-10min
rule("@05:29 & wday('mon-thu') & wnum%2 == 0 => livingroom.lampaTak:value=1")
rule("@05:28 & wday('fri') & wnum%2 == 0 => kitchen.lampaTak:value=20") -- Sätt till 20%, jämna veckor, soluppgång-10min
rule("@05:29 & wday('fri') & wnum%2 == 0 => kitchen.lampaBord:value=1") -- Sätt till on%, jämna veckor, soluppgång-10min
rule("@05:29 & wday('fri') & wnum%2 == 0 => livingroom.lampaTak:value=1")
rule("@07:10 & wday('mon-fri') & wnum%2 == 0 => kitchen.lampaTak:value=0")
rule("@08:15 & wday('mon-fri') & wnum%2 == 0 => kitchen.lampaBord:value=0")
rule("@07:35 & wday('mon-fri') & wnum%2 == 0 => livingroom.lampaTak:value=0")
--
Texan
Medlem
Posts: 127
Joined: 25 Dec 2015, 15:07

23 Nov 2019, 19:20

:oops: Hur gör man för att sätta olika färger och intensitet på Hue lampor, hur ser då en enkel regel ut?
jang
Medlem
Posts: 193
Joined: 05 Jan 2014, 00:44
Location: Stockholm

23 Nov 2019, 21:13

Texan wrote:
23 Nov 2019, 19:20
:oops: Hur gör man för att sätta olika färger och intensitet på Hue lampor, hur ser då en enkel regel ut?

Code: Select all

rule("lampa:off") 
rule("lampa:on") 
rule("lampa:value=50") -- Dimma till 50%
rule("lampa:value={99,0,0}") -- Sätt till röd färg
rule("lampa:value={0,99,0}") -- Sätt till blå färg
rule("lampa:value={0,0,99}") -- Sätt till grön färg
rule("lampa:value={0,0,99,50}") -- Sätt till grön färg, 50% dimmad
rule("lampa:value='Night scene' ") -- Sätt lampa till Hue scene 'Night scene'
Om du har grupperat lampor i Hue appen kan du använda Gruppens namn på samma sätt som en enskild lampa
och definiera ett HC2 deviceID med Hue.define för gruppen.

Om du tycker att du har en bra inställning på en lampa kan du spara den i en fibaro global såhär

Code: Select all

rule("$HueValue = lampa:values") -- :values returnerar alla Hue properities 
rule("lampa:values = $HueValue") -- återställ värden till lampan.
Texan
Medlem
Posts: 127
Joined: 25 Dec 2015, 15:07

08 Dec 2019, 14:02

Har en entré lampa som jag vill ska tändas då man öppnar dörren (magnet kontakt) och om jag är på insidan av dörren så ska den tändas av en rörelse sensor som jag har där och så länge det är rörelse så skall den hållas tänd och släckas efter 5min då ingen är där. Hur får man till det, är det bara att lägga till dessa två sensorer mellan --[[ och --]] och sedan bygga regeln........

sensors = {339, 345}
lampaEntre = 329
rule("sensors:breached & 04:10..22:30 => lampaBad:value=100")
jang
Medlem
Posts: 193
Joined: 05 Jan 2014, 00:44
Location: Stockholm

08 Dec 2019, 14:35

Texan wrote:
08 Dec 2019, 14:02
Har en entré lampa som jag vill ska tändas då man öppnar dörren (magnet kontakt) och om jag är på insidan av dörren så ska den tändas av en rörelse sensor som jag har där och så länge det är rörelse så skall den hållas tänd och släckas efter 5min då ingen är där. Hur får man till det, är det bara att lägga till dessa två sensorer mellan --[[ och --]] och sedan bygga regeln........

sensors = {339, 345}
lampaEntre = 329
rule("sensors:breached & 04:10..22:30 => lampaBad:value=100")
Ja , du måste lägga till dem under --[[ %% properties

och sedan regler i stil med.

Code: Select all

doorSensor = 339
motionSensor = 345
sensors = {doorSensor, motionSensor}
lampaEntre = 329

rule("sensors:breached & sunset-01:00..22:30 => lampaEntre:on")
rule("trueFor(00:05,sensors:safe) => lampaEntre:off")
Här använder jag sunset-1timme men du kan använda vad du vill (nu tycker jag det är mörkt hela dagen)
Både rörelsesensorn och dörren måste vara "safe" i 5min för att den ska släcka.

Edit: ändrade till 'trueFor'
Texan
Medlem
Posts: 127
Joined: 25 Dec 2015, 15:07

08 Dec 2019, 17:16

Ska man bygga alla regler i en och samma eventrunner, eller ska man skapa flera för exempelvis olika rum?
jang
Medlem
Posts: 193
Joined: 05 Jan 2014, 00:44
Location: Stockholm

08 Dec 2019, 17:36

Texan wrote:
08 Dec 2019, 17:16
Ska man bygga alla regler i en och samma eventrunner, eller ska man skapa flera för exempelvis olika rum?
Kör alla i samma.
Texan
Medlem
Posts: 127
Joined: 25 Dec 2015, 15:07

08 Dec 2019, 18:09

:oops: :oops: Det är något som jag gör fel, lampaCloset vill inte tända, fungera ifall jag kör en egen event för den.

Code: Select all

--[[
%% properties
339 value
345 value
220 value
51 value
211 value
%% events
5 CentralSceneEvent
22 GeofenceEvent
%% globals 
TimeOfDay
Test
%% autostart 
--]] 

Code: Select all

 dev = 
    { livingroom = {lampaTak = 206, lampaBed = 205, lampaGlas = 308},
      kitchen = {lampaWind  = 33, lampaSink = 68},
      bathroom = {lampaBad = 329, lampaMirr = 335},
      closet = {lampaCloset = 152},
      hallway = {lampaHall = 40},
    },

Code: Select all

 -- Dina regler
 --rule("@now+00:00:02 => livingroom. lampaBed:on") -- Test light, turn on 2 seconds after ER started/saved
 --rule("@sunset-00:10 & wnum % 2 == 1 => kitchen.lampaTak:value=30") -- Sätt till 30%, udda veckor, solnedgång-10min
 -- Tänd och släck jämna veckor ( Jämn vecka = 0 )
   rule("@05:28 & wday('mon-thu') & wnum%2 == 0 => kitchen.lampaSink:value=10") -- Sätt till 20%, jämna veckor, soluppgång-10min
   rule("@05:29 & wday('mon-thu') & wnum%2 == 0 => kitchen.lampaWind:value=1") -- Sätt till on%, jämna veckor, soluppgång-10min
   rule("@05:29 & wday('mon-thu') & wnum%2 == 0 => livingroom.lampaTak:value=1")
   rule("@05:28 & wday('fri') & wnum%2 == 0 => kitchen.lampaSink:value=10") -- Sätt till 20%, jämna veckor, soluppgång-10min
   rule("@05:29 & wday('fri') & wnum%2 == 0 => kitchen.lampaWind:value=1") -- Sätt till on%, jämna veckor, soluppgång-10min
   rule("@05:29 & wday('fri') & wnum%2 == 0 => livingroom.lampaTak:value=1")
   rule("@07:10 & wday('mon-fri') & wnum%2 == 0 => kitchen.lampaSink:value=0")
   rule("@08:15 & wday('mon-fri') & wnum%2 == 0 => kitchen.lampaWind:value=0")
   rule("@sunrise+00:10 => livingroom.lampaTak:value=0")
  --rule("@08:10 & wday('mon-fri') & wnum%2 == 0 => livingroom.lampaTak:value=0")
   rule("@23:00 & wday('mon-thu') => livingroom.lampaGlas:off")
   rule("@24:00 & wday('fri-sun') => livingroom.lampaGlas:off")
 -- Tänd och släck udda veckor ( Udda vecka = 1 )
   --rule("@now+00:00:02 => 12001:on") -- Test light, turn on 2 seconds after ER started/saved
  --rule("@now+00:00:02 => 12002:on") -- Test light, turn on 2 seconds after ER started/saved
   rule("@sunset+03:00 & wday('mon-fri') => 12001:value'Night scene'")
   rule("@04:28 & wday('mon-thu') & wnum%2 == 1 => kitchen.lampaSink:value=10") -- Sätt till 20%, udda veckor, soluppgång-10min
   rule("@04:29 & wday('mon-thu') & wnum%2 == 1 => kitchen.lampaWind:value=1") -- Sätt till on, udda veckor, soluppgång-10min
   rule("@04:29 & wday('mon-thu') & wnum%2 == 1 => livingroom.lampaTak:value=1")
   rule("@04:10 & wday('fri') & wnum%2 == 1 => kitchen.lampaSink:value=10") -- Sätt till 20%, udda veckor, soluppgång-10min
   rule("@04:10 & wday('fri') & wnum%2 == 1 => kitchen.lampaWind:value=1") -- Sätt till on, udda veckor, soluppgång-10min
   rule("@04:11 & wday('fri') & wnum%2 == 1 => livingroom.lampaTak:value=1")
   rule("@07:15 & wday('mon-fri') & wnum%2 == 1 => kitchen.lampaSink:value=0")
   rule("@08:17 & wday('mon-fri') & wnum%2 == 1 => kitchen.lampaWind:value=0")
   --rule("@sunrise+00:10 & wday('mon-fri') & wnum%2 == 1 => livingroom.lampaTak:value=0")
  --rule("@08:10 & wday('mon-fri') & wnum%2 == 1 => livingroom.lampaTak:value=0")
   sensors = {339, 345}
   lampaBad = 329
   lampaMirr = 335
   rule("sensors:breached & 04:10..22:30 => lampaBad:value=100")
   rule("sensors:breached & 22:30..04:10 => lampaBad:value=5")
   rule("sensors:breached & 04:10..23:59 => lampaMirr:value=1")
   rule("trueFor(00:04,sensors:safe) => lampaBad:off")  
   rule("trueFor(00:04,sensors:safe) => lampaMirr:off")  
  --
   sensors = 220
   lampaCloset = 152
   rule("sensors:breached => closet.lampaCloset:value=1")
   rule("trueFor(00:02,sensors:safe) => closet.lampaCloset:value=0")
  --
   doorsensor = 211
   motionsensor = 51
   sensors = {doorsensor, motionsensor}
   lampaHall = 40
   rule("sensors:breached => hallway.lampaHall:value=75")
   rule("trueFor(00:03,sensors:safe) => hallway.lampaHall:off")
jang
Medlem
Posts: 193
Joined: 05 Jan 2014, 00:44
Location: Stockholm

08 Dec 2019, 19:08

Lua variablen sensors definerades om flera ggr och det blir den sista som gäller.
Nu har jag bytt namn till badSensors, doorSensors etc.

Code: Select all

   rule("@05:28 & wday('mon-thu') & wnum%2 == 0 => kitchen.lampaSink:value=10") -- Sätt till 20%, jämna veckor, soluppgång-10min
   rule("@05:29 & wday('mon-thu') & wnum%2 == 0 => kitchen.lampaWind:value=1") -- Sätt till on%, jämna veckor, soluppgång-10min
   rule("@05:29 & wday('mon-thu') & wnum%2 == 0 => livingroom.lampaTak:value=1")
   rule("@05:28 & wday('fri') & wnum%2 == 0 => kitchen.lampaSink:value=10") -- Sätt till 20%, jämna veckor, soluppgång-10min
   rule("@05:29 & wday('fri') & wnum%2 == 0 => kitchen.lampaWind:value=1") -- Sätt till on%, jämna veckor, soluppgång-10min
   rule("@05:29 & wday('fri') & wnum%2 == 0 => livingroom.lampaTak:value=1")
   rule("@07:10 & wday('mon-fri') & wnum%2 == 0 => kitchen.lampaSink:value=0")
   rule("@08:15 & wday('mon-fri') & wnum%2 == 0 => kitchen.lampaWind:value=0")
   rule("@sunrise+00:10 => livingroom.lampaTak:value=0")
  --rule("@08:10 & wday('mon-fri') & wnum%2 == 0 => livingroom.lampaTak:value=0")
   rule("@23:00 & wday('mon-thu') => livingroom.lampaGlas:off")
   rule("@24:00 & wday('fri-sun') => livingroom.lampaGlas:off")
 -- Tänd och släck udda veckor ( Udda vecka = 1 )
   --rule("@now+00:00:02 => 12001:on") -- Test light, turn on 2 seconds after ER started/saved
  --rule("@now+00:00:02 => 12002:on") -- Test light, turn on 2 seconds after ER started/saved
   rule("@sunset+03:00 & wday('mon-fri') => 12001:value'Night scene'")
   rule("@04:28 & wday('mon-thu') & wnum%2 == 1 => kitchen.lampaSink:value=10") -- Sätt till 20%, udda veckor, soluppgång-10min
   rule("@04:29 & wday('mon-thu') & wnum%2 == 1 => kitchen.lampaWind:value=1") -- Sätt till on, udda veckor, soluppgång-10min
   rule("@04:29 & wday('mon-thu') & wnum%2 == 1 => livingroom.lampaTak:value=1")
   rule("@04:10 & wday('fri') & wnum%2 == 1 => kitchen.lampaSink:value=10") -- Sätt till 20%, udda veckor, soluppgång-10min
   rule("@04:10 & wday('fri') & wnum%2 == 1 => kitchen.lampaWind:value=1") -- Sätt till on, udda veckor, soluppgång-10min
   rule("@04:11 & wday('fri') & wnum%2 == 1 => livingroom.lampaTak:value=1")
   rule("@07:15 & wday('mon-fri') & wnum%2 == 1 => kitchen.lampaSink:value=0")
   rule("@08:17 & wday('mon-fri') & wnum%2 == 1 => kitchen.lampaWind:value=0")
   --rule("@sunrise+00:10 & wday('mon-fri') & wnum%2 == 1 => livingroom.lampaTak:value=0")
  --rule("@08:10 & wday('mon-fri') & wnum%2 == 1 => livingroom.lampaTak:value=0")
  
   badSensors = {339, 345}
   --lampaBad = 329
   --lampaMirr = 335
   rule("badSensors:breached & 04:10..22:30 => bathroom.lampaBad:value=100")
   rule("badSensors:breached & 22:30..04:10 => bathroom.lampaBad:value=5")
   rule("badSensors:breached & 04:10..23:59 => bathroom.lampaMirr:value=1")
   rule("trueFor(00:04,badSensors:safe) => bathroom.lampaBad:off; bathroom.lampaMirr:off")  
  -- rule("trueFor(00:04,badSensors:safe) => bathroom.lampaMirr:off")  
  --
   closetSensors = 220
   --lampaCloset = 152
   rule("closetSensors:breached => closet.lampaCloset:value=1")
   rule("trueFor(00:02,closetSensors:safe) => closet.lampaCloset:value=0")
  --
   doorsensor = 211
   motionsensor = 51
   doorSensors = {doorsensor, motionsensor}
   --lampaHall = 40
   rule("doorSensors:breached => hallway.lampaHall:value=75")
   rule("trueFor(00:03,doorSensors:safe) => hallway.lampaHall:off")
   
Texan
Medlem
Posts: 127
Joined: 25 Dec 2015, 15:07

08 Dec 2019, 19:37

:) Tack nu fungerar det, börjar förstå mer och mer hur jag ska göra....
Post Reply