Wekker tijd uitlezen

Ik vond dit een leuke uitdaging (en handig om zelf te hebben :smiley:) en ik heb dit HomeyScript geschreven:

let bSearchAll = false;
let bAlarmFound = false;
let bCreateTags = true;
let AlarmName = "";
let IgnoredAlarms = ["XXXXX","YYYYY"] // Hiermee kan je alarmen uitsluiten

//Moet we naar een specifiek alarm zoeken?
if (args[0] == "" || args[0] == undefined) {
  bSearchAll = true;
  console.log ('We doorzoeken alle alarmen');
}else{
  AlarmName = args[0]
  console.log ('We zoeken naar alarm '+AlarmName+"'");
}

let NextAlarmUNIX = 0;
let NextAlarmName = "";
let NextAlarmTime = "";
let NextAlarmDay = "";
let NextAlarmPhrase = "";

//Loop door alle alarmen
let alarms = await Homey.alarms.getAlarms();
for (const alarm of Object.values(alarms)){
  if ((bSearchAll && !IgnoredAlarms.includes(alarm.name) && alarm.enabled)||
      (!bSearchAll && alarm.name == AlarmName && alarm.enabled)){
    bAlarmFound = true;
    if (NextAlarmUNIX == 0){
      // Allereerste alarm is gevonden
      NextAlarmName = alarm.name;
      NextAlarmUNIX = DateToUNIXTimeStamp(alarm.nextOccurance)
      NextAlarmTime = alarm.time;
      NextAlarmDay = getDayName(alarm.nextOccurance,"nl-NL");
    } else {
      // We hebben nog een alarm gevonden
      // Check of dit alarm eerder afgaat dan de vorige
      if (DateToUNIXTimeStamp(alarm.nextOccurance) < NextAlarmUNIX){
        NextAlarmName = alarm.name;
        NextAlarmUNIX = DateToUNIXTimeStamp(alarm.nextOccurance)
        NextAlarmTime = alarm.time;
        NextAlarmDay = getDayName(alarm.nextOccurance,"nl-NL");
      }
    }
  }
}

if (bAlarmFound){ // We hebben een alarm gevonden
  NextAlarmPhrase = "Het eerstvolgende alarm is '"+
    NextAlarmName+"', die op "+NextAlarmDay+" afgaat om "+NextAlarmTime+"."

  if (bCreateTags){ // Maak tags aan die gebruikt kunnen worden in andere flows
    await tag('NextAlarmName', NextAlarmName);
    await tag('NextAlarmDay', NextAlarmDay);
    await tag('NextAlarmTime', NextAlarmTime);
    await tag('NextAlarmPhrase', NextAlarmPhrase);
  }
}else{ // We hebben geen alarm gevonden
  if (bSearchAll){
    NextAlarmPhrase = "Geen alarm gevonden."
  }else{
    NextAlarmPhrase = "Alarm '"+AlarmName+"' is niet gevonden of het alarm staat niet aan."
  }
  
  if (bCreateTags){ // Maak tags aan die gebruikt kunnen worden in andere flows
    await tag('NextAlarmName', NextAlarmName);
    await tag('NextAlarmDay', NextAlarmDay);
    await tag('NextAlarmTime', NextAlarmTime);
    await tag('NextAlarmPhrase', NextAlarmPhrase);
  }
}

// Debug de NextAlarmPhrase in de output
console.log(NextAlarmPhrase);

// Geef terug of er een alarm is gevonden
return bAlarmFound;

function DateToUNIXTimeStamp (my_date){
  const date = new Date(my_date);
  return (Math.floor(date.getTime()/1000));
}

function getDayName(dateStr, locale){
    var date = new Date(dateStr);
    return date.toLocaleDateString(locale, { weekday: 'long' });        
}

Je kan alle alarmen doorzoeken, of specifiek naar een alarm zoeken:

En dit zijn de tags die worden gegenereerd:

image

5 Likes