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. Mehrere Variablen übergeben (Stapelverarbeitung)

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

Mehrere Variablen übergeben (Stapelverarbeitung)

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
8 Beiträge 2 Kommentatoren 634 Aufrufe 2 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.
  • B Offline
    B Offline
    blackforst
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen,

    mit JS und Blockly habe ich noch nicht viel zu tun. Wie ist es möglich mehrere Variablen von einem Objekt in ein anderes zu schieben und diese aktualisieren sich bei Wertänderung?

    Beispiel:
    ich hab im Objekt "mqtt/0/Wechselrichter/..." 20 Variablen mit Real und Bool. Diese möchte ich in ein anderes Objekt "beckhoff/0/plc/..." schieben. Dabei sollen sich die Werte wenn möglich zyklisch oder bei Wertänderung aktualisieren.

    Ich habe hierzu auch schon ein Beispiel gefunden. Allerdings nur für eine Variable. Muss ich jetzt für jede Variable ein script anlegen? Das geht doch bestimmt auch einfacher.

    // Wert lesen
    const idSrc = 'mqtt.0.inverter.HM1500.ch0.YieldTotal'/*inverter/HM1500/ch0/YieldTotal*/;
    // Wert schreiben
    const idDst = 'beckhoff.0.plc.GVL_iobroker.stPhotovoltaik.iYieldTotal'/*iYieldTotal [REAL]*/;
     
    // Skriptstart
    setState(idDst, getState(idSrc).val);
     
    // Aktualisierung bei Wertänderung
    on(idSrc, function(dp) {
       setState(idDst, dp.state.val);
    });
    
    paul53P 1 Antwort Letzte Antwort
    0
    • B blackforst

      Hallo zusammen,

      mit JS und Blockly habe ich noch nicht viel zu tun. Wie ist es möglich mehrere Variablen von einem Objekt in ein anderes zu schieben und diese aktualisieren sich bei Wertänderung?

      Beispiel:
      ich hab im Objekt "mqtt/0/Wechselrichter/..." 20 Variablen mit Real und Bool. Diese möchte ich in ein anderes Objekt "beckhoff/0/plc/..." schieben. Dabei sollen sich die Werte wenn möglich zyklisch oder bei Wertänderung aktualisieren.

      Ich habe hierzu auch schon ein Beispiel gefunden. Allerdings nur für eine Variable. Muss ich jetzt für jede Variable ein script anlegen? Das geht doch bestimmt auch einfacher.

      // Wert lesen
      const idSrc = 'mqtt.0.inverter.HM1500.ch0.YieldTotal'/*inverter/HM1500/ch0/YieldTotal*/;
      // Wert schreiben
      const idDst = 'beckhoff.0.plc.GVL_iobroker.stPhotovoltaik.iYieldTotal'/*iYieldTotal [REAL]*/;
       
      // Skriptstart
      setState(idDst, getState(idSrc).val);
       
      // Aktualisierung bei Wertänderung
      on(idSrc, function(dp) {
         setState(idDst, dp.state.val);
      });
      
      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #2

      @blackforst sagte: Das geht doch bestimmt auch einfacher.

      Man kann zwei korrespondierende ID-Arrays erstellen.

      const idsSrc = [ 
         'mqtt.0.inverter.HM1500.ch0.YieldTotal'/*inverter/HM1500/ch0/YieldTotal*/,
         // usw.
      ];
      const idsDst = [
         'beckhoff.0.plc.GVL_iobroker.stPhotovoltaik.iYieldTotal'/*iYieldTotal [REAL]*/,
         // usw.
      ];
      
      // Skriptstart
      for(let i = 0; i < idsSrc.length; i++) {
         setState(idsDst[i], getState(idsSrc[i]).val);
      }
      
      // Wertänderung
      on(idsSrc, function(dp) {
         let idx = idsSrc.indexOf(dp.id);
         setState(idsDSt[idx], dp.state.val);
      });
      

      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

      B 1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @blackforst sagte: Das geht doch bestimmt auch einfacher.

        Man kann zwei korrespondierende ID-Arrays erstellen.

        const idsSrc = [ 
           'mqtt.0.inverter.HM1500.ch0.YieldTotal'/*inverter/HM1500/ch0/YieldTotal*/,
           // usw.
        ];
        const idsDst = [
           'beckhoff.0.plc.GVL_iobroker.stPhotovoltaik.iYieldTotal'/*iYieldTotal [REAL]*/,
           // usw.
        ];
        
        // Skriptstart
        for(let i = 0; i < idsSrc.length; i++) {
           setState(idsDst[i], getState(idsSrc[i]).val);
        }
        
        // Wertänderung
        on(idsSrc, function(dp) {
           let idx = idsSrc.indexOf(dp.id);
           setState(idsDSt[idx], dp.state.val);
        });
        
        B Offline
        B Offline
        blackforst
        schrieb am zuletzt editiert von
        #3

        @paul53 Aktualisiert er dann auch die Werte innerhalb des Arrays bzw. Struct? Wenn sich dann z.B. auch nur ein Wert davon ändert?

        paul53P 1 Antwort Letzte Antwort
        0
        • B blackforst

          @paul53 Aktualisiert er dann auch die Werte innerhalb des Arrays bzw. Struct? Wenn sich dann z.B. auch nur ein Wert davon ändert?

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

          @blackforst sagte: Aktualisiert er dann auch die Werte innerhalb des Arrays bzw. Struct? Wenn sich dann z.B. auch nur ein Wert davon ändert?

          Es kann (zu einem Zeitpunkt) immer nur ein Datenpunkt triggern. Vom aktuellen Trigger-DP wird der Index in das Array ermittelt und der zugehörige Ziel-DP mit dem Wert des Trigger-DP geschrieben. Die Arrays enthalten keine Werte, sondern 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

          B 1 Antwort Letzte Antwort
          0
          • paul53P paul53

            @blackforst sagte: Aktualisiert er dann auch die Werte innerhalb des Arrays bzw. Struct? Wenn sich dann z.B. auch nur ein Wert davon ändert?

            Es kann (zu einem Zeitpunkt) immer nur ein Datenpunkt triggern. Vom aktuellen Trigger-DP wird der Index in das Array ermittelt und der zugehörige Ziel-DP mit dem Wert des Trigger-DP geschrieben. Die Arrays enthalten keine Werte, sondern Datenpunkt-IDs.

            B Offline
            B Offline
            blackforst
            schrieb am zuletzt editiert von
            #5

            @paul53 Hallo paul53, ich habe jetzt ein bisschen probiert. Hast du da ein Beispiel in wie das in iobroker und JS aussieht?
            Ich möchte aus der mqtt-Struktur die PV Panel 1-4 in die PLC-Struktur schieben.

            Gruß
            blackfrost
            mqtt.png plc.png

            paul53P 1 Antwort Letzte Antwort
            0
            • B blackforst

              @paul53 Hallo paul53, ich habe jetzt ein bisschen probiert. Hast du da ein Beispiel in wie das in iobroker und JS aussieht?
              Ich möchte aus der mqtt-Struktur die PV Panel 1-4 in die PLC-Struktur schieben.

              Gruß
              blackfrost
              mqtt.png plc.png

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

              @blackforst

              PV-Panel 1 ist "ch0"?

              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

              B 1 Antwort Letzte Antwort
              0
              • paul53P paul53

                @blackforst

                PV-Panel 1 ist "ch0"?

                B Offline
                B Offline
                blackforst
                schrieb am zuletzt editiert von
                #7

                @paul53 Ch0 sind die Werte des Wechselrichters

                paul53P 1 Antwort Letzte Antwort
                0
                • B blackforst

                  @paul53 Ch0 sind die Werte des Wechselrichters

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

                  @blackforst sagte: Ch0 sind die Werte des Wechselrichters

                  Also "ch1" bis "ch4"?
                  Ohne das kleine "i" in der Ziel-ID wäre es sehr einfach mit einem $-Selektor und replace():

                  const idsSrc = $('mqtt.0.inverter.HM1500.ch*');
                  
                  idsSrc.on(function(dp) {
                      if(!dp.id.includes('.ch0.')) {
                          let idDst = dp.id.replace('mqtt.0.inverter.HM1500.ch', 'beckhoff.0.plc.GVL_iobroker.stPhotovoltaik.stPhotoZelle');
                          setState(idDst, dp.state.val);
                      }
                  });
                  

                  Mit dem kleinen "i" erstelle zwei Arrays mit je 24 Datenpunkt-IDs in gleicher Reihenfolge.

                  EDIT: Oder verwende für jedes Panel einen eigenen Trigger:

                  $('mqtt.0.inverter.HM1500.ch1.*').on(function(dp) {
                      let idDst = dp.id.replace('mqtt.0.inverter.HM1500.ch1.', 'beckhoff.0.plc.GVL_iobroker.stPhotovoltaik.stPhotoZelle1.i');
                      setState(idDst, dp.state.val);
                  });
                  
                  $('mqtt.0.inverter.HM1500.ch2.*').on(function(dp) {
                      let idDst = dp.id.replace('mqtt.0.inverter.HM1500.ch2.', 'beckhoff.0.plc.GVL_iobroker.stPhotovoltaik.stPhotoZelle2.i');
                      setState(idDst, dp.state.val);
                  });
                  
                  $('mqtt.0.inverter.HM1500.ch3.*').on(function(dp) {
                      let idDst = dp.id.replace('mqtt.0.inverter.HM1500.ch3.', 'beckhoff.0.plc.GVL_iobroker.stPhotovoltaik.stPhotoZelle3.i');
                      setState(idDst, dp.state.val);
                  });
                  
                  $('mqtt.0.inverter.HM1500.ch4.*').on(function(dp) {
                      let idDst = dp.id.replace('mqtt.0.inverter.HM1500.ch4.', 'beckhoff.0.plc.GVL_iobroker.stPhotovoltaik.stPhotoZelle4.i');
                      setState(idDst, dp.state.val);
                  });
                  

                  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

                  655

                  Online

                  32.6k

                  Benutzer

                  82.3k

                  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