Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Wie Error handling

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Wie Error handling

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

      Hallo zusammen

      Ich habe da ein kleines Script, welches die Infos meines Dyson Luftreinigers auslesen kann.
      Das Script funktioniert soweit - nur, wenn es mal nicht funktioniert, stürzt gleich die komplette Javascript Instanz ab und startet sich neu.

      Das Script geht auf die Dyson Server und bezieht so die Informationen. Doch hin und wieder kommt der Status "Connection refused" zurück. Wie kann ich das Script anpassen, damit dann einfach in den Logs "Connection Refused" aufgeführt wird, anstatt dass sich gleich die Javascript Instanz aufhängt?

      var DysonPureLink = require('../../dyson-purelink')
      var pureLink = new DysonPureLink("myemailadress", "mypassword");
      var dyson;
      
      schedule("*/5 * * * *", function () {
      
      createState("Dyson.Temperature", 0);
      createState("Dyson.Humidity", 0);
      createState("Dyson.AirQuality", 0);
      createState("Dyson.LogFanStatus", 0);
      createState("Dyson.LogAutoOnStatus", 0);
      createState("Dyson.LogRotationStatus", 0);
      createState("Dyson.LogFanSpeed", 0);
      
      
      pureLink.getDevices().then(devices => {
          if(!devices)
          {
              log('No devices found');
          }
          else
          {
              log('Device found');
              dyson = devices[0];
              //dyson.getTemperature().then(t => createState("Dyson.Temperature", t)) //Temperature DB Neu
              dyson.getTemperature().then(t => setState("Dyson.Temperature", t)) //Temperature DB Existiert
              dyson.getRelativeHumidity().then(t => setState("Dyson.Humidity", t))
              dyson.getAirQuality().then(t => setState("Dyson.AirQuality", t))
              dyson.getFanStatus().then(t => setState("Dyson.LogFanStatus", t))
              dyson.getFanSpeed().then(t => setState("Dyson.LogFanSpeed", t))
              dyson.getAutoOnStatus().then(t => setState("Dyson.LogAutoOnStatus", t))
              dyson.getRotationStatus().then(t => setState("Dyson.LogRotationStatus", t))
          }
      }).catch(err => console.error(err))
      
      });
      
      

      Fehlermeldung:
      error.png

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

        Mit einem klassischen try catch block...
        Ich habe mir den Code der verwendeten Module nicht angesehen aber es ist auf jeden Fall das MQTT Module welches einen Fehler wirft.. Es wird aber dem Code-Syntax vom Script nach ein Promise erwartet.. Und da MQTT einen Fehler schmeißt und kein Promise zurück gibt wird dein then ... catch .. nie erreicht werden..

        Also z.B. so:

        var DysonPureLink = require('../../dyson-purelink')
        var pureLink = new DysonPureLink("myemailadress", "mypassword");
        var dyson;
        
        schedule("*/5 * * * *", function () {
        
            createState("Dyson.Temperature", 0);
            createState("Dyson.Humidity", 0);
            createState("Dyson.AirQuality", 0);
            createState("Dyson.LogFanStatus", 0);
            createState("Dyson.LogAutoOnStatus", 0);
            createState("Dyson.LogRotationStatus", 0);
            createState("Dyson.LogFanSpeed", 0);
        
            try {
        
                pureLink.getDevices().then(devices => {
                    if (!devices) {
                        log('No devices found');
                    }
                    else {
                        log('Device found');
                        dyson = devices[0];
                        //dyson.getTemperature().then(t => createState("Dyson.Temperature", t)) //Temperature DB Neu
                        dyson.getTemperature().then(t => setState("Dyson.Temperature", t)) //Temperature DB Existiert
                        dyson.getRelativeHumidity().then(t => setState("Dyson.Humidity", t))
                        dyson.getAirQuality().then(t => setState("Dyson.AirQuality", t))
                        dyson.getFanStatus().then(t => setState("Dyson.LogFanStatus", t))
                        dyson.getFanSpeed().then(t => setState("Dyson.LogFanSpeed", t))
                        dyson.getAutoOnStatus().then(t => setState("Dyson.LogAutoOnStatus", t))
                        dyson.getRotationStatus().then(t => setState("Dyson.LogRotationStatus", t))
                    }
                }).catch(err => console.error(err))
        
            }
            catch (e) {
                log('Fehler: ' + e);
            }
        
        
        });
        1 Reply Last reply Reply Quote 0
        • W
          wizzardking last edited by

          @BuZZy
          Vielen, vielen Dank!

          Wieder etwas dazu gelernt. Funktioniert so perfekt.

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

          Support us

          ioBroker
          Community Adapters
          Donate

          792
          Online

          31.8k
          Users

          80.0k
          Topics

          1.3m
          Posts

          2
          3
          227
          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