Integration von Feiertagen

Bin keiner, aber laut Wikipedia haben

Einige Entwickler […] die Komplexität von CalDAV kritisiert, da es schwer zu implementieren ist und so zu Implementierungsfehlern in unterschiedlichen Kalenderverwaltungsanwendungen führen kann, die wiederum zu Inkompatibilitäten führen.

Für mich als Anwender stellt sich das z. B. so dar: IFTTT zeigt mir für die Verbindung mit meinen Google-Konto einen riesigen Button CONNECT, wo ich nur drauf drücken muss. Der Suche nach CalDAV leitet mich auf einen Tech Blog mit einem How-to von 2007 :nerd:.

Aber nach 2007 haben es dann doch alle Entwickler doch noch geschafft CalDAV zu integrieren. Von Outlook bis Google und Apple über Gmx, Posteo und Web.de

Also, der große Connect-Knopf ist für mich kein schlagendes Argument…

2 „Gefällt mir“

Schließe mich diesem Feature-Request ebenfalls an.

1 „Gefällt mir“

für dieses Thema bin ich auch!

1 „Gefällt mir“

Klar wäre es super, wenn homee Feiertage auch nativ unterstützt, aber mit Android bzw. Automagic geht das auch so.

Ich habe zumindest alle Feiertage in meinem Handy und für die “nicht-festen” Feiertage kriege ich dann um Mitternacht nen Webhook, um den Feiertagsmodus zu aktivieren.

Ich hol das mal hoch

1 „Gefällt mir“

Kalenderanbindung wäre super. Stichwort Feiertage aber auch Stichwort Ferien für die, die Kinder haben oder selbst noch zur Schule gehen :joy:

1 „Gefällt mir“

Dann lass dein like oben (Herz)

2 „Gefällt mir“

Hallo,

falls jemand Interesse hat: Aktuell versuchen wir ja alles, was homee von Haus aus nicht kann, über Nodered abzubilden.

Wie weiter oben schon geschrieben habe ich schon lange eine Lösung (oder soll ich besser sagen eine „Krücke“) umgesetzt, um das in homee abzubilden:

Das habe ich jetzt weiterentwickelt und vollständig automatisiert über iobroker und Nodered mit einem virtuellen Gerät in homee.

Dazu verwende ich in iobroker drei Adapter: „Deutsche Feiertage“, „iCal Calendar“ und „schoolfree“, einen Flow in Nodered und einen virtuellen Schalter, der an freien Tagen eingeschaltet wird. Darüber schaffe ich es jetzt, dass neben Samstagen und Sonntagen auch Feiertage, Schulferien und im Familienkalender als „Urlaub“ gekennzeichnete Tage automatisch als freier Tag in homee berücksichtigt werden und die Steuerungen (Rolllanden, Heizung, Licht) automatisch daran angepasst werden.

Bei Interesse stelle ich gerne den Nodered-Flow zur Verfügung.

Viele Grüße, Dieter

3 „Gefällt mir“

Dieter , sehr gerne stell deinen Flow mal bitte ein :+1:

Gerne, ja. Hab mir vor Zeiten auch mal so eine Krücke gebaut. War ganz überrascht, als ich das zugehörige Hilfs-HG neulich gefunden habe. :wink:

Gerne, hier ist er.

Ich habe wieder direkt in den Funktionen und Kommentaren kurze Beschreibungen gepackt. Es steht direkt drin, welche Adapter im ioBroker benötigt werden und was dort eingestellt werden muss. Ich verwende dann drei Flow-Variablen zum Zwischenspeichern, das ist ebenfalls beschrieben.
Am Besten nach dem Einstellen des Flows die Adapter kurz stoppen und wieder starten, dann werden die Variablen zeitnah erstellt. Ansonsten kann es bis zu 24h dauern.

Der Flow muss natürlich an die eigenen Bedürfnisse angepasst werden. Bei mir wird er (wie in dem Beitrag oben beschrieben) immer um 19:55 Uhr getriggert, da ich ab 20:00 Uhr schon unterschiedlich schalte, je nachdem ob am Folgetag ein Arbeitstag oder ein freier Tag ist.

