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?