Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. W in Kw umrechnen

    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

    W in Kw umrechnen

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

      Hallo,

      ich lese über ioBroker die Leistung von meinem BKW aus. Der Wert wird dann in einer view angezeigt. Das funktioniert ohne Probleme. Ich würde aber gerne wenn der Wert über 1000 Watt ist nicht mehr "1000 W" anzeigen sondern "1 kW" und bei 1100 halt "1.1 kW" wie ist das möglich ?

      Aktuell lese ich nur den DP aus

      049012f2-ce0a-4615-988d-24b8b85c9506-image.png

      Homoran haus-automatisierung OliverIO 3 Replies Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators @romestylez last edited by

        @romestylez sagte in W in Kw umrechnen:

        Ich würde aber gerne wenn der Wert über 1000 Watt ist nicht mehr "1000 W" anzeigen sondern "1 kW" und bei 1100 halt "1.1 kW" wie ist das möglich ?

        nicht soo einfach.
        alles umrechnen geht mit Faktor (ein paar Zeilen tiefer)

        selbst wenn du das per Skript/Alias bewerkstelligst, bleibt die Einheit immer gleich.

        Wenn es denn so sein musd, nimmst du zwei gleiche Widgets übereinander, konfigurierst eins auf W, das andere auf kW und lässt via Sichtbarkeit nur das gewünschte anzeigen

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

          @homoran Naja, kompliziert wäre es aber auch nicht gerade ...

          Vielleicht funktionierte es auch mit Alias Konvertierungsfunktionen ... hier aber als Blockly

          cfb099df-f12f-4a33-a837-202a054f9d61-grafik.png

          1 Reply Last reply Reply Quote 0
          • haus-automatisierung
            haus-automatisierung Developer Most Active @romestylez last edited by haus-automatisierung

            @romestylez sagte in W in Kw umrechnen:

            Ich würde aber gerne wenn der Wert über 1000 Watt ist nicht mehr "1000 W" anzeigen sondern "1 kW"

            Könntest ja mit einem Alias arbeiten.

            val >= 1000 ? `${(val / 1000).toFixed(1)} kW` : `${val} W`
            
            Homoran 1 Reply Last reply Reply Quote 1
            • Homoran
              Homoran Global Moderator Administrators @haus-automatisierung last edited by

              @haus-automatisierung sagte in W in Kw umrechnen:

              @romestylez sagte in W in Kw umrechnen:

              Ich würde aber gerne wenn der Wert über 1000 Watt ist nicht mehr "1000 W" anzeigen sondern "1 kW"

              Könntest ja mit einem Alias arbeiten.

              val >= 1000 ? `${(val / 1000).toFixed(1)} kW` : `${val} W`
              

              dann ist es aber Text und braucht ein anderes Widget

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

                @homoran said in W in Kw umrechnen:

                dann ist es aber Text und braucht ein anderes Widget

                Aber sicherlich weniger aufwändig, als Widgets zu stapeln 😉

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

                  @martinp sagte in W in Kw umrechnen:

                  weniger aufwändig, als Widgets zu stapeln

                  auch in Summe mit Konvertierung als Skript oder alias?
                  oder um einheitlich konfigurierte Widgets zu verwenden.

                  Aber eigentlich egal, ich bin halt von der Ausgangslage ausgegangen.

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

                    @homoran said in W in Kw umrechnen:

                    @martinp sagte in W in Kw umrechnen:

                    weniger aufwändig, als Widgets zu stapeln

                    auch in Summe mit Konvertierung als Skript oder alias?
                    oder um einheitlich konfigurierte Widgets zu verwenden.

                    Aber eigentlich egal, ich bin halt von der Ausgangslage ausgegangen.

                    Das kommt sicherlich auf den Hintergrund an. Der eine kommt mit VIS besser zurecht. Der andere eher mit Javascript und Blockly ...
                    Mir fällt Blockly leichter ...

                    1 Reply Last reply Reply Quote 0
                    • R
                      romestylez last edited by

                      Danke euch allen erst mal !

                      Ich werde mal schauen wie genau ich es umsetze. Ich bastel mir sonst im VIS ziemlich viel irgendwie zurecht auch mit Blockly habe ich nen paar Sachen umgesetzt. Das mit der Sichtbarkeit wäre tatsächlich ne Idee nur ich verstehe den Ansatz mit "geht mit Faktor" nicht. Vielleicht übersehe ich aber auch was auf die Schnelle.

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

                        @romestylez sagte in W in Kw umrechnen:

                        ich verstehe den Ansatz mit "geht mit Faktor" nicht.

                        in den Grundeinstellungen des Number Widgets ksnnst du einen Faktor eingeben
                        von W nach kW wäre dieser 0.001

                        1 Reply Last reply Reply Quote 0
                        • OliverIO
                          OliverIO @romestylez last edited by OliverIO

                          @romestylez

                          Nur VIS Lösung mittels Binding

                          parseInt = wandelt möglichen String in Number um
                          toFixed(1) = rundet Fließkommastelle auf eine Nachkommastelle
                          xx ? true : false = ternäre operator, also sowas wie if xx=wahr then true else false

                          {val:0_userdata.0.watt;parseInt(val)<1000 ? parseInt(val)+" w " : (parseInt(val)/1000).toFixed(1)+" kW"}
                          
                          R MartinP 2 Replies Last reply Reply Quote 1
                          • R
                            romestylez @OliverIO last edited by

                            @oliverio hat perfekt funktioniert vielen vielen Dank ! Daraus kann ich noch Wege für andere Werte ableiten mega hilfreich 🙂

                            1 Reply Last reply Reply Quote 0
                            • MartinP
                              MartinP @OliverIO last edited by MartinP

                              Ich finde ja das Rundungs-Verhalten von toFixed() etwas merkwürdig ...

                              https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed

                              Ist aber wahrscheinlich ein Fehler in der Dokumentation (in Zeile 10 müsste meiner Meinung nach auf 2.6 aufgerundet werden):

                              const numObj = 12345.6789;
                              
                              numObj.toFixed(); // '12346'; rounding, no fractional part
                              numObj.toFixed(1); // '12345.7'; it rounds up
                              numObj.toFixed(6); // '12345.678900'; additional zeros
                              (1.23e20).toFixed(2); // '123000000000000000000.00'
                              (1.23e-10).toFixed(2); // '0.00'
                              (2.34).toFixed(1); // '2.3'
                              (2.35).toFixed(1); // '2.4'; it rounds up
                              (2.55).toFixed(1); // '2.5'
                              // it rounds down as it can't be represented exactly by a float and the
                              // closest representable float is lower
                              (2.449999999999999999).toFixed(1); // '2.5'
                              // it rounds up as it's less than Number.EPSILON away from 2.45.
                              // This literal actually encodes the same number value as 2.45
                              
                              (6.02 * 10 ** 23).toFixed(50); // 6.019999999999999e+23; large numbers still use exponential notation
                              
                              

                              EDIT: Hab es getestet, funktioniert wie dokumentiert:

                              javascript.0
                              	2024-07-05 11:36:40.375	info	script.js.Fritzbox.Tester: Rundung 2.55 auf 1 Nachkommastelle:2.5
                              javascript.0
                              	2024-07-05 11:36:40.375	info	script.js.Fritzbox.Tester: Rundung 2.551 auf 1 Nachkommastelle:2.6
                              javascript.0
                              	2024-07-05 11:36:40.375	info	script.js.Fritzbox.Tester: Rundung 2.65 auf 1 Nachkommastelle:2.6
                              
                              

                              Hier noch der Code:

                              log('Rundung 2.55 auf 1 Nachkommastelle:' + (2.55).toFixed(1));
                              log('Rundung 2.551 auf 1 Nachkommastelle:' + (2.551).toFixed(1));
                              log('Rundung 2.65 auf 1 Nachkommastelle:' + (2.65).toFixed(1));
                              

                              Hier wird wohl symmetrisch und nicht kaufmännisch gerundet:
                              https://de.wikipedia.org/wiki/Rundung#Symmetrisches_Runden

                              OliverIO 1 Reply Last reply Reply Quote 0
                              • OliverIO
                                OliverIO @MartinP last edited by

                                @martinp

                                dann so

                                {val:0_userdata.0.watt;parseInt(val)<1000 ? parseInt(val)+" w " : Math.round(parseInt(val)/100)/10+" kW"}
                                
                                MartinP 1 Reply Last reply Reply Quote 0
                                • MartinP
                                  MartinP @OliverIO last edited by MartinP

                                  @oliverio oder so (bei der Einheit Watt gab es auch noch einen Tippfehler)

                                  {val:0_userdata.0.watt;parseInt(val)<1000 ? parseInt(val)+" W" : (parseInt(val+10)/1000).toFixed(1)+" kW"} 
                                  
                                  R OliverIO 2 Replies Last reply Reply Quote 0
                                  • R
                                    romestylez @MartinP last edited by romestylez

                                    @martinp damit zeigt er aber nicht 1.X kW an sondern 100.6 etc.

                                    3a0d1bbf-de1c-4328-b5b9-892b27e3f22d-image.png

                                    L 1 Reply Last reply Reply Quote 0
                                    • L
                                      legro @romestylez last edited by legro

                                      @romestylez

                                      Losgelöst von deinem konkreten Beispiel eine eine weitere Lösung, die rein im Browser läuft, wenn die View angezeigt wird. Sie mag dir weitere Ideen liefern, wie du derartige Vorhaben in die Tat umsetzen kannst.

                                      cecc4de1-5c49-4964-bb73-3dbc8a91eb39-image.png

                                      {a:e3oncan.0.Vitocal.tree.0565_EnergyConsumptionDomesticHotWater.CurrentYear;b:e3oncan.0.Vitocal.tree.0548_EnergyConsumptionCentralHeating.CurrentYear;parseFloat((a*1+b*1)/1000).toFixed(1).replace(".", ",")} KWh
                                      

                                      Erläuterungen ..

                                      Es wird die Summe für den Energieverbrauch für Warmwasser und Heizen gebildet und angzeigt.

                                      • Zunächst werden diese beiden Werte, welche die verbrauchten Wh enthalten, in den Variablen a und b abgelegt
                                      • Anschließend erfolgt die Addition a * 1 + b * 1 und die Division durch 1000 dividiert, um Wh in KWh umzurechnen; hierbei ist die Multiplikation mit 1 erforderlich, weil die Wert in a und b als Strings - warum auch immer - abgelegt wurden. (Alternativ wäre auch eine sog. Typumwandlung mittels eines sog. Cast möglich.)
                                      • Mittels der Methoden von parseFloat (bzw. String) werden die Nachkommastellen definiert (toFixed) und der in JavaScript üblicherweise vorhandene Dezimalpunkt durch ein Komma ersetzt (replace).

                                      Wie du siehst, kann man ein an sich einfaches Problem beliebig (kompliziert) lösen, wobei es so manchen Stolperstein aus dem Weg zu räumen gilt.😃

                                      Viele Spaß beim Basteln.

                                      1 Reply Last reply Reply Quote 1
                                      • OliverIO
                                        OliverIO @MartinP last edited by

                                        @martinp sagte in W in Kw umrechnen:

                                        {val:0_userdata.0.watt;parseInt(val)<1000 ? parseInt(val)+" W" : (parseInt(val+10)/1000).toFixed(1)+" kW"}

                                        sehr gut du hast meinen testfehler gefunden
                                        warum +10?
                                        das ist nicht das gleiche wie ich gepostet habe.
                                        da ist noch toFixed drin.
                                        Im 2. Beispiel habe ich toFixed nicht mehr verwendet.

                                        MartinP 1 Reply Last reply Reply Quote 1
                                        • MartinP
                                          MartinP @OliverIO last edited by MartinP

                                          @oliverio said in W in Kw umrechnen:

                                          sehr gut du hast meinen testfehler gefunden
                                          warum +10?
                                          das ist nicht das gleiche wie ich gepostet habe.
                                          da ist noch toFixed drin.
                                          Im 2. Beispiel habe ich toFixed nicht mehr verwendet.

                                          Das war etwas aus dem Ärmel geschüttelt

                                          Das ist der Rechenweg

                                          (parseInt(val+10)/1000).toFixed(1)
                                          

                                          Knackpunkt ist das Verhalten auf der "Hälfte" zwischen zwei Zahlenwerten

                                          1550 Watt wird beim "mathematischen Runden" abgerundet, beim "Kaufmännischen Runden" aufgerundet.

                                          Wenn man auf den Wert 10 Watt draufschlägt (die zweite Nachkommastelle soll bei der Umrechnung auf kWh gerundet werden) sollte das für ein Ergebnis entsprechend "kaufmännischem Runden" sorgen...

                                          Interessant wird das Verhalten sicherlich bei negativen Werten ... Habe das nicht getestet ...

                                          OliverIO 1 Reply Last reply Reply Quote 0
                                          • OliverIO
                                            OliverIO @MartinP last edited by

                                            @martinp

                                            warum hälst du dich noch mit toFixed auf?
                                            Nach dem prüfen in der Dokumentation ist mir die Existenzberechtigung von toFixed nicht mehr so ganz klar, da nach ECMA-Spezifikation immer in Richtung der nächstgelegenen Dezimalstelle gerundet wird. Also 1.0-1.5 auf 1 und 1.6-1.9 auf 2.
                                            Math.round (was ich in der 2. Lösung verwendet habe, rundet richtig kaufmännisch.
                                            Nachteil ist, dass man die Anzahl der gewünschten Nachkommastellen nicht angeben kann.
                                            Das kann man dann aber über 2-stufige teilen wieder ausgleichen, also

                                            1240 / 100 = 12,40, nach runden mit Math.round = 12
                                            1250 / 100 = 12,50 nach runden mit Math.round = 13

                                            12/10 = 1,2
                                            13/10 = 1,3

                                            kleiner edge case, wenn als gerundetes ergebnis ein ?.0 rauskommt, also 1.0, 2.0 etc,
                                            dann wird dir das .0 nicht angezeigt. wenn du auch da eine konsistente anzeige haben willst, dann kannst du dort wieder das toFixed einsetzen. Da die Zahl ja schon gerundet ist, verursacht das kein Problem mehr.

                                            {val:0_userdata.0.testFolder.test;parseInt(val)<1000 ? parseInt(val)+" w " : (Math.round(parseInt(val)/100)/10).toFixed(1)+" kW"}

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            817
                                            Online

                                            31.9k
                                            Users

                                            80.3k
                                            Topics

                                            1.3m
                                            Posts

                                            6
                                            21
                                            983
                                            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