Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Pga begränsningar i Homeys funktioner så skapades detta scriptet för att kunna få ut det högsta, lägsta samt
- genomsnittsvärdet för vald period och även klockslagen. Scriptet skulle kunna hämta via insights men jag känner
- att det blir för svårt för en som inte är så invigd i homeyscript och homeyns api att anpassa scriptet efter
- sina egna enheter och önskemål. Så jag gjorde därför istället så att man anropar scriptet med värdet (temperatur
- t.ex) som enda argument, varpå 5 st taggar uppdateras. Scriptet kan köras både under OCH och DÅ. Detta måste
- göras för att uppdatera värdena. Du kan sedan läsa av taggarna när du vill men det blir då en viss förskjutning
- om inte värdena precis uppdaterats.
- Du behöver ladda ner appen HOMEYSCRIPT till din Homey, därefter loggar du in på homeyscript.homey.app där du
- väljer att skapa ett nytt script som du sedan klistrar in alla dessa rader i inklusive denna text.
- Därefter anpassar du 2 st värden på raderna här nedanför. Tanken är att scriptet anropas med jämna mellanrum.
- Scriptet är i nuläget inställt på var 10:e minut och perioden är satt till 1440 minuter = 24 timmar men detta är
- alltså inte hur ofta scriptet verkligen körs utan enbart för att beräkna hur många värden som skall sparas.
- Skapa ett flöde som triggas t.ex var 10:e minut. Anropa scriptet via OCH eller DÅ med kortet "Run a script with
- an argument" som finns i appen HOMEYSCRIPT och skicka med temperaturen eller vad det nu kan vara som enda argument.
- Anropar du via OCH så kommer du antingen att få sant eller falskt tillbaka beroende på om det gick bra eller inte
- men enda anledningen att det skulle bli falskt är förhoppningsvis om det anropas utan argument.
- Taggarna hittar du sedan under sektionen homeyscript som brukar hamna längst ner i listan.
- */
- const intervalMinutes = 10; //Sätt denna till samma interval (i minuter) som du anropar
- const periodMinutes = 1440; //24 timmar = 1440 minuter
- const sys = await Homey.system.getInfo();
- let paramValue;
- if (args.length>0) {
- paramValue=parseFloat(args[0].replace(/\s/g, "").replace(/\u00A0/g, "")); //Rensa parametern från mellanslag och non-breaking space.
- }
- else
- {
- return false; //Måste anropas med argument från ett homeyflöde
- }
- const maxArrayLength = periodMinutes / intervalMinutes;
- let valueDateTime = new Date(sys.date);
- valueDateTime.setMinutes(valueDateTime.getMinutes() - valueDateTime.getTimezoneOffset());
- //Skapa ett par tomma arrayer att jobba med
- let valueList = [];
- let timeList = [];
- //Hämta data ifrån de globala variablerna (ligger kvar även efter omstart av Homey)
- if (global.get('persistentValueList')!=null) {
- valueList = global.get('persistentValueList');
- }
- if (global.get('persistentTimeList')!=null) {
- timeList = global.get('persistentTimeList');
- }
- //Rensa ut äldsta datan
- while (valueList.length>=maxArrayLength) {
- valueList.shift();
- }
- while (timeList.length>=maxArrayLength) {
- timeList.shift();
- }
- //Lägg till senaste värdet och tiden
- valueList.push(paramValue);
- timeList.push(valueDateTime.toISOString());
- let lowestValue = valueList[0];
- let lowestValueTime = timeList[0];
- let highestValue = valueList[0];
- let highestValueTime = timeList[0];
- let valuesSum = 0; //Räknar ihop alla värdena för att senare kunna dividera och få ett genomsnitt
- for (index = 0; index < valueList.length; ++index) {
- if (valueList[index]!=null) {
- valuesSum+=valueList[index];
- if (valueList[index]<lowestValue) {
- lowestValue=valueList[index];
- lowestValueTime=timeList[index];
- }
- if (valueList[index]>highestValue) {
- highestValue=valueList[index];
- highestValueTime=timeList[index];
- }
- }
- // console.log(index + " = " + valueList[index] + " " + timeList[index]);
- }
- //console.log("Kallast var " + lowestValue + " grader kl " + lowestValueTime);
- //console.log("Varmast var " + highestValue + " grader kl " + highestValueTime);
- //Ändra nedanstående till false för att radera taggar och globala variabler
- if (true){
- //Sätt taggarna
- await setTagValue('lowest', {type: 'number', title: 'Lägsta värde'}, lowestValue);
- await setTagValue('highest', {type: 'number', title: 'Högsta värde'}, highestValue);
- await setTagValue('lowestTime', {type: 'string', title: 'Lägsta värde tid'}, lowestValueTime.substring(11,16));
- await setTagValue('highestTime', {type: 'string', title: 'Högsta värde tid'}, highestValueTime.substring(11,16));
- await setTagValue('average', {type: 'number', title: 'Snitt'}, Math.round((valuesSum/valueList.length)*100)/100);
- //Spara i de globala variablerna
- global.set("persistentValueList",valueList);
- global.set("persistentTimeList",timeList);
- return true;
- }
- else
- {
- //Radera taggarna
- await setTagValue('lowest', {type: 'number', title: 'Lägsta värde'}, undefined);
- await setTagValue('highest', {type: 'number', title: 'Högsta värde'}, undefined);
- await setTagValue('lowestTime', {type: 'string', title: 'Lägsta värde tid'}, undefined);
- await setTagValue('highestTime', {type: 'string', title: 'Högsta värde tid'}, undefined);
- await setTagValue('average', {type: 'number', title: 'Snitt'}, undefined);
- //Radera globala variablerna
- global.set('persistentValueList',undefined);
- global.set('persistentTimeList',undefined);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement