[Beispiel] Flow mit Müll ( bzw. ein Müllkalender )

Beschreibung:
Hier habe ich für euch ein Beispiel eines Müllkalenders mit einem iCalEventDevice, der euch darüber informiert welche Mülltonne Morgen eventuell rausgestellt werden muss.
 

Vorraussetzung:

Paket Version
Smartha Miscellaneous 0.1.0-37

 

Schwirigkeitsgrad:
  :eight_spoked_asterisk: :eight_spoked_asterisk: :eight_spoked_asterisk: :asterisk: :asterisk:
 
 

Einfache Variante für nur einen Eintrag:
image

In dieser einfachen Variante bekommt ihr zu einem Kalendereintrag des Müllkalnders einen Tag vorher eine Nachrricht.

Inhalt der Funktions Node

// ID of iCall Peer
$peerId = 319;

// Laden der daten aus dem Müllkalender Device
$trashNextEventTimestamp = $hg->getValue($peerId, 2, "NEXT_EVENT");

if(date('d') == date('d', strtotime('-1 day', $trashNextEventTimestamp))) {
    $trashType = $hg->getValue($peerId, 2, "NEXT_EVENT_TITLE");
     // Auflistungs Zeilen jedes einzelne Event
    $msg['payload'] = "Morgen wird " . $trashType . " geholt";
    return $msg;
}

 
Hier wird nach dem Laden der Daten das Datum überprüft, um anschliessend die Message zu generieren.

Was Ihr ändern Müsst:
Die PeerId eures Kalender muss hier eingetragen werden.

// ID of iCall Peer
$peerId = 319;

Die PeerId findet Ihr in den Einstellungen des Gerätes.
image

Und natürlich könnt Ihr den Text der gesendet werden soll anpassen.

  $msg['payload'] = "Morgen wird " . $trashType . " geholt";

Und danach könnt ihr die Messages Genießen.

 
Komplexe Variante:
image

 
Unter umständen kann es natürlich vorkommen, dass nicht nur ein Eintrag Vorhanden ist.
Zum Beispiel wenn Altpapier und Biotonne am gleichen Tag geleert werden.
Genauso kann es sein, dass Ihr Freitags wissen wollt, ob Montags der Müll abgeholt wird. In der Komplexen Variante sind beide Fälle enthalten.

image

 

Inhalt der Funktions Node

// Peer ID des Müllkalenders
$peerId = 319;
// Event Label nur für NodeBlue wenn Ihr weitere sotierungen vor habt :)
$messageEventLabel="Info Müllabfuhr";
// Erste Zeile für die Message. 
// Auflistungs Zeilen weiter unten.
$messageEventTitle="Bitte folgende Mülltonnen heute rausstellen!\n";

// Laden der daten aus dem Müllkalender Device
$nextEventsArray = json_decode($hg->getValue($peerId, 5, "NEXT_EVENTS_LIST"),true);


$today = date('d.m.Y');
$todayWeekday = date("l", time());
$dayToCheckOffSet = 1;
// Erkennen ob Wochenende damit Freitags die Meldung für Montags schon erscheint 
// (kann wenn nicht nötig auskommentiert werden) 
if($todayWeekday == 'Friday'){
    $dayToCheckOffSet = 3;
} else if($todayWeekday == 'Sunday'){
    $dayToCheckOffSet = 0;
}else if($todayWeekday == 'Saturday'){
    $dayToCheckOffSet = 0;
}
// Wochenedne erkennung ENDE 

$dayToCheckTimestamp = strtotime($today . " + $dayToCheckOffSet day");
$dayToCheckFormatted = date('d.m.Y', $dayToCheckTimestamp);


// Durchlauf bei mehreren Events zur zusammenstellung der Message
$events = array();
foreach ($nextEventsArray as &$event) {
    $unixTimestamp = strtotime($event["EVENT_DATE"]);
    $lastEventDate = date('d.m.Y', $unixTimestamp);
    $lastEventWeekDay = date("l", $unixTimestamp);
    
    if($dayToCheckFormatted == $lastEventDate){
          array_push($events, $event);
    }
}
$msg['today'] = $today;
$msg['isWeekend'] = $dayToCheckOffSet == 0;
$msg['dayToCheck'] = $dayToCheckFormatted;
$msg['todayWeekday'] = $todayWeekday;
$msg['lastEventDate'] = $lastEventDate;
$msg['lastEventWeekDay'] = $lastEventWeekDay;
$msg['payload'] = $events;

