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. JS # mit einer Schleife eine function mehrfach aufrufen und ebusd abfragen

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

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

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
24 Beiträge 3 Kommentatoren 3.7k 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
          Antworten
          • In einem neuen Thema antworten
          Anmelden zum Antworten
          • Älteste zuerst
          • Neuste zuerst
          • Meiste Stimmen


          Support us

          ioBroker
          Community Adapters
          Donate

          859

          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