Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. [gelöst] dynamischer Cronjob, wie?

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] dynamischer Cronjob, wie?

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

      Ich habe tgl. Zugriff auf eine JSON Datei.

      {"tariff":"EPEXSPOTAT","unit":"ct/kWh","interval":15,"data":[{"date":"2023-12-28T00:00:00+01:00","value":1.219},{"date":"2023-12-28T00:15:00+01:00","value":1.219},{"date":"2023-12-28T00:30:00+01:00","value":1.219},{"date":"2023-12-28T00:45:00+01:00","value":1.219},{"date":"2023-12-28T01:00:00+01:00","value":1.153},{"date":"2023-12-28T01:15:00+01:00","value":1.153},{"date":"2023-12-28T01:30:00+01:00","value":1.153},
      

      Diese zerlege ich in Stunden und Werte:
      7e298386-9e4b-4921-bfaf-d04c32eb8b19-image.png

      Danach suche ich mir den günstigsten und den 2.günstigsten Wert raus und schreibe ihn weg.
      6f9caf5c-e242-41ad-9153-1c5ec1368f00-image.png

      Wie starte ich einen dynamischen Cronjob mit den ermittelten Werten? Damit?
      333adf25-dbe9-4582-84e9-e478239630d3-image.png

      Der Blocklybaustein passt mir nicht an den Anfang eines Scriptes 😵

      Codierknecht 1 Reply Last reply Reply Quote 0
      • Codierknecht
        Codierknecht Developer Most Active @metaxa last edited by

        @metaxa sagte in dynamischer Cronjob, wie?:

        Der Blocklybaustein passt mir nicht an den Anfang eines Scriptes

        Nimm den hier dazu und denk daran, vor dem Neu-Erzeugen den laufenden CRON zu beenden.

        dba9364b-516a-4912-bbcf-479a1c35e2c5-grafik.png

        metaxa 1 Reply Last reply Reply Quote 1
        • metaxa
          metaxa @Codierknecht last edited by metaxa

          @codierknecht sagte in dynamischer Cronjob, wie?:

          Nimm den hier
          Ok & danke, inzwischen komme ich weiter 🙂

          Nur, wie sage ich dem Cronjob mache das morgen um die angegebene Uhrzeit!!
          2052291b-4652-4ab9-bc5d-d0bb79e2dcb4-image.png

          Danke für
          @codierknecht sagte in dynamischer Cronjob, wie?:

          vor dem Neu-Erzeugen den laufenden CRON zu beenden.

          hätte ich nicht am Plan gehabt.

          Codierknecht 1 Reply Last reply Reply Quote 0
          • Codierknecht
            Codierknecht Developer Most Active @metaxa last edited by

            @metaxa sagte in dynamischer Cronjob, wie?:

            Nur, wie sage ich dem Cronjob mache das morgen um die angegebene Uhrzeit!!

            Indem Du das Datum von morgen bestimmst und mitgibst.
            Also aktuellen Zeitstempel ermitteln, 86.400 Sekunden hinzuaddieren und daraus dann Tag und Monat bestimmen.

            metaxa 1 Reply Last reply Reply Quote 0
            • metaxa
              metaxa @Codierknecht last edited by metaxa

              @codierknecht
              Mit Tag und Uhrzeit in dem Cronjob ist doch nur mit Stunde und Minute zu füllen.

              Ich meine, wie sage ich ihm morgen um diese Stunde und Minute?

              Stehe auf der Leitung .......

              acda6dc2-c860-4d80-8cd9-8f6bf4db50dc-image.png
              8ecbe910-a429-4db8-a59d-06349e606528-image.png
              1ed62074-44bc-4a7b-b376-ba2e1721c10d-image.png

              EDIT: So funktioniert es:
              47969adf-bb91-425c-82ae-14b903bcee0d-image.png

              Codierknecht 1 Reply Last reply Reply Quote 0
              • Codierknecht
                Codierknecht Developer Most Active @metaxa last edited by

                @metaxa sagte in dynamischer Cronjob, wie?:

                EDIT: So funktioniert es:

                Oder eben Tag und Monat passend besetzen 😉

                metaxa 1 Reply Last reply Reply Quote 0
                • metaxa
                  metaxa @Codierknecht last edited by metaxa

                  @codierknecht Ich schnall es einfach nicht, bin scheinbar zu blöd für die richtigen Parameter

                  Ich weiß "morgen"
                  ich weiß "stunde"
                  ich weiß "minute" (ist immer 0)

                  2be583c5-6995-4257-8bca-e68aa0b96fe0-image.png

                  19:31:21.558	error	javascript.0 (636) script.js.010_Testen.zu_bestimmten_uhrzeit_script_starten: schedule(cron=32 19 12 5): cannot create schedule
                  
                  Codierknecht 1 Reply Last reply Reply Quote 0
                  • Codierknecht
                    Codierknecht Developer Most Active @metaxa last edited by Codierknecht

                    @metaxa
                    Beispiel: Morgen um 07:15 Uhr

                    66f248db-66dc-40a7-ba66-3b96b61d11c3-image.png
                    Mit "Wochentag" ist der Tag der Woche gemeint. Also "Montag", "Dienstag" usw.

                    metaxa 1 Reply Last reply Reply Quote 1
                    • metaxa
                      metaxa @Codierknecht last edited by

                      @codierknecht Ganz lieben Dank! Jetzt gilt es noch das umzusetzen 🙂
                      a83b7524-535b-47f4-8cc8-f3641414c8d7-image.png

                      metaxa 1 Reply Last reply Reply Quote 0
                      • metaxa
                        metaxa @metaxa last edited by

                        @Codierknecht und @Alle

                        • Darf/Kann ich einen 2. Cronjob innerhalb eines Cronjobs packen, der erst morgen startet?
                        • Werden einem Cronjob seine ToDo´s mitgegeben, oder sucht er beim Start sein Ursprungsscript und führt dann die dortigen Anweisungen durch?

                        073a1b90-5e51-437c-b67f-f8903d3115cf-image.png

                        LG

                        MartinP Asgothian 2 Replies Last reply Reply Quote 0
                        • MartinP
                          MartinP @metaxa last edited by MartinP

                          @metaxa Wieso mit Cron Jobs, und nicht mit Timern?

                          Sind doch einmalige Ereignisse....

                          88cdef51-2e4d-4112-a919-3ef8ecc00250-grafik.png

                          metaxa 1 Reply Last reply Reply Quote 0
                          • metaxa
                            metaxa @MartinP last edited by

                            @martinp mir scheint ein Cron besser geeignet, da - ja ein einmaliges Ereignis - am nächsten Tag zu unterschiedlichen Zeiten starten soll.

                            Vor Timern habe ich immer etwas Respekt, die können falsch angewendet oder nicht richtig gestoppt ziemlichen Ärger verursachen. Obendrein müsste ich das Script deutlich um eine Berechnung des Timers erweitern. Um 17:01 hole ich mir die Werte, wann am nächsten Tag zur vollen Stunde etwas passieren soll.

                            MartinP 1 Reply Last reply Reply Quote 0
                            • Asgothian
                              Asgothian Developer @metaxa last edited by

                              @metaxa sagte in dynamischer Cronjob, wie?:

                              @Codierknecht und @Alle

                              • Darf/Kann ich einen 2. Cronjob innerhalb eines Cronjobs packen, der erst morgen startet?

                              Bedingt. In diesem Fall: Ja. Du stellst sicher das sich die Einträge nicht vermehren. Es kann allerdings passieren das der innere Cron-Job nicht zum Zuge kommt, wenn seine Ausführung "nach" dem nächsten Ausführen des äusseren Cron Jobs geplant ist.

                              • Werden einem Cronjob seine ToDo´s mitgegeben, oder sucht er beim Start sein Ursprungsscript und führt dann die dortigen Anweisungen durch?

                              Es werden immer die zum Zeitpunkt der Ausführung relevanten Werte genommen. Wenn du auf die Werte der Datenpunkte beim Erstellen des Cron-Jobs zugreifen willst musst du diese lesen und in lokale Variablen schreiben auf die der Cron-Job dann zugreift. Allerdings musst du aufpassen - änderst du diese Variablen im Skript bevor der Cron-Job zum Zuge kommt nimmt er die geänderten Werte.

                              Der Cron Job bekommt meines Wissens keinen eigenen Kontext mit eigenen Variablenspeichern.

                              073a1b90-5e51-437c-b67f-f8903d3115cf-image.png

                              LG

                              metaxa 1 Reply Last reply Reply Quote 1
                              • MartinP
                                MartinP @metaxa last edited by

                                @metaxa Hier SOLLEN die Timer ja ausgeführt werden, im Falle von Timeout-Überwachungen für Ereignisse muss man natürlich im Gegensatz dazu darauf achten, den Timer zu entschärfen, wenn das überwachte Ereignis eingetreten ist ...

                                Die Herde von Cron-Jobs muss man ja auch hüten 😉

                                1 Reply Last reply Reply Quote 0
                                • metaxa
                                  metaxa @Asgothian last edited by

                                  @asgothian sagte in [gelöst] dynamischer Cronjob, wie?:

                                  Es kann allerdings passieren das der innere Cron-Job nicht zum Zuge kommt, wenn seine Ausführung "nach" dem nächsten Ausführen des äusseren Cron Jobs geplant ist.

                                  Danke, dass hatte ich nicht im Blickfeld. Da muss ich mir überlegen, wie ich das ggf. umgehen kann, wenngleich der Cronjob zimlich sicher vor der nächsten Scriptausführung um 17:00 startet. Da muss ich noch grübeln.

                                  @asgothian sagte in [gelöst] dynamischer Cronjob, wie?:

                                  Der Cron Job bekommt meines Wissens keinen eigenen Kontext mit eigenen Variablenspeichern.

                                  Danke!

                                  @martinp sagte in [gelöst] dynamischer Cronjob, wie?:

                                  Hier SOLLEN die Timer ja ausgeführt werden

                                  Ich fürchte ich verstehe dich nicht, was aber eher an meiner Unerfahrung mit Timern liegt und nicht an deinen Ausführungen.

                                  MartinP 1 Reply Last reply Reply Quote 0
                                  • MartinP
                                    MartinP @metaxa last edited by

                                    @metaxa Wenn ich das richtig verstehe, holst Du Dir zwei Zeitpunkte für die kommenden 24 Stunden, wo der Strom sehr günstig ist, und möchtes dann Aktionen Auslösen, wenn die Zeitpunkte gekommen sind (auch welche, wenn der Strom wieder teurer wird?)

                                    Da könnte man natürlich auch Timeouts von Timern bei der Ermittlung gleich so berechnen, dass die beim Erreichen der Zeit abgelaufen sind ...

                                    Wenn die Genauigkeit nicht so wichtig ist: Eine andere, etwas stumpfe Möglichkeit wäre, stumpf zu "pollen". Ein z. B. minütlich startender Cron-Job prüft, ob die aktuelle Zeit innerhalb eines Zeitintervalls "guten Strompreises" ist .... ansonsten wird nichts getan ...

                                    metaxa 1 Reply Last reply Reply Quote 0
                                    • metaxa
                                      metaxa @MartinP last edited by

                                      @martinp sagte in [gelöst] dynamischer Cronjob, wie?:

                                      holst Du Dir zwei Zeitpunkte für die kommenden 24 Stunden, wo der Strom sehr günstig ist, und möchtes dann Aktionen Auslösen, wenn die Zeitpunkte gekommen sind (auch welche, wenn der Strom wieder teurer wird?)

                                      Exakt: mein akt. Stromprovider stellt mir tgl. um 17:00 die stündlichen Stromtarife des kommenden Tages zur Verfügung. Die hole ich mir und parse sie in DP von 00 - 23 Uhr. Danach suche ich mir den günstigsten und den 2.günstigsten Preis raus. Der 2. günstigere ist eher nur eine Fleißaufgabe, verwende ich aber nicht wirklich. Am nächsten Tag zum Zeitpunkt xx:00 lade ich dann meine Akkus im Keller auf um den Rest des Tages vom relativ günstigen Einkauf zu leben. Das Vollpumpen der Akkus im Winter hat auch den Vorteil, dass diese regelmäßig kalibriert werden.

                                      In meinem Script fülle ich den 2. Cron mit den Daten des errechneten günstigsten Preises.

                                      @martinp sagte in [gelöst] dynamischer Cronjob, wie?:

                                      Da könnte man natürlich auch Timeouts von Timern bei der Ermittlung gleich so berechnen, dass die beim Erreichen der Zeit abgelaufen sind ...

                                      Das ist gar nicht nötig, die Vollladung meiner kleinen Akkukapazität ist erfahrungsgemäß in max. 70 oder 80 Minuten erledigt. Dass die 10 - 20 Minuten in den nächsten Tarif rutschen krazt mich nicht besonders.

                                      @martinp sagte in [gelöst] dynamischer Cronjob, wie?:

                                      .... ansonsten wird nichts getan ...

                                      jein, erst béim Erreichen des manuellen Ladezeitpunkts prüfe ich noch etliche Parameter ob eine Volladung sinnvoll ist. Aktuell beinhaltet die Prüfung paar Parameter meiner PV (unter anderen den SOC Wert). Aktuell bin ich noch am Überlegen auch den zu erwartenden Sonnenertrag des kommenden Tages miteinfließen zu lassen und die Akkus im Falle des Falles mnur bis zu 70% oder 80% zu laden, in der Hoffnung die Tagessonne erledigt dann die Differenz. Bei einer Volladung hatte ich jetzt schon paar mal die Situation, die Akkus waren gut gefüllt als die Sonne kam und ich schickte dann wieder überschüssige Energie zu einem schlechten Preis ins Netz. Das versuche ich zu umgehen.

                                      Sorry für den langen Text.

                                      MartinP Codierknecht 2 Replies Last reply Reply Quote 0
                                      • MartinP
                                        MartinP @metaxa last edited by

                                        @metaxa Wenn das alles zeitlich nicht so genau sein muss, wäre der "Polling" Ansatz vielleicht gar nicht so schlecht...

                                        Ein Cron-Skript was stumpf alle 5 Minuten aufgerufen wird, und schaut, ob der Zeitpunkt für günstigen Strom schon gekommen ist.

                                        1 Reply Last reply Reply Quote 0
                                        • Codierknecht
                                          Codierknecht Developer Most Active @metaxa last edited by Codierknecht

                                          @metaxa
                                          Vielleicht in der Art?

                                          560dae3c-f024-4767-8c44-e9f9c7bc47cd-image.png

                                          Um 17:00 Uhr wird der Tarif analysiert und ein genau dazu passender Zeitplan "laden" erstellt.
                                          Der wird um 17:00 Uhr erstmal beendet, da er ja neu berechnet werden muss.

                                          MartinP 1 Reply Last reply Reply Quote 1
                                          • MartinP
                                            MartinP @Codierknecht last edited by

                                            @codierknecht Wenn man in den hellblauen Feldern auch berechnete Strings eintragen kann, wäre das wirklich die naheliegende Lösung.
                                            Ich hatte da mit mehr Limitierungen gerechnet ...

                                            Codierknecht metaxa 2 Replies Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            656
                                            Online

                                            32.0k
                                            Users

                                            80.4k
                                            Topics

                                            1.3m
                                            Posts

                                            blockly
                                            4
                                            28
                                            1268
                                            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