Integration von Feiertagen

Das kannst du aber über den boolnode lösen in dem du die Regel für Aktiv (mindest 1 true also ODER) und für inaktiv (alle false also UND) festlegst.

Ich hab das mit Feiertagen so gelöst das ich über einen ical events node einen Feiertagskallender für mein Bundesland täglich um 17 Uhr abfrage der mir dann ein HG aktiviert.
Die Wochenendbetrachtung und die manuelle Option, das jemand Krank ist mache ich direkt in homee in dem sich auch entsprechende HGs aktivieren. wenn eines dieser HGs aktiviert wird aktiviert sich das FreierTag HG, das als Bedingung genutzt wird. wenn alle HGs der reihe deaktiviert werden wird auch das Freier Tag HG wieder deaktiviert.

Die schulferien werden mich erst nächstes Jahr Tangieren, aber da hab ich auch schon einen ical Kalender an der Hand über den ich das dann ebenso einschleifen werde.

Wieso hast Du die nodes “Feiertag?”, “Schulfrei?” und “freier Tag?” mit dem node “Freier Tag?” verbunden? Das habe ich bewusst nicht gemacht, hier wird nichts übergeben und es gibt keine Abhängigkeit.
Die Adapter im iobroker werden unabhängig voneinander getriggert, deshalb speichere ich die ankommenden Werte in Flow-Variablen ab. Der node “Freier Tag?” holt sich die Werte aus den Flow-Variaben und wird einmal täglich aus dem inject-node nach der Wochentags-/Wochenende-Trennung getriggert. Wenn einer der Flow-Variablen auf “true” steht, ist der nächste Tag ein freier Tag.

Es gibt bestimmt mehrere Lösungen dafür, ich würde aber die ical-Events in getrennt Flow-Variablen abspeichern und dann diese Variablen im node “Freier Tag?” ergänzen. Wenn dort eine Flow-Variable auf “true” steht (Feiertag, Schulfrei oder einer der ical-events), dann setze den homee-node auf 1.

Viele Grüße, Dieter

Hi zusammen,
@Shamerock

Irgendwie reagiert mein Hih nur auf Wocheneden…Ferien und Feiertage tut irgendwie nicht. Obwohl die Osterferien richtig erkannt werden und bei Freier Tag JA steht, schaltet das hih Device nicht ein.

Kannst du dir das mal anschauen? oder @Micha

