NEWS
Hilfe bei Script zum auslesen von ebus Daten
-
Hallo.
Ich Probiere ach gerade mit Skripten aus dem Forum zum auslesen der ebus Daten rum./ =============================================================================
// 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 = false; // "true" oder "false" wenn nicht gewünscht
var net = require('net'); //
var conn = false;
// =============================================================================
var element = 'FlowTemp';
// ebusctl read -f FlowTemp
// 51.19;ok
var req = 'read -f ' + element;
var pfad = 'eBus.Temperatur.'+ element; // Pfad innerhalb der Instanz// ============================================================================= // Datenpunkte anlegen // ============================================================================= createState(pfad, 0, {name: "Vorlauftemperatur" ,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); conn = true; 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() { conn = false; log('Connection to ebusd closed'); }); // ============================================================================= // Funktion aufrufen // ============================================================================= 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);
Leider bisher ohne erfolg. Der entsprechende Beitrag ist auch schon ein wenig in die Jahre gekommen, Pfads dort keiner mehr antwortet.
Die Daten als solche greife ich per MQTT ab. Das hier veröffentlichte Skript zur Einzelabfrage erstellt die Verzeichnisstruktur, holt den Wert ab aber bekommt ihn nicht gespeichert.
18:10:05.727 info javascript.0 (4914) Start javascript script.js.Heizung.eBus.Einzelwert_test
18:10:05.764 info javascript.0 (4914) script.js.Heizung.eBus.Einzelwert_test: 1. Start trying eBus abfrage
18:10:05.788 info javascript.0 (4914) script.js.Heizung.eBus.Einzelwert_test: registered 0 subscriptions and 1 schedule
18:10:05.793 info javascript.0 (4914) script.js.Heizung.eBus.Einzelwert_test: 2. Connected to ebusd on iobroker3:8888
18:10:05.795 info javascript.0 (4914) script.js.Heizung.eBus.Einzelwert_test: 3. TX-Befehl: "read -f Hc1FlowTemp" wird gesendet
18:10:06.584 info javascript.0 (4914) script.js.Heizung.eBus.Einzelwert_test: 4. RX-Daten : 23
18:10:06.586 info javascript.0 (4914) script.js.Heizung.eBus.Einzelwert_test: Menge : 1
18:10:06.587 info javascript.0 (4914) script.js.Heizung.eBus.Einzelwert_test: Felder : 23
18:10:06.619 info javascript.0 (4914) script.js.Heizung.eBus.Einzelwert_test: 4. RX-Daten : connection closed
18:10:06.620 info javascript.0 (4914) script.js.Heizung.eBus.Einzelwert_test: Menge : 1
18:10:06.622 info javascript.0 (4914) script.js.Heizung.eBus.Einzelwert_test: Felder : connection closed
18:10:06.637 info javascript.0 (4914) script.js.Heizung.eBus.Einzelwert_test: Connection to ebusd closed
18:10:08.680 info javascript.0 (4914) Stop script script.js.Heizung.eBus.Einzelwert_testUnter Objekten steht dann immer 0 als Vorlauftemperatur.
Weiß jemand wo der Fehler liegt?