Community

Automatisierter Kalender in homee (über node-red)


#1

Hallo,

da wir diverse Kalender für unsere Terminplanungen usw. nutzen, war es für mich naheliegend diese auch irgendwie in homee nutzen zu können. Aber wie??? :thinking:

:sunglasses: Kurze Vorgeschichte:
Wir nutzen die Modi in homee sehr intensiv. Z.B. “abwesend”, wenn alle zur Schule und zur Arbeit sind, damit z.B. die Bewegungsmeldern für die Lichtsteuerung anders funktionieren, als wenn wir zuhause sind oder auch für das Aktivieren der Alarmanlage.
Dieses Umschalten der Modi passiert teilweise zeitgesteuert oder automatisch, falls wir oder eines der Kinder es einmal beim Verlassen des Hauses vergessen sollten (FT55 an der Haustür).
Wenn wir aber einmal unter der Woche frei haben, soll diese “Sicherheitsautomatik” natürlich nicht greifen; es ist ja jemand im Haus. Oder auch die Hommegramme für das morgentliche Aufstehen sollen nicht ablaufen, denn der ein oder andere in der Familie kann ja ausschlafen…:sleeping:

  1. Step war deshalb, in homee über node-red für jedes Familienmitglied ein Gerät anzulegen und dieses auf den Status “an” = zuhause oder “aus” = Arbeit/Schule in den div. HGs abzufragen. Über die neue Gruppenbedingungen wurde hier Einiges erleichtert. :+1:t3:
    Bisher haben wir diese Geräte dann bei Bedarf immer am Vorabend manuell geschaltet, um z.B. einen “aussergewöhnlichen” Status, wie “Schulfrei” , voreinzustellen. Dies funktionierte einwandfrei.

**Aber das sollte doch auch irgendwie automatisch gehen?! :thinking:
Deshalb kam jetzt Step 2:
Da wir diese Termine wie “Schulfrei” oder “Urlaub” in den jeweiligen Personenkalendern ohnehin eintragen, wollte ich dies automatisieren.

Mit node-red und iobroker haben wir schon parallel zu homee ein System am laufen, welche u.a. auch unseren Saugroboter steuert. Da sollte es doch auch möglich sein, etwas mit dem Kalender zu basteln?! :face_with_raised_eyebrow:

Erstes großes Problem :see_no_evil:: alle nodes in node-red oder sonstige Anleitungen zu Kalendern basieren immer auf einem Googlekalender; wir nutzen aber IOS!
OK, dann synchronisiere ich eben einfach den IOS Kalender über IFTTT zu Google. Tja, funktioniert zwar, erzeugte aber in meinem Fall zeitlich verschobene Termine im Googlekalender. :-1:t3:

  1. Problem: möchte man dann später die Googlekalender aus node-red heraus abfragen, muss man dies für einen Laien sehr aufwendig und durchaus “sicherheitsproblematisch” einrichten. :see_no_evil:
    Dazu gehört z.B. auch einen Portfreigabe von Aussen im Router einzurichten. :astonished:
    Dies wollte ich alles eigentlich nicht tun und das ganze stand kurz or dem AUS. :disappointed_relieved:
    Nach viel suchen im Netz habe ich dann aber das Webtool https://my.webhookrelay.com gefunden, welches es aus node-red ermöglicht einen Webhook ohne irgendwelche Freigaben von Aussen zu empfangen. :+1:t3:
    Einmal registriert, erhält man eine persönliche URL und ein “Secret”, mit welchem man einen node in node-red als Input einbinden kann.

Soweit, so gut, aber wie kommen jetzt die Einträge über einen Webhook zu node-red und damit weiter zu homee?
Das nächste Tool heisst IFTTT. Hier kann man sich als “THAT” einen Webhook an die gerade erstellte URL schicken lassen.
Neues Problem hier: bei IFTTT kann man sich wiederum nur für Termine in eimem Googlekalender benachrichtigen lassen, für einen IOS Kalender geht dies nicht! :roll_eyes:
Also wieder das Problem mit der Synchronisation…:face_with_symbols_over_mouth:

Nach erneutem kurzem Suchen haben ich dann die Einbindung eines externen Kalenders in Google über eine öffentliche URL gefunden.
ABER VORSICHT: ihr müsst hierzu in IOS einen Kalender mit einer “öffentlichen” URL freigeben!
Wir haben in den Kalendern der Kinder nur schulische Dinge und nichts Persönliches stehen; dafür gibt es einen “privaten” Familienkalender. :wink:
Diese Einbindung über die URL funktioniert gut und man kann damit in IFTTT die Termine in einzelnen Kalendern “IF” - triggern und nutzen.
Für jeden Termin braucht man dazu 2 Applets (Flows in IFTTT); eines für AN und eines für AUS.
Z.B. also; WENN in Kalender 1 beginnt ein Termin mit dem Schlagwort “Schulfrei” DANN sende Webhook mit “KALANDER 1_an” an Webhook (URL von webhookrelay).

