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

  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.
  • 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?
    OliverIOO Offline
    OliverIOO Offline
    OliverIO
    schrieb am zuletzt editiert von
    #5

    @codierknecht sagte in Learning JS - ein erster Versuch:

    execCall

    würde ich liebe execPython nennen

    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
    1
    • OliverIOO OliverIO

      @codierknecht
      um die blöden nicht lesbaren Indexnummern wegzubekommen könnte man den JS enum Ersatz nehmen

      const position = {
        "watt":    21,
        "today":   36,
        "total":   51
      };
      
      

      und dann so adressieren

      valueArray[position.watt]
      
      CodierknechtC Online
      CodierknechtC Online
      Codierknecht
      Developer Most Active
      schrieb am zuletzt editiert von Codierknecht
      #6

      Gute Idee, ich ziehe das im Eingangspost nach.

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

      Proxmox 9.0.18 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
      0
      • OliverIOO OliverIO

        @codierknecht
        um die blöden nicht lesbaren Indexnummern wegzubekommen könnte man den JS enum Ersatz nehmen

        const position = {
          "watt":    21,
          "today":   36,
          "total":   51
        };
        
        

        und dann so adressieren

        valueArray[position.watt]
        
        A Offline
        A Offline
        Ahnungsbefreit
        schrieb am zuletzt editiert von
        #7

        @oliverio @Codierknecht Gute Idee von @OliverIO aber ich würde auch erst einmal prüfen, wie groß das Array ist und ob an den Stellen auch wirklich eine Zahl steht. Sonst steigt das Script aus oder Du schreibst Müll in den Datenpunkt

        Wenn meine Antwort hilfreich war, dürft Ihr das gerne durch einen "Upvote" (der kleine "^" unten rechts) zum Ausdruck bringen.

        CodierknechtC 2 Antworten Letzte Antwort
        1
        • CodierknechtC Codierknecht

          Meine erste Frage wäre:
          Die anonyme Methode beim exec wird mit 3 Parametern aufgerufen.
          Kann man den 3. Parameter stderr einfach weglassen?

          Zweite Frage (auch zum "exec"):
          Wie würde man hier grundsätzlich ein Error-Handling einbauen?

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

          @codierknecht sagte: Kann man den 3. Parameter stderr einfach weglassen?

          Ja.

          @codierknecht sagte: Wie würde man hier grundsätzlich ein Error-Handling einbauen?

          Einfachste Version:

          if(!error) {
              // Auswertung von stdout / result
          }
          

          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
          • CodierknechtC Codierknecht

            Meine erste Frage wäre:
            Die anonyme Methode beim exec wird mit 3 Parametern aufgerufen.
            Kann man den 3. Parameter stderr einfach weglassen?

            Zweite Frage (auch zum "exec"):
            Wie würde man hier grundsätzlich ein Error-Handling einbauen?

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

            @codierknecht sagte in Learning JS - ein erster Versuch:

            Die anonyme Methode beim exec wird mit 3 Parametern aufgerufen.
            Kann man den 3. Parameter stderr einfach weglassen?

            ja, kann man weglassen.
            Notfalls kann man die möglichen Paramter auch diese auch über das Parameter-Array arguments entnehmen.
            https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments?retiredLocale=de

            Kommt aber darauf an, wie die 'Fehlerbehandlung genau läuft.
            Bin da jetzt kein Spezialist, da ich mit exec noch nicht so oft gearbeitet habe.

            1. Fall 1: Programm gibt keinen Rückgabe Status, dann wurde es für node ohne Fehler ausgeführt. Wenn Programm den Fehler nur in stderr schreibt, dann muss da geparst werden
            2. Fall 2: Programm gibt Rückgabe code für Fehler zurück, der müsste dann in error drin stehen. Die Fehlerbearbeitung müsste dann so aussehen
            if (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

            1 Antwort Letzte Antwort
            0
            • A Ahnungsbefreit

              @oliverio @Codierknecht Gute Idee von @OliverIO aber ich würde auch erst einmal prüfen, wie groß das Array ist und ob an den Stellen auch wirklich eine Zahl steht. Sonst steigt das Script aus oder Du schreibst Müll in den Datenpunkt

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

              @ahnungsbefreit
              Das Array sollte dabei ja fix sein. Ein

              if (array.length != 99) throw "Result does not match expected length";
              

              sollte funktionieren, oder?

              OK, die tatsächliche Größe des Array kenne ich aktuell nicht, da ich das Result aus dem Original-Post nie gesehen habe (oder zu faul bin das abzutippen).

              Ich werde die Ergänzungen im im Eingangspost nachziehen, damit das hier nicht zu unübersichtlich wird.

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

              Proxmox 9.0.18 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
              0
              • A Ahnungsbefreit

                @oliverio @Codierknecht Gute Idee von @OliverIO aber ich würde auch erst einmal prüfen, wie groß das Array ist und ob an den Stellen auch wirklich eine Zahl steht. Sonst steigt das Script aus oder Du schreibst Müll in den Datenpunkt

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

                @ahnungsbefreit sagte in Learning JS - ein erster Versuch:

                ob an den Stellen auch wirklich eine Zahl

                Wirft parseInt() einen Fehler, wenn keine Zahl drin steht?

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

                Proxmox 9.0.18 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
                0
                • CodierknechtC Codierknecht

                  @ahnungsbefreit sagte in Learning JS - ein erster Versuch:

                  ob an den Stellen auch wirklich eine Zahl

                  Wirft parseInt() einen Fehler, wenn keine Zahl drin steht?

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

                  @codierknecht sagte: Wirft parseInt() einen Fehler, wenn keine Zahl drin steht?

                  Nein, es liefert NaN (Not a Number).

                  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
                  0
                  • paul53P paul53

                    @codierknecht sagte: Wirft parseInt() einen Fehler, wenn keine Zahl drin steht?

                    Nein, es liefert NaN (Not a Number).

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

                    @paul53 sagte in Learning JS - ein erster Versuch:

                    Nein, es liefert NaN (Not a Number).

                    Wie prüft man dann möglichst elegant?

                    if (isNaN(parseInt(valueArray[position.watt]) || isNaN(parseInt(valueArray[position.today]) ... 
                    

                    sieht irgendwie reichlich sperrig aus.
                    OK, man könnte das auch noch in eine Prüfmethode auslagern.

                    Ihr seit mir schon fast zu schnell. Ich komme ja kaum noch nach 😉

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

                    Proxmox 9.0.18 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
                    0
                    • CodierknechtC Codierknecht

                      @paul53 sagte in Learning JS - ein erster Versuch:

                      Nein, es liefert NaN (Not a Number).

                      Wie prüft man dann möglichst elegant?

                      if (isNaN(parseInt(valueArray[position.watt]) || isNaN(parseInt(valueArray[position.today]) ... 
                      

                      sieht irgendwie reichlich sperrig aus.
                      OK, man könnte das auch noch in eine Prüfmethode auslagern.

                      Ihr seit mir schon fast zu schnell. Ich komme ja kaum noch nach 😉

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

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

                      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: 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.18 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
                        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.18 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
                            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.18 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

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

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

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

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

                                          OliverIOO 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

                                          596

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