[
    {
        "id": "90a9a63c.1cf6d",
        "type": "homeeDevice",
        "z": "fa00ea3c.8f86a8",
        "virtual-homee": "",
        "name": "Freier Tag",
        "nodeId": "2250",
        "profile": "16",
        "icon": "nodeicon_siren",
        "attributes": "[{\"id\":2250,\"node_id\":2250,\"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": 720,
        "y": 1360,
        "wires": [
            []
        ]
    },
    {
        "id": "39387503.b9f6ca",
        "type": "ioBroker in",
        "z": "fa00ea3c.8f86a8",
        "name": "Feiertag morgen?",
        "topic": "feiertage.0.tomorrow.boolean",
        "payloadType": "value",
        "onlyack": "",
        "func": "all",
        "gap": "",
        "x": 100,
        "y": 1380,
        "wires": [
            [
                "cabb2705.d766e8"
            ]
        ]
    },
    {
        "id": "8716a8f2.2956b8",
        "type": "ioBroker in",
        "z": "fa00ea3c.8f86a8",
        "name": "Schulfrei morgen?",
        "topic": "schoolfree.0.info.tomorrow",
        "payloadType": "value",
        "onlyack": "",
        "func": "all",
        "gap": "",
        "x": 110,
        "y": 1440,
        "wires": [
            [
                "cef16fb6.e7ebd8"
            ]
        ]
    },
    {
        "id": "cae4ab6d.cd187",
        "type": "weekday",
        "z": "fa00ea3c.8f86a8",
        "name": "Wochentag/Wochenende",
        "sun": true,
        "mon": true,
        "tue": true,
        "wed": true,
        "thu": true,
        "fri": false,
        "sat": false,
        "x": 550,
        "y": 1480,
        "wires": [
            [
                "b5c7a4d1.f654f"
            ],
            [
                "edd775fc.7765d8"
            ]
        ],
        "info": "Montag bis Freitag: Auswerten der Flow-Variablen\nSamstag und Sonntag: Ist immer ein freier Tag"
    },
    {
        "id": "cba4c960.1a99e8",
        "type": "inject",
        "z": "fa00ea3c.8f86a8",
        "name": "Täglich 23:59 Uhr",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "repeat": "",
        "crontab": "45 22 * * *",
        "once": false,
        "onceDelay": 0.1,
        "x": 570,
        "y": 1540,
        "wires": [
            [
                "cae4ab6d.cd187"
            ]
        ]
    },
    {
        "id": "cabb2705.d766e8",
        "type": "function",
        "z": "fa00ea3c.8f86a8",
        "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": 280,
        "y": 1380,
        "wires": [
            []
        ]
    },
    {
        "id": "cef16fb6.e7ebd8",
        "type": "function",
        "z": "fa00ea3c.8f86a8",
        "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": 280,
        "y": 1440,
        "wires": [
            []
        ]
    },
    {
        "id": "b5c7a4d1.f654f",
        "type": "function",
        "z": "fa00ea3c.8f86a8",
        "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 = {attribute:{id:2250, value: 0}}\nif (feiertag === true || schulfrei === true || freier_tag === true) {payload.value = 1}\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": 510,
        "y": 1360,
        "wires": [
            [
                "90a9a63c.1cf6d",
                "fd6dbf6.9f5264"
            ]
        ]
    },
    {
        "id": "206ed9bd.4389a6",
        "type": "comment",
        "z": "fa00ea3c.8f86a8",
        "name": "Node 2250 Freiertrag",
        "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": 120,
        "y": 1340,
        "wires": []
    },
    {
        "id": "3d92a5e.1e3765a",
        "type": "inject",
        "z": "fa00ea3c.8f86a8",
        "name": "Nach Flow-Start",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "x": 570,
        "y": 1580,
        "wires": [
            [
                "cae4ab6d.cd187"
            ]
        ]
    },
    {
        "id": "edd775fc.7765d8",
        "type": "change",
        "z": "fa00ea3c.8f86a8",
        "name": "Freier Tag!",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "{\"attribute\":{\"id\":2250,\"value\":1}}",
                "tot": "json"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 770,
        "y": 1480,
        "wires": [
            [
                "90a9a63c.1cf6d",
                "fd6dbf6.9f5264"
            ]
        ]
    },
    {
        "id": "ba148488.db9c3",
        "type": "ioBroker in",
        "z": "fa00ea3c.8f86a8",
        "name": "Faschingsferien",
        "topic": "ical.0.events.1.Faschingsferien",
        "payloadType": "value",
        "onlyack": "",
        "func": "all",
        "gap": "",
        "x": 100,
        "y": 1500,
        "wires": [
            [
                "ccb5c354.5334a"
            ]
        ]
    },
    {
        "id": "ccb5c354.5334a",
        "type": "function",
        "z": "fa00ea3c.8f86a8",
        "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": 290,
        "y": 1500,
        "wires": [
            []
        ]
    },
    {
        "id": "61b8778b.d73408",
        "type": "ioBroker in",
        "z": "fa00ea3c.8f86a8",
        "name": "BeweglicherFerientag",
        "topic": "ical.0.events.1.BeweglicherFerientag",
        "payloadType": "value",
        "onlyack": "",
        "func": "all",
        "gap": "",
        "x": 120,
        "y": 1560,
        "wires": [
            [
                "ccb5c354.5334a"
            ]
        ]
    },
    {
        "id": "1ca1ea6c.58a63e",
        "type": "ioBroker in",
        "z": "fa00ea3c.8f86a8",
        "name": "Herbstferien",
        "topic": "ical.0.events.1.Herbstferien",
        "payloadType": "value",
        "onlyack": "",
        "func": "all",
        "gap": "",
        "x": 90,
        "y": 1600,
        "wires": [
            [
                "ccb5c354.5334a"
            ]
        ]
    },
    {
        "id": "742cc472.29991c",
        "type": "ioBroker in",
        "z": "fa00ea3c.8f86a8",
        "name": "Osterferien",
        "topic": "ical.0.events.1.Osterferien",
        "payloadType": "value",
        "onlyack": "",
        "func": "all",
        "gap": "",
        "x": 80,
        "y": 1640,
        "wires": [
            [
                "ccb5c354.5334a"
            ]
        ]
    },
    {
        "id": "14bf0d56.077083",
        "type": "ioBroker in",
        "z": "fa00ea3c.8f86a8",
        "name": "Pfingstferien",
        "topic": "ical.0.events.1.Pfingstferien",
        "payloadType": "value",
        "onlyack": "",
        "func": "all",
        "gap": "",
        "x": 90,
        "y": 1680,
        "wires": [
            [
                "ccb5c354.5334a"
            ]
        ]
    },
    {
        "id": "8320c886.9518f8",
        "type": "ioBroker in",
        "z": "fa00ea3c.8f86a8",
        "name": "Sommerferien",
        "topic": "ical.0.events.1.Sommerferien",
        "payloadType": "value",
        "onlyack": "",
        "func": "all",
        "gap": "",
        "x": 90,
        "y": 1720,
        "wires": [
            [
                "ccb5c354.5334a"
            ]
        ]
    },
    {
        "id": "51951f5.032f86",
        "type": "ioBroker in",
        "z": "fa00ea3c.8f86a8",
        "name": "Weihnachtsferien",
        "topic": "ical.0.events.1.Weihnachtsferien",
        "payloadType": "value",
        "onlyack": "",
        "func": "all",
        "gap": "",
        "x": 100,
        "y": 1760,
        "wires": [
            [
                "ccb5c354.5334a"
            ]
        ]
    },
    {
        "id": "ab9b6b28.68cc7",
        "type": "inject",
        "z": "fa00ea3c.8f86a8",
        "name": "Täglich 23:59 Uhr",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "repeat": "",
        "crontab": "50 22 * * *",
        "once": false,
        "onceDelay": 0.1,
        "x": 570,
        "y": 1620,
        "wires": [
            [
                "cae4ab6d.cd187"
            ]
        ]
    },
    {
        "id": "fd6dbf6.9f5264",
        "type": "debug",
        "z": "fa00ea3c.8f86a8",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "x": 850,
        "y": 1580,
        "wires": []
    },
    {
        "id": "d16f3cb9.2037",
        "type": "inject",
        "z": "fa00ea3c.8f86a8",
        "name": "",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 540,
        "y": 1660,
        "wires": [
            [
                "cae4ab6d.cd187"
            ]
        ]
    }
]

