Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Node-Red
    5. Inject am ersten/letzten Tag des Monats

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Inject am ersten/letzten Tag des Monats

    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      hpgo last edited by

      Wie der Titel sagt suche ich nach einer Möglichkeit (für Smartmeter) einen inject am ersten und am Letzten des Monats auszulösen.
      Klingt erstmal einfach, am Monatsbeginn auch kein Problem mit der simpletime node aber der letzte Tag im Monat kann ja der 30. der 31. der 28. Feb oder auch der 29. Feb sein.

      Jemand eine Idee, wie das am schnellsten/einfachsten umsetzbar ist?
      Danke und Lg

      Homoran 1 Reply Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators @hpgo last edited by

        @hpgo sagte in Inject am ersten/letzten Tag des Monats:

        Jemand eine Idee, wie das am schnellsten/einfachsten umsetzbar ist?

        ja! Aber leider nicht mit node red.
        du musst einfach prüfen was in x Millisekunden am nächsten Tag für ein Tag im Datum steht.
        ist es eine 1 ist aktuell der letzte des aktuellen Monats

        H 1 Reply Last reply Reply Quote 0
        • H
          hpgo @Homoran last edited by hpgo

          Danke für den Vorschlag, wie ich das Umsetzen werde/soll weiß ich jetzt nicht - ich lese mir mal das wiki der simpletime Node genauer durch, vlt kann man da schon iwie angezeigt bekommen was morgen für ein Tag sein wird und deinen Vorschlag umsetzen.

          Lg

          mickym 1 Reply Last reply Reply Quote -1
          • mickym
            mickym Most Active @hpgo last edited by mickym

            @hpgo Anstelle von 1000 Zeit Node - nimm die Cronplus Node.

            Die cronplus Node - kann alle Zeitnodes ersetzen. Gibt nur wenige die man da noch brauchst. Diese kann ich Dir empfehlen - wobei man wie man unten sieht - auch mit Standardnodes machen kann. Aber die cronplus Node ist wirklich eine der Besten.

            058e097c-e081-479a-9ba8-9a1fcaa8e385-image.png

            932742fb-6449-4982-9381-2e4bc5e0af38-image.png

            [
               {
                   "id": "139eaefe163a3c90",
                   "type": "cronplus",
                   "z": "54b226bc.0793e8",
                   "name": "",
                   "outputField": "payload",
                   "timeZone": "",
                   "persistDynamic": false,
                   "commandResponseMsgOutput": "output1",
                   "outputs": 1,
                   "options": [
                       {
                           "name": "schedule1",
                           "topic": "topic1",
                           "payloadType": "str",
                           "payload": "Monatserster oder Monatsletzter",
                           "expressionType": "cron",
                           "expression": "0 0 0 1,L * * *",
                           "location": "",
                           "offset": "0",
                           "solarType": "all",
                           "solarEvents": "sunrise,sunset"
                       }
                   ],
                   "x": 740,
                   "y": 3820,
                   "wires": [
                       [
                           "9352559182085679"
                       ]
                   ]
               },
               {
                   "id": "9352559182085679",
                   "type": "debug",
                   "z": "54b226bc.0793e8",
                   "name": "debug 1",
                   "active": true,
                   "tosidebar": true,
                   "console": false,
                   "tostatus": false,
                   "complete": "false",
                   "statusVal": "",
                   "statusType": "auto",
                   "x": 900,
                   "y": 3820,
                   "wires": []
               }
            ]
            

            Es geht aber auch ohne irgendwelche zustätzlichen Nodes mit Standardmitteln.

            Du kannst einfach täglich zum irgendeiner Zeit die Inject Node triggern und dann halt wie üblich mit einer Switch Node nur die richtigen Tage herausfiltern.

            de98dd33-68cf-49e0-b948-71611fa462d1-image.png
            51c58289-1943-4976-a08c-705f4521ec29-image.png

            [
                {
                    "id": "b33f844a1ce99b65",
                    "type": "inject",
                    "z": "54b226bc.0793e8",
                    "name": "",
                    "props": [
                        {
                            "p": "trigger",
                            "v": "true",
                            "vt": "bool"
                        }
                    ],
                    "repeat": "",
                    "crontab": "00 00 * * *",
                    "once": false,
                    "onceDelay": 0.1,
                    "topic": "",
                    "x": 650,
                    "y": 4200,
                    "wires": [
                        [
                            "17ff8c212366fbf5"
                        ]
                    ]
                },
                {
                    "id": "17ff8c212366fbf5",
                    "type": "switch",
                    "z": "54b226bc.0793e8",
                    "name": "",
                    "property": "$moment().format('D')\t",
                    "propertyType": "jsonata",
                    "rules": [
                        {
                            "t": "eq",
                            "v": "1",
                            "vt": "str"
                        },
                        {
                            "t": "eq",
                            "v": "$moment().endOf('month').format('D')\t",
                            "vt": "jsonata"
                        }
                    ],
                    "checkall": "true",
                    "repair": false,
                    "outputs": 2,
                    "x": 810,
                    "y": 4200,
                    "wires": [
                        [
                            "4b90b6be6bc7b518"
                        ],
                        [
                            "d3f1ed412003e94c"
                        ]
                    ],
                    "outputLabels": [
                        "Monatserster",
                        "Monatsletzter"
                    ]
                },
                {
                    "id": "4b90b6be6bc7b518",
                    "type": "debug",
                    "z": "54b226bc.0793e8",
                    "name": "ist Monatserster",
                    "active": true,
                    "tosidebar": true,
                    "console": false,
                    "tostatus": false,
                    "complete": "payload",
                    "targetType": "msg",
                    "statusVal": "",
                    "statusType": "auto",
                    "x": 1020,
                    "y": 4180,
                    "wires": []
                },
                {
                    "id": "d3f1ed412003e94c",
                    "type": "debug",
                    "z": "54b226bc.0793e8",
                    "name": "ist Monatsletzter",
                    "active": true,
                    "tosidebar": true,
                    "console": false,
                    "tostatus": false,
                    "complete": "payload",
                    "targetType": "msg",
                    "statusVal": "",
                    "statusType": "auto",
                    "x": 1020,
                    "y": 4220,
                    "wires": []
                }
            ]
            

            H 1 Reply Last reply Reply Quote 1
            • H
              hpgo @mickym last edited by hpgo

              @mickym
              Vielen Dank, das ist genau, was ich gesucht habe.
              Wie kommt man auf 0 0 0 1,L * * * in der Cronplus Node um am Monatsersten und Monatsletzten ein inject bekommt? Wird das irgendwo erstellt?

              Danke und Lg

              H mickym 2 Replies Last reply Reply Quote 0
              • H
                hpgo @hpgo last edited by hpgo

                Sorry - bitte löschen wenn möglich!

                1 Reply Last reply Reply Quote 0
                • mickym
                  mickym Most Active @hpgo last edited by

                  @hpgo sagte in Inject am ersten/letzten Tag des Monats:

                  Wie kommt man auf 0 0 0 1,L * * * in der Cronplus Node um am Monatsersten und Monatsletzten ein inject bekommt? Wird das irgendwo erstellt?

                  Ich glaube ich verstehe die Frage nicht? Das musst Du halt so in die Node eintragen bzw. konfigurieren.

                  H 1 Reply Last reply Reply Quote 0
                  • H
                    hpgo @mickym last edited by

                    Danke, hab ich in der Infobox der cronplus Node entdeckt das mit Minute Stunde, Monat, usw....
                    Wäre zwar nie auf das 0 0 0 1,L * * * gekommen - danke dafür.

                    Jetzt hab ich allerdings noch ein Problem, es soll ja der Monatsverbrauch berechnet und gespeichert werden, damit ich zu Jahresende auch den Jahresverbrauch berechnen kann. dazu würde ich sowas wie einen switch benötigen der mir den payload "Monatsbeginn und Monatsende" auf die jeweiligen Monate aufteilet.
                    Vlt hat dazu jemand noch eine tolle Idee.

                    Danke

                    Codierknecht mickym 2 Replies Last reply Reply Quote 0
                    • Codierknecht
                      Codierknecht Developer Most Active @hpgo last edited by

                      @hpgo
                      Du könntest natürlich auch den Adapter "SourceAnalytics" verwenden.
                      Der ist genau dafür gemacht, Verbräuche zu erfassen. Tag, Woche, Monat, Quartal, Jahr ... alles kein Problem.

                      1 Reply Last reply Reply Quote 0
                      • mickym
                        mickym Most Active @hpgo last edited by mickym

                        @hpgo Also erstens würde ich dann nur einen Trigger nehmen - entweder zu Monatsbeginn oder zu Monatsende und dann einfach die Differenz berechnen. (das mit den 2 Trigger am Monatsende und Monatsanfang macht doch keinen Sinn).

                        Wenn Du am Monatsersten um 00:00:00 triggerst, dann ist doch automatisch das Ende der vergangen Periode - bis dahin enthalten. Was hast Du den davon, dass Du am Monatsletzten um 23:59:59 nochmal triggerst. Was soll denn in der 1 sek. passiert sein bzw. würde erst recht für einen Trigger sprechen.

                        Wenn der Trigger am 1. jeden Monats läuft - dann kannst Du doch einfach die Differenz zum Vormonat nehmen, da brauchst Du doch keinen Trigger mehr am Monatsletzten?

                        Ich halte das mit 2 Triggern für Blödsinn.

                        So und die payload und das topic kannst Du doch alles konfigurieren. Wenn Du 2 trigger machst und die im topic unterscheidest. Zudem kannst Du auch die Default payload belassen.

                        Hier sind 2 Scheduler in einer cron Node definiert und über topic kannst Du entscheiden (in einem Switch) ob der last oder first Scheduler aktiv war.

                        f362bbc8-279c-466e-bbab-6ff129f964e5-image.png

                        Wenn Du dann noch die payload auf Standard belässt - dann hast ewig viel Information.

                        {
                          "triggerTimestamp": 1666614240000,
                          "status": {
                            "type": "static",
                            "modified": false,
                            "isRunning": true,
                            "count": 1,
                            "limit": 0,
                            "nextDescription": "in 59 seconds",
                            "nextDate": "2022-10-24T12:25:00.000Z",
                            "nextDateTZ": "24. Okt. 2022, 14:25:00 MESZ",
                            "timeZone": "Europe/Berlin",
                            "serverTime": "2022-10-24T12:24:00.022Z",
                            "serverTimeZone": "Europe/Berlin",
                            "description": "Every minute"
                          },
                          "config": {
                            "topic": "topic3",
                            "name": "schedule3",
                            "payloadType": "default",
                            "payload": "",
                            "limit": null,
                            "expressionType": "cron",
                            "expression": "0 * * * * * *"
                          }
                        }
                        

                        Aus der Standardpayload bekommst Du das Datum, wann getriggert wurde als timestamp oder als Datum (serverTime) alles raus.

                        Du kannst die payload natürlich auch nach Deinem Geschmack anpassen:

                        dfd7a2d7-6b2d-40a6-9d62-e88d74d7939b-image.png

                        "Beginn Monat: " & $moment().locale("de").tz('Europe/Berlin').format('MMMM YYYY')	
                        

                        bzw.

                        "Ende Monat: " & $moment().locale("de").tz('Europe/Berlin').format('MMMM YYYY')	
                        

                        mit dem entsprechenden Topic - bekommst Du dann halt das als Ausgabe:

                        b8e23a28-2159-4874-a149-dfbcd0685860-image.png

                        Die Kombinationen sind unendlich. 😉

                        ABER:
                        Aber wie gesagt, ich würde einfach nur EINEN Trigger am Monatsersten um 0:00 nehmen und dann die Differenz vom Vormonat

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        839
                        Online

                        31.9k
                        Users

                        80.2k
                        Topics

                        1.3m
                        Posts

                        4
                        10
                        980
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo