Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Fehler in meinem Skript

    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

    Fehler in meinem Skript

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

      Hallo zusammen,

      bisher hab ich meine Programme mit Blockly erstellt. Seit kurzem beschäftige ich mich mit Javascript.
      Versuche mittels Anleitungen, Beispiele aus dem Internet das Ganze zu lernen.

      Das angefügten Skript macht eigentlich genau das was es soll (ohne Fehlermeldungen)
      Jedoch gibt es zwei rot Unterstrichene Befehle. Woran die Probleme liegen verstehe ich nicht. Kann mir jemand helfen?

      Zeile 40: replaceAll
      Wenn ich replace verwenden würde gäbe es keine Fehleranzeige. Ich möchte aber sämtliche "_" durch Leerzeichen ersetzten. Zur besseren Lesbarkeit hab ich das replaceAll anstelle replace in einer Schleife verwendet.
      Kann ich da bedenkenlos die Fehlermeldung ausblenden?

      Zeile 70: Die Variable Common im createState
      Wenn ich den Code von Zeile 61 bis 81 in einer Funktion packe, scheint dieser in Ordnung zu sein
      In Zeile 100 habe ich den selben Befehl erneut , dort scheint dieser in Ordnung zu sein?
      Kann / sollte man bei Variablen, so wie bei States die type definieren? Vermutlich braucht es hier Object...

      const Ist = [
          //  Objekt ID                                                                                                                                                                       Common
          //---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
          ['00 Aktuell.0000 Außen',                                                                                                                                                           {'name':'τx- 0000', 'type':'number', 'unit':'°C' }],
          ['00 Aktuell.0100 Wohnraum',                                                                                                                                                        {'name':'τx- 0100', 'type':'number', 'unit':'°C' }],
          ['00 Aktuell.0101 Wohnraum (Air Quality Monitor)',                                                                                                                                  {'name':'τx- 0101', 'type':'number', 'unit':'°C' }],
          ['00 Aktuell.0200 Zimmer Klein',                                                                                                                                                    {'name':'τx- 0200', 'type':'number', 'unit':'°C' }],
          ['00 Aktuell.0300 Zimmer Groß',                                                                                                                                                     {'name':'τx- 0300', 'type':'number', 'unit':'°C' }],
          ['00 Aktuell.0301 Zimmer Groß (Air Quality Monitor)',                                                                                                                               {'name':'τx- 0301', 'type':'number', 'unit':'°C' }],
          ['00 Aktuell.0400 Badezimmer',                                                                                                                                                      {'name':'τx- 0400', 'type':'number', 'unit':'°C' }]
      ];
      const IstMin = [
          //  Objekt ID                                                       Reset täglich (0:00)    Reset bei Skriptstart                                                                   Common
          //---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
          ['01 Tages Minimum.0000 Außen',                                     true,                   false,                                                                                  {'name':'τx↓ 0000', 'type':'number', 'unit':'°C' }],
          ['01 Tages Minimum.0100 Wohnraum',                                  true,                   false,                                                                                  {'name':'τx↓ 0100', 'type':'number', 'unit':'°C' }],
          ['01 Tages Minimum.0101 Wohnraum (Air Quality Monitor)',            true,                   false,                                                                                  {'name':'τx↓ 0101', 'type':'number', 'unit':'°C' }],
          ['01 Tages Minimum.0200 Zimmer Klein',                              true,                   false,                                                                                  {'name':'τx↓ 0200', 'type':'number', 'unit':'°C' }],
          ['01 Tages Minimum.0300 Zimmer Groß',                               true,                   false,                                                                                  {'name':'τx↓ 0300', 'type':'number', 'unit':'°C' }],
          ['01 Tages Minimum.0301 Zimmer Groß (Air Quality Monitor)',         true,                   false,                                                                                  {'name':'τx↓ 0301', 'type':'number', 'unit':'°C' }],
          ['01 Tages Minimum.0400 Badezimmer',                                true,                   false,                                                                                  {'name':'τx↓ 0400', 'type':'number', 'unit':'°C' }]
      ];
      const IstMax = [
          //  Objekt ID                                                       Reset täglich (0:00)    Reset bei Skriptstart                                                                   Common
          //---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
          ['02 Tages Maximum.0000 Außen',                                     true,                   false,                                                                                  {'name':'τx↑ 0000', 'type':'number', 'unit':'°C' }],
          ['02 Tages Maximum.0100 Wohnraum',                                  true,                   false,                                                                                  {'name':'τx↑ 0100', 'type':'number', 'unit':'°C' }],
          ['02 Tages Maximum.0101 Wohnraum (Air Quality Monitor)',            true,                   false,                                                                                  {'name':'τx↑ 0101', 'type':'number', 'unit':'°C' }],
          ['02 Tages Maximum.0200 Zimmer Klein',                              true,                   false,                                                                                  {'name':'τx↑ 0200', 'type':'number', 'unit':'°C' }],
          ['02 Tages Maximum.0300 Zimmer Groß',                               true,                   false,                                                                                  {'name':'τx↑ 0300', 'type':'number', 'unit':'°C' }],
          ['02 Tages Maximum.0301 Zimmer Groß (Air Quality Monitor)',         true,                   false,                                                                                  {'name':'τx↑ 0301', 'type':'number', 'unit':'°C' }],
          ['02 Tages Maximum.0400 Badezimmer',                                true,                   false,                                                                                  {'name':'τx↑ 0400', 'type':'number', 'unit':'°C' }],
      ];
      
      
      /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      // Verzeichnis Datenpunkte:
      
      // @ts-ignore
      const Skript = (instance == 0 ? '.' : '.Test.') + scriptName.slice(10).replaceAll('_', ' ') + ('.');
      const idAlias = 'alias.0' + Skript;
      const idState = '0_userdata.0' + Skript;
      
      /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      // Berechnung Taupunkt:
      
      /**
      * @param {string} idT
      * @param {string} idH
      */
      function Taupunkt(idT, idH) {
          let T = getState(idT).val;
          let H = getState(idH).val;
          let DEW = 243.12 * ((((17.62 * T) / (243.12 + T)) + (Math.log(H / 100))) / (((17.62 * 243.12) / (243.12 + T)) - (Math.log(H / 100))));
          return Math.round(DEW * 10) / 10;
      }
      
      /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      // Skript-Datenpunkte Taupunkt Istwert erzeugen und aktualisieren
      
      for (let i = 0; i <= Ist.length - 1; i++) {
          let ID = idState + Ist[i][0];
          let idT = idAlias.slice(0, idAlias.lastIndexOf('03 Taupunkt')) + '01 Temperatur.10 Istwert.00 Aktuell' + ID.slice(ID.lastIndexOf('.'));
          let idH = idAlias.slice(0, idAlias.lastIndexOf('03 Taupunkt')) + '02 Feuchtigkeit.10 Istwert.00 Aktuell' + ID.slice(ID.lastIndexOf('.'));
          let Wert = Taupunkt(idT, idH)
          let Common = Ist[i][1];
      
          // Datenpunkt Taupunkt Istwert erzeugen falls es ihn noch nicht gibt
          if (!existsState(ID)) {
              createState(ID, Wert, Common);
      
              // Datenpunkt Taupunkt Istwert aktualisieren falls sich der Wert geändert hat
          } else if (getState(ID).val != Wert) {
              setState(ID, Wert, true);
          }
      
          // Trigger Temperatur oder Feuchtigkeit haben sich geändert → Datenpunkt Taupunkt Istwert aktualisieren
          on({ id: [].concat(idT).concat(idH), change: "ne" }, function (obj) {
              setState(ID, Taupunkt(idT, idH), true)
          });
      }
      
      /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      // Skript-Datenpunkte Istwert Minimum / Maximum erzeugen und aktualisieren:
      
      //Wartezeit bis Skript-Datenpunkte IST-Taupunkt erstellt wurden
      setTimeout(function () {
          let resetDayList = []
          for (let i = 0; i <= 1; i++) {
              let ListeID = [IstMin, IstMax][i];
              for (let i2 = 0; i2 <= ListeID.length - 1; i2++) {
                  let ID = idState + ListeID[i2][0];
                  let Wert = idState + '00 Aktuell' + ID.slice(ID.lastIndexOf('.'));
                  let Common = ListeID[i2][3]
                  let resetDay = ListeID[i2][1];
                  let resetStart = ListeID[i2][2];
      
                  // Datenpunkt Min-bzw.Max- Wert erzeugen falls es ihn noch nicht gibt
                  if (!existsState(ID)) {
                      createState(ID, getState(Wert).val, Common);
      
                      // Min-bzw.Max- Wert resettieren falls 'Reset täglich' angewählt ist, Wert vom vorherigen Tag ist und der aktuelle Istwert vom Min-bzw.Max- Wert abweicht
                  } else if (resetDay && formatDate(getDateObject(getState(ID).ts), "DD.MM.YYYY") != formatDate(new Date(), "DD.MM.YYYY") && getState(Wert).val != getState(ID).val) {
                      setState(ID, getState(Wert).val, true);
      
                      // Min-bzw.Max- Wert resettieren falls 'Reset bei Skriptstart' angewählt ist und der aktuelle Istwert vom Min-bzw.Max- Wert abweicht
                  } else if (resetStart && getState(Wert).val != getState(ID).val) {
                      setState(ID, getState(Wert).val, true);
      
                      // Min-Wert aktualisieren falls der aktuelle Istwert geringer ist bzw. Max-Wert aktualisieren falls der aktuelle Istwert höher ist
                  } else if (i == 0 && getState(Wert).val < getState(ID).val || i == 1 && getState(Wert).val > getState(ID).val) {
                      setState(ID, getState(Wert).val, true);
                  }
                  // Trigger Istwert hat sich geändert → Min-Wert aktualisieren falls der aktuelle Istwert geringer ist bzw. Max-Wert aktualisieren falls der aktuelle Istwert höher ist
                  on({ id: Wert, change: 'ne' }, function (obj) {
                      if (i == 0 && getState(obj.id).val < getState(ID).val || i == 1 && getState(obj.id).val > getState(ID).val) {
                          setState(ID, getState(Wert).val, true);
                      }
                  });
                  // Falls 'Reset täglich' beim betreffenden Min-bzw.Max- Wert angewählt ist, Diesen und dazugehörigen Istwert auflisten.
                  if (resetDay) {
                      resetDayList.push([ID, Wert]);
                  }
      
              }
          }
          // Trigger 00:00 Uhr → Alle Min-bzw.Max- Werte laut Liste auf dem aktuellen Istwert setzen
          schedule("0 0 * * *", function () {
              for (let i = 0; i <= resetDayList.length - 1; i++) {
                  let ID = resetDayList[i][0];
                  let Wert = getState(resetDayList[i][1]).val;
                  if (getState(ID).val != Wert) {
                      setState(ID, Wert, true);
                  }
              }
          });
      }, 500);
      
      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @DAN78 last edited by

        @dan78 sagte: Zeile 40: replaceAll

        Kennt die Prüfung des Editors offenbar nicht: Ignorieren!
        ... oder ersetzen durch

        replace(/_/g, ' ')
        
        1 Reply Last reply Reply Quote 0
        • First post
          Last post

        Support us

        ioBroker
        Community Adapters
        Donate

        796
        Online

        31.8k
        Users

        80.0k
        Topics

        1.3m
        Posts

        2
        2
        132
        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