[
    {
        "id": "5199f2d0.c3cdcc",
        "type": "homeeDevice",
        "z": "8cf60062.2f7c9",
        "virtual-homee": "",
        "name": "Freier Tag",
        "nodeId": "10",
        "profile": "16",
        "icon": "nodeicon_bulb",
        "attributes": "[{\"id\":100,\"node_id\":10,\"instance\":0,\"minimum\":0,\"maximum\":1,\"current_value\":0,\"target_value\":0,\"last_value\":0,\"unit\":\"\",\"step_value\":1,\"editable\":1,\"type\":1,\"state\":1,\"last_changed\":12345555,\"changed_by\":1,\"changed_by_id\":0,\"based_on\":1,\"data\":\"\"}]",
        "x": 810,
        "y": 200,
        "wires": [
            []
        ]
    },
    {
        "id": "2f49796e.9bfae6",
        "type": "ioBroker in",
        "z": "8cf60062.2f7c9",
        "name": "Feiertag morgen?",
        "topic": "feiertage.0.tomorrow.boolean",
        "payloadType": "value",
        "onlyack": "",
        "func": "all",
        "gap": "",
        "x": 150,
        "y": 79,
        "wires": [
            [
                "17b12fe5.8e577"
            ]
        ]
    },
    {
        "id": "3830e4fe.fdb54c",
        "type": "ioBroker in",
        "z": "8cf60062.2f7c9",
        "name": "Schulfrei morgen?",
        "topic": "schoolfree.0.info.tomorrow",
        "payloadType": "value",
        "onlyack": "",
        "func": "all",
        "gap": "",
        "x": 150,
        "y": 131,
        "wires": [
            [
                "6063796e.9be1c8"
            ]
        ]
    },
    {
        "id": "e3542dda.a8fa4",
        "type": "weekday",
        "z": "8cf60062.2f7c9",
        "name": "Wochentag/Wochenende",
        "sun": true,
        "mon": true,
        "tue": true,
        "wed": true,
        "thu": true,
        "fri": false,
        "sat": false,
        "x": 390,
        "y": 240,
        "wires": [
            [
                "17b9aa6f.49e1fe"
            ],
            [
                "d575491f.f2c46"
            ]
        ],
        "info": "Montag bis Freitag: Auswerten der Flow-Variablen\nSamstag und Sonntag: Ist immer ein freier Tag"
    },
    {
        "id": "252cece1.8c5b54",
        "type": "inject",
        "z": "8cf60062.2f7c9",
        "name": "Täglich 19:55 Uhr",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "repeat": "",
        "crontab": "55 19 * * *",
        "once": false,
        "onceDelay": 0.1,
        "x": 150,
        "y": 240,
        "wires": [
            [
                "e3542dda.a8fa4"
            ]
        ]
    },
    {
        "id": "17b12fe5.8e577",
        "type": "function",
        "z": "8cf60062.2f7c9",
        "name": "Feiertag?",
        "func": "// setzen der Flow-Variable \"feiertag\" auf true\n// wenn morgen ein Feiertag ist.\n// Die Anzeige des Nodes wird ebenfalls angepasst\n\nvar feiertag=flow.get('feiertag') || false;\nvar status_fill = \"blue\";\nvar status_text = \"false\";\nif (msg.payload == \"true\") {\n   feiertag = true\n   status_fill = \"green\";\n   status_text = \"true\";\n}\nelse {\n    feiertag = false\n}\nflow.set('feiertag',feiertag);\nnode.status({fill:status_fill,shape:\"dot\",text:status_text});\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "x": 340,
        "y": 60,
        "wires": [
            []
        ]
    },
    {
        "id": "6063796e.9be1c8",
        "type": "function",
        "z": "8cf60062.2f7c9",
        "name": "Schulfrei?",
        "func": "// setzen der Flow-Variable \"schulfrei\" auf true\n// wenn morgen ein Ferientag ist.\n// Die Anzeige des Nodes wird ebenfalls angepasst\n\nvar schulfrei=flow.get('schulfrei') || false;\nvar status_fill = \"blue\";\nvar status_text = \"false\";\nif (msg.payload == \"true\") {\n   schulfrei = true\n   status_fill = \"green\";\n   status_text = \"true\";\n}\nelse {\n    schulfrei = false\n}\nflow.set('schulfrei',schulfrei);\nnode.status({fill:status_fill,shape:\"dot\",text:status_text});\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "x": 340,
        "y": 120,
        "wires": [
            []
        ]
    },
    {
        "id": "17b9aa6f.49e1fe",
        "type": "function",
        "z": "8cf60062.2f7c9",
        "name": "Freier Tag?",
        "func": "// für Montag bis Freitag\n// es werden die Flow-Variablen \"feiertag\", \"schulfrei\"\n// und \"freier_tag\" ausgewertet, ob morgen frei ist\n// (obwohl Feiertag ist)\n// Die Anzeige des Nodes wird ebenfalls angepasst\n\nvar feiertag=flow.get('feiertag') || false;\nvar freier_tag=flow.get('freier_tag') || false;\nvar schulfrei=flow.get('schulfrei') || false;\nvar payload = { id:100, value: 0}\nif (feiertag === true || schulfrei === true || freier_tag === true) {\n    payload.value = 1\n}\nmsg.payload = payload\nif (payload.value === 1) {\n   node.status({fill:\"green\",shape:\"dot\",text:\"Freier Tag: Ja\"});\n}\nelse {\n   node.status({fill:\"blue\",shape:\"dot\",text:\"Freier Tag: Nein\"});\n}\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "x": 610,
        "y": 180,
        "wires": [
            [
                "5199f2d0.c3cdcc"
            ]
        ]
    },
    {
        "id": "55d342f5.6afe5c",
        "type": "comment",
        "z": "8cf60062.2f7c9",
        "name": "Node",
        "info": "# Freier Tag\n\nFolgende **Adpater** werden in iobroker benötigt:\n\n**1. Deutsche Feiertage**\nIn der Instanz die gewünschten Feiertage auswählen.\n1x täglich wird dann im Flow eine Variable \"feiertag\" geschrieben, ob morgen ein Feiertag ist\n\n**2. iCal Calendar**\nIn der Instanz dann unter Kalender die Kalender-Url eintragen (in meinem Fall ein Nextcloud-Kalender mit Terminen für die ganze Familie) und unter Ereignissen \"Urlaub\" anlegen.\n1x täglich wird dann im Flow eine Variable \"freier_tag\" geschrieben, wenn am nächsten Tag ein Kalendereintrag \"Urlaub\" existiert\n\n**3. schoolfree**\nIn der Instanz dann das Bundesland auswählen.\n1x täglich wird dann im Flow eine Variable \"schulfrei\" geschrieben, ob morgen ein Schulferientag ist",
        "x": 80,
        "y": 40,
        "wires": []
    },
    {
        "id": "e23bfa2a.7bd0a8",
        "type": "inject",
        "z": "8cf60062.2f7c9",
        "name": "Nach Flow-Start",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "x": 150,
        "y": 280,
        "wires": [
            [
                "e3542dda.a8fa4"
            ]
        ]
    },
    {
        "id": "d575491f.f2c46",
        "type": "change",
        "z": "8cf60062.2f7c9",
        "name": "Freier Tag!",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "{\"id\":100,\"value\":1}",
                "tot": "json"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 610,
        "y": 240,
        "wires": [
            [
                "5199f2d0.c3cdcc"
            ]
        ]
    },
    {
        "id": "ea816109.2029c",
        "type": "ioBroker in",
        "z": "8cf60062.2f7c9",
        "name": "Urlaub",
        "topic": "ical.0.events.1.Urlaub",
        "payloadType": "value",
        "onlyack": "",
        "func": "all",
        "gap": "",
        "x": 110,
        "y": 180,
        "wires": [
            [
                "31474421.16a604"
            ]
        ]
    },
    {
        "id": "31474421.16a604",
        "type": "function",
        "z": "8cf60062.2f7c9",
        "name": "freier Tag?",
        "func": "// setzen der Flow-Variable \"freier_tag\" auf true\n// wenn morgen \"Urlaub\" im Kalender eingetragen ist\n// Die Anzeige des Nodes wird ebenfalls angepasst\n\nvar freiertag=flow.get('freier_tag') || false;\nvar status_fill = \"blue\";\nvar status_text = \"false\";\nif (msg.payload == \"true\") {\n   freiertag = true\n   status_fill = \"green\";\n   status_text = \"true\";\n}\nelse {\n    freiertag = false\n}\nflow.set('freier_tag',freiertag);\nnode.status({fill:status_fill,shape:\"dot\",text:status_text});\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "x": 350,
        "y": 180,
        "wires": [
            []
        ]
    }
]

