NEWS
Loop Problem
-
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 -
@smartin sagte: Namen Kurs1, Low1 und High1
Die Namen sind keine gültigen Datenpunkt-IDs.
-
@paul53
Ah ok danke, dann ist natürlich klar das nichts ausgelesen wird.
Und wie werden da gültige Datenpunkt-IDs draus? -
@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