Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Fehler abfangen? z.B. nich vorhandene Variablen an Funktion

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Fehler abfangen? z.B. nich vorhandene Variablen an Funktion

    This topic has been deleted. Only users with topic management privileges can see it.
    • ruhr70
      ruhr70 last edited by

      Ich habe heute den halben Tag daran gesessen im Javascript-Adapter Fehler abzufangen und bin leider daran gescheitert.

      Beispielfunktion:

      hueGruppe(hueGruppeWohnzimmer,"blue",1000,50);
      
      

      Bei den ersten beiden Parametern der Funktion soll bei Tippfehlern das Script nicht abbrechen.

      Der erste Parameter ist der Name eines Arrays.

      Der zweite Parameter ist ein Name aus einem JSON.

      Der Anfang des JSON:

      var huePresets = {
          "standard": {                                                               // Standardfarbe der hue bei Power on
              "hue":      14922,
              "sat":      144,
              "bri":      254,
              "effect":   "none",
              "alert":    "none"
          },
          "blue": {                                                                   // blau
              "hue":      47125,
              "sat":      254,
      
      

      Bei einem Tippfehler bricht das Script komplett ab, bzw. der Javascript Adapter wird neu gestartet.

      Hier ein extra provozierter Fehler (JSON Presetname bewusst falsch geschrieben):

      TypeError:	2015-07-26 19:35:46	error	Cannot call method 'hasOwnProperty' of undefined
      uncaught	2015-07-26 19:35:46	error	exception: Cannot call method 'hasOwnProperty' of undefined
      javascript-0	2015-07-26 19:35:46	info	script.js.FUNKTIONEN_hue: registered 0 subscriptions and 0 schedules
      

      Ich habe nun stundenlang probiert und gegoogelt… nichts hat gegriffen 😞

      Aus dem Kopf (es war bei den Versuchen bestimmt richtig) 😉 :

      if (typeof preset === "undefined"
      if (preset === undefined)
      íf (!preset)
      
      

      Funktionen, …. und was weiss ich noch alles.

      1 Reply Last reply Reply Quote 0
      • Bluefox
        Bluefox last edited by

        Wie sieht deine hueGruppe aus?

        1 Reply Last reply Reply Quote 0
        • ruhr70
          ruhr70 last edited by

          In dem speziellen Fall geht es um das Script hier:

          http://forum.iobroker.org/viewtopic.php … 85cf#p8657

          Die Gruppen sind z.B. so definiert:

          
          // hue IDs (Channel) - Namen können frei vergeben werden
          var idHueGästebadVorne              = "hue.0.Philips_hue.20.1_Gästebad_Vorne";  /*Philips_hue.20.1_Gästebad_Vorne*/
          var idHueGästebadHinten             = "hue.0.Philips_hue.20.2_Gästebad_Hinten"; /*Philips_hue.20.2_Gästebad_Hinten*/
          var idHueWohnzimmerKugel            = "hue.0.Philips_hue.10.4_Wohn_Kugel";      /*Philips_hue.10.4_Wohn_Kugel*/
          
          // hue Gruppen -        Die Namen der IDs können beliebigen Gruppen zugeordnet werden
          var hueGruppeGästebad               = [idHueGästebadVorne,idHueGästebadHinten];
          var hueGruppeWohnzimmer             = [idHueWohnzimmerKugel];
          
          

          Mir geht es dabei eher um die grundsätzliche Funktion.

          Wenn ich hier Scripte reinstelle sollen die sich nicht direkt bei einem Tippfehler verabschieden.

          1 Reply Last reply Reply Quote 0
          • Bluefox
            Bluefox last edited by

            Ändere Zeile:

            if(huePresets[preset].hasOwnProperty(hueParameter[j])){
            
            

            auf

            if(huePresets[preset] && huePresets[preset].hasOwnProperty(hueParameter[j])){
            
            

            Man kann grundsätzlich sich gegen alle Fehler schützen in dem man das Block, wo Fehler eventuell auftauchen können in das:

            `function hueGruppe (gruppe,preset,verzögerung,bri) {
                if (!gruppe) return;
            //    if(!verzögerung) verzögerung = 10; 
                setTimeout(function() {                                                     // Preset verzögert aktivieren, wenn eingestellt
                    try {
                      for (i = 0; i < gruppe.length; i++) {                                   // jede Lampe aus der Gruppe
                        //setState(hueLichter[i] + ".colormode","ct");
                        for (j = 0; j < hueParameter.length; j++) {                         // teste alle möglichen hue Parameter
                            if(huePresets[preset] && huePresets[preset].hasOwnProperty(hueParameter[j])){         // nur die im Preset enthaltenen Variablen verarbeiten
                                if (hueParameter[j] != "bri") {                             // bri rausnehmen, da ggf. eigener Wert mitgegeben wurde
                                    setState(gruppe[i] + "." + hueParameter[j], huePresets[preset][hueParameter[j]] );
                                    log(hueParameter[j] + ": " + huePresets[preset][hueParameter[j]],"debug");
                                } else {                                                    // es handelt sich um bri
                                    if (!validBri(bri)) {                                   // prüfen, ob ein gültiger bri Wert vom Anwender übergeben wurde
                                        setState(gruppe[i] + "." + hueParameter[j], huePresets[preset][hueParameter[j]] );
                                        log(hueParameter[j] + ": " + huePresets[preset][hueParameter[j]],"debug");
                                    } else {
                                        setState(gruppe[i] + ".bri", bri);                      // wenn ein Helligkeitswert übergeben wurde, diesen verwenden
                                        log(hueParameter[j] + ": " + bri,"debug");
                                    }
                                }
                            }
                        }
                      }
                    } catch (e) {
                        log(e, 'error');
                    }
                }, verzögerung);
                return null;
            }`
            Block platziert. (Das ist aber eher gegen unbekannten Fehler)[/i][/i][/i][/i]
            
            1 Reply Last reply Reply Quote 0
            • ruhr70
              ruhr70 last edited by

              @Bluefox:

              Ändere Zeile:

              if(huePresets[preset].hasOwnProperty(hueParameter[j])){
              
              

              auf

              if(huePresets[preset] && huePresets[preset].hasOwnProperty(hueParameter[j])){
              
              ```` `  
              

              Das hat leider nicht funktioniert.

              Wenn ich den Gruppennamen bewusst falsch schreibe erhalte ich beim Start des Scriptes immer noch den Fehler:

              javascript-0	2015-07-27 06:34:50	error	at script.js.FUNKTIONEN_hue:214:11
              javascript-0	2015-07-27 06:34:50	error	script.js.FUNKTIONEN_hue: ReferenceError: hueGruppeArbeitszimer is not defined
              javascript-0	2015-07-27 06:34:50	info	Start javascript script.js.FUNKTIONEN_hue
              

              Und das Script bricht ab.

              Danach habe ich try/catch eingebaut. Ich bekomme aber trotzdem den Fehler oben und da Script bricht ab. :?

              P.S.: da ich das Script hinterher global verwenden möchte, benötige ich die Variablen dort zum Teil auch global. Muss ich da was beachten, z.B. "_global" am Variablenamen anhängen?

              1 Reply Last reply Reply Quote 0
              • Bluefox
                Bluefox last edited by

                @ruhr70:

                @Bluefox:

                Ändere Zeile:

                if(huePresets[preset].hasOwnProperty(hueParameter[j])){
                
                

                auf

                if(huePresets[preset] && huePresets[preset].hasOwnProperty(hueParameter[j])){
                
                ```` `  
                

                Das hat leider nicht funktioniert.

                Wenn ich den Gruppennamen bewusst falsch schreibe erhalte ich beim Start des Scriptes immer noch den Fehler:

                javascript-0	2015-07-27 06:34:50	error	at script.js.FUNKTIONEN_hue:214:11
                javascript-0	2015-07-27 06:34:50	error	script.js.FUNKTIONEN_hue: ReferenceError: hueGruppeArbeitszimer is not defined
                javascript-0	2015-07-27 06:34:50	info	Start javascript script.js.FUNKTIONEN_hue
                

                Und das Script bricht ab.

                Danach habe ich try/catch eingebaut. Ich bekomme aber trotzdem den Fehler oben und da Script bricht ab. :?

                P.S.: da ich das Script hinterher global verwenden möchte, benötige ich die Variablen dort zum Teil auch global. Muss ich da was beachten, z.B. "_global" am Variablenamen anhängen? `
                Die Variable solltest du vor erste Verwendung checken:

                if (typeof hueGruppeWohnzimmer != 'undefined') {
                   hueGruppe(hueGruppeWohnzimmer,"standard");                  // (1)
                   hueGruppe(hueGruppeWohnzimmer,"effectColorloop",3000);      // (2)
                   hueGruppe(hueGruppeWohnzimmer,"blue",5000);                 // (3)
                   hueGruppe(hueGruppeWohnzimmer,"blue",1000,50);              // (4)
                   hueGruppe(hueGruppeWohnzimmer,"effectOff",7000);            // (5)
                
                   hueGruppe(hueGruppeWohnzimmer,"off",9000);                  // (6)
                }
                
                
                1 Reply Last reply Reply Quote 1
                • ruhr70
                  ruhr70 last edited by

                  @Bluefox:

                  Die Variable solltest du vor erste Verwendung checken:

                  if (typeof hueGruppeWohnzimmer != 'undefined') {
                     hueGruppe(hueGruppeWohnzimmer,"standard");                  // (1)
                     hueGruppe(hueGruppeWohnzimmer,"effectColorloop",3000);      // (2)
                     hueGruppe(hueGruppeWohnzimmer,"blue",5000);                 // (3)
                     hueGruppe(hueGruppeWohnzimmer,"blue",1000,50);              // (4)
                     hueGruppe(hueGruppeWohnzimmer,"effectOff",7000);            // (5)
                  
                     hueGruppe(hueGruppeWohnzimmer,"off",9000);                  // (6)
                  }
                  
                  ```` `  
                  

                  OK. Danke für die Info!

                  Ich teste das nachher. Schade, dass es nicht anders funktioniert. Der Scriptstart am Ende des Scripts ist nur ein Beispiel, um die Funktion zu testen.

                  D.h. die Funktion hueGruppe() soll hinterher in diversen Scripts eingesetzt werden. Ist dann nicht mehr "so einfach" zu verwenden, wenn das dann ggf. noch Andere einsetzen.

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  668
                  Online

                  31.7k
                  Users

                  79.7k
                  Topics

                  1.3m
                  Posts

                  2
                  7
                  1778
                  Loading More Posts
                  • Oldest to Newest
                  • Newest to Oldest
                  • Most Votes
                  Reply
                  • Reply as topic
                  Log in to reply
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                  The ioBroker Community 2014-2023
                  logo