NEWS
JavaScript Schleife mit Wildcard [gelöst]
-
Hallo Zusammen,
ich habe folgendes Skript im Einsatz, um den Stromverbrauch von ver. Geräte zu protokollieren.
Das Skript speicher die Daten wie folgt ab:
Verbrauch
Kosten
Für die Berechnung der Kosten ist ein statischer Strompreis hinterlegt.
Leider ändern sich die Strompreise bei uns zurzeit extrem. Die Preisänderung bekomme ich leider erst immer nachträglich mit.Nun möchte ich ein Skript erstellen, welches mir im Nachhinein den Strompreis richtigstellt. Hierfür habe ich den Strompreis in folgenden Format als Datenpunkt abgelegt (Beispiel für Monat):
Ich bastle bereits an einem Skript, welches mir den richtigen Strompreis errechnet. Als Vorlage habe ich ein Skript genommen, welches mir @paul53 in einen anderen Post zur Verfügung gestellt hat. Vielen Dank nochmals dafür Paul!!
Leider hänge ich zurzeit an einer Schleife, welche mir alle Datenpunkte durchgeht, damit das Skript nicht eine Zeile pro Datenpunkt hat.
Hat hier vielleicht jemand eine Idee, wie ich es am Besten umsetzen kann?const idsSrc = $('0_userdata.0.Verbrauchszaehler.Verbrauchszaehler_GM.Total.*'); idsSrc.each(function(id) { let idDst = id.replace('Verbrauch', 'Kosten'); setState(idDst, (parseFloat(getState("0_userdata.0.Verbrauchszaehler.Verbrauchszaehler_GM.Total.Aquarium.Verbrauch._Monat.Monat_1").val) * getState("0_userdata.0.Stromverbrauch.Strompreis._Monat.Monat_1").val))); });
Bin leider im Skripten nicht so fit.
Vielen Dank euch im Voraus
lg
Martin
-
@marting
Der Selektor muss stärker eingeschränkt werden:const idsSrc = $('0_userdata.0.Verbrauchszaehler.Verbrauchszaehler_GM.Total.Aquarium.Verbrauch._Monat.Monat_*'); idsSrc.each(function(id) { let idDst = id.replace('Verbrauch', 'Kosten'); let pos = id.indexOf('Monat_') + 6; let monat = id.substring(pos); setState(idDst, getState(id).val * getState("0_userdata.0.Stromverbrauch.Strompreis._Monat.Monat_" + monat).val, true); });
Damit werden alle Monate behandelt. Es sollten allerdings auch gültige Werte enthalten sein.
-
@paul53
Vielen vielen Dank! Das Skript funktioniert.
Musste lediglich das replace leicht anpassen, da das Wort Verbrauch mehrfach vorkommt. Habe es durch Verbrauch. und Kosten. ersetzt.Hätte noch eine kurze Verständnisfrage. Wieso steht in Zeile 4 "+6"? Für was steht die 6? Dachte anfangs, dass ich hier 11 eingeben muss, da ich ja 12 Monate haben möchte.
Neben dem Aquarium habe ich noch weitere Geräte. Wäre es evtl. möglich eine Schleife zu generieren, dass alle Geräte auf einmal abgearbeitet werden?
Ansonsten kann ich aber auch dieses Skript für jedes meiner Geräte kopieren.Vielen Dank im Voraus
lg
Martin
-
@marting sagte: Wieso steht in Zeile 4 "+6"?
Es wird in der ID die Position des Anfangs vom Wort "Monat_" ermittelt. Die Monatsnummer befindet sich dahinter, also 6 Zeichen weiter rechts.
-
@marting sagte: Neben dem Aquarium habe ich noch weitere Geräte. Wäre es evtl. möglich eine Schleife zu generieren, dass alle Geräte auf einmal abgearbeitet werden?
Wenn die ID-Struktur ansonsten identisch ist:
const idsSrc = $('0_userdata.0.Verbrauchszaehler.Verbrauchszaehler_GM.Total.*.Verbrauch._Monat.Monat_*');
-