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. Loop Problem

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.4k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    966

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Loop Problem

Geplant Angeheftet Gesperrt Verschoben JavaScript
4 Beiträge 2 Kommentatoren 327 Aufrufe 1 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.
  • S Offline
    S Offline
    Smartin
    schrieb am zuletzt editiert von
    #1

    Moin, wieder mal ich mit einem Loop Problem ... irgendwie raff ich es nicht und brauche mal wieder eure Hilfe.
    Also, ich habe eine Funktion die mir Höchst und Tiefstwerte eines Datenpunkts speichern soll.
    Da es insgesamt 21 Datenpunkte (Kurs1 - Kurs21) sind die überwacht werden, lasse ich einen Loop über die Datenpunkte laufen.
    Die Daten sollen dann mit dem bisherigen Wert von den Datenpunkten (High1 - High21; Low1 - Low21)verglichen werden und falls der Wert tiefer oder höher ist die bisherigen Werte der entsprechenden Datenpunkte überschreiben.
    Mein Ansatz sieht so aus:

    function HiLo() {
      for (let i = 1; i <= 21; i++) {
        const kursId = `Kurs${i}`; // Namen Kurs1 - Kurs21 vergeben
        const lowId = `Low${i}`; // Namen Low1 - Low21 vergeben
        const highId = `High${i}`; // Namen High1 - High21 vergeben
        const kursValue = getState(kursId).val; // Wert von Kurs1 - Kurs21 holen
        const lowValue = getState(lowId).val; // Wert von Low1 - Low21 holen
        const highValue = getState(highId).val; // Wert von High1 - High21 holen
    
        if (kursValue < lowValue) setState(lowId, kursId, true);
        if (kursValue > highValue) setState(highId, kursId, true);
    }
    };
    

    Die Werte von kursId, lowId, highId entsprechen laut einem Konsolencheck auch jeweils auch dem Namen Kurs1, Low1 und High1 usw. aber die davon ausgelesenen Werte (obwohl im Datenpunkt vorhanden und mit Werten) ergeben immer "null".
    Was mache ich denn falsch?
    Wahrscheinlich bin ich aber für die ganze Funktion wieder mal viel zu kompliziert unterwegs, oder?
    Aber ich versuche es zumindest immer erst mal selbst hinzukriegen bevor ich hier frage :grin:

    paul53P 1 Antwort Letzte Antwort
    0
    • S Smartin

      Moin, wieder mal ich mit einem Loop Problem ... irgendwie raff ich es nicht und brauche mal wieder eure Hilfe.
      Also, ich habe eine Funktion die mir Höchst und Tiefstwerte eines Datenpunkts speichern soll.
      Da es insgesamt 21 Datenpunkte (Kurs1 - Kurs21) sind die überwacht werden, lasse ich einen Loop über die Datenpunkte laufen.
      Die Daten sollen dann mit dem bisherigen Wert von den Datenpunkten (High1 - High21; Low1 - Low21)verglichen werden und falls der Wert tiefer oder höher ist die bisherigen Werte der entsprechenden Datenpunkte überschreiben.
      Mein Ansatz sieht so aus:

      function HiLo() {
        for (let i = 1; i <= 21; i++) {
          const kursId = `Kurs${i}`; // Namen Kurs1 - Kurs21 vergeben
          const lowId = `Low${i}`; // Namen Low1 - Low21 vergeben
          const highId = `High${i}`; // Namen High1 - High21 vergeben
          const kursValue = getState(kursId).val; // Wert von Kurs1 - Kurs21 holen
          const lowValue = getState(lowId).val; // Wert von Low1 - Low21 holen
          const highValue = getState(highId).val; // Wert von High1 - High21 holen
      
          if (kursValue < lowValue) setState(lowId, kursId, true);
          if (kursValue > highValue) setState(highId, kursId, true);
      }
      };
      

      Die Werte von kursId, lowId, highId entsprechen laut einem Konsolencheck auch jeweils auch dem Namen Kurs1, Low1 und High1 usw. aber die davon ausgelesenen Werte (obwohl im Datenpunkt vorhanden und mit Werten) ergeben immer "null".
      Was mache ich denn falsch?
      Wahrscheinlich bin ich aber für die ganze Funktion wieder mal viel zu kompliziert unterwegs, oder?
      Aber ich versuche es zumindest immer erst mal selbst hinzukriegen bevor ich hier frage :grin:

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #2

      @smartin sagte: Namen Kurs1, Low1 und High1

      Die Namen sind keine gültigen Datenpunkt-IDs.

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      S 1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @smartin sagte: Namen Kurs1, Low1 und High1

        Die Namen sind keine gültigen Datenpunkt-IDs.

        S Offline
        S Offline
        Smartin
        schrieb am zuletzt editiert von Smartin
        #3

        @paul53
        Ah ok danke, dann ist natürlich klar das nichts ausgelesen wird.
        Und wie werden da gültige Datenpunkt-IDs draus?

        paul53P 1 Antwort Letzte Antwort
        0
        • S Smartin

          @paul53
          Ah ok danke, dann ist natürlich klar das nichts ausgelesen wird.
          Und wie werden da gültige Datenpunkt-IDs draus?

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          @smartin sagte: Und wie werden da gültigen Datenpunkt-IDs draus?

          Den Objektpfad hinzufügen.

          const path = 'adapter.0.folder.'; // anpassen!
          
          function HiLo() {
            for (let i = 1; i <= 21; i++) {
              const kursId = path + `Kurs${i}`; // Namen Kurs1 - Kurs21 vergeben
              const lowId = path + `Low${i}`; // Namen Low1 - Low21 vergeben
              const highId = path + `High${i}`; // Namen High1 - High21 vergeben
          

          Wenn die Namen eindeutig im gesamten ioBroker sind, kann auch getIdByName(name) verwendet werden.

              const kursId = getIdByName(`Kurs${i}`); // Namen Kurs1 - Kurs21 vergeben
              const lowId = getIdByName(`Low${i}`); // Namen Low1 - Low21 vergeben
              const highId = getIdByName(`High${i}`); // Namen High1 - High21 vergeben
          

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          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

          750

          Online

          32.6k

          Benutzer

          82.2k

          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