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

1.0k
Online

36.8k
Users

42.6k
Topics

589.9k
Posts