Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript Schleife mit Wildcard [gelöst]

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    JavaScript Schleife mit Wildcard [gelöst]

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

      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
      Verbrauch.png

      Kosten
      Kosten.jpg

      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):
      Strompreis.jpg

      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

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @MartinG last edited by paul53

        @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.

        MartinG 1 Reply Last reply Reply Quote 1
        • MartinG
          MartinG @paul53 last edited by

          @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

          paul53 2 Replies Last reply Reply Quote 0
          • paul53
            paul53 @MartinG last edited by

            @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.

            1 Reply Last reply Reply Quote 1
            • paul53
              paul53 @MartinG last edited by

              @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_*');
              
              MartinG 1 Reply Last reply Reply Quote 1
              • MartinG
                MartinG @paul53 last edited by

                @paul53
                Vielen Dank!! Das Skript läuft perfekt!

                lg

                Martin

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

                Support us

                ioBroker
                Community Adapters
                Donate

                623
                Online

                31.7k
                Users

                79.6k
                Topics

                1.3m
                Posts

                2
                6
                393
                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