Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Frage: alias Konvertierungsfunktion

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Frage: alias Konvertierungsfunktion

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

      Hallo,

      sicher eine leicht zu beantwortende Frage:

      Kann ich in der Konvertierungsfunktion bei den alias-Datenpunkten zusätzlich zu "/1000" (Umrechnung in kWh) auch eine Rundungsfunktion (runden auf 2 Stellen nach dem Komma) nutzen?
      Wenn ja, bitte wie...

      Besten Dank

      vG Peter

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

        @pi-ter

        (val / 1000).toFixed(2)
        
        paul53 1 Reply Last reply Reply Quote 1
        • wcag22
          wcag22 last edited by wcag22

          Lieber Codierknecht:
          you made my day, vielen vielen Dank

          VG Peter

          P.S.
          Hast Du eine Quelle für mich, wo ich für solche und auch json-Dinge nachschlagen kann?

          P.P.S: Wieso kommt zunächst die rote Warnung, dass das Ergebnis keine Zahl (number) ist? Das hat mich zunächst echt irritiert.

          Codierknecht bahnuhr 2 Replies Last reply Reply Quote 0
          • Codierknecht
            Codierknecht Developer Most Active @wcag22 last edited by

            @pi-ter
            https://www.iobroker.net/#de/documentation/basics/alias.md
            https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md
            https://www.w3schools.com/js/default.asp

            1 Reply Last reply Reply Quote 2
            • paul53
              paul53 @Codierknecht last edited by paul53

              @codierknecht sagte: (val / 1000).toFixed(2)

              toFixed(2) wandelt in einen String.

              @Pi-ter Runden einer Zahl:

              Math.round(val / 10) / 100
              
              Codierknecht 1 Reply Last reply Reply Quote 1
              • Codierknecht
                Codierknecht Developer Most Active @paul53 last edited by

                @paul53 sagte in Frage: alias Konvertierungsfunktion:

                in einen String

                Gehen sollte natürlich auch

                parseFloat((val / 1000).toFixed(2))
                

                Wobei Deine Lösung vermutlich etwas weniger Ressourcen frisst 😉
                Finde ich persönlich aber besser lesbar. Muss man ja auch erstmal drauf kommen, dass Dein (val /10) das eigentliche (val / 1000) ersetzt, um das Komma um 2 Stellen zu verschieben bevor gerundet wird.

                paul53 G 2 Replies Last reply Reply Quote 0
                • paul53
                  paul53 @Codierknecht last edited by

                  @codierknecht sagte: Finde ich persönlich aber besser lesbar.

                  Ja, für Leute, denen Mathematik ein Greul ist.

                  1 Reply Last reply Reply Quote 1
                  • W
                    Wildbill last edited by

                    Hi,

                    ich kämpe auch mal wieder mit einem Alias. Um mein Rollläden einheitlich steuern zu können, möchte ich in den Alias jeweils true für geschlossen, false für geöffnet und stop für stop haben. Im einigen originalen Datenpunkten ist aber up=geöffnet, down=geschlossen und stop=stop. Was muss ich im Alias bei read und write eintragen, damit ich im Alias-Datenpunkt dann eben entweder true/false/stop habe und auch mit true/false/stop den Rollladen steuern kann?

                    Gruss, Jürgen

                    paul53 1 Reply Last reply Reply Quote 0
                    • bahnuhr
                      bahnuhr Forum Testing Most Active @wcag22 last edited by bahnuhr

                      @pi-ter sagte in Frage: alias Konvertierungsfunktion:

                      keine Zahl (number)

                      toFixed wandelt Zahl in string um.

                      Wenn du wieder number willst dann den erstellten String wieder wandeln.

                      parseFloat((val / 1000).toFixed(2))

                      müsste funktionieren.

                      Nachtrag:
                      ist ja doppelt.
                      war ja oben schon alles.

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

                        @wildbill sagte: true/false/stop den Rollladen steuern kann?

                        Das macht keinen Sinn, denn false und true sind boolesche Werte und "stop" ist ein String. Eine Read-Konvertierung könnte so aussehen:

                        val == 'up' ? 'hoch' : val == 'down' ? 'runter' : val
                        

                        Write:

                        val == 'hoch' ? 'up' : val == 'runter' ? 'down' : val
                        
                        W 1 Reply Last reply Reply Quote 0
                        • W
                          Wildbill @paul53 last edited by Wildbill

                          @paul53 Hm, da muss ich dann mal probieren. Ich hatte es bislang per Script so in eigene Datenpunkte vom Typ mixed gewandelt, damit ich in VIS mit einem "valuelist HTML styla"-Widget den Status anzeigen und mit "Radiobuttons on/off" steuern konnte.
                          Dein Vorschlag so angepasst

                                "read": "val == 'up' ? '0' : val == 'down' ? '1' : val",
                                "write": "val == '0' ? 'up' : val == '1' ? 'down' : val"
                          

                          schreibt wenigstens schonmal Nullen und Einsen passend in den Alias und steuert auch den originalen Datenpunkt wie gewollt. Dann werde ich wohl mal bei den Widgets schauen, was ich da ändern kann.
                          Dank Dir.

                          Gruss, Jürgen

                          EDIT: Muss gar nix ändern, funktioniert wie gewollt.

                          1 Reply Last reply Reply Quote 0
                          • G
                            GombersIOB @Codierknecht last edited by

                            @codierknecht said in Frage: alias Konvertierungsfunktion:

                            Wobei Deine Lösung vermutlich etwas weniger Ressourcen frisst

                            Ich habs gerade mal verglichen. Bei 100.000 Konvertierungen ist die Math.round()-Variante meist um 30ms schneller als die parseFloat()-Variante - auf meinem Pi4.

                            17:10:06.158	info	javascript.0 (6125) script.js.common.Testen.Performance: -899
                            17:10:06.389	info	javascript.0 (6125) script.js.common.Testen.Performance: 37
                            17:10:06.609	info	javascript.0 (6125) script.js.common.Testen.Performance: 30
                            17:10:06.830	info	javascript.0 (6125) script.js.common.Testen.Performance: 29
                            17:10:07.049	info	javascript.0 (6125) script.js.common.Testen.Performance: 1029
                            17:10:07.269	info	javascript.0 (6125) script.js.common.Testen.Performance: 29
                            17:10:07.487	info	javascript.0 (6125) script.js.common.Testen.Performance: 29
                            17:10:07.707	info	javascript.0 (6125) script.js.common.Testen.Performance: 30
                            17:10:07.923	info	javascript.0 (6125) script.js.common.Testen.Performance: 28
                            17:10:08.141	info	javascript.0 (6125) script.js.common.Testen.Performance: -973
                            

                            Die Liste zeigt insgesamt 10 Versuche. Es wird die Dauer der Versuche mit parseFloat() von der Dauer mit Math.round() abgezogen.

                            Das ist das Script:

                            let loops:number = 100000;
                            for (let j=0; j<10; j++) {
                            	// Erster Versuch
                                    let start=new Date().getMilliseconds();
                            	for (let i=0; i<loops; i++) {
                            		parseFloat((i / 1000).toFixed(2));
                            	}
                            	let end=new Date().getMilliseconds();
                            	let duration=end-start;
                            	
                                    // Zweiter Versuch
                                    start=new Date().getMilliseconds();
                            	for (let i=0; i<loops; i++) {
                            		Math.round(i / 10) / 100
                            	}
                            	end=new Date().getMilliseconds();
                            	let duration2=end-start;
                            	console.log(duration - duration2);
                            }
                            
                            1 Reply Last reply Reply Quote 0
                            • First post
                              Last post

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            756
                            Online

                            31.7k
                            Users

                            79.8k
                            Topics

                            1.3m
                            Posts

                            6
                            12
                            973
                            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