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. Fehler abfangen? z.B. nich vorhandene Variablen an Funktion

NEWS

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

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

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

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

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
7 Beiträge 2 Kommentatoren 1.9k Aufrufe
  • Ä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.
  • ruhr70R Offline
    ruhr70R Offline
    ruhr70
    schrieb am zuletzt editiert von
    #1

    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.

    Adapter: Fritzbox, Unify Circuit
    Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

    1 Antwort Letzte Antwort
    0
    • BluefoxB Offline
      BluefoxB Offline
      Bluefox
      schrieb am zuletzt editiert von
      #2

      Wie sieht deine hueGruppe aus?

      1 Antwort Letzte Antwort
      0
      • ruhr70R Offline
        ruhr70R Offline
        ruhr70
        schrieb am zuletzt editiert von
        #3

        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.

        Adapter: Fritzbox, Unify Circuit
        Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

        1 Antwort Letzte Antwort
        0
        • BluefoxB Offline
          BluefoxB Offline
          Bluefox
          schrieb am zuletzt editiert von
          #4

          Ä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 Antwort Letzte Antwort
          0
          • ruhr70R Offline
            ruhr70R Offline
            ruhr70
            schrieb am zuletzt editiert von
            #5

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

            Adapter: Fritzbox, Unify Circuit
            Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

            1 Antwort Letzte Antwort
            0
            • BluefoxB Offline
              BluefoxB Offline
              Bluefox
              schrieb am zuletzt editiert von
              #6

              @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 Antwort Letzte Antwort
              1
              • ruhr70R Offline
                ruhr70R Offline
                ruhr70
                schrieb am zuletzt editiert von
                #7

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

                Adapter: Fritzbox, Unify Circuit
                Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                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

                935

                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