Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Objekte von Typ number in Binding auf Gleichheit in prüfen

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Objekte von Typ number in Binding auf Gleichheit in prüfen

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

      In einem Blockly-Script speichere ich nach einer Logik einen Wert der ursprünglich von einem Adapter stammt in ein User Objekt um (von 20 Werten bestimme ich den min Wert)

      Die Speicherung mache ich mit Aktualisieren und/oder Steuern.
      Die Werte sind bestätigt.

      Wenn ich in einer Binding folgende Logik bei Hintergrund Farbe eintrage

      {h1: Wert_von_Adapter; h2: Wert_von_Sript; h1==h2?"color1":"color2"} 
      

      funktioniert nicht!

      Wenn ich die Abfrage ändere und statt == auf > und/oder < abfrage wird die Hintergrundfarbe richtig angezeigt.

      Also meine Frage
      Wie muss ich einen Adapter Wert umspeichern damit ich auf Gleichheit abfragen kann.

      In der Objektdefinition kann ich keinen Unterschied erkennen. Ist die interne Speicherung abweichend?

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

        @franzda
        Sind beide DP definitiv vom gleichen Typ?

        @franzda sagte in Objekte von Typ number in Binding auf Gleichheit in prüfen:

        Ist die interne Speicherung abweichend?

        Sind das Fließkommazahlen?
        Dann wäre das schon fast normal. Bin jetzt kein JS-Experte und weiß daher nicht, wie das in JS intern gehandhabt wird. Aber in fast allen Sprachen müssen für die interne Speicherung von Fließkommazahlen einige Klimmzüge gemacht werden. Abweichungen an der x-ten Nachkommastelle sind da fast die Regel.
        Man könnte für den Wert aus dem Adapter einen Alis einrichten und den Wert über die Konvertierungsfunktion auf eine bestimmte Anzahl Nachkommastellen abschneiden.
        Das Gleiche macht man im Script für den berechnetet Wert.

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

          @codierknecht said in Objekte von Typ number in Binding auf Gleichheit in prüfen:

          Sind das Fließkommazahlen?

          Ja das ist absolut richtig. Fließkomma ist immer ein Thema.
          Jedoch ich speichere die Werte lediglich um somit müsste nach meinem Verständniss die Abfrage funktionieren.

          "Ungleichheit" entsteht nach Operationen (soweit ich das sehe)

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

            @franzda

            Jedoch ich speichere die Werte lediglich um somit müsste nach meinem Verständniss die Abfrage funktionieren.

            Ich wäre mit da jedenfalls nicht zu 100% sicher.
            Kannst Du das mal testweise mit einem kleinen Stückchen JS prüfen und Dir im Log mal die Gleichheit (als Boolean) und die Differenz der beiden Werte ausgeben lassen?

            console.log('Gleichheit: ' + (getState('alias.0.klima.x').val == getState('alias.0.klima.y').val));
            console.log('Differenz: ' + (getState('alias.0.klima.x').val - getState('alias.0.klima.y').val));
            

            Man könnte für den Wert aus dem Adapter einen Alias einrichten und den Wert über die Konvertierungsfunktion auf eine bestimmte Anzahl Nachkommastellen abschneiden.
            Das Gleiche macht man im Script für den berechnetet Wert.

            Versuch macht klug 😉

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

              @codierknecht said in Objekte von Typ number in Binding auf Gleichheit in prüfen:

                                                                                                                                          console.log('Gleichheit: ' + (getState('alias.0.klima.x').val == getState('alias.0.klima.y').val));                                                                                                                                                                            console.log('Differenz: ' + (getState('alias.0.klima.x').val - getState('alias.0.klima.y').val));                                            
              

              Ja die Werte sind abweichend wie ich in meiner Frage auch angenommen habe. Verstehe aber nicht Warum.
              Ich habe die Logik auch in JS laufen Lassen. Das gleiche Ergebnis. Die Abweichung entsteht also in

              setState("0_userdata.0.König.mine10"/*mine10*/, getState("tankerkoenig.0.stations.cheapest.e10.feed").val, true);
              
              javascript.0
              2023-01-22 20:25:11.871	warn	script.js.common.iobroker1.Tankstelle.König.GleichheitAbfrageJS: Differenz: -0.020000000000000018
              javascript.0
              2023-01-22 20:25:11.871	warn	script.js.common.iobroker1.Tankstelle.König.GleichheitAbfrageJS: Gleichheit: false
              javascript.0
              2023-01-22 20:25:11.871	warn	script.js.common.iobroker1.Tankstelle.König.GleichheitAbfrageJS: Gleichheit
              
              on({id: [].concat(['0_userdata.0.König.test']), change: "ne"}, async function (obj) {
                var value = obj.state.val;
                var oldValue = obj.oldState.val;
                console.warn('Gleichheit');
                console.warn('Gleichheit: ' + (getState('0_userdata.0.König.mine10').val == getState('tankerkoenig.0.stations.4.e10.feed').val));
                console.warn('Differenz: ' +  (getState('0_userdata.0.König.mine10').val -  getState('tankerkoenig.0.stations.4.e10.feed').val));
              
              });
              
              Codierknecht 1 Reply Last reply Reply Quote 0
              • Codierknecht
                Codierknecht Developer Most Active @franzda last edited by

                @franzda
                Wieviele Nachkommastellen sind denn relevant?

                Ich kenne mich mit den Bindings nicht wirklich aus, aber vielleicht funzt ja sowas:

                {h1: Wert_von_Adapter; h2: Wert_von_Sript; trunc(h1*100)/100==trunc(h2*100)/100?"color1":"color2"}
                

                oder vielleicht auch so:

                {h1: trunc(Wert_von_Adapter*100)/100; h2: trunc(Wert_von_Sript*100)/100; h1==h2?"color1":"color2"} 
                
                F 1 Reply Last reply Reply Quote 0
                • F
                  franzda @Codierknecht last edited by

                  @codierknecht
                  Kommando zurück.

                  Mir ist eingefallen, dass ich schonmal ein Problem hatte dasbolded text nach Neustart sich aufgelöst hatte.
                  Ich habe eben Raspi neu gestartet und browser cashe gelöscht.

                  Es sieht so aus das jetzt alles klar ist.
                  Prüfe nochmal und melde mich neu wenn doch nicht.

                  Danke für Deine schnelle Hilfe

                  H

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  850
                  Online

                  31.7k
                  Users

                  79.8k
                  Topics

                  1.3m
                  Posts

                  2
                  7
                  193
                  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