Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Frage] schedule('*/1 * * * *',?????); # eBus_read-f (Einzelwert)

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Frage] schedule('*/1 * * * *',?????); # eBus_read-f (Einzelwert)

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

      //–----------------------------------------------------------------------

      // --- Quelle = http://forum.iobroker.net/viewtopic.php ... 205#p42405

      // --- Autor = Hoich

      // -----------------------------------------------------------------------

      Habe das Script etwas angepasst:

      ! ````
      // =============================================================================
      // Auslesen von Einzelwerten vom eBusd
      // =============================================================================
      var root = 'eBus'; // root of state inside 'javascript.0'
      var host = 'RPi2-2'; // set to your host running ebusd
      var port = 8888; // default ebusd port
      var logging = true; // fales wenn nicht gewünscht
      var net = require('net'); //
      var element = 'StorageTemp';
      // ebusctl read -f StorageTemp
      // 51.19;ok
      // =============================================================================
      var req = 'read -f ' + element;
      var pfad = 'eBus.'+ element; // Pfad innerhalb der Instanz
      // =============================================================================
      // Datenpunkte anlegen
      // =============================================================================
      createState(pfad, 0, {name: 'eBus.' + element ,desc: 'Aktuelle Temperatur des Warmstartspeichers',rolle: 'value.temperature' ,type: 'string',unit: '°C'});
      ! // ---------------------------------------------------------- Start
      if (logging) log('1. Start trying eBus abfrage');
      var client = new net.Socket();
      client.connect(port, host, function() {
      if (logging) log('2. Connected to ebusd on ' + host + ':' + port);
      client.write(req + '\n');
      if (logging) log('3. TX-Befehl: "' + req + '" wird gesendet');
      });
      ! // =============================================================================
      // Funktion Daten abfragen
      // =============================================================================
      function parse(data) {
      var arr = data.toString().split(/\r?;/); // wie viele Werte werden durch ";" getrennt
      if (logging) log("Menge : " + arr.length);
      var fields = data.toString().split(';'); // hier wird auf den = getriggert
      if (logging) log('Felder : ' + fields);
      if(fields.length > 1) { // 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, WertVor); // Werte setzen
      }
      }
      ! // =============================================================================
      // Daten abfragen
      // =============================================================================
      var databuf = '';
      client.on('data', function(data) {
      var prev = 0, next;
      var datastr = data.toString();
      if (logging) log("4. RX-Daten : " + datastr);
      while ((next = datastr.indexOf('\n\n', prev)) > -1) {
      databuf += datastr.substring(prev, next);
      parse(databuf);
      databuf = '';
      prev = next + 1;
      }
      databuf += datastr.substring(prev);
      client.write('quit\n');
      });
      ! // =============================================================================
      // ? Ende
      // =============================================================================
      client.on('close', function() {
      log('Connection to ebusd closed');
      });
      ! schedule('*/1 * * * *',data);

      Nun soll er jede Minute laufen
      
      schedule('*/1 * * * *',????);
      
      Wie muss die Zeile richtig aussehen?
      
      Gruß
      
      Jürgen
      1 Reply Last reply Reply Quote 0
      • paul53
        paul53 last edited by

        Es fehlt die passende Funktion. Wie ich das sehe, muss die Verbindung wieder hergestellt und eine Anforderung gesendet werden.

        ...
        
        function getData() {
          client.connect(port, host, function() {
            if (logging) log('Connected to ebusd on ' + host + ':' + port);   
                client.write(req + '\n');
            if (logging) log('TX-Befehl: "' + req + '" wird gesendet');
          });
        }
        
        schedule('*/1 * * * *', getData);
        

        EDIT: Allerdings geht diese Funktion davon aus, dass die Verbindung jedesmal geschlossen wird (client.on('close',…). Ist das nicht der Fall, sollten die Variablen (oben im Skript) ergänzt werden

        var conn = false;
        

        Nach Herstellen der Verbindung dann

            if (logging) log('2\. Connected to ebusd on ' + host + ':' + port);
            conn = true;
            client.write(req + '\n');
            ...    
        
        

        Nach Schließen der Verbindung

        client.on('close', function() {
           conn = false;
           log('Connection to ebusd closed');
        });
        

        und Abfrage innerhalb der Funktion getData()

        function getData() {
          if(conn) {
             client.write(req + '\n');
             if (logging) log('TX-Befehl: "' + req + '" wird gesendet');
          } else {
             client.connect(port, host, function() {
                if (logging) log('Connected to ebusd on ' + host + ':' + port);
                conn = true; 
                client.write(req + '\n');
                if (logging) log('TX-Befehl: "' + req + '" wird gesendet');   
             });
          }   
        }
        
        
        1 Reply Last reply Reply Quote 0
        • D
          der_Auge last edited by

          Danke für die Tipps

          nun wird es sauber abgearbeitet.

          Nun kommt die nächste Baustelle dass ich gleich mehrere Werte abfrage (Array)

          Gruß

          Jürgen

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

          Support us

          ioBroker
          Community Adapters
          Donate

          665
          Online

          31.7k
          Users

          79.8k
          Topics

          1.3m
          Posts

          2
          3
          321
          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