Voor specifieke vragen over LUA scenes.
Gebruikersavatar
Door Sepio
#206
Ik heb een Figaro motion sensor voor mijn zolderraam hangen die naar buiten kijkt richting het wolkendek. Vervolgens heb ik een stukje lua code geschreven welke het aantal lux vertaald naar een begrijpbare waarde welke wordt opgeslagen in 2 globale variabelen. Deze variabelen kun je vervolgens eenvoudig gebruiken in andere lua of grafische blokken scene's.

Maak 2 variabelen aan in Panelen\Variabelen Paneel\
De 1e variabele maak je aan onder "Variabelen:". Geef deze de naam "lightLevel" en de waarde 0.
De 2e variabele maak je aan onder "Vooraf ingestelde variabelen:". Geef deze de naam "lightLevelName" en geef deze de volgende 9 waardes:
  • 1: Pitch Black
  • 2: Very Dark
  • 3: Dark Indoors
  • 4: Dim Indoors
  • 5: Normal Indoors
  • 6: Bright Indoors
  • 7: Dim Outdoors
  • 8: Cloudy Outdoors
  • 9: Direct Sunlight
Afbeelding

Maak vervolgens een lua scene aan met de naam "Bepaal lichtsterkte" met de volgende code. Let op. Bij mij heeft de motion sensor ID 137. Dit zal bij jullie anders zijn en deze moet dus aangepast worden in onderstaande code. (In local lightSensorId = ... ; )
Code: Selecteer alles--[[
%% autostart
%% properties
%% globals
--]]

-- check script instance count in memory
if (fibaro:countScenes() > 1) then
  fibaro:debug("Script already running.");
  fibaro:abort();
end;   

local lightSensorId = 137; 
local lux = 0;
local prevLux = -1;
local lightLevel;
local prevLevel = -1;
local lightLevelName;

while true do
 
  lux = tonumber(fibaro:getValue(lightSensorId,"value"));
  if lux < 1 then
    lightLevel = 1;
    lightLevelName = "1: Pitch Black";
  elseif lux < 10 then
    lightLevel = 2;
    lightLevelName = "2: Very Dark";   
  elseif lux < 300 then
    lightLevel = 3;
    lightLevelName = "3: Dark Indoors";
  elseif lux < 800 then
    lightLevel = 4;
    lightLevelName = "4: Dim Indoors";
  elseif lux < 3000 then
    lightLevel = 5;
    lightLevelName = "5: Normal Indoors";
  elseif lux < 5000 then
    lightLevel = 6;
    lightLevelName = "6: Bright Indoors";
  elseif lux < 10000 then
    lightLevel = 7;
    lightLevelName = "7: Dim Outdoors";
  elseif lux < 30000 then
    lightLevel = 8;
    lightLevelName = "8: Cloudy Outdoors";
  elseif lux < 100000 then
    lightLevel = 9;
    lightLevelName = "9: Direct Sunlight";
  end;
 
  if prevLevel ~= lightLevel then
    fibaro:debug("Lux: " .. lux .." => Light Level: " .. lightLevelName);
    fibaro:setGlobal("lightLevel", lightLevel); 
    fibaro:setGlobal("lightLevelName", lightLevelName);
  end;

  prevLux = lux;
  prevLevel = lightLevel;
  fibaro:sleep(60*1000);
end;


En geef deze scene de volgende instellingen
  • Maximaal aantal actieve exemplaren: 1
  • Run Scene: Automatic
  • Sta niet toe dat een alarm de scène stopt tijdens een actief alarm: aanvingen

Als laatste de output van vannacht. (Het is nu einde augustus).
Afbeelding
Laatst gewijzigd door Sepio op 28 Aug 2016, 12:03, 6 keer totaal gewijzigd.
Gebruikersavatar
Door Sepio
#207
Hierbij een voorbeeld van de scenes waarin ik de variabelen gebruik:
Ik heb een nieuwe globale variabele aangemaakt met de naam sunState. Deze heeft twee waardes, namelijk "sunrise" en "sunset".
Afbeelding
Afbeelding

Vervolgens gebruik ik de subState variabele weer in een volgende scene om mijn lampen automatisch aan te zetten als het donker is. (In de zomer is het soms erg laat donker. Aangezien ik al vroeg op moet lig ik dan soms al in bed en dan is het niet handig als opeens de lampen aan gaan. Dus het aanzetten van de lampen gebeurt alleen als ik nog wakker ben).
Afbeelding
#211
Bedankt voor het delen!!!
#798
Hoi Sepio,

Dank je voor het delen van je script ik loop toch tegen een probleem aan. Kun jij me helpen dit op te lossen?
De light level klopt wel in het variable scherm maar lightLevelName komt niet overeen. Die blijft ongewijzigd. Op dit moment 19:40 zegt het debug scherm lightLevel 1 en geeft Pitch black maar in de vooraf ingesteld variabelen kan ik dit niet aflezen.Enig idee wat er mis gaat?

Alvast dank voor je hulp.

Gr, Hans
--[[
%% autostart
%% properties
%% globals
--]]

-- check script instance count in memory
if (fibaro:countScenes() > 1) then
fibaro:debug("Script already running.");
fibaro:abort();
end;

local lightSensorId = 180;
local lux = 0;
local prevLux = -1;
local lightLevel;
local prevLevel = -1;
local lightLevelName;

while true do

lux = tonumber(fibaro:getValue(lightSensorId,"value"));
if lux < 1 then
lightLevel = 1;
lightLevelName = "1: Pitch Black";
elseif lux < 10 then
lightLevel = 2;
lightLevelName = "2: Very Dark";
elseif lux < 300 then
lightLevel = 3;
lightLevelName = "3: Dark Indoors";
elseif lux < 800 then
lightLevel = 4;
lightLevelName = "4: Dim Indoors";
elseif lux < 3000 then
lightLevel = 5;
lightLevelName = "5: Normal Indoors";
elseif lux < 5000 then
lightLevel = 6;
lightLevelName = "6: Bright Indoors";
elseif lux < 10000 then
lightLevel = 7;
lightLevelName = "7: Dim Outdoors";
elseif lux < 30000 then
lightLevel = 8;
lightLevelName = "8: Cloudy Outdoors";
elseif lux < 100000 then
lightLevel = 9;
lightLevelName = "9: Direct Sunlight";
end;

if prevLevel ~= lightLevel then
fibaro:debug("Lux: " .. lux .." => Light Level: " .. lightLevelName);
fibaro:setGlobal("lightLevel", lightLevel);
fibaro:setGlobal("lightLevelName", lightLevelName);
end;

prevLux = lux;
prevLevel = lightLevel;
fibaro:sleep(60*1000);
end;

Fibaro HC2 4.160
6x Fibaro FGK-101 Deur/Raam sensor +DS18B20
8x Fibaro FGS-221 2*1,5 kW Relais Schakelaar
2x Fibaro FGRGBW RGBW Module
5x Fibaro FGMS-001 Bewegingssensor
2x Fibaro FGBS-321 Universele Binaire Sensor
4x Fibaro FGWPF-102 Tussenstekker
Philips Hue white ambiance
2 Foscame dome cameras
#929
Persoonlijk ben ik geen voorstander om gelijke variabel namen aan te houden voor zowel local als global.
Je debug laat alleen de local variabelen zien en zegt daarmee niets over de setGlobal acties daarna.

Je geeft geen informatie over de aangemaakte Global variabelen.
Heeft de aangemaakte Global variabele wel de juiste naam? Hoofdletters?
Zijn de opties hiervan aangemaakt inclusief de getallen ervoor en dus met exact dezelfde tekst?

Dag allen, Graag wil ik een scene bouwen waarbij […]

Dimmer of switch

Op een een of andere manier is mijn bericht verwi[…]

Ik ben benieuwd hoe Ravaoo het heeft opgelost...

Op zoek naar een Fibaro Shop?