Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Problem] Berechnungen mit Variablen, warum klappt das nicht?

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.7k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.1k

[Problem] Berechnungen mit Variablen, warum klappt das nicht?

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
24 Beiträge 9 Kommentatoren 3.4k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • rantanplanR Offline
    rantanplanR Offline
    rantanplan
    schrieb am zuletzt editiert von
    #7

    @tempestas:

    setStateDelayed mit ansteigendne Intervallen, so dass auf jedenfall der State A geschrieben ist, bevor State B drauf zugreift und ihn für seinen eigenen Wert nutzt `
    Da hat man mit Blockly aber schlechte Karten :cry:

    Rantanplan

    CCU3 / MS Server 2019(VM) / Scripten mit Blockly

    1 Antwort Letzte Antwort
    0
    • T Offline
      T Offline
      tempestas
      schrieb am zuletzt editiert von
      #8

      und wenn du die Schleife nur mit Variablen abarbeiten lässt und erst am Ende die finalen Variablen in die States schreibst?

      <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

      1 Antwort Letzte Antwort
      0
      • AlCalzoneA Offline
        AlCalzoneA Offline
        AlCalzone
        Developer
        schrieb am zuletzt editiert von
        #9

        setState hat einen Callback, der aufgerufen wird, sobald der State tatsächlich geschrieben wurde.

        https://github.com/ioBroker/ioBroker.ja … d#setstate

        Erst dann kannst du per getState den neuen Wert auslesen.

        Ob das aber mit Blockly geht... puuuh. Du kannst höchstens in Skript-internen Variablen rechnen und die Ergebnisse per setState rausschreiben. Dann fällt das getState zum Weiterrechnen weg.

        Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

        1 Antwort Letzte Antwort
        0
        • rantanplanR Offline
          rantanplanR Offline
          rantanplan
          schrieb am zuletzt editiert von
          #10

          @tempestas:

          und wenn du die Schleife nur mit Variablen abarbeiten lässt und erst am Ende die finalen Variablen in die States schreibst? `
          Habe ich auch schon dran gedacht. Elegant ist aber was anderes.

          Und trotzdem ist so etwas eine böse Falle.

          Wer kann sagen, wie lange so eine asynchrone Abarbeitung dauert.

          Wie soll man so etwas Blockly Anfängern veranschaulichen.

          Alles sehr unbefriedigend :cry:

          Grüße

          Rantanplan

          CCU3 / MS Server 2019(VM) / Scripten mit Blockly

          1 Antwort Letzte Antwort
          0
          • T Offline
            T Offline
            tempestas
            schrieb am zuletzt editiert von
            #11

            @rantanplan:

            @tempestas:

            und wenn du die Schleife nur mit Variablen abarbeiten lässt und erst am Ende die finalen Variablen in die States schreibst? `
            Habe ich auch schon dran gedacht. Elegant ist aber was anderes.

            Und trotzdem ist so etwas eine böse Falle.

            Wer kann sagen, wie lange so eine asynchrone Abarbeitung dauert.

            Wie soll man so etwas Blockly Anfängern veranschaulichen.

            Alles sehr unbefriedigend :cry:

            Grüße `

            Ehrlich gesagt verstehe ich dich da nicht ganz.

            Warum soll es "eleganter sein", wenn States im Milisekundentakt beschrieben und ausgelesen werden anstatt direkt nur mit Variablen zu Arbeiten? Es gibt doch eh nur ein (bzw vier in deinem Beispiel) Endergebnis(se).

            Eleganz liegt ja eh im Auge des Betrachters. Was z.B. paul53 skripted ist für mich elegant.

            <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

            1 Antwort Letzte Antwort
            0
            • inlineI Offline
              inlineI Offline
              inline
              schrieb am zuletzt editiert von
              #12

              Ist aber schon klar, dass das Ändern von States potentiell den Update von x angeschlossenen vis GUI's, das Ausführen von Skripten und das Senden via mqtt usw triggert?

              In so fern sollte man da wirklich etwas vorsichtig mit sein.

              LG,

              Ralf

              Aufgrund technischer Beschränkungen befindet sich die Signatur auf der Rückseite

              1 Antwort Letzte Antwort
              0
              • uweklattU Offline
                uweklattU Offline
                uweklatt
                schrieb am zuletzt editiert von
                #13

                Hallo,

                sinnvoll bzw. hilfreich wäre ein zusätzlicher Parameter für setState() mit der Funktion synchrone/asynchrone Ausführung.

                Dann könnte man sich das Rumgehampel mit Callbacks sparen und der Code macht das, was man erwartet.

                Tschau

                Uwe

                Proxmox/LXC/Docker

                1 Antwort Letzte Antwort
                0
                • paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von
                  #14

                  @uweklatt:

                  und der Code macht das, was man erwartet. `
                  …was Du erwartest.

                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                  1 Antwort Letzte Antwort
                  0
                  • uweklattU Offline
                    uweklattU Offline
                    uweklatt
                    schrieb am zuletzt editiert von
                    #15

                    Hallo Paul,@paul53:

                    …was Du erwartest. ` Ja, und was die Mehrheit der "Laienprogrammierer" auch erwartet ;-)

                    Tschau

                    Uwe

                    Proxmox/LXC/Docker

                    1 Antwort Letzte Antwort
                    0
                    • apollon77A Offline
                      apollon77A Offline
                      apollon77
                      schrieb am zuletzt editiert von
                      #16

                      Es ist korrekt das der JavaScript-Adapter an sich alles versucht synchron zu machen.

                      Welche JS-Version ist im Einsatz?

                      Wenn aktuell (mind 3.4.x) dann bitte GitHub Issue aufmachen dafür, sonst bitte updaten und neu versuchen

                      Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

                      • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
                      • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
                      1 Antwort Letzte Antwort
                      0
                      • G Offline
                        G Offline
                        gst666
                        schrieb am zuletzt editiert von
                        #17

                        States sind keine Variablen. Falls man wie rataplan rechnen will, so sollte man die States in eine Variable einlesen und dann wenn die Berechnungen abgeschlossen sind, kann man den Wert in einen State wieder zurückschreiben.

                        Auch wenn es sich platt anhört. States sind keine Variablen.

                        Wer sich mal gewundert hat, warum man beim auslesen der States am Ende .val angibt, mag folgendes ausprobieren:

                        console.log(JSON.stringify(getState("obj")));
                        

                        obj durch einen gültigen State ersetzen.

                        Wie man sieht, werden eine Reihe von Daten gespeichert und nicht nur der Wert des eigentlichen States. Bei zu häufiger Verwendung wird das System stark belastet.

                        1 Antwort Letzte Antwort
                        0
                        • rantanplanR Offline
                          rantanplanR Offline
                          rantanplan
                          schrieb am zuletzt editiert von
                          #18

                          @tempestas:

                          Ehrlich gesagt verstehe ich dich da nicht ganz.

                          ….. Es gibt doch eh nur ein (bzw vier in deinem Beispiel) Endergebnis(se). `
                          Das Beispiel ist auch nur zur Verdeutlichung und sonst ziemlich sinnlos.

                          Das Problem tauchte bei einem "Hilfsprojekt" hier im Forum auf.

                          Zudem lief es bei mir und bei dem User nicht.

                          Da scheinen auch die Leistungsstärke des verwendeten System eine Rolle zu spielen.

                          Erst ein "Stresstest" brachte mich auf die Fährte.
                          @tempestas:

                          …Warum soll es "eleganter sein", wenn States im Milisekundentakt beschrieben und ausgelesen werden anstatt direkt nur mit Variablen zu Arbeiten?... `
                          Versetzt Dich mal bitte in einen Blockly-Anfänger.

                          Grüße

                          Rantanplan

                          CCU3 / MS Server 2019(VM) / Scripten mit Blockly

                          1 Antwort Letzte Antwort
                          0
                          • rantanplanR Offline
                            rantanplanR Offline
                            rantanplan
                            schrieb am zuletzt editiert von
                            #19

                            @apollon77:

                            Welche JS-Version ist im Einsatz?

                            Wenn aktuell (mind 3.4.x) dann bitte GitHub Issue aufmachen dafür, sonst bitte updaten und neu versuchen `
                            3.4.5 ist bei mir im Einsatz.

                            GitHub ist für mich leider immer noch eine Blackbox :oops:

                            Werde es mal bei Trello versuchen.

                            Grüße

                            Rantanplan

                            CCU3 / MS Server 2019(VM) / Scripten mit Blockly

                            1 Antwort Letzte Antwort
                            0
                            • apollon77A Offline
                              apollon77A Offline
                              apollon77
                              schrieb am zuletzt editiert von
                              #20

                              Github issues anlegen ist simpel.

                              Github.com , Account anlegen mit E-Mail. Dann im entsprechenden github Projekt (Adapter rechts beim Fragezeichen),dort auf issues und create issue. Text eingeben. Done

                              Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

                              • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
                              • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
                              1 Antwort Letzte Antwort
                              0
                              • T Offline
                                T Offline
                                tempestas
                                schrieb am zuletzt editiert von
                                #21

                                Hi Rantanplan,

                                Ich verstehe nicht, warum du der möglichen Lösung so ablehnend gegenüber stehst? Zumal die Probleme mit den States ja schon beschrieben wurden?

                                @rantanplan:

                                Versetzt Dich mal bitte in einen Blockly-Anfänger. `

                                Kann ich nicht; Blockly war mir zu schwierig, habe ich nie verstanden (ehrlich, ich verstehe es nicht und finde es erstaunlich, wie du damit zauberst) und daher gleich versucht, JS zu lernen. Da bin ich noch immer dabei. Jeden Tag ein Stückchen mehr dank geduldiger Leute wie Pix, paul53 und vielen mehr.

                                Aber ganz grundsätzlich:

                                Nach meiner Erkenntnis hier im Forum ist es eher so, dass jeder, der sich minimal mit "programmieren" beschäftigt, sei es Blockly oder direkt JS, so etwas wie Variablen kennt. Denn Variablen gibt es in jeder Sprache seit jeher. Dagegen sind die states für Viele etwas Neues.

                                Warum sollte es für einen Anfänger leichter sein, States zu verstehen als Variablen, die mit Werten gefüllt werden und diese ganz am Ende dann zurückspielen? Das erschließt sich mir nicht; völlig losgelöst von der Frage, womit programmiert wird.

                                <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

                                1 Antwort Letzte Antwort
                                0
                                • HomoranH Nicht stören
                                  HomoranH Nicht stören
                                  Homoran
                                  Global Moderator Administrators
                                  schrieb am zuletzt editiert von
                                  #22

                                  Jetzt möchte ich mich als Hüter und Beschützer der Einsteiger doch noch in diese Diskussion einmischen!

                                  @paul53:

                                  @uweklatt:

                                  und der Code macht das, was man erwartet. …was Du erwartest.
                                  und genau das ist der Knackpunkt.

                                  Paul erwartet etwas anderes, weil er das Verhalten kennt und WEISS, dass die "übliche Laienerwartung" nicht erfüllt wird.

                                  Daher kann ich rantanplans Aussage:
                                  @rantanplan:

                                  Versetz Dich mal bitte in einen Blockly-Anfänger. `
                                  nur voll unterstreichen.

                                  Selbst ich komme nicht mit js-klar. Ich kann es lesen, ggf. analysieren und durch try and error anpassen, aber das ist nichts für Einsteiger.

                                  Die ohne jegliche Programmiererfahrung einfach etwas zusammenklicken wollen.

                                  Dies geht mit Blockly sehr einfach, wenn man etwas strukturiertes Denken einsetzt.

                                  @tempestas:

                                  Blockly war mir zu schwierig, habe ich nie verstanden `
                                  Das wiederum kann ich nicht verstehen, will dieses aber bitte nicht in diesem Thread diskutieren!

                                  Die einzige Vermutung ist, dass du bereits so "programmierverseucht" (im positiven Sinne) bist, dass du Probleme hast das Programmierdenken absoluter Noobs nachzuvollziehen (auch das ist NICHT negativ gemeint, sondern meine Erfahrung in ähnlichen Fällen).

                                  Blockly ist ein tolles Werkzeug um Einsteigern eine einfache Möglichkeit zu bieten visuelles coding auszuführen.

                                  und genau deswegen hat Blockly natürlich auch Einschränkungen.

                                  Und ein Einsteiger erwartet natürlich, dass Arbeitsschritte nacheinander abgearbeitet werden und man im dritten Schritt auf das Ergebnis vom ersten Schritt zugreifen kann.

                                  Gruß

                                  Rainer

                                  kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                                  Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                  der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                  1 Antwort Letzte Antwort
                                  0
                                  • T Offline
                                    T Offline
                                    tempestas
                                    schrieb am zuletzt editiert von
                                    #23

                                    Hallo Rainer,

                                    ich sage ja auch gar nicht, dass ich das Grundproblem nicht nachvollziehen kann.

                                    Ich sage lediglich, dass wenn man Variablen einsetzt, es gehen sollte. Und mein Unverständnis bezieht sich dann darauf, dass das als "nicht schön" abgelehnt wird.

                                    Warum sind Variablen weniger schön als States?

                                    Kann man in Blockly keine Variablen setzen? Habe ich keine Ahnung.

                                    Warum ist einem Blockly Anfänger vermeintlich ein State sofort zugänglich intellektuell, aber eine Variable nicht?

                                    Letztlich ist der State wie er hier genutzt wird, ja nichts anderes als etwas dass ich unter Reiter Objects mir visuell ansehen kann.

                                    Genutzt wird er aber zu 90% (nämlich bei 9 von 10 Durchläufen) wie eine Variable. Und diese 9x sehe ich noch nichtmal, da es ja, trotz aller Asynchronität, trotzdem alles sehr schnell geht nach menschlichem Ermessen.

                                    Meine JS Kenntnisse lagen übrigens exakt bei 0 im März diesen Jahres. Sieht man auch an meinen ersten Postings, in denen ich verzweifelt versuche, einen Code zu verstehen :oops: :lol:

                                    Und es gibt hier genug elegant programmierte Sachen, die ich noch immer nicht verstehe.

                                    Aber das ist ja nicht das Thema

                                    <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

                                    1 Antwort Letzte Antwort
                                    0
                                    • AlCalzoneA Offline
                                      AlCalzoneA Offline
                                      AlCalzone
                                      Developer
                                      schrieb am zuletzt editiert von
                                      #24

                                      @Homoran:

                                      Und ein Einsteiger erwartet natürlich, dass Arbeitsschritte nacheinander abgearbeitet werden und man im dritten Schritt auf das Ergebnis vom ersten Schritt zugreifen kann. `
                                      Die Erwartung kann ich nachvollziehen. Dennoch (und das sollte Einsteigern verständlich gemacht werden) sollten States nicht als Variablenersatz gesehen werden, da der Rattenschwanz dahinter zu groß ist (DB-Aktualisierung, mögliche UI-Aktualisierung, Skript-Trigger, etc…).

                                      Das erwartete Verhalten, das du beschreibst, ist mit Skript-Variablen gegeben. Dafür sind sie da und dafür sollten sie benutzt werden. Das hat nichts mit "nicht schön" zu tun. Zwischenergebnisse von Rechnungen sollten in Variablen landen, nicht in States. States sind gedacht für etwas langlebigere Werte mit Bedeutung.

                                      Jedes System hat Grenzen innerhalb derer man arbeiten soll/muss. Klare Regeln wie

                                      • States sind für Eingabewerte (wie Sensordaten) und Endergebnisse von Berechnungen

                                      • Variablen sind für Zwischenwerte
                                        verstehen auch Anfänger, wenn man es entsprechend kommuniziert.

                                      Das ursprüngliche Problem vom TE ist für mit von der Kategorie

                                      "Bist du dir sicher, dass du das wirklich machen willst? Ich glaube nicht!"

                                      Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                                      1 Antwort Letzte Antwort
                                      0
                                      Antworten
                                      • In einem neuen Thema antworten
                                      Anmelden zum Antworten
                                      • Älteste zuerst
                                      • Neuste zuerst
                                      • Meiste Stimmen


                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      370

                                      Online

                                      32.4k

                                      Benutzer

                                      81.5k

                                      Themen

                                      1.3m

                                      Beiträge
                                      Community
                                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                      ioBroker Community 2014-2025
                                      logo
                                      • Anmelden

                                      • Du hast noch kein Konto? Registrieren

                                      • Anmelden oder registrieren, um zu suchen
                                      • Erster Beitrag
                                        Letzter Beitrag
                                      0
                                      • Home
                                      • Aktuell
                                      • Tags
                                      • Ungelesen 0
                                      • Kategorien
                                      • Unreplied
                                      • Beliebt
                                      • GitHub
                                      • Docu
                                      • Hilfe