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.
    • paul53
      paul53 @smile last edited by

      @smile sagte: Gibt es eine "Punkt-vor-Strich-Rechnung"?

      In Javascript: Ja. Blockly setzt automatisch Klammern um einen Block.

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

      Welchen Unterschied macht "Externe Eingeänge" / "Interne Eingänge" in dem Mathematik-Block?

      Der Unterschied ist nur optisch.

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

      Gibt es irgendwo ein Tutorial / Übersicht über diese Blockly Funktionen

      Doku auf Github

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

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

        Wie funktioniert der Mathematik-Block von Blockly grundsätzlich?

        Er rechnet

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

        Hat man die Möglichkeit Klammern zu verwenden und wenn ja wie? Z.b. (Wert von ObjectID + 10) * (Varable1 * 0,5)

        durch sinnvolle Struktur

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

        Welchen Unterschied macht "Externe Eingeänge" / "Interne Eingänge" in dem Mathematik-Block?

        den selben wie in allen Blöcken! zusammenklappen

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

        Gibt es irgendwo ein Tutorial / Übersicht über diese Blockly Funktionen

        welche?

        • addiert
        • subtrahiert
          : teilt
        • multipliziert
        1 Reply Last reply Reply Quote 0
        • smile
          smile @paul53 last edited by

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

          @smile sagte: Gibt es eine "Punkt-vor-Strich-Rechnung"?

          In Javascript: Ja. Blockly setzt automatisch Klammern um einen Block.

          Okay, wie genau wird die Klammer um den Block gesetzt? Kannst du mir das anhand der zwei Beispiele auf dem Screenshot sagen:
          c4d3c276-dc6e-49ba-8574-4c96de3352d2-grafik.png

          Die Unterschiedlichen Ergebnisse sprechen aber nicht dafür, dass das zuverlässig funktioniert, oder?

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

          Gibt es irgendwo ein Tutorial / Übersicht über diese Blockly Funktionen

          Doku auf Github

          Die hat im Bereich Mathematik nur einen Eintrag, dort war zu diesem Thema nichts zu finden.

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

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

          Hat man die Möglichkeit Klammern zu verwenden und wenn ja wie? Z.b. (Wert von ObjectID + 10) * (Varable1 * 0,5)

          durch sinnvolle Struktur

          Würdest Du sagen dass die Struktur aus meinem Beispiel nicht sinnvoll ist, bzw. wie wäre sie sinnvoll?

          Danke euch beiden.

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

            @smile
            Man kann doch das blockly umschalten auf JS.
            Dort müsstest du doch genau sehen wie gerechnet wird.

            hast dies mal probiert ?

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

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

              Würdest Du sagen dass die Struktur aus meinem Beispiel nicht sinnvoll ist, bzw. wie wäre sie sinnvoll?

              wenn du so gerechnet haben willst wie du die Klammern im ersten Fall gezeichnet hast wäre das die sinnvolle struktur

              wobei bei reiner Strichrechnung eh das Kommutativgesetz gilt.

              Wenn das Ergebnis nicht reproduzierbar funktioniert läufst du eher in die Asynchronfalle

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

                @smile sagte: Hat man die Möglichkeit Klammern zu verwenden und wenn ja wie? Z.b. (Wert von ObjectID + 10) * (Varable1 * 0,5)

                Blockly_temp.JPG

                Erzeugter Javascript-Code:

                (getState('ID auswählen').val + 10) * Variable1 * 0.5;
                
                1 Reply Last reply Reply Quote 0
                • smile
                  smile @bahnuhr last edited by

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

                  @smile
                  Man kann doch das blockly umschalten auf JS.
                  Dort müsstest du doch genau sehen wie gerechnet wird.

                  hast dies mal probiert ?

                  Ja habe ich, kannst du ja in meinem Eingangspost sehen. Leider wurde ja trotzdem nicht der korrekte Wert ausgespucht.

                  Danke @Homoran und @paul53
                  Was eine Asynchronfalle genau ist, ist mir nicht klar?
                  Jedoch bin ich nun zum richtigen Ergebnis gekommen, indem ich das Blockly so umgestellt habe:
                  59f2f560-4a41-44f3-8173-488555da6fe6-grafik.png
                  Kleine Änderung - große Wirkung.

                  Merke: Nur weil in der Javascript Ansicht die Klammersetzung theoretisch richtig ist, kommt nicht automatisch das richtige Ergebnis bei raus.

                  Was mir im Log aufgefallen ist:
                  Durch den "Zeitraum" von einmal -80 Sekunden vor und +80 Sekunden nach dem Timestamp dem ich der Uhrzeiterkennung gegeben habe, wird diese tatsächlich 3 x erkannt.
                  Wenn ich es zu eng eingrenze, habe ich aber auch schon die Erfahrung gemacht, dass die Sekunden mal so ungeünstig liegen, dass die Erkennung komplett an dem Zeitraum vorgbeigeht.
                  Gibt es eine einfachere / präziesere Funktion, um eine Abfrage zu machen: Zu Timestamp X mache Y ? (Was ja im Prinzip nichts anderes ist, als wie zu Uhrzeit X mache Y)

                  Codierknecht Homoran 3 Replies Last reply Reply Quote 0
                  • Codierknecht
                    Codierknecht Developer Most Active @smile last edited by

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

                    Merke: Nur weil in der Javascript Ansicht die Klammersetzung theoretisch richtig ist, kommt nicht automatisch das richtige Ergebnis bei raus.

                    Trugschluss!
                    Wenn die Klammern richtig gesetzt sind und der Code damit korrekt, kommt immer und auf jeden Fall reproduzierbar das richtige Ergebnis heraus.
                    Ansonsten könnte man die Sprache instant in die Tonne treten.
                    Der Kasus knacktus sind die Werte, mit denen gerechnet wird.
                    Probier es aus: gebe die Werte und das Ergebnis als Debug-Meldung aus.
                    Di wirst sehen: Mit den vorliegenden Werten wird immer korrekt gerechnet!

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

                    Was eine Asynchronfalle genau ist, ist mir nicht klar?

                    Trigger und Aktionen werden im ioBroker asynchron ausgeführt.
                    Nehmen wir mal an, ein Trigger auf Objekt X feuert.
                    Du setzt daraufhin einen Wert in Objekt Y und willst den weiterverarbeiten, indem Du den mit "Wert von Y" liest.
                    Das Setzen des Wertes ist aber evtl. noch gar nicht abgeschlossen, weil im Hintergrund asynchron.
                    In diesem Fall liest Du noch den alten und damit falschen Wert.
                    Besser wären in einem solchen Fall z.B. Hilfsvariablen.

                    Ähnliche Probleme hat man mit Nebenläufigkeit unter Windows.
                    Die Kunst besteht darin, die einzelnen Threads zu synchronisieren - wenn man es denn benötigt.
                    Oder seinen Code so aufzubauen, dass man mit der asynchronen Abarbeitung keine Probleme bekommt.

                    https://de.wikipedia.org/wiki/Nebenläufigkeit

                    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:

                      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.

                      smile 1 Reply Last reply Reply Quote 0
                      • 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
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            428
                                            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