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. Frage: alias Konvertierungsfunktion

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.0k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    927

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Frage: alias Konvertierungsfunktion

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
12 Beiträge 6 Kommentatoren 1.2k Aufrufe 6 Watching
  • Ä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.
  • R Rico Sander

    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

    CodierknechtC Online
    CodierknechtC Online
    Codierknecht
    Developer Most Active
    schrieb am zuletzt editiert von Codierknecht
    #2

    @pi-ter

    (val / 1000).toFixed(2)
    

    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

    Proxmox 9.1.1 LXC|8 GB|Core i7-6700
    HmIP|ZigBee|Tasmota|Unifi
    Zabbix Certified Specialist
    Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

    paul53P 1 Antwort Letzte Antwort
    1
    • R Offline
      R Offline
      Rico Sander
      schrieb am zuletzt editiert von Rico Sander
      #3

      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.

      Wenns nicht geht, wie man will
      - muss mans tun, wie man kann.
      CodierknechtC bahnuhrB 2 Antworten Letzte Antwort
      0
      • R Rico Sander

        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.

        CodierknechtC Online
        CodierknechtC Online
        Codierknecht
        Developer Most Active
        schrieb am zuletzt editiert von
        #4

        @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

        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

        Proxmox 9.1.1 LXC|8 GB|Core i7-6700
        HmIP|ZigBee|Tasmota|Unifi
        Zabbix Certified Specialist
        Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

        1 Antwort Letzte Antwort
        2
        • CodierknechtC Codierknecht

          @pi-ter

          (val / 1000).toFixed(2)
          
          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von paul53
          #5

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

          toFixed(2) wandelt in einen String.

          @Pi-ter Runden einer Zahl:

          Math.round(val / 10) / 100
          

          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

          CodierknechtC 1 Antwort Letzte Antwort
          1
          • paul53P paul53

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

            toFixed(2) wandelt in einen String.

            @Pi-ter Runden einer Zahl:

            Math.round(val / 10) / 100
            
            CodierknechtC Online
            CodierknechtC Online
            Codierknecht
            Developer Most Active
            schrieb am zuletzt editiert von
            #6

            @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.

            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

            Proxmox 9.1.1 LXC|8 GB|Core i7-6700
            HmIP|ZigBee|Tasmota|Unifi
            Zabbix Certified Specialist
            Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

            paul53P G 2 Antworten Letzte Antwort
            0
            • CodierknechtC Codierknecht

              @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.

              paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #7

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

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

              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
              1
              • W Online
                W Online
                Wildbill
                schrieb am zuletzt editiert von
                #8

                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

                paul53P 1 Antwort Letzte Antwort
                0
                • R Rico Sander

                  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.

                  bahnuhrB Online
                  bahnuhrB Online
                  bahnuhr
                  Forum Testing Most Active
                  schrieb am zuletzt editiert von bahnuhr
                  #9

                  @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.


                  Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
                  Danke.
                  gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
                  ScreenToGif :https://www.screentogif.com/downloads.html

                  1 Antwort Letzte Antwort
                  0
                  • W Wildbill

                    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

                    paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von paul53
                    #10

                    @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
                    

                    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

                    W 1 Antwort Letzte Antwort
                    0
                    • paul53P 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 Online
                      W Online
                      Wildbill
                      schrieb am zuletzt editiert von Wildbill
                      #11

                      @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 Antwort Letzte Antwort
                      0
                      • CodierknechtC Codierknecht

                        @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.

                        G Offline
                        G Offline
                        GombersIOB
                        schrieb am zuletzt editiert von
                        #12

                        @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 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

                        895

                        Online

                        32.6k

                        Benutzer

                        82.2k

                        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