NEWS

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


  • //–----------------------------------------------------------------------

    // --- 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

  • 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');   
         });
      }   
    }
    
    

  • 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

Suggested Topics

  • 3
  • 3
  • 1
  • 3
  • 2
  • 3
  • 10
  • 8

1.0k
Online

36.8k
Users

42.6k
Topics

589.9k
Posts