Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Bekomme einfache Berechnung nicht hin.

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Bekomme einfache Berechnung nicht hin.

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

      Hallo,

      die Skriptprogrammierung ist für mich noch Neuland. Ich wurstel mich so durch einige How To`s durch.
      Leider bekomme ich die Berechnung für meinen Zisternen Füllstandsmesser nicht zum laufen. Der sensor gibt mir einen ziemlich genauen Wert für die entfernung bis zum Wasser. Jetzt möchte ich das Ganze in Prozent umrechnen. Leider funktioniert hier schon der erste Schritt nich. Die Berechnung des Wasserstandes. Die volle höhe beträgt in diesem Fall 152 cm. Es sollen die 152cm - (des abstandes vom sensor zum Wasser) berechnet werden. Geräte.jpg
      Blockly.jpg

      Kann mir einer sagen was ich falsch machen ?

      Danke.

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

        @timredlich Damit der Zieldatenpunkt einen Wert erhält, muss der Distanz-Wert aktualisiert werden, während das Skript aktiv ist.

        1 Reply Last reply Reply Quote 0
        • R
          RappiRN Most Active last edited by

          Entfernung _invertiert und Prozent sind doch eigene, selbst angelegte Objekte, oder?
          Diese sollten entweder unter javascript.0 oder in eigene Objekte angelegt werden. Ob das auch der Grund für das nicht-Schreiben ist, weiß ich nicht.

          Enrico

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

            @RappiRN
            Die Punkte liegen laut Screenshot unter MQTT. 0
            Das sollte aber kein Problem sein, wenn die Pfade im blockly stimmen.

            Entscheidend ist, ob der wert von ...Distance aktualisiert wird.

            @timredlich
            Was sagt der timestamp?
            Was sagt das log?
            Welcher Typ ist der wert, der von MQTT kommt?
            Welcher Typ sind die Datenpunkte?

            Bau doch mal debug Bausteine ein.

            1 Reply Last reply Reply Quote 0
            • T
              timredlich last edited by

              Also wie gesagt ich stehe noch am Anfang.

              Der Wert von Distance wird doch alle 10 sec. von der NodeMCU aktualisiert. Zumindest wird dieser Wert zeitnah im IOBroker dargestellt. Auch nach veränderung Distanz wird kein wert berechnet.

              1 Reply Last reply Reply Quote 0
              • R
                RappiRN Most Active last edited by

                Was mir gerade auffällt, wie ist denn dein Objekt Entfernung_invertiert eingestellt? Auf den Standart beim Erstellen? Dann ist kein Wert von unter "0" möglich. Bei deinem Beispiel kommt ja ein negativer Wert (152-39)raus!

                Enrico

                M 1 Reply Last reply Reply Quote 0
                • M
                  mehrwiedu @RappiRN last edited by

                  @RappiRN sagte in Bekomme einfache Berechnung nicht hin.:

                  Was mir gerade auffällt, wie ist denn dein Objekt Entfernung_invertiert eingestellt? Auf den Standart beim Erstellen? Dann ist kein Wert von unter "0" möglich. Bei deinem Beispiel kommt ja ein negativer Wert (152-39)raus!

                  Enrico

                  Das Ergebnis von 152-39 ist bei mir positiv. 😉

                  Ich stehe allerdings auch noch am Anfang einer hoffentlich irgendwann routinierten Behandlung von Blockly.
                  Daher weiß ich auch den Unterschied zwischen "aktualisiere" und "steuere" nicht genau zu sagen.
                  Was ich allerdings bei mir immer wieder festgestellt habe ist, dass "aktualisiere" in den meisten Fällen, wo es mir logisch erschien es anzuwenden, nicht funktioniert hat und ich "steuere" nehmen musste, damit am Datenpunkt ein Ergebis vom Skript ankommt.

                  Vielleicht probierst Du das einfach mal aus.

                  Ansonsten wäre ich auch von den Wissenden über eine Aufklärung des Unterschieds in der Interpretation durch Blockly von "aktualisiere" und "steuere" interessiert.

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

                    @mehrwiedu sagte in Bekomme einfache Berechnung nicht hin.:

                    Daher weiß ich auch den Unterschied zwischen "aktualisiere" und "steuere" nicht genau zu sagen.

                    aktualisiere sendet ein ACK=true, steuere ein ACK=false, was den Empfänger veranlasst den Wert zu übernehemen und dann erst ACK=true zu setzen.

                    @timredlich sagte in Bekomme einfache Berechnung nicht hin.:

                    Also wie gesagt ich stehe noch am Anfang

                    Es wäre schön, wenn du miene Fraggen beantworten würdest, dann könnte ich gezielter helfen.
                    Insbesondere der Einsatz von debug-Blöcken mit einer sinnvollen Ausgabe würde dazugehören

                    M 1 Reply Last reply Reply Quote 0
                    • M
                      mehrwiedu @Homoran last edited by

                      @Homoran sagte in Bekomme einfache Berechnung nicht hin.:

                      aktualisiere sendet ein ACK=true, steuere ein ACK=false, was den Empfänger veranlasst den Wert zu übernehemen und dann erst ACK=true zu setzen.

                      Hehe...ok, danke. ACK = Acknowledgement, richtig?

                      Aber das bedeutet in diesem konkreten Fall, bei dem er das Ergebnis aus 152-39 = 113 in einen Datenpunkt schreiben will, genau was?
                      Mit "aktualisiere" sollte also 113 in dem Datenpunkt stehen, der dann mit true bestätigt ist und mit steuere steht die 113 dann in dem Datenpunkt, allerdings bestätigt mit false.
                      Wenn das so ist, verstehe ich den Unterschied für weitere Vorgehensweisen, bei dem der Wert bestätigt sein muss um weiterhin etwas mit ihm machen zu können, sofern darauf abgefragt wird. Für die reine Anzeige des Wertes, bzw. die weitere Berechnung in % spielt das aber doch keine Rolle.

                      Bedeutet aber, "aktualisiere" und "steuere" sind beides identische Befehle mit unterschiedlicher Ausprägung, die im ersten Schritt aber doch dann auf jeden Fall zunächst das Ergebnis in den Datenpunkt schreiben sollten.

                      Warum genau bekomme ich dann mit "aktualisiere" so gut wie nie einen Datenpunkt aus einem Skript heraus gefüllt und muss "steuere" stattdessen wählen? Ich vermutete jetzt tatsächlich, dass es sich um unterschiedliche Interpreter handeln muss.

                      Oder ich habe das jetzt doch nicht verstanden!

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

                        @mehrwiedu sagte in Bekomme einfache Berechnung nicht hin.:

                        Warum genau bekomme ich dann mit "aktualisiere" so gut wie nie einen Datenpunkt aus einem Skript heraus gefüllt

                        Sollte aber immer klappen...
                        Der Wert wird in den Datenpunkt eingetragen, erscheint dabei kurz in grün dann ändert sich die Schriftfarbe in schwarz.

                        Anders bei Steuere...
                        Der Wert wird in den Datenpunkt eingetragen, erscheint dabei kurz in grün und wird dann für immer rot bleiben. Erst wenn er von dem Empfänger abgeholt wird und dieser ihn bestätigt wird ändert sich die Schriftfarbe in schwarz.

                        Selbst angelegte Datenpunkte, die als reine Systemvariablen gedacht sind müssen sogar mit aktualisiere befüllt werden

                        Wenn du jetzt mit "aktualisiere" einen Datenpunkt eines Gerätes/Adapters befüllst erhält der Empfänger jedoch keine Info, dass dieser Wert für ihn ist und überschreibt postwendend den Wert wieder

                        M 1 Reply Last reply Reply Quote 0
                        • MyzerAT
                          MyzerAT last edited by

                          @timredlich

                          darf ich dich fragen, mit was du die Distanz misst, ich würde gerne ähnliches für die Senkgrube benötigen! thx

                          T 1 Reply Last reply Reply Quote 0
                          • R
                            RappiRN Most Active @mehrwiedu last edited by

                            @mehrwiedu
                            stimmt natürlich! 😌

                            Aber der Wert ist über 100, also mein angesprochenes Problem ist das Gleiche! Standart für ein Zahlenobjekt ist 0-100 (%) also, wenn der Wert über 100 ist, wird er auch nicht geschrieben!

                            Enrico

                            1 Reply Last reply Reply Quote 0
                            • T
                              timredlich @MyzerAT last edited by

                              @MyzerAT Ich habe folgende Komponeneten benutzt:

                              https://www.amazon.de/AZDelivery-NodeMCU-ESP8266-ESP-12E-Development/dp/B074Q2WM1Y/ref=sr_1_3?__mk_de_DE=ÅMÅŽÕÑ&crid=2JU9FJF6LNA0B&keywords=nodemcu+esp8266&qid=1553616513&s=gateway&sprefix=Node+MCU%2Caps%2C158&sr=8-3

                              https://www.amazon.de/gp/product/B072L3ZKWZ/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1

                              Habe anfänlich nach diesem How to gearbeitet:

                              https://arduino-projekte.info/zisterne-fuellstandsanzeige/

                              es gibt aber noch andere. Ich habe aber einen NodeMCU genommen und diesen mit ESPeasy geflasht.

                              1 Reply Last reply Reply Quote 1
                              • T
                                timredlich last edited by

                                Leute fragt nicht wie. Aber ich habe es hin bekommen.

                                Aktuell sieht es bei mir so aus:
                                Bildschirmfoto vom 2019-03-26 19-26-36.png
                                Bildschirmfoto vom 2019-03-26 19-26-44.png

                                Ich glaube das ich ein Grundsätzliches Problem habe. Ich habe IOBroker auf einem BananaPi neben Openmediavault installiert. Ich habe oft komplette Systemabstürze. Ich glaube das meine Installation nicht OK ist. Als ich die Scripte auf gerufen habe stand oben die Instanz läuft nicht. Obwohl die JavaScript Engine Grün war. ich werde mir wohl doch noch einen Zusätzlichen RaspberryPi anschaffen und alles Ordentlich neu aufsetzen.

                                Als nächstes werde ich versuchen Die Prozentabfrage über Alexa hin zu bekommen.

                                Ich möchte mich bei allen bedanken. Wird nicht das letzte mal gewesen sein das ich um Hilfe frage.

                                Gruß

                                Tim

                                1 Reply Last reply Reply Quote 0
                                • M
                                  mehrwiedu @Homoran last edited by mehrwiedu

                                  @Homoran sagte in Bekomme einfache Berechnung nicht hin.:

                                  @mehrwiedu sagte in Bekomme einfache Berechnung nicht hin.:

                                  Warum genau bekomme ich dann mit "aktualisiere" so gut wie nie einen Datenpunkt aus einem Skript heraus gefüllt

                                  Sollte aber immer klappen...
                                  Der Wert wird in den Datenpunkt eingetragen, erscheint dabei kurz in grün dann ändert sich die Schriftfarbe in schwarz.

                                  Anders bei Steuere...
                                  Der Wert wird in den Datenpunkt eingetragen, erscheint dabei kurz in grün und wird dann für immer rot bleiben. Erst wenn er von dem Empfänger abgeholt wird und dieser ihn bestätigt wird ändert sich die Schriftfarbe in schwarz.

                                  Selbst angelegte Datenpunkte, die als reine Systemvariablen gedacht sind müssen sogar mit aktualisiere befüllt werden

                                  Wenn du jetzt mit "aktualisiere" einen Datenpunkt eines Gerätes/Adapters befüllst erhält der Empfänger jedoch keine Info, dass dieser Wert für ihn ist und überschreibt postwendend den Wert wieder

                                  Ich muss mich entschuldigen, aber ich habe das leider immer noch nicht verstanden. insbesondere den Teil, an dem sich der "Empfänger" die Info abholt, bzw. keine Info bekommt, weil er nicht weiß, dass der Wert für ihn ist.

                                  In Verbindung mit meinem aktuellen Kenntnisstand kriege ich da keine Logik rein. Was der Unterschied zwischen "aktualisiere" und "steuere" zu sein scheint, habe ich, so wie ich glaube, verstanden. Einmal wird der Wert bestätigt, und einmal eben nicht. Zeigt sich bei mir überall an den Punkten, wo ich die Werte mit "steuere" an den Datenpunkt übergebe eben so:

                                  Bildschirmfoto 2019-03-27 um 13.03.20.png

                                  Ich habe "unwahr" mit steuere übergeben und der Wert ist nicht bestätigt. Aber was hat das für Konsequenzen, bzw. Auswirkungen?

                                  Ein Beispiel, woran man mir das vielleicht erklären kann und ich lerne, was ich hier falsch mache:

                                  Ich habe eine Lampe, die ich getriggert nach Astrozeit, oder aber mittels Sprachbefehl über Alexa als Nachtlicht nutze.

                                  Hier der Datenpunkt, den ich über die Skripte fülle, oder von Alexa füllen lasse.

                                  Bildschirmfoto 2019-03-27 um 13.06.30.png

                                  Wenn ich also sage "Alexa, Nachtlicht an", wechselt dieser Datenpunkt auf "true", bleibt aber unbestätigt, demnach rot und es wird folgendes Skript ausgeführt.
                                  Ebenso bei "Alexa, Nachtlicht aus", nur dass hier dann der "sonst falls" Block im Skript ausgeführt wird.

                                  Bildschirmfoto 2019-03-27 um 13.09.03.png

                                  Ich muss aber die Datenpunkte hier im Skript mit "steuere" ansprechen, weil sonst an der Lampe nichts passiert. "aktualisiere" hat hier keine Auswirkung.

                                  Getriggert auf die Astrozeit werden die Datenpunkte der Lampe "Nachtlicht_" nun nicht durch den Sprachbefehl und somit durch das Skript oben gefüllt, sondern direkt an den Datenpunkten der Lampe.

                                  Bildschirmfoto 2019-03-27 um 13.13.09.png

                                  Aber auch hier muss ich "steuere" wählen, weil sonst die Werte nicht dort ankommen.

                                  Das morgendliche Ausschalten vom Nachtlicht, passiert dann über eine festgelegte Zeit. Hier nutze ich dann wieder das Skript von ganz oben, aber der Auslöser ist dann hier nicht der Sprachbefehl, sondern eben der Datenpunkt selbst. Ebenfalls, wie man sieht, mit "steuere", weil "aktualisiere" nicht zum Ziel führt.

                                  Bildschirmfoto 2019-03-27 um 13.16.17.png

                                  Nun schreibst Du, dass man für erstellte Datenpunkte "aktualisiere" nehmen muss. Warum? Und vor allem, wieso kann ich es faktisch nicht nehmen, weil sonst meine Skripte nicht ausgeführt werden, bzw. die von den Skripten gewünschten Werte nicht im Datenpunkt ankommen?

                                  Die Datenpunkte der Lampe, die ich auch mit "steuere" über das obige Skript setze, sind i. Ü. nach Ausführung des Skripts bestätigt, demnach schwarz.

                                  Bildschirmfoto 2019-03-27 um 13.19.53.png

                                  paul53 Homoran 3 Replies Last reply Reply Quote 0
                                  • paul53
                                    paul53 @mehrwiedu last edited by

                                    @mehrwiedu sagte:

                                    dass man für erstellte Datenpunkte "aktualisiere" nehmen muss.

                                    Für selbst erstellte (virtuelle) Datenpunkte (normalerweise unter javascript.N) sollte man aktualisiere nehmen. Für Datenpunkte, die außerhalb von ioBroker eine Reaktion auslösen sollen, muss man steuere nehmen.

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

                                      @mehrwiedu sagte in Bekomme einfache Berechnung nicht hin.:

                                      Nun schreibst Du, dass man für erstellte Datenpunkte "aktualisiere" nehmen muss.

                                      Da fehlt was 😉

                                      @Homoran sagte in Bekomme einfache Berechnung nicht hin.:

                                      Selbst angelegte Datenpunkte, die als reine Systemvariablen gedacht sind müssen

                                      @mehrwiedu sagte in Bekomme einfache Berechnung nicht hin.:

                                      Hier der Datenpunkt, den ich über die Skripte fülle

                                      Hängt da ein Gerät hinter?
                                      oder ist das eine "Systemvariable"?

                                      @mehrwiedu sagte in Bekomme einfache Berechnung nicht hin.:

                                      Ich muss aber die Datenpunkte hier im Skript mit "steuere" ansprechen, weil sonst an der Lampe nichts passiert.

                                      Dem entnehme ich, dass da wirklich eine Lampe dranhängt, folglich ist "steuere" ein Muss.

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

                                        @paul53 sagte in Bekomme einfache Berechnung nicht hin.:

                                        @mehrwiedu sagte:

                                        dass man für erstellte Datenpunkte "aktualisiere" nehmen muss.

                                        Für selbst erstellte (virtuelle) Datenpunkte (normalerweise unter javascript.N) sollte man aktualisiere nehmen. Für Datenpunkte, die außerhalb von ioBroker eine Reaktion auslösen sollen, muss man steuere nehmen.

                                        Ja, das hat ja @Homoran schon gesagt, aber ich verstehe nicht warum, und die Auswirkung der Syntax dahinter. Und wie man sieht, habe ich mich hier ja definitiv nicht an die muss Bedingung gehalten und die Skripte laufen wie gewünscht.
                                        Ich mag doch nur die Logik dahinter verstehen. 😉

                                        @Homoran
                                        Ich habe in meinem obigen Post noch etwas aktualisiert. Da hatte ich die Bilder zu den Texten vertauscht.

                                        Zu Deiner Frage: Ja, hinter dem Datenpunkt "Nachtlicht_" steckt nur ein virtuelles Gerät, damit ich es mit Alexa steuern kann. Ich nutze diesen Datenpunkt aber auch als Auslöser für die Skripte, bzw. steuere diesen Datenpunkt über die obigen Skripte.

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

                                          @mehrwiedu sagte:

                                          Ich mag doch nur die Logik dahinter verstehen

                                          Lies das.
                                          steuere: ack = false,
                                          aktualisiere: ack = true.

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

                                            @mehrwiedu sagte:

                                            Ich habe "unwahr" mit steuere übergeben und der Wert ist nicht bestätigt. Aber was hat das für Konsequenzen, bzw. Auswirkungen?

                                            Da es sich um einen virtuellen Datenpunkt handelt, hat es keine Konsequenzen, außer dass der Wert im Reiter "Objekte" immer rot (nicht bestätigt) dargestellt wird.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            631
                                            Online

                                            31.7k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

                                            6
                                            26
                                            2586
                                            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