HomeyScript

Gedeelde script van: Jeroen Huls


Ik bereken met HomeyScript een douchewaarde. Dit doe ik dmv een aantal

sensoren:

– Een watermeter (waarde: 5)

– P1-meter (waarde: 1)

– Slimme stekker met stroommeting op mijn CV-ketel (waarde: 1)

– Bewegingssensor in de voorruimte van de badkamer (waarde: 3)

– Bewegingssensoren in de toiletten (waarde: -1 per toilet, het is aannemelijk dat er zo doorgetrokken wordt en daarmee de waterdoorstroming op het niveau douchen komt)

Bovenstaande factoren heb ik getallen/waardes meegegeven, deze waardes heb ik in variabelen gestopt. Aan de hand van de berekende waarde is het aannemelijk dat er iemand staat te douchen, daar doe ik dan in diverse flows weer acties mee uitvoeren (meten hoe lang, berekenen hoeveelheid water en gas tijdens douchebeurt, spiegel verwarming wel of niet aan, verlichting dimmen).

Ik begin altijd met alles op 0 of false te zetten. Daarna haal ik in het script de standaard waardes op (de ID’s heb ik even vervangen door sterretjes). Vervolgens ga ik kijken of de factoren ’true’ zijn, zo ja, dan tel ik de bijbehorende waarde bij mijn douchewaarde op. De uiteindelijk berekende waarde stop ik in een Better Logic variabele (Homey’s eigen variabelen zijn helaas alleen maar uit te lezen, niet te vullen) om daar vervolgens de benoemde acties mee uit te voeren.

/* Stel de douchewaarde opnieuw in */ 

// Variabelen voor waardes maken
var DW = 0;
var DA = false;
var DWw = 0; 
var = 0;
var DWs = 0; 
var DWa = 0; 
var DWt1 = 0; 
var DWt2 = 0; 
// Rekenwaarde variabelen specificeren 
let VAR_DWw = await Homey.logic.getVariable({id: "*****"}); 
let VAR_DWg = await Homey.logic.getVariable({id: "*****"}); 
let VAR_DWs = await Homey.logic.getVariable({id: "*****"}); 
let VAR_DWa = await Homey.logic.getVariable({id: "*****"}); 
let VAR_DWt1 = await Homey.logic.getVariable({id: "*****"}); 
let VAR_DWt2 = await Homey.logic.getVariable({id: "*****"}); 
let VAR_DA = await Homey.logic.getVariable({id: "*****"}); 

// Reken waardes in Script variabelen stoppen 
DA = VAR_DA.value; DWa = VAR_DWa.value; 
DWw = VAR_DWw.value; DWg = VAR_DWg.value; 
DWs = VAR_DWs.value; DWt1 = VAR_DWt1.value; 
DWt2 = VAR_DWt2.value;

// Controle variabelen specificeren 
let VAR_Aanw = await Homey.logic.getVariable({id: "*****"}); 
let VAR_Wat = await Homey.logic.getVariable({id: "*****"}); 
let VAR_Gas = await Homey.logic.getVariable({id: "*****"}); 
let VAR_Str = await Homey.logic.getVariable({id: "*****"}); 
let VAR_WC1 = await Homey.logic.getVariable({id: "*****"}); 
let VAR_WC2 = await Homey.logic.getVariable({id: "*****"});

// Douchewaarde berekenen 
// AANWEZIGHEID if ((VAR_Aanw.value == true) || (DA.value == true)) { DW = DW + DWa; 
}; 
// WATER 
if (VAR_Wat.value == true) { DW = DW + DWw; }; 
// GAS 
if (VAR_Gas.value == true) { DW = DW + DWg; }; 
// STROOM 
if (VAR_Str.value == true) { DW = DW + DWs; }; 
// WC 1 
if (VAR_WC1.value == true) { DW = DW + DWt1; }; 
// WC 2
if (VAR_WC2.value == true) { DW = DW + DWt2; }; 

// Variabele in Better Logic plaatsen 
let BLApp = await Homey.apps.getApp({id:"net.i-dev.betterlogic" }); BLApp.apiPut("Douchewaarde/" + DW); 

// Klaar return(true);

Gedeelde script van: Jeroen Huls


Voor mijn ventilatiebox heb ik een afstandsbediening slim gemaakt met een Fibaro Double Smart Module. Dit is een relais die de stroomkring van, in dit geval, de afstandsbediening compleet maakt.

