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 Schleife mit Wildcard [gelöst]

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.8k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.2k

JavaScript Schleife mit Wildcard [gelöst]

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
6 Beiträge 2 Kommentatoren 543 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.
  • Martin1324M Offline
    Martin1324M Offline
    Martin1324
    schrieb am zuletzt editiert von Martin1324
    #1

    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

    paul53P 1 Antwort Letzte Antwort
    0
    • Martin1324M Martin1324

      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

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

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

      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

      Martin1324M 1 Antwort Letzte Antwort
      1
      • paul53P 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.

        Martin1324M Offline
        Martin1324M Offline
        Martin1324
        schrieb am zuletzt editiert von
        #3

        @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

        paul53P 2 Antworten Letzte Antwort
        0
        • Martin1324M Martin1324

          @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

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

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

          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
          1
          • Martin1324M Martin1324

            @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

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

            @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_*');
            

            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

            Martin1324M 1 Antwort Letzte Antwort
            1
            • paul53P paul53

              @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_*');
              
              Martin1324M Offline
              Martin1324M Offline
              Martin1324
              schrieb am zuletzt editiert von
              #6

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

              lg

              Martin

              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

              494

              Online

              32.4k

              Benutzer

              81.5k

              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