Wekker tijd uitlezen

Ik ben momenteel bezig een ikea lamp en een sonos speaker in te richten als Wakeup light.
Alles is gelukt om dit te doen.
Echter zou als ik ga slapen willen horen voor hoelaat de wekker de volgende dag staat ingesteld.
Echter kan ik nergens een variable vinden waar ik dit kan vinden.

Weet iemand toevallig hoe ik dit naar de Sonos speaker kan sturen?

Interessant, mij is het niet gelukt om zoiets te bouwen.
Zou je het willen delen? Want ik wil hetzelfde.

Ik weet ook niet hoe je de ingestelde alarmen kan uitlezen. Aangezien er geen variable voor is zal dit wellicht met een script moeten.

1 Like

Volgens mij kan dit niet direct, zover ik weet. Maar heb je een vast wekker schema, of veranderd dit dagelijks/wekelijks? Als het een vast schema is zou je dit elke dag over de Sonosbox kunnen laten zeggen?

Als het geen vast schema is zou je de wekker-tijd ook in de agenda kunnen zetten, deze laten uitlezen door Homey en op basis van agenda-items een melding over je Sonos laten gaan.

Je kunt je alarmen/wekkers bewerken, uitlezen, instellen en aan/uitschakelen met HomeyScripts.
Homey.alarms.getAlarms

1 Like

Hier een link met wat voorbeelden.
@Arnold_vd_Linden

2 Likes

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

Als ik het script goed begrijp (ben geen programmeur) zoekt die dan naar het eerste alarm.
Echter heb ik een alarm voor me zelf en die van me vrouw.
Kan ik het ook specifiek naar 1 alarm laten zoeken?

Ja, door een argument mee te geven (de naam van de wekker). Zie het tweede plaatje van de advanced flows.

Super. Gelijk effe proberen!

Super dit werkt!!.
Bedankt voor het mee denken.

2 Likes

Top!
Ook namens mij iedereen bedankt. Ik ga hier ook weer eens verder mee knutselen.

1 Like

Bedankt, pressies wat ik zocht!