Om het indrukken na te bootsen en de stroomkring niet te lang compleet te houden (afstandsbediening zijn tip-toetsen) zet ik, op basis van ID van de schakelaar (*****), de schakelaar aan en 250ms later weer uit. Dit heb ik voor de Automatische stand en voor stand 2 van de ventilator. Er ligt nog een Double Smart Module klaar voor stand 3 en voor stand 1 of de timerstand. Voor iedere stand heb ik straks zo’n script.

.

Deze afbeelding heeft een leeg alt-attribuut; de bestandsnaam is Homey-script-logo-400-x-120-px.png
/* Stel de MV-box in */ 

// Apparaten specificeren let OrconAuto = await Homey.devices.getDevice({id: "*****"}); 

// Apparaten aan-uit 
OrconAuto.setCapabilityValue('onoff', true); 
await wait(250); 
OrconAuto.setCapabilityValue('onoff', false); 

// Klaar return(true);
Deze afbeelding heeft een leeg alt-attribuut; de bestandsnaam is Homey-script-logo-400-x-120-px.png

Gedeelde script van: Jeroen Huls


In dit script bepaal ik de tijd en datum over (ongeveer) 24 uur. In mijn geval laat ik, via flows, mijn alarm weten dat ik hoogst waarschijnlijk met vakantie ben en er een wat groter afschrikeffect mag plaats vinden dan wanneer we ieder moment weer terug kunnen zijn van bijvoorbeeld het boodschappen doen.

Dit script is natuurlijk ook voor andere zaken te gebruiken voor acties die in de toekomst plaats moeten vinden op een bepaalde tijdsduur vanaf nu. Ik heb gekozen om mijn flow ieder uur te laten triggeren, dit zou natuurlijk vaker kunnen zodat wel met een exactere tijd gewerkt kan worden, maar voor vakantie, wat

misschien 2x per jaar is, leek me dat wat te veel van het goede. In Homey kan je helaas niet in een tijd of datum trigger een variabele gebruiken, anders had dat een mooiere oplossing geweest “ALS de tijd is …”. Vandaar dat ik de tijd afrond op hele uren, dan kan ik Homey ieder uur laten kijken of het de

juiste tijd en datum is. Ik start dit script op het moment dat het alarm gezet wordt. Wanneer het alarm er weer af gaat zet ik de variabelen (met een simpele flow) op streepjes, zodat ik zeker weet dat die nooit getriggerd kan worden.

Deze afbeelding heeft een leeg alt-attribuut; de bestandsnaam is Homey-script-logo-400-x-120-px.png
/* Datum en tijd van morgen */

// Huidige datum en tijd vast leggen
var Nu  =  new Date ();

// Eén dag toevoegen aan de huidige datum
Nu .setDate(	Nu .getDate() + 	1 );

// Alle elementen uit elkaar trekken
var Uur  =  Nu .getHours();
var Dag  =  Nu .getDate();
var Mnd  =  Nu .getMonth() + 	1 ;  // JavaScript maanden gaan van 0 tot 11 ipv
1 tot 12
var Jr  =  Nu .getFullYear();

// Mogelijke scenario's:
//-----------------------------------------
// Alles moet misschien nog een dag opschuiven ivm engelse tijd, 23-UK 
is dus 00-NL, anders klopt datum niet
if  ( Uur  ==  23 ) {
Nu .setDate(	Nu .getDate() + 	1 );
Uur  =  "00" ;
Dag  =  Nu .getDate();
Mnd  =  Nu .getMonth() + 	1 ;  // JavaScript maanden gaan van 0 tot 11 ipv 1
tot 12​
Jr  =  Nu .getFullYear();
}
// Zorgen voor dubbele getallen bij uren, dagen en maanden
if  (( Uur  !=  "00" ) && ( Uur  <  10 )) {
Uur  =  "0"  +  Uur ;
}
if  ( Dag  <  10 ) {
Dag  =  "0"  +  Dag ;
}
if  ( Mnd  <  10 ) {
Mnd  =  "0"  +  Mnd ;
}

// Tijd en datum in een variabele stoppen
var Tijd  =  Uur  +  ":00" ; 
var Datum  =  Dag  +  "-"  +  Mnd  +  "-"  +  Jr ;

// Tijd en datum zijn niet te triggeren met een variabele, maar wel te 
controleren met Logica, vandaar tijd op heel uur, flow triggeren op 
"Elke 1 uren" en tijd en datum bij EN controleren

// Variabelen in Better Logic plaatsen
let BLApp  =  await Homey .apps.getApp({id:	"net.i-dev.betterlogic"	 });
BLApp .apiPut(	"Inschakel tijd/"	 +  Tijd );
BLApp .apiPut(	"Inschakel datum/"	 +  Datum );

// Klaar
return ( true