Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Grundsätzliches: Mathematische Berechnungen in Blockly

    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

    Grundsätzliches: Mathematische Berechnungen in Blockly

    This topic has been deleted. Only users with topic management privileges can see it.
    • Homoran
      Homoran Global Moderator Administrators @smile last edited by

      @smile sagte in Grundsätzliches: Mathematische Berechnungen in Blockly:

      Was eine Asynchronfalle genau ist, ist mir nicht klar?

      js arbeitet asynchron und wartet nicht bis der gerade in einen DP geschriebene Wert auch da schon angekommen ist.
      Fragt man diesen Wert direkt wieder ab, liegt noch der alte Wert vor

      bahnuhr 1 Reply Last reply Reply Quote 0
      • bahnuhr
        bahnuhr Forum Testing Most Active @Homoran last edited by

        @homoran sagte in Grundsätzliches: Mathematische Berechnungen in Blockly:

        @smile sagte in Grundsätzliches: Mathematische Berechnungen in Blockly:

        Was eine Asynchronfalle genau ist, ist mir nicht klar?

        js arbeitet asynchron und wartet nicht bis der gerade in einen DP geschriebene Wert auch da schon angekommen ist.
        Fragt man diesen Wert direkt wieder ab, liegt noch der alte Wert vor

        Das klappt bei mir aber einwandfrei (mache ich öfters)

        setState("DP_neu", getState("DP_2012").val);
        setState("DP3", getState("DP4").val + getState("DP_neu").val);
                    
        
        Codierknecht 1 Reply Last reply Reply Quote 0
        • Codierknecht
          Codierknecht Developer Most Active @bahnuhr last edited by

          @bahnuhr
          Kann klappen - muss aber nicht.
          Pferd und Apotheke und so 😁

          bahnuhr 1 Reply Last reply Reply Quote 0
          • bahnuhr
            bahnuhr Forum Testing Most Active @Codierknecht last edited by

            @codierknecht
            wie gesagt; hab ich in meinen Scripten öfters.
            Gab noch nie Probleme.

            js hat immer den neuen Werte genommen.

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

              @bahnuhr
              Da interne Variablen auch schneller verarbeitet werden als den Wert erneut zu lesen, würde ich sowas minimal anders machen:

              let val2012 = getState("DP_2012").val
              setState("DP_neu", val2012);
              setState("DP3", getState("DP4").val + val2012);
              
              bahnuhr R 2 Replies Last reply Reply Quote 2
              • bahnuhr
                bahnuhr Forum Testing Most Active @Codierknecht last edited by

                @codierknecht

                Nachteil: 1 Zeile mehr

                Homoran Codierknecht 2 Replies Last reply Reply Quote 0
                • Homoran
                  Homoran Global Moderator Administrators @bahnuhr last edited by

                  @bahnuhr sagte in Grundsätzliches: Mathematische Berechnungen in Blockly:

                  @codierknecht

                  Nachteil: 1 Zeile mehr

                  egal, Berechnungen immer mit Variablen und erst am Ende in DPs schreiben

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

                    @bahnuhr
                    Vorteil: Minimal schneller.

                    Immer dann, wenn ein Wert im Script nochmal benötigt wird, sollte man das mit internen Variablen lösen.
                    Das Problem ist: Du kannst Dich nicht zu 100% darauf verlassen, dass das immer und für alle Ewigkeit funktioniert.
                    Wenn es dann 1x schiefgeht, suchst Du Dir 'nen Wolf, wo denn der Fehler steckt.
                    Die eine Zeile macht den Kohl nicht fett.

                    Es soll auch Leute geben, die die Leerzeichen um Operatoren weglassen, in der Annahme dass das ja Platz spart und womöglich den Code schneller macht.
                    Lesbarer Code sieht anders aus. Da dürfen auch gerne mal Leerzeilen rein, um das zu strukturieren uvam.

                    1 Reply Last reply Reply Quote 2
                    • R
                      Ralf 6 @Codierknecht last edited by

                      @codierknecht sagte in Grundsätzliches: Mathematische Berechnungen in Blockly:

                      Da interne Variablen auch schneller verarbeitet werden als den Wert erneut zu lesen, würde ich sowas minimal anders machen:

                      let val2012 = getState("DP_2012").val
                      setState("DP_neu", val2012);
                      setState("DP3", getState("DP4").val + val2012);
                      

                      Da ich noch am lernen bin, wie würde denn dieses in Blockly aussehen? Ich habe an der ein oder anderen Stelle auch zeitkritsche Operationen. Eventuell kann mir diese Vorgehensweise helfen.
                      Vielen Dank im voraus

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

                        @ralf-6 sagte in Grundsätzliches: Mathematische Berechnungen in Blockly:

                        wie würde denn dieses in Blockly aussehen?

                        Prinzipiell so:
                        d27ce49d-7c45-41c7-83f8-b901c78d0468-image.png

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

                          @codierknecht ich würde sogar alle Wert von... zu Beginn in Variablen schreiben und nur noch mit diesen rechnen,.
                          Dann passen sie auch zeitlich zusammen

                          paul53 1 Reply Last reply Reply Quote 1
                          • paul53
                            paul53 @Homoran last edited by paul53

                            @homoran sagte: sogar alle Wert von... zu Beginn in Variablen schreiben

                            ... alle Werte, die mehr als einmal verwendet werden.
                            Auch die komplexe Funktion setState() ("steuere"/"aktualisiere") für einen Datenpunkt sollte nur einmal innerhalb einer Callback-Funktion erfolgen, was auch oft die Verwendung von Variablen erfordert.

                            R 1 Reply Last reply Reply Quote 0
                            • R
                              Ralf 6 @paul53 last edited by

                              @paul53; @Homoran; @Codierknecht

                              Vielen Dank für die inspirierende Nachhilfe

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

                                @codierknecht sagte in Grundsätzliches: Mathematische Berechnungen in Blockly:

                                @smile sagte in Grundsätzliches: Mathematische Berechnungen in Blockly:

                                Gibt es eine einfachere / präziesere Funktion, um eine Abfrage zu machen

                                Ich habe noch nicht durchblickt, was Dein Blockly denn genau machen soll.
                                Dein Rollo soll genau x Sekunden vor einer bestimmten Zeit hochfahren?
                                Warum sind da die Sekunden so wichtig?
                                Also mir persönlich wäre es ziemlich egal, ob das Rollo nun 14 oder 16 Minuten vor einer bestimmten Zeit hochfährt.

                                Wenn die Weckzeit in einem DP hinterlegt ist, könnte man da bei Änderungen auch mit 'nem Trigger reagieren und einen passgenauen Zeitplan-Trigger erstellen.
                                Das spart dann auch minütliche Ausführungen.

                                Ganz einfach: Ich stelle einen Wecker über eine MQTT Wecker app. (Ziemlich coole App von Joaquim Plantin: Google Play Store
                                Dieser Überträgt die Weckzeit in hh:mm an den iobroker. Dort steht also in einer Variable 08:35
                                Diese rechne ich um in einen Timestamp in Sekunden seit Tagesanfang:
                                719ba6df-c317-499e-a37a-c95141481676-grafik.png
                                Dann lasse ich die im Eingangspost beschriebene Abfrage 1 x pro Minute durchführen, ob dieser Timestamp + - 80 Sekunden gerade zutrifft.
                                Und wenn ich eine entsprechende Aktion z.B. 15 Minuten davor haben möchte, ziehe ich eben 15 x 60 Sekunden davon ab.
                                Das funktioniert ja auch alles, nur halt ist immer der 1-minütige Trigger aktiv und es hat diesen leichten Ungenauigkeitsaspekt.
                                Ich stimme zu dass es nicht so kritisch ist ab 14, 15 oder 16 Minuten - aber es könnte auch in anderen denkbaren Szenarien eine höhere Bedeutung haben, dass der Zeitpunkt exakt übereinstimmt.

                                Wie würdest du den passgenauen Zeitplan-Trigger erstellen? Wie bekommt man da die unterschiedlichen Werte rein, also einmal die Weckzeit und zum anderen die Unterschiedlichen Rollo - Vorlaufzeiten (15 Min, 30 Min oder 60 Min)?

                                Danke für die spannenden Infos hier, ich habe schon wieder viel gelernt!

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

                                  @smile
                                  Du könntest z.B. auf die Änderung der Weckzeit im ioBroker reagieren und damit dann einen (oder mehrere) Zeitpläne erstellen.

                                  So in etwa nach diesem Prinzip:
                                  a536fef0-15f1-4217-ba08-938a088f5b92-grafik.png

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

                                    @codierknecht Ja das ist eine coole Idee. Und die Zeit davor, also z.B. 15 Minuten davor würdest du dann mit einem zweitem CRON Zeitplan realisieren, wo man die Werte entsprechend um 15 Minuten anpasst?

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

                                      @smile sagte in Grundsätzliches: Mathematische Berechnungen in Blockly:

                                      Und die Zeit davor, also z.B. 15 Minuten davor würdest du dann mit einem zweitem CRON Zeitplan realisieren, wo man die Werte entsprechend um 15 Minuten anpasst?

                                      Exakt!

                                      Um mit Versatzzeiten arbeiten zu können, sollte man den Wert zunächst in einen Zeitwert konvertieren.
                                      Damit lässt sich dann rechnen. Also z.B. 15 Minuten abziehen.
                                      Mit dem Ergebnis lassen sich dann verschiedene Zeitpläne einrichten.

                                      Also z.B. die Weckzeit ohne Versatz und dann einen Zweiten Zeitplan mit - 15 Minuten.

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

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      430
                                      Online

                                      31.9k
                                      Users

                                      80.1k
                                      Topics

                                      1.3m
                                      Posts

                                      blockly
                                      6
                                      27
                                      2012
                                      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