Swipe to the left

Variabelen feest

22 februari 2017 8218 keer bekeken Geen reacties

Het grote Fibaro variabelen feest is begonnen!


Variabelen voegen extra functionaliteit toe aan je basisstation. Maar wat zijn variabelen en wat kun je er mee? Wij leggen het uit.

Wat is zijn variabelen?
Je hoeft geen Einstein te zijn om met variabelen te kunnen spelen. Het is leuk en handig als je het eenmaal onder de knie hebt!
Het woord zegt het al een variabele kan van waarde veranderen. Vaak word een letter gebruikt om een variabele te identificeren
a = 1
maar een variabele kan ook een woord zijn
temperatuur =15
Variabelen kunnen ook cijfers bevatten (zolang het maar niet alleen cijfers zijn) dus
temperatuur1 = 15
mag wel, maar een variabele die alleen uit cijfers bestaat mag natuurlijk niet.
12 =14
Dat ziet er ook niet logisch uit trouwens.
Voor de zekerheid zouden we ook geen variabele gebruiken die met cijfers beginnen:
15temperatuur =12
Is wat ons betreft geen goed idee.
Let er op dat variabelen hoofdletter gevoelig zijn. Dus
temperatuur1 en Temperatuur1
zijn 2 verschillende variabelen.

Typen variabelen
Daarnaast zijn er ook nog verschillende typen variabelen. Denk aan variabelen die tekst bevatten, deze worden tussen “” geplaatst. Let op er zijn verschillende typen “” dus kies degene die in je programmeeromgeving past.
Bericht1 = “De Brievenbus is geopend”
Er zijn ook variabelen die een waarde kunnen bevatten zoals
Temperatuur1 = 15
Bij getallen worden doorgaans geen haakjes gebruikt en dit is dus niet hetzelfde
Bericht1 = “15”
Temperatuur1 = 15

Met de Temperatuur1 kunnen we rekenen en met de variabele Bericht1 niet.
Dit kan wel
Temperatuur1 = Temperatuur1 +1
en dit kan niet
Bericht1 = Bericht1 +1
Overigens zijn er meer typen variabelen zoals datum en logisch (ja/nee) maar die bespreken we hier niet.
Sommige systemen kunnen wel 2 teksten bij elkaar ‘optellen'
Bericht2 = Bericht1 “ graden“
met als resultaat dat Bericht2 gelijk is aan "15 graden”

Overigens kun je bepaalde teksten wel omzetten naar getallen, als voorbeeld:
Temperatuur1 = tonumber(Bericht1)
In de Homecenter zou je dat kunnen gebruiken met het fibaro:debug commando. Dit een commando dat een resultaat op het scherm weergeeft.


In dit voorbeeld word de optelling gedaan binnen de fibaro:debug functie. Het resultaat staat in het scherm eronder
Overigens is het woord local (kleine letters) binnen de HomeCenter 2 nodig om aan te geven dat de variabele alleen binnen deze scene beschikbaar is.
Wil je de variabele ook op andere plekken beschikbaar hebben dan kun je hem als global variabele maken (ik weet niet of dit in de HomeCenter werkt). Wat wij doen is hem opslaan in het variabelen paneel.


In het variabelen paneel kun je met de hand een variabele aanmaken (hoofdlettergevoelig).

Met de ingebouwde functie fibaro:setglobal commando kun je een variabele opslaan in het geheugen van de Homecenter
Wanneer je de variabele later nodig hebt dan kun je hem ophalen via fibaro:getglobal commando.
Voorbeeld om de huidige tijd op te slaan in een variabele in het variabelenpaneel:
fibaro:setGlobal("TijdPompUit", tonumber(os.time()))
Het systeem zal nu de huidige tijd (in seconden vanaf 1-1-1900, dus een héél groot getal) opslaan in de variabele TijdPompUit
waarbij de functie os.time() de huidige tijd bevat (die er ongeveer zo uit ziet : 1487754145) . We zijn al een paar seconden onderweg sinds 1-1-1900.
de functie tonumber() is een functie die van een tekst-variabele een getal-variabele maakt.

Maar wat kan ik er nu precies mee?
Nou leuk hoor ik je denken. En nu? Nu begint het pas leuk te worden!

De variabele als teller.
Je kunt een scene maken die als de deur opengaat een variabele ophoogt. Zo weet je precies hoeveel mensen er binnen komen en hoe lang je batterij meegaat.
De variabele Brievenbus word met 1 verhoogd
fibaro:setGlobal("Brievenbus", tonumber(fibaro:getGlobalValue("Brievenbus"))+1)


De variabele als timer.
Bij de ROBBshop maken we gebruik van een centrale scene die iedere minuut draait en die een aantal zaken controlleerd.
Één van die zaken is om te kijken hoe lang een bepaalde lamp al aan is om hem na een periode uit te schakelen.
Het leuk is dat bij een Z-wave module zelf een aantal zaken bijhoudt. Zo houdt een schakelmodule bij wanneer hij voor het laast ‘gemodificeerd’ is. Dus voor het laatst van aan->uit of van uit->aan is gegaan.
Die functie hiervoor
fibaro:getModificationTime
De waarde die de functie teruggeeft is de tijd in seconden sinds 1-1-1900.
Deze tijd kunnen we vergelijken met de huidige tijd en als het verschil groter is dan bijvoorbeel 600 (10 minuten), dan kunnen we de lamp uitschakelen, mits de lamp aan is.
local LampLaatstBediend= tonumber(fibaro:getModificationTime(212, "value"));
waarbij 212 het unieke ID van de module is die we willen controleren
Om de vergelijking te maken gebruiken we de volgende if-then lus:
if os.time()- LampLaatstBediend >600
fibaro:call(212, "turnOff"); --Lamp in kwestie uit zetten
end
Uiteraard kun je de if-then lus nog veel verder uitbreiden, controleer bijvoorbeeld of de lamp aan is, om onnodig uitzetten te vookomen.
Zie ook ook ons Automatisch Toiletlicht-project.


De variababele als automatische alarminschakeling
Nog een handige functie, schakel automatisch het alarm in wanneer er gedurende langere tijd (3600 seconden in dit geval) geen beweging is gemeld door een bewegingsmelder.
local TijdNu =tonumber(os.time());
local TijdBeweging=tonumber(fibaro:getValue(214, "lastBreached")); --214 is het ID van de betreffende bewegingsmelder
local TijdStil=tonumber(TijdNu)-tonumber(TijdBeweging);
if tonumber(TijdStil) >3600 then
-- voeg hier de code of een scene toe die het alarm activeerd
end

De variabele als wisselfunctie
Een mooie toepassing hiervan zie je bij ons codepaneel om je alarm te activeren en deactiveren. Bij het plaatsen van een druppel of invoeren van de juiste code schakelt het codepaneel een relais gedurende 4 seconden. Helaas kun je geen onderscheidt maken tussen alarm in- en uitschakelen. Met een variabele kunnen we dit probleem eenvoudig oplossen.
Gewoon iedere keer dat het relais schakelt de variabele wisselen tussen 0 en 1.
En op basis van 0 en 1 kun je dan het alarm in en uitschakelen.
Zorg dat de scene getriggerd word door het wijzigen van de variabele:
--[[
%% properties
%% weather
%% events
%% globals
AlarmStatus
--]]
if ( tonumber(fibaro:getGlobalValue("AlarmStatus")) == tonumber("1") )
then
fibaro:setGlobal("AlarmStatus", "0");
--Voeg hier de acties toe als het alarm ingeschakeld word
elseif ( tonumber(fibaro:getGlobalValue("AlarmStatus")) == tonumber(“0") )
fibaro:setGlobal("AlarmStatus", “1");
--Voeg hier de acties toe als het alarm uitgeschakeld word
end

In beperkte mate kun je ook van variabelen gebruik maken in de Fibaro Homecenter lite. In onderstaande afbeeldingen zie je hoe dat je dat doet
In deze scene zie je hoe je een variabele op ja zet, in dit geval om 18.00 iedere dag

Dit is de scene die met de variabele werkt

En om 07.00 zetten we de variabele automatisch weer op nee

Tot zover onze blog over het gebruiken van variabelen. De exacte manier van codering (syntax) is per controller verschillend. Sommige controllers kunnen dit overigens niet (Home Center Lite bijvoorbeeld). Neem bij twijfel contact met ons op.
Mocht je verder nog vragen of opmerkingen hebben dan horen we die graag!

Team ROBBshop

 
Klantenservice telefoonnummer

+31737620762
ma-vrij: 10:00-17:00 en za 10:00-15:00

 
Adres

Gasstraat Oost 14A 5349 AV Oss Nederland

Google maps