Ich habe ja noch eine "find"-Routine versprochen. Hier ist mein derzeitiges Zwischenergebnis, ich weiss noch nicht ob ich noch mehr dran machen will.
Was das Skript macht ist im Prinzip ein "find -f" an ebusd zu senden, was alle Objekte zurückliefert inklusive Format, Einheit, Beschreibung, etc. Danach lese ich dann alle Felder vom ebusd um jeden iobroker-Zustand mit den Werten zu füllen die über den eBus abgefragt werden können. Vieles davon ist bei mir leer oder sonstwie etwas sinnlos, aber es sind auch einige Perlen an Information von meiner Vaillant-Therme dabei 
Was jetzt eigentlich noch fehlt ist ein Weg wie man bestimmte Werte pollt oder bei Veränderung bekommt. Schöner wäre es das gleich in einen richtigen Adapter zu packen, aber dazu bin ich im Moment noch zu unerfahren und mein persönlicher Fokus geht erstmal zu einer Visualisierung meines Heims.
! ```
`// ebusd find script
var root = 'eBus'; // root of state inside 'javascript.0'
var host = 'pi1'; // set to your host running ebusd
var port = 8888; // default ebusd port
! var net = require('net');
var fieldsToRead = [];
! log('trying');
var req = 'find -f';
! createState('eBus');
! var run=1;
var lastFieldRequested='';
var closing=0;
! function parse(data) {
//log("run: " + run);
if(run == 1)
{
var arr = data.toString().split(/\r?\n/);
for(var i = 0; i <arr.length; i++)/{/var/line="arr[i];" idx="0;" tmp="line.split(',');" if(tmp.length="">7) {
var numfields = 0;
var TYPE = tmp[0];
var CIRCUIT = tmp[1];
var NAME = tmp[2];
var COMMENT = tmp[3];
var QQ = tmp[4];
var ZZ = tmp[5];
var PDSB = tmp[6];
var ID = tmp[7];
log("* TYPE:" + TYPE + " CIRCUIT:" + CIRCUIT + " NAME:" + NAME +
" COMMENT:" + COMMENT + " QQ:" + QQ + " ZZ:" + ZZ +
" PDSB:" + PDSB + " ID:" + ID);
while(tmp.length > (7 + ((numfields+1)*6)))
{
idx = 8 + (numfields)6;
var FIELD = tmp[idx];
var PART = tmp[idx+1];
var DATATYPE = tmp[idx+2];
var DIVIDER = tmp[idx+3];
var UNIT = tmp[idx+4];
var COMMENT_F = tmp[idx+5];
log(" * FIELD:" + FIELD + " PART:" + PART + " DATATYPE:" + DATATYPE +
" DIVIDER:" + DIVIDER + " UNIT:" + UNIT + " COMMENT:" + COMMENT_F);
if(FIELD === '')
createState('eBus' + '.' + CIRCUIT + '.' + NAME, undefined, {name: COMMENT, unit: UNIT, desc: COMMENT});
else
createState('eBus' + '.' + CIRCUIT + '.' + NAME + '.' + FIELD, undefined, {name: COMMENT_F, unit: UNIT, desc: COMMENT});
fieldsToRead.push(CIRCUIT + ',' + NAME + ',' + FIELD);
numfields++;
}
// } else {
//log("odd line: " + line, 'warn');
}
}
if(fieldsToRead.length > 0) {
var tmp2 = fieldsToRead.shift();
var tmp3 = tmp2.split(',');
var CIRCUIT = tmp3[0];
var NAME = tmp3[1];
var FIELD = tmp3[2];
if(FIELD === '')
req = "read -c " + CIRCUIT + ' ' + NAME;
else
req = "read -c " + CIRCUIT + ' ' + NAME+ ' ' + FIELD;
log('Sending: ' + req);
lastFieldRequested = tmp2;
client.write(req+'\n');
}
} else {
var arr = data.toString().split(/\r?\n/);
if(arr.length == 2) {
//for(var i = 0; i <arr.length; i++)/{/var/line="arr[1];" log("new/for/"/+/lastfieldrequested/+":/line);/tmp3="lastFieldRequested.split(',');" circuit="tmp3[0];" name="tmp3[1];" field="tmp3[2];" if(field="==" '')/setstate('ebus'/'.'/name,/else/field,/;/}/if(fieldstoread.length="">0) {
var tmp2 = fieldsToRead.shift();
var tmp3 = tmp2.split(',');
var CIRCUIT = tmp3[0];
var NAME = tmp3[1];
var FIELD = tmp3[2];
if(FIELD === '')
req = "read -c " + CIRCUIT + ' ' + NAME;
else
req = "read -c " + CIRCUIT + ' ' + NAME+ ' ' + FIELD;
log('Sending: ' + req);
lastFieldRequested = tmp2;
client.write(req+'\n');
}
}
run++;
if(fieldsToRead.length == 0 && lastFieldRequested === '') {
closing = 1;
log('Sending: quit');
client.write('quit\n');
}
}
! var client = new net.Socket();
client.connect(port, host, function() {
log('Connected to ebusd on ' + host + ':' + port);
client.write(req + '\n');
});
! var databuf = '';
client.on('data', function(data) {
var prev = 0, next;
var datastr = data.toString();
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');
});
! client.on('close', function() {
log('Connection to ebusd closed');
});
! client.on('error', function() {
log('Error');
});
! client.on('end', function() {
log('End');
});</arr.length;></arr.length;>` [/i]