Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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. JS # mit einer Schleife eine function mehrfach aufrufen und ebusd abfragen

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    735

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    10
    1
    564

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    1.1k

JS # mit einer Schleife eine function mehrfach aufrufen und ebusd abfragen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
24 Beiträge 3 Kommentatoren 4.2k Aufrufe
  • Ä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.
  • D Offline
    D Offline
    der_Auge
    schrieb am zuletzt editiert von
    #21

    habe mich mal durchgearbeitet.

    Glaube das ich den Fehler gefunden habe

    Die var "step" wird ja schon früh um eins erhöht.

    daher if(step < Elemente.length -1){

    // =============================================================================
    // --- function zum Abfragen der Werte
    // =============================================================================
    function readElement(){
        if(Elemente.length < 1){
            log('keine Elemente zum abfragen');
            client.destroy();
        return;
        }
        if (logging) log('     ---> Variable "step" '+ step + ' für die Anzahle von ' + Elemente.length + ' Elemente');
        if(step < Elemente.length -1){
            step++ ;
            if (logging) log('0.'+ step + '  ---> Neue Abfrage ------------------------> Durchlauf : '+ step);
            // --- hier dann die function mit werten aufrufen
            var req = 'read -f ' + Elemente[step]; // der Befehl wird zusammengesetzt
            var ele = Elemente[step];
            var eleN = ElementeNamen[step];
            client.write(req + '\n');               // hier wird der Befehl gesendet
            if (logging) log('1.'+ step + '  BEFEHL wurde gesendet : ' + req);
        }
        else{
            step = -1;
            setTimeout(readElement, 60000); //Wenn alle Werte abgefragt sind--> Neustart in 1 Minute
            return;
        }
    }
    
    

    Ich werde noch einige Sachen testen.

    Wenn es nun sauber läuft werde ich den gesamten Script noch mal posten

    DANKE für die Unterstützung

    Gruß

    Jürgen

    Master: DN2820FYKH (4GB) Linux NUC 4.4.0-22-generic #40-Ubuntu x86_64

    Slave: Linux RPi2-1 4.1.19-v7+ #858 v4.4.3 # 2.15.1

    SQL-DB : Linux DS 3.10.77 #7321 x86_64 synology412+

    Test : DS916+ VM Debian

    Test : Tinker mit piVCCU

    1 Antwort Letzte Antwort
    0
    • blauholstenB Offline
      blauholstenB Offline
      blauholsten
      Developer
      schrieb am zuletzt editiert von
      #22

      @der_Auge:

      habe mich mal durchgearbeitet.

      Glaube das ich den Fehler gefunden habe

      Die var "step" wird ja schon früh um eins erhöht.

      daher if(step < Elemente.length -1){

      // =============================================================================
      // --- function zum Abfragen der Werte
      // =============================================================================
      function readElement(){
          if(Elemente.length < 1){
              log('keine Elemente zum abfragen');
              client.destroy();
          return;
          }
          if (logging) log('     ---> Variable "step" '+ step + ' für die Anzahle von ' + Elemente.length + ' Elemente');
          if(step < Elemente.length -1){
              step++ ;
              if (logging) log('0.'+ step + '  ---> Neue Abfrage ------------------------> Durchlauf : '+ step);
              // --- hier dann die function mit werten aufrufen
              var req = 'read -f ' + Elemente[step]; // der Befehl wird zusammengesetzt
              var ele = Elemente[step];
              var eleN = ElementeNamen[step];
              client.write(req + '\n');               // hier wird der Befehl gesendet
              if (logging) log('1.'+ step + '  BEFEHL wurde gesendet : ' + req);
          }
          else{
              step = -1;
              setTimeout(readElement, 60000); //Wenn alle Werte abgefragt sind--> Neustart in 1 Minute
              return;
          }
      }
      
      

      Ich werde noch einige Sachen testen.

      Wenn es nun sauber läuft werde ich den gesamten Script noch mal posten

      DANKE für die Unterstützung

      Gruß

      Jürgen `
      Jawohl, Schande über mein Haupt…..

      Die length Funktion gibt nicht denn Index, sondern die Anzahl der Elemente zurück. (Quasi eins mehr)

      Entwickler vom: - Viessman Adapter
      - Alarm Adapter

      1 Antwort Letzte Antwort
      0
      • D Offline
        D Offline
        der_Auge
        schrieb am zuletzt editiert von
        #23

        Hallo zusammen,

        anbei wie versprochen der Script der nun mehrere Werte vom eBus abfragt

        var Elemente =

        var ElementeNamen =

        müssen angepasst werden.

        ! ```
        `// =============================================================================
        // --- Abfragen von Werten vom "ebusd"
        // =============================================================================
        var logging = false; // "true" oder "false" wenn nicht gewünscht
        var HOST = 'RPi2-2'; // Hostname oder IP-Adresse auf dem der ebusd läuft
        var PORT = 8888; // Portnummer auf dem der ebusd hört
        var step = -1;
        var pfad = 'eBus.Temperatur.'; // Pfad innerhalb der Instanz wo die Daten gespeichert werden
        // =============================================================================
        var net = require('net');
        var client = new net.Socket();
        // =============================================================================
        var Elemente = ['dcfState','FlowTemp','HcHours','HwcHours','OutdoorstempSensor','PrEnergyCountHc1','PrEnergyCountHwc1','PrEnergySumHc1','PrEnergySumHwc1','ReturnTemp','PumpHours','PumpHwcFlowNumber','PumpHwcFlowSum','SDFanSpeed','SDTRT','StorageTemp','WaterPressure'];
        var ElementeNamen = ['','','','','',''];
        // =============================================================================
        ! // =============================================================================
        // Datenpunkte anlegen
        // =============================================================================
        function anlegen(){
        if (logging) log('--------> Start -> es gibt für ' + Elemente.length + ' Elemente einen Datenpunkt anzulegen');
        for(var i=0;i <elemente.length;i++) {/createstate(pfad/+/elemente[i],/0,/{name:/elementenamen[i]});/if/(logging)/log('0.'/i/'/datenpunkt:/pfad/-="">' + ElementeNamen[i] + ' angelegt');
        }}
        // =============================================================================
        ! // =============================================================================
        // --- function zum Abfragen der Werte
        // =============================================================================
        function readElement(){
        if (logging) log('--------> Start ->');
        if (logging) log(' ---> Variable "step" = '+ step + ' für die Anzahle von ' + Elemente.length + ' Elemente');
        if(Elemente.length < 1){
        log('keine Elemente zum abfragen');
        client.destroy();
        return;
        }
        ! if(step < Elemente.length -1){
        step++ ;
        if (logging) log('0.'+ step + ' ---> Neue Abfrage --------------------> Durchlauf : ' + step + ' von ' + Elemente.length );
        // --- hier dann die function mit werten aufrufen
        var req = 'read -f ' + Elemente[step]; // der Befehl wird zusammengesetzt
        var ele = Elemente[step];
        var eleN = ElementeNamen[step];
        client.write(req + '\n'); // hier wird der Befehl gesendet
        if (logging) log('1.'+ step + ' BEFEHL wurde gesendet : ' + req);
        }
        else{
        step = -1;
        if (logging) log('0.'+ step + ' ---> keine weitere Abfrage nötig -----> Fertig');
        setTimeout(readElement, 60000); //Wenn alle Werte abgefragt sind--> Neustart in 1 Minute

            return;
        }
        

        }

        ! // =============================================================================
        // --- Aufruf --- DATEN lesen
        // =============================================================================
        client.on('data', function(data) {
        // if (logging) log('3 .'+ step + ' Daten werden empfangen : ' + data);
        // --- die empfangenen Daten werden gewandelt und aufgeteilt (SUB-Funktion) ---
        var datastr = data.toString();
        // if (logging) log('3a.'+ step + ' RX-Daten (String) : ' + datastr);
        //------------------------------------------------------------------------------
        var databuf = '';
        var prev = 0, next;
        if (logging) log('3b.'+ step + ' Durchlauf : ' + step);
        while ((next = datastr.indexOf('\n\n', prev)) > -1) {
        databuf += datastr.substring(prev, next);
        if (logging) log('3c.'+ step + ' Funktion aufrufen mit : ' + databuf + " als Daten");
        //--- SUB-Funktion aufrufen ---
        parse(databuf);
        databuf = ''; // Datenbuffer leeren
        prev = next + 1;
        }
        databuf += datastr.substring(prev);
        readElement();//Abfragen des nächsten Wertes
        //------------------------------------------------------------------------------
        });
        // =============================================================================
        ! // =============================================================================
        // Verbindungsabbau
        // =============================================================================
        client.on('close', function(fertig) {
        if (logging) {
        if (logging) log('4. -----> Verbindung geschlossen .');
        client.destroy();
        }
        });
        // =============================================================================
        ! // =============================================================================
        // --- SUB-Funktion --- Daten-String aufteilen
        // =============================================================================
        function parse(data) {
        var arr = data.toString().split(/\r?;/); // wie viele Werte werden durch ";" getrennt
        if (logging) log('3d.'+ step + ' Menge an Daten durch ; getrennt : ' + arr.length);
        var fields = data.toString().split(';'); // hier wird auf den = getriggert
        if (logging) log('anzahl an Feldern : ' + fields.length);
        if(fields.length > 0) { // wenn mehrere Felder gefunden wurden
        if (logging) log('WertVor : ' + fields[0]);
        var WertVor =fields[0];
        if (logging) log("WertNach : " + fields[1]);
        fields[0] = fields[0].replace(' ','_');
        if (logging) log("Feld 1 : " + fields[0]);
        if (logging) log("Feld 2 : " + fields[1]);
        setState(pfad + Elemente[step], WertVor); // Werte setzen
        if (logging) log('4.'+ step + ' im Datenpunkt "' +pfad + '" wird "' + WertVor + '" gespeichert');
        }
        }
        // =============================================================================
        ! // =============================================================================
        // --- Function --- Fehler abfangen und ausgeben
        // =============================================================================
        client.on('error', function(err) {
        client.destroy();
        if (logging) log(' Es ist ein Fehler aufgetreten : '+ err);
        });
        // =============================================================================
        ! // =============================================================================
        // Verbindungsaufbau
        // =============================================================================
        client.connect(PORT, HOST, function(){
        readElement();
        if (logging) log('1. Verbindungsaufbau zu : ' + HOST + ':' + PORT);
        ! });
        // =============================================================================
        ! anlegen(); //States anlegen
        ! //setInterval(readElement, 60000);</elemente.length;i++)>`
        3361_ebus_ergebniss.png [/i][/i][/i]

        Master: DN2820FYKH (4GB) Linux NUC 4.4.0-22-generic #40-Ubuntu x86_64

        Slave: Linux RPi2-1 4.1.19-v7+ #858 v4.4.3 # 2.15.1

        SQL-DB : Linux DS 3.10.77 #7321 x86_64 synology412+

        Test : DS916+ VM Debian

        Test : Tinker mit piVCCU

        1 Antwort Letzte Antwort
        0
        • K Offline
          K Offline
          Kodak
          schrieb am zuletzt editiert von
          #24

          dummer Frage wie bokommt man das Skript in VIS angezeigt :?

          1 Antwort Letzte Antwort
          0

          Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

          Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

          Mit deinem Input könnte dieser Beitrag noch besser werden 💗

          Registrieren Anmelden
          Antworten
          • In einem neuen Thema antworten
          Anmelden zum Antworten
          • Älteste zuerst
          • Neuste zuerst
          • Meiste Stimmen


          Support us

          ioBroker
          Community Adapters
          Donate

          410

          Online

          32.8k

          Benutzer

          82.9k

          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