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

                      739

                      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