$countEvents = count($events);
$message['event'] = $messageEventLabel;
$eventListText .= $messageEventTitle;

foreach ($events as &$event) {
    // Auflistungs Zeilen jedes einzelne Event
    $eventListText .= 'Am ' . $event['EVENT_DATE'] . ' wird ' . $event['EVENT_TITLE'] . ' abgeholt. ' . $event['EVENT_DESCRIPTION'];
    $eventListText .= "\n";
}
if($countEvents > 0){
    $message['payload'] = $eventListText;
    output(0, $message);
}

Was Ihr ändern Müsst:
Natürlich wieder die PeerId eures Kalender’s eintragen. ( siehe oben )

// Peer ID des Müllkalenders
$peerId = 319;

Wenn Ihr wollt die erste Zeile der Message

// Erste Zeile für die Message. 
// Auflistungs Zeilen weiter unten.
$messageEventTitle="Bitte folgende Mülltonnen heute rausstellen!\n";

Oder die Message der Einzelnenen Einträge

    // Auflistungs Zeilen jedes einzelne Event
    $eventListText .= 'Am ' . $event['EVENT_DATE'] . ' wird ' . $event['EVENT_TITLE'] . ' abgeholt. ' . $event['EVENT_DESCRIPTION'];

Und dann heißt es wieder Messages Genießen.

Viel Spaß dabei
Michael

Hier noch der Flow als Json:
Müllkalender_einfach.json (2,1 KB)

MüllkalenderKomplex.json (4,6 KB)

2 „Gefällt mir“

Hallo Michael,
eine Frage zu dem Objekt „iCalEventDevice“. Ich finde über das Objekt keine Doku oder Hilfe.
Welche Kalenderformate werden unterstütz? Nur Google Kalender, oder auch Kalender einer Synology?
Bei der ICAL-Adresse gibt es dabei was zu beachten? Reicht die URL oder was spezielles?

grafik

Ich verstehe auch noch nicht so recht den Zusammenhang zu den Variablen „NEXT_EVENT“ usw.
Werden die nach n Kriterien gefüllt oder kann man diese per flow verwenden?

Ich wollte dein Beispiel etwas zweckentfremden und mir eine Benachrichtigung meines Geburtstagkalender bauen.

Danke
Volker

Hi,
Was der name schon sagt iCal, das ist das Format praktisch kannst du eine ical Datei auf einen Webserver kopieren und die Verwenden.

Next event ist der Nächste Kalender Eintrag der dann vorhanden ist. Beim Geburtstags Kalender ist das Problem diese sind Ganztägig haben dadurch keine Anfangs oder Endzeit die Getriggert werden kann (in dem fall bin ich mir nicht sicher ob das daher geht ). Es geht ja um einzelne Zeiten zu Triggern und dort Aktionen auszuführen man will ja Sein Smarthome Steuern. Die meisten Wollen Außenbeleuchtung und Heizungen Steuern und nicht an Geburtstage erinnert werden :stuck_out_tongue_winking_eye:.

Gruß
Michael

mir war nur nicht genau klar wie der Syntax der Einstellungen ist .
Aber ja auch ein Synoloy Kalender geht…

grafik
… also die Verbindung

Man man doch nicht den Geburstag als Ganztägig verwenden. Es reicht doch ein kurzer trigger wie auch in deinem Beispiel zum Müllkalender.

PS. Ein Smart Home Systeme sollte schon mehr können als ein Licht oder die Heizung einschalten :upside_down_face:

Hi das ist eigentlich ganz einfach das was du da gerade anschaust ist nur die zukünftigen Ereignisse. Das was du möchtest ist
image

Der State wird dann aktiv wenn das Ereignis ausgelöst wird.
Hier bekommst du unter den anderen Variablen dann auch immer den Text die Url usw.

Als Json kommt dann:
TODAY = alle events Heute
Tomorrow= alle events Morgen
Nexteventlist = ich glaub das waren die nächsten 8 tage.

So in etwa ?

Gruß
Michael