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. 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.8k

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

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.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

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

      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 Offline
          CodierknechtC Offline
          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.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

          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 Offline
              CodierknechtC Offline
              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.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

              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 Offline
                  CodierknechtC Offline
                  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.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

                  CodierknechtC 1 Antwort Letzte Antwort
                  0
                  • CodierknechtC Codierknecht

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

                    Hab's im Eingangspost nachgezogen.

                    CodierknechtC Offline
                    CodierknechtC Offline
                    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.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

                    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 Offline
                      HomoranH Offline
                      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 :grin:

                      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 :grin:

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

                        @homoran
                        Achtung Goldwaagenalarm. Virtuell natürlich :joy:

                        "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
                        1
                        Antworten
                        • In einem neuen Thema antworten
                        Anmelden zum Antworten
                        • Älteste zuerst
                        • Neuste zuerst
                        • Meiste Stimmen


                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        463

                        Online

                        32.4k

                        Benutzer

                        81.5k

                        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