Neben den drei ioBroker-Adpatern und dem homee-Node wird im Flow noch der node „node-red-contrib-weekday“ verwendet.

Viel Spaß und viel Erfolg mit dem Flow, Dieter

Update: Ich habe den Flow nochmal angepasst, ich hatte zu Testzwecken noch ein Debug-Node drin, den habe ich entfernt.
Update2: Node „node-red-contrib-weekday“ ergänzt.

3 „Gefällt mir“

prima wie sieht das weekday node bei dir aus

1 „Gefällt mir“

Sorry, das hatte ich ganz übersehen. Das ist der node “node-red-contrib-weekday”. Ich ergänze das oben noch.

1 „Gefällt mir“

genau das habe ich schon…nur wo hast du die Päckchen gesetzt?

Ach so, die sind von Sonntag bis Donnerstag gesetzt (nächster Tag ist ein Werktag).

Ok super danke !!!

Hab’s über Sirene gelöst

2 „Gefällt mir“

sagt mal wie würdet ihr das lösen…und zwar habe ich weitere Kalender in ical hinterlegt…

wie sollte ich die einbauen bzw. wo könnte ich die einbauen…

hier mal meine Kalender aus iCal… da sind eben auch Schin bewegliche Ferientage etc. mit drin…

Deshalb gehe ich hier nicht über scoolfree.

Du kannst alle Objekte aus iobroker mit den iobroker-in Node im nodered nutzen.

Ich nutze einen Merker für Urlaub und einen für Feiertag. Die Daten kommen aus iCal und dem Feiertagadapter.

Ja das ist mir klar… aktuell habe ich das über den Node In Urlaub von oben gemacht , allerdings eben nur mit einem Objekt „Faschingsferien“… aber die anderen Objekte fehlen eben noch…

Kann ich ja nicht einfach an die andere dran hängen …