Ich hole das Thema mal hervor.
Ich stand vor dem gleichen Problem. Ich möchte meine Rolladen an Feiertagen anders steuern als an Werktagen.

Ich habe dabei noch eine weiteren Lösungsansatz umgesetzt in Kombination mit meinem RaspberryPi im lokalen Netz.
Ich habe 2 Homeegramme mit unterschiedlichen Zeiten für die Rolladen.

Ein kleines Python-Skript läuft auf dem Raspberry und prüft jede Nacht um 00:05 ob wir einen Feiertag haben (Bei mir DE-NRW). Je nachdem sendet das Skript per Websocket den Befehl an den Homee ab, das eine Homeegramm zu deaktivieren und dafür das andere zu aktivieren.

Ich habe das ganze auf Github veröffentlicht, falls es den ein oder anderen auch interessiert :wink:

6 „Gefällt mir“

118 :heart: sind mal eine Ansage!

118 Likes in acht Jahren. Von den Thread teilnehmern in den ersten vier Jahren sind die meisten schon von homee abgewandert, was aber nicht unbedingt an dem Feiertagskalender sondern eher daran liegt, dass sie mit ihren Ansprüchen dem Entwicklungstempo von homee entwachsen sind.

7 „Gefällt mir“

Natürlich hast Du Recht.

Aber die waren auch (mal) dafür! :stuck_out_tongue_winking_eye:

Geht halt überall (in vielen Bereichen) recht langsam vorwärts. :face_with_diagonal_mouth: