Skip to content
  • 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
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [gelöst] - Learning JS - ein erster Versuch

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.2k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.2k

[gelöst] - Learning JS - ein erster Versuch

Geplant Angeheftet Gesperrt Verschoben JavaScript
31 Beiträge 5 Kommentatoren 1.5k Aufrufe 3 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.
  • paul53P paul53

    @codierknecht sagte: Wie prüft man dann möglichst elegant?

    Ich würde es so machen:

      if(!isNaN(watts)) setState(dpPrefix + 'Watt', watts, true);
    // usw.
    
    CodierknechtC Online
    CodierknechtC Online
    Codierknecht
    Developer Most Active
    schrieb am zuletzt editiert von
    #15

    @paul53 sagte in Learning JS - ein erster Versuch:

    @codierknecht sagte: Wie prüft man dann möglichst elegant?

    Ich würde es so machen:

      if(!isNaN(watts)) setState(dpPrefix + 'Watt', watts, true);
    // usw.
    

    Ist oben eingebaut.
    Das Problem das ich da sehe: Wenn da mal "NaN" drinsteht, wird lediglich nix in den DP geschrieben.
    Eleganter wäre ja, wenn das iwie auch zu 'nem Fehler führen würde, der geloggt werden kann.
    Ich bau oben mal eine Variante dafür ein. Mal sehen, was ihr davon haltet.

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

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

    1 Antwort Letzte Antwort
    0
    • CodierknechtC Codierknecht

      Basierend auf dem Thread script-funzt-nicht-mehr habe ich mich mal daran versucht, das umzubauen.
      Zu "verbessern" würde ich jetzt nicht sagen - ich will ja lediglich lernen.
      Also hier bitte keine fertigen Lösungen posten, sondern nur mitteilen, in welcher Zeile ein Fehler steckt oder wie man bestimmte Dinge besser löst.

      Gegegeben war folgendes Script:

      schedule('*/15 5-22 * * *', RunScript);
      
      function RunScript() {
        exec('python /opt/SunnyPortal/SunnyPortal.py 192.168.178.20', function (error, result, stderr) {
        console.log(result, true);
        array = result.split(' ')
      
          console.warn(array[21] + array[22]);
          console.warn(array[36] + array[37]);
          console.warn(array[51] + array[52]);
          createState('SunnyPortal-Watt', array[21] + array[22], true;
          createState('SunnyPortal-Heute', array[36] + array[37], true;
          createState('SunnyPortal-Gesamt', array[51] + array[52], true;
      });
      }
      

      Im ersten Wurf habe ich daraus jetzt mal das hier produziert:
      (wird laufend korrigiert und ergänzt)

      const execPython = 'python /opt/SunnyPortal/SunnyPortal.py 192.168.178.20';
      const dpPrefix = '0_userdata.0.SunnyPortal.';
      const arraySize = 6;
      const position = {"watt": 1, "today": 2, "total": 3};
      
      createState(dpPrefix + 'Watt', 0, {name: 'Aktuelle Leistung', type: 'number', unit: 'W'});
      createState(dpPrefix + 'Heute', 0, {name: 'Produziert heute', type: 'number', unit: 'kWh'});
      createState(dpPrefix + 'Gesamt', 0, {name: 'Produziert gesamt', type: 'number', unit: 'kWh'});
      
      function parseValue(value) {
        var result = parseFloat(value);
        if (!isNaN(result)) {
          return result;
        } else {
          throw Error('Value <' + value + '> could not be converted');  
        }
      }
      
      function writeValues(watts, today, total) {
        setState(dpPrefix + 'Watt', watts, true);
        setState(dpPrefix + 'Heute', today, true);
        setState(dpPrefix + 'Gesamt', total, true);
      };
      
      function getData() {
        try {
          exec(execPython, function (error, result) {
            if (!error) {
              console.log(result, true);
              var valueArray = result.split('):');
              if (valueArray.length != arraySize ) throw Error("Result does not match expected length");
              writeValues(parseValue(valueArray[position.watt]), parseValue(valueArray[position.today]), parseValue(valueArray[position.total]));
            } else {
              throw error;
            }
          });
        } catch (error) {
          console.error(error);
        }
      }
      
      schedule('*/15 5-22 * * *', getData);
      
      • Sinnvoll eingerückt
      • Die Variable array umbenannt und deklariert
      • Stringliterale an den Anfang, damit man die an einer zentralen Stelle ggf. ändern kann
      • createState nur 1x beim Start des Script, dann aber unterhalb von 0_userdata und mit Namen und Einheiten
      • Lesen der Daten und Schreiben der DP in eigene Methoden ausgelagert

      Und jetzt kommt ihr:

      • Ist hier noch etwas grundlegend falsch? Wenn ja: Was und warum?
      • Was könnte man noch optimieren?
      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #16

      @codierknecht
      Übrigens: Bei den Werten, die im ursprünglichen Thema zu sehen sind, darf man nicht mit parseInt() wandeln, sondern mit parseFloat().
      Außerdem stehen die Werte laut Log immer hinter einem "):". Damit würde ich splitten.

      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 2 Antworten Letzte Antwort
      0
      • paul53P paul53

        @codierknecht
        Übrigens: Bei den Werten, die im ursprünglichen Thema zu sehen sind, darf man nicht mit parseInt() wandeln, sondern mit parseFloat().
        Außerdem stehen die Werte laut Log immer hinter einem "):". Damit würde ich splitten.

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

        @paul53 sagte in Learning JS - ein erster Versuch:

        @codierknecht
        Übrigens: Bei den Werten, die im ursprünglichen Thema zu sehen sind, darf man nicht mit parseInt() wandeln, sondern mit parseFloat().
        Außerdem stehen die Werte laut Log immer hinter einem "):". Damit würde ich splitten.

        Natürlich … werde ich oben ändern.

        @paul53 sagte in Learning JS - ein erster Versuch:

        @codierknecht
        Übrigens: Bei den Werten, die im ursprünglichen Thema zu sehen sind, darf man nicht mit parseInt() wandeln, sondern mit parseFloat().
        Außerdem stehen die Werte laut Log immer hinter einem "):". Damit würde ich splitten.

        Klingt auch etwas handlicher als mit Leerzeichen zu splitten.

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

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

        1 Antwort Letzte Antwort
        0
        • paul53P paul53

          @codierknecht
          Übrigens: Bei den Werten, die im ursprünglichen Thema zu sehen sind, darf man nicht mit parseInt() wandeln, sondern mit parseFloat().
          Außerdem stehen die Werte laut Log immer hinter einem "):". Damit würde ich splitten.

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

          @paul53 sagte in Learning JS - ein erster Versuch:

          Außerdem stehen die Werte laut Log immer hinter einem "):". Damit würde ich splitten.

          Auch das habe ich oben geändert.
          Damit ist das mit den Array-Indizes 1,2 und 3 schon fast so einfach, dass man das enum auch wieder weglassen könnte.
          Ich lasse es aber wegen Wart- und Erweiterbarkeit mal drin.

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

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

          CodierknechtC 1 Antwort Letzte Antwort
          0
          • CodierknechtC Codierknecht

            @paul53 sagte in Learning JS - ein erster Versuch:

            Außerdem stehen die Werte laut Log immer hinter einem "):". Damit würde ich splitten.

            Auch das habe ich oben geändert.
            Damit ist das mit den Array-Indizes 1,2 und 3 schon fast so einfach, dass man das enum auch wieder weglassen könnte.
            Ich lasse es aber wegen Wart- und Erweiterbarkeit mal drin.

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

            @codierknecht
            Aktueller Stand für heute im Eingangspost.
            Das Konvertieren und Prüfen der Werte habe ich in eine eigene Funktion ausgelagert.

            Für heute lasse ich das erstmal so stehen. Morgen ist auch noch ein Tag.

            Letzte Erkenntnis für heute:
            Für mehr als 2-3 Zeilen JS lohnt sich auf jeden Fall die Installation von VSCode.

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

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

            CodierknechtC 1 Antwort Letzte Antwort
            0
            • CodierknechtC Codierknecht

              @codierknecht
              Aktueller Stand für heute im Eingangspost.
              Das Konvertieren und Prüfen der Werte habe ich in eine eigene Funktion ausgelagert.

              Für heute lasse ich das erstmal so stehen. Morgen ist auch noch ein Tag.

              Letzte Erkenntnis für heute:
              Für mehr als 2-3 Zeilen JS lohnt sich auf jeden Fall die Installation von VSCode.

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

              @codierknecht
              Warum meckert VSCode hier?
              f347a38c-68df-48d0-b36a-071ec9ef02b8-image.png

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

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

              OliverIOO 1 Antwort Letzte Antwort
              0
              • CodierknechtC Codierknecht

                @codierknecht
                Warum meckert VSCode hier?
                f347a38c-68df-48d0-b36a-071ec9ef02b8-image.png

                OliverIOO Offline
                OliverIOO Offline
                OliverIO
                schrieb am zuletzt editiert von OliverIO
                #21

                @codierknecht
                Es ist zwar ein separater Block aber evtl kollidiert diese error Deklaration mit der aus dem exec callback. Dort Ishtar man auch so ein kleines strichlein mit einem Hinweis.
                Was passiert wenn du das error aus dem catch Block bspw nach err umbenennst?

                Meine Adapter und Widgets
                TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                Links im Profil

                CodierknechtC 1 Antwort Letzte Antwort
                0
                • OliverIOO OliverIO

                  @codierknecht
                  Es ist zwar ein separater Block aber evtl kollidiert diese error Deklaration mit der aus dem exec callback. Dort Ishtar man auch so ein kleines strichlein mit einem Hinweis.
                  Was passiert wenn du das error aus dem catch Block bspw nach err umbenennst?

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

                  @oliverio
                  Den Verdacht hatte ich auch schon - hilft nix 😞
                  Hab's dann wieder zu "error" zurück geändert, weil das so in fast allen Dokus verwendet wird.
                  Der Scope ist ja auch ein völlig anderer als das "error" in der Callback.
                  Es wird ja auch gemeckert, dass die gar nicht deklariert wäre. Dann müsste ich aber try-catch völlig falsch verstanden haben.

                  Die 3 Punkte im Callback meckern nur an, dass hier keine Typdeklaration vorhanden ist.
                  Da wir hier JS und kein TS haben, habe ich das mal geflissentlich ignoriert 😉

                  P.S.: Es meckert auch nur VSCode - im Editor im ioB sieht's OK aus

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

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

                  OliverIOO CodierknechtC 2 Antworten Letzte Antwort
                  0
                  • CodierknechtC Codierknecht

                    @oliverio
                    Den Verdacht hatte ich auch schon - hilft nix 😞
                    Hab's dann wieder zu "error" zurück geändert, weil das so in fast allen Dokus verwendet wird.
                    Der Scope ist ja auch ein völlig anderer als das "error" in der Callback.
                    Es wird ja auch gemeckert, dass die gar nicht deklariert wäre. Dann müsste ich aber try-catch völlig falsch verstanden haben.

                    Die 3 Punkte im Callback meckern nur an, dass hier keine Typdeklaration vorhanden ist.
                    Da wir hier JS und kein TS haben, habe ich das mal geflissentlich ignoriert 😉

                    P.S.: Es meckert auch nur VSCode - im Editor im ioB sieht's OK aus

                    OliverIOO Offline
                    OliverIOO Offline
                    OliverIO
                    schrieb am zuletzt editiert von
                    #23

                    @codierknecht

                    Evtl gilt hier dies
                    https://stackoverflow.com/questions/68240884/error-object-inside-catch-is-of-type-unknown

                    Meine Adapter und Widgets
                    TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                    Links im Profil

                    1 Antwort Letzte Antwort
                    0
                    • CodierknechtC Codierknecht

                      @oliverio
                      Den Verdacht hatte ich auch schon - hilft nix 😞
                      Hab's dann wieder zu "error" zurück geändert, weil das so in fast allen Dokus verwendet wird.
                      Der Scope ist ja auch ein völlig anderer als das "error" in der Callback.
                      Es wird ja auch gemeckert, dass die gar nicht deklariert wäre. Dann müsste ich aber try-catch völlig falsch verstanden haben.

                      Die 3 Punkte im Callback meckern nur an, dass hier keine Typdeklaration vorhanden ist.
                      Da wir hier JS und kein TS haben, habe ich das mal geflissentlich ignoriert 😉

                      P.S.: Es meckert auch nur VSCode - im Editor im ioB sieht's OK aus

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

                      Jetzt habe ich das zum Testen mal im ioB laufen lassen.
                      Dabei stolpere ich über das valueArray.length.
                      Wenn die Zeile drin ist, bringt mit das Log ein "undefined".
                      Kommentiere ich das aus, läuft das Script wie gewünscht und schreibt auch die erwartbaren Werte in die DP.

                      fbd78e70-4d7d-4a5c-be25-36c1a59fcfae-image.png

                      Interessant: Das Error-Handling funktioniert wie erwartet. Alles tacko

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

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

                      OliverIOO 1 Antwort Letzte Antwort
                      0
                      • CodierknechtC Codierknecht

                        Jetzt habe ich das zum Testen mal im ioB laufen lassen.
                        Dabei stolpere ich über das valueArray.length.
                        Wenn die Zeile drin ist, bringt mit das Log ein "undefined".
                        Kommentiere ich das aus, läuft das Script wie gewünscht und schreibt auch die erwartbaren Werte in die DP.

                        fbd78e70-4d7d-4a5c-be25-36c1a59fcfae-image.png

                        Interessant: Das Error-Handling funktioniert wie erwartet. Alles tacko

                        OliverIOO Offline
                        OliverIOO Offline
                        OliverIO
                        schrieb am zuletzt editiert von
                        #25

                        @codierknecht
                        kannst du bitte den source posten?

                        Meine Adapter und Widgets
                        TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                        Links im Profil

                        CodierknechtC 1 Antwort Letzte Antwort
                        0
                        • OliverIOO OliverIO

                          @codierknecht
                          kannst du bitte den source posten?

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

                          @oliverio Voilá

                          const execPython = 'python /opt/SunnyPortal/SunnyPortal.py 192.168.178.20';
                          const dpPrefix = '0_userdata.0.SunnyPortal.';
                          const arraySize = 6;
                          const position = {"watt": 1, "today": 2, "total": 3};
                          
                          createState(dpPrefix + 'Watt', 0, {name: 'Aktuelle Leistung', type: 'number', unit: 'W'});
                          createState(dpPrefix + 'Heute', 0, {name: 'Produziert heute', type: 'number', unit: 'kWh'});
                          createState(dpPrefix + 'Gesamt', 0, {name: 'Produziert gesamt', type: 'number', unit: 'kWh'});
                          
                          function parseValue(value) {
                            var result = parseFloat(value);
                            if (!isNaN(result)) {
                              return result;
                            } else {
                              throw 'Value <' + value + '> could not be converted';  
                            }
                          }
                          
                          function writeValues(watts, today, total) {
                            setState(dpPrefix + 'Watt', watts, true);
                            setState(dpPrefix + 'Heute', today, true);
                            setState(dpPrefix + 'Gesamt', total, true);
                          };
                          
                          function getData() {
                            try {
                          //    exec(execPython, function (error, result) {
                          //      if (!error) {
                          var result = 'X):100):150.55):200.88):Y):Z):blubb):blah';    
                                  log(result);
                                  var valueArray = result.split('):');
                                  if (valueArray.length != 6) throw "Result does not match expected length";
                                  writeValues(parseValue(valueArray[position.watt]), parseValue(valueArray[position.today]), parseValue(valueArray[position.total]));
                          //      } else {
                          //        throw error;
                          //      }
                          //    });
                            } catch(err) {
                              log('Error: ' + err.message);
                            }
                          }
                          
                          getData();
                          
                          //schedule('*/15 5-22 * * *', getData);
                          
                          

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

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

                          OliverIOO 1 Antwort Letzte Antwort
                          0
                          • CodierknechtC Codierknecht

                            @oliverio Voilá

                            const execPython = 'python /opt/SunnyPortal/SunnyPortal.py 192.168.178.20';
                            const dpPrefix = '0_userdata.0.SunnyPortal.';
                            const arraySize = 6;
                            const position = {"watt": 1, "today": 2, "total": 3};
                            
                            createState(dpPrefix + 'Watt', 0, {name: 'Aktuelle Leistung', type: 'number', unit: 'W'});
                            createState(dpPrefix + 'Heute', 0, {name: 'Produziert heute', type: 'number', unit: 'kWh'});
                            createState(dpPrefix + 'Gesamt', 0, {name: 'Produziert gesamt', type: 'number', unit: 'kWh'});
                            
                            function parseValue(value) {
                              var result = parseFloat(value);
                              if (!isNaN(result)) {
                                return result;
                              } else {
                                throw 'Value <' + value + '> could not be converted';  
                              }
                            }
                            
                            function writeValues(watts, today, total) {
                              setState(dpPrefix + 'Watt', watts, true);
                              setState(dpPrefix + 'Heute', today, true);
                              setState(dpPrefix + 'Gesamt', total, true);
                            };
                            
                            function getData() {
                              try {
                            //    exec(execPython, function (error, result) {
                            //      if (!error) {
                            var result = 'X):100):150.55):200.88):Y):Z):blubb):blah';    
                                    log(result);
                                    var valueArray = result.split('):');
                                    if (valueArray.length != 6) throw "Result does not match expected length";
                                    writeValues(parseValue(valueArray[position.watt]), parseValue(valueArray[position.today]), parseValue(valueArray[position.total]));
                            //      } else {
                            //        throw error;
                            //      }
                            //    });
                              } catch(err) {
                                log('Error: ' + err.message);
                              }
                            }
                            
                            getData();
                            
                            //schedule('*/15 5-22 * * *', getData);
                            
                            

                            OliverIOO Offline
                            OliverIOO Offline
                            OliverIO
                            schrieb am zuletzt editiert von OliverIO
                            #27

                            @codierknecht sagte in Learning JS - ein erster Versuch:

                            Da du

                            throw "Result does not match expected length"
                            

                            machst wird an das catch auch nur der Text übergeben und nicht ein Error-Objekt.
                            Daher ist err.message undefined.
                            Korrekt wäre ein generisches Error-Objekt zu erzeugen

                            throw Error("Result does not match expected length")
                            

                            Dann klappt das auch mit dem Stacktrace bei der Fehlerausgabe, falls man den Fehler im catch den Fehler nach Prüfung dann doch rethrown möchte mit

                            throw error
                            

                            Meine Adapter und Widgets
                            TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                            Links im Profil

                            CodierknechtC 1 Antwort Letzte Antwort
                            1
                            • OliverIOO OliverIO

                              @codierknecht sagte in Learning JS - ein erster Versuch:

                              Da du

                              throw "Result does not match expected length"
                              

                              machst wird an das catch auch nur der Text übergeben und nicht ein Error-Objekt.
                              Daher ist err.message undefined.
                              Korrekt wäre ein generisches Error-Objekt zu erzeugen

                              throw Error("Result does not match expected length")
                              

                              Dann klappt das auch mit dem Stacktrace bei der Fehlerausgabe, falls man den Fehler im catch den Fehler nach Prüfung dann doch rethrown möchte mit

                              throw error
                              
                              CodierknechtC Online
                              CodierknechtC Online
                              Codierknecht
                              Developer Most Active
                              schrieb am zuletzt editiert von
                              #28

                              @oliverio
                              Danke - kaum macht man's richtig, klappt's auch.

                              Hab's im Eingangspost nachgezogen.

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

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

                              CodierknechtC 1 Antwort Letzte Antwort
                              0
                              • CodierknechtC Codierknecht

                                @oliverio
                                Danke - kaum macht man's richtig, klappt's auch.

                                Hab's im Eingangspost nachgezogen.

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

                                @codierknecht
                                Ich denke, mit dem aktuellen Ergebnis kann ich zufrieden sein.
                                "Da wirst'e alt wie 'ne Kuh und lernst immer noch dazu".

                                Und falls @jprisum-de hier mitliest:
                                Natürlich ist das Script jetzt deutlich umfangreicher als das ursprüngliche.
                                Hat aber einige entscheidende Vorteile:

                                • Es ist vor allem lesbarer! Es ist damit intuitiv verständlich und leichter zu warten und zu erweitern.
                                • Fehlerbehandlung: Mögliche Fehler werden abgefangen und mit
                                  einer aussagekräftige Meldung im Log protokolliert.

                                Ich mach' dann hier mal zu ...

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

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

                                HomoranH 1 Antwort Letzte Antwort
                                0
                                • CodierknechtC Codierknecht

                                  @codierknecht
                                  Ich denke, mit dem aktuellen Ergebnis kann ich zufrieden sein.
                                  "Da wirst'e alt wie 'ne Kuh und lernst immer noch dazu".

                                  Und falls @jprisum-de hier mitliest:
                                  Natürlich ist das Script jetzt deutlich umfangreicher als das ursprüngliche.
                                  Hat aber einige entscheidende Vorteile:

                                  • Es ist vor allem lesbarer! Es ist damit intuitiv verständlich und leichter zu warten und zu erweitern.
                                  • Fehlerbehandlung: Mögliche Fehler werden abgefangen und mit
                                    einer aussagekräftige Meldung im Log protokolliert.

                                  Ich mach' dann hier mal zu ...

                                  HomoranH Nicht stören
                                  HomoranH Nicht stören
                                  Homoran
                                  Global Moderator Administrators
                                  schrieb am zuletzt editiert von Homoran
                                  #30

                                  @codierknecht sagte in [gelöst] - Learning JS - ein erster Versuch:

                                  Ich mach' dann hier mal zu ...

                                  kannst du nicht 😁

                                  kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                                  Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                  der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                  CodierknechtC 1 Antwort Letzte Antwort
                                  0
                                  • HomoranH Homoran

                                    @codierknecht sagte in [gelöst] - Learning JS - ein erster Versuch:

                                    Ich mach' dann hier mal zu ...

                                    kannst du nicht 😁

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

                                    @homoran
                                    Achtung Goldwaagenalarm. Virtuell natürlich 😂

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

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

                                    1 Antwort Letzte Antwort
                                    1
                                    Antworten
                                    • In einem neuen Thema antworten
                                    Anmelden zum Antworten
                                    • Älteste zuerst
                                    • Neuste zuerst
                                    • Meiste Stimmen


                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    744

                                    Online

                                    32.4k

                                    Benutzer

                                    81.4k

                                    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
                                    • Aktuell
                                    • Tags
                                    • Ungelesen 0
                                    • Kategorien
                                    • Unreplied
                                    • Beliebt
                                    • GitHub
                                    • Docu
                                    • Hilfe