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
    16
    1
    1.9k

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

  • 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 Offline
    R Offline
    Rico Sander
    schrieb am zuletzt editiert von Rico Sander
    #1

    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

    Wenns nicht geht, wie man will
    - muss mans tun, wie man kann.
    CodierknechtC 1 Antwort Letzte Antwort
    0
    • 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 Online
                          G Online
                          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

                          711

                          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