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