In node-red erstellt man dann einen Flow, der dieses auswerten kann.
Ein Beispiel ist hier angefügt, da ich das Ganze auch noch für unseren Abfallkalender umgesetzt habe, der mir jetzt am Vorabend immer per Push mitteilt, welche Mülltonne rausgestellt werden muß:

Hier ist der Fow als Textdatei (nur die 3 nodes in der Mitte, ohne Webhookrelay und Outputs):

[
{
“id”: “cce59dfb.953208”,
“type”: “function”,
“z”: “f368bc8b.b4ef68”,
“name”: “body”,
“func”: “return {\n payload: msg.payload.body\n};”,
“outputs”: 1,
“noerr”: 0,
“x”: 310,
“y”: 200,
“wires”: [
[
“719e5314.7275dc”
]
]
},
{
“id”: “719e5314.7275dc”,
“type”: “json”,
“z”: “f368bc8b.b4ef68”,
“name”: “”,
“property”: “payload”,
“action”: “”,
“pretty”: false,
“x”: 470,
“y”: 200,
“wires”: [
[
“595d98ab.550a28”,
“e7d09812.094c2”
]
]
},
{
“id”: “e7d09812.094c2”,
“type”: “function”,
“z”: “f368bc8b.b4ef68”,
“name”: “grün grau blau - on off”,
“func”: “if (msg.payload === “grün_an”) {\n msg.payload = ‘on’\n return [ msg, null, null, null,null,null];\n} else if (msg.payload === “grün_aus”) {\n msg.payload = ‘off’\n return [ null, msg, null, null,null,null];\n} else if (msg.payload === “grau_an”) {\n msg.payload = ‘on’\n return [null, null, msg, null,null,null];\n} else if (msg.payload == “grau_aus”) {\n msg.payload = ‘off’\n return [null, null, null, msg, null,null];\n} else if (msg.payload === “blau_an”) {\n msg.payload = ‘on’\n return [null, null,null,null, msg, null];\n} else if (msg.payload == “blau_aus”) {\n msg.payload = ‘off’\n return [null, null, null,null, null, msg];\n}”,
“outputs”: 6,
“noerr”: 0,
“x”: 750,
“y”: 200,
“wires”: [
[
“1bd4edb5.66342a”,
“87e4bc7a.fb4fd8”,
“e2aa0670.294108”
],
[
“1bd4edb5.66342a”,
“87e4bc7a.fb4fd8”
],
[
“1bd4edb5.66342a”,
“1ba8b0cf.292057”,
“f445717e.a86d38”
],
[
“1bd4edb5.66342a”,
“1ba8b0cf.292057”
],
[
“1bd4edb5.66342a”,
“752deff1.45be3”,
“9e476a06.560bb”
],
[
“1bd4edb5.66342a”,
“752deff1.45be3”
]
]
}
]

Ich hoffe dies ist für den ein oder anderen von Euch interessant?! :man_shrugging:t3:
Bei Fragen gerne melden:raising_hand_man:t3::raising_hand_woman:t3:, wobei ich mein gesamtes Wissen rund um node-red und io-broker auch nur mit Hilfe einiger Leute hier aus dem Forum und vor allem dem Slack-Channel habe :clap:t3::beers:.

P.S: Wenn Du bis hierhin gelesen hast, Hut ab :+1:t3:, denn leider ist der Text etwas lang geworden :see_no_evil::joy:


#2

Hier noch ein Screenshot der Visualisierung über Imperihome:

Die Kacheln rechts werden grün und ändern den Text, wenn jemand zuhause bleibt. :wink:


#3

Ich verstehe bei node red zwar nur Bahnhof, aber sehr schön mit der Farbänderung wenn jemand zuhause ist.

:+1:


#4

Das sind dann einfach 2 verschiedene Bilder für „an“ und „aus“ :wink:.
Man sieht praktisch einen Schaltzustand.


#5

Grundsätzlich sieht das echt cool aus, aber wenn ich das richtig verstehe sind das theoretische Schaltzustände mit den Personen. Wenn jetzt z.B. einer krank ist und zu Hause bleibt wird er dies vermutlich nicht gleich in seinem Kalander eintragen und das System geht dann trotzdem davon aus, dass die Person abwesend ist, oder?


#6

Nein, dann kann ich den Wemo auch manuell schalten.
Er bleibt dann praktisch so lange an, bis ich wieder manuell ausschalte oder ein “Schulfrei” im Kalender dazukommt und dann endet.
Es fehlt praktisch das Ende des Termins, der wieder ausschaltet, wenn ich manuell angeschaltet habe.