NEWS
JS # mit einer Schleife eine function mehrfach aufrufen und ebusd abfragen
-
habe mich mal durchgearbeitet.
Glaube das ich den Fehler gefunden habe
Die var "step" wird ja schon früh um eins erhöht.
daher if(step < Elemente.length -1){
// ============================================================================= // --- function zum Abfragen der Werte // ============================================================================= function readElement(){ if(Elemente.length < 1){ log('keine Elemente zum abfragen'); client.destroy(); return; } if (logging) log(' ---> Variable "step" '+ step + ' für die Anzahle von ' + Elemente.length + ' Elemente'); if(step < Elemente.length -1){ step++ ; if (logging) log('0.'+ step + ' ---> Neue Abfrage ------------------------> Durchlauf : '+ step); // --- hier dann die function mit werten aufrufen var req = 'read -f ' + Elemente[step]; // der Befehl wird zusammengesetzt var ele = Elemente[step]; var eleN = ElementeNamen[step]; client.write(req + '\n'); // hier wird der Befehl gesendet if (logging) log('1.'+ step + ' BEFEHL wurde gesendet : ' + req); } else{ step = -1; setTimeout(readElement, 60000); //Wenn alle Werte abgefragt sind--> Neustart in 1 Minute return; } }Ich werde noch einige Sachen testen.
Wenn es nun sauber läuft werde ich den gesamten Script noch mal posten
DANKE für die Unterstützung
Gruß
Jürgen
-
habe mich mal durchgearbeitet.
Glaube das ich den Fehler gefunden habe
Die var "step" wird ja schon früh um eins erhöht.
daher if(step < Elemente.length -1){
// ============================================================================= // --- function zum Abfragen der Werte // ============================================================================= function readElement(){ if(Elemente.length < 1){ log('keine Elemente zum abfragen'); client.destroy(); return; } if (logging) log(' ---> Variable "step" '+ step + ' für die Anzahle von ' + Elemente.length + ' Elemente'); if(step < Elemente.length -1){ step++ ; if (logging) log('0.'+ step + ' ---> Neue Abfrage ------------------------> Durchlauf : '+ step); // --- hier dann die function mit werten aufrufen var req = 'read -f ' + Elemente[step]; // der Befehl wird zusammengesetzt var ele = Elemente[step]; var eleN = ElementeNamen[step]; client.write(req + '\n'); // hier wird der Befehl gesendet if (logging) log('1.'+ step + ' BEFEHL wurde gesendet : ' + req); } else{ step = -1; setTimeout(readElement, 60000); //Wenn alle Werte abgefragt sind--> Neustart in 1 Minute return; } }Ich werde noch einige Sachen testen.
Wenn es nun sauber läuft werde ich den gesamten Script noch mal posten
DANKE für die Unterstützung
Gruß
Jürgen `
Jawohl, Schande über mein Haupt…..Die length Funktion gibt nicht denn Index, sondern die Anzahl der Elemente zurück. (Quasi eins mehr)
-
Hallo zusammen,
anbei wie versprochen der Script der nun mehrere Werte vom eBus abfragt
var Elemente =
var ElementeNamen =
müssen angepasst werden.
! ```
`// =============================================================================
// --- Abfragen von Werten vom "ebusd"
// =============================================================================
var logging = false; // "true" oder "false" wenn nicht gewünscht
var HOST = 'RPi2-2'; // Hostname oder IP-Adresse auf dem der ebusd läuft
var PORT = 8888; // Portnummer auf dem der ebusd hört
var step = -1;
var pfad = 'eBus.Temperatur.'; // Pfad innerhalb der Instanz wo die Daten gespeichert werden
// =============================================================================
var net = require('net');
var client = new net.Socket();
// =============================================================================
var Elemente = ['dcfState','FlowTemp','HcHours','HwcHours','OutdoorstempSensor','PrEnergyCountHc1','PrEnergyCountHwc1','PrEnergySumHc1','PrEnergySumHwc1','ReturnTemp','PumpHours','PumpHwcFlowNumber','PumpHwcFlowSum','SDFanSpeed','SDTRT','StorageTemp','WaterPressure'];
var ElementeNamen = ['','','','','',''];
// =============================================================================
! // =============================================================================
// Datenpunkte anlegen
// =============================================================================
function anlegen(){
if (logging) log('--------> Start -> es gibt für ' + Elemente.length + ' Elemente einen Datenpunkt anzulegen');
for(var i=0;i <elemente.length;i++) {/createstate(pfad/+/elemente[i],/0,/{name:/elementenamen[i]});/if/(logging)/log('0.'/i/'/datenpunkt:/pfad/-="">' + ElementeNamen[i] + ' angelegt');
}}
// =============================================================================
! // =============================================================================
// --- function zum Abfragen der Werte
// =============================================================================
function readElement(){
if (logging) log('--------> Start ->');
if (logging) log(' ---> Variable "step" = '+ step + ' für die Anzahle von ' + Elemente.length + ' Elemente');
if(Elemente.length < 1){
log('keine Elemente zum abfragen');
client.destroy();
return;
}
! if(step < Elemente.length -1){
step++ ;
if (logging) log('0.'+ step + ' ---> Neue Abfrage --------------------> Durchlauf : ' + step + ' von ' + Elemente.length );
// --- hier dann die function mit werten aufrufen
var req = 'read -f ' + Elemente[step]; // der Befehl wird zusammengesetzt
var ele = Elemente[step];
var eleN = ElementeNamen[step];
client.write(req + '\n'); // hier wird der Befehl gesendet
if (logging) log('1.'+ step + ' BEFEHL wurde gesendet : ' + req);
}
else{
step = -1;
if (logging) log('0.'+ step + ' ---> keine weitere Abfrage nötig -----> Fertig');
setTimeout(readElement, 60000); //Wenn alle Werte abgefragt sind--> Neustart in 1 Minutereturn; }}
! // =============================================================================
// --- Aufruf --- DATEN lesen
// =============================================================================
client.on('data', function(data) {
// if (logging) log('3 .'+ step + ' Daten werden empfangen : ' + data);
// --- die empfangenen Daten werden gewandelt und aufgeteilt (SUB-Funktion) ---
var datastr = data.toString();
// if (logging) log('3a.'+ step + ' RX-Daten (String) : ' + datastr);
//------------------------------------------------------------------------------
var databuf = '';
var prev = 0, next;
if (logging) log('3b.'+ step + ' Durchlauf : ' + step);
while ((next = datastr.indexOf('\n\n', prev)) > -1) {
databuf += datastr.substring(prev, next);
if (logging) log('3c.'+ step + ' Funktion aufrufen mit : ' + databuf + " als Daten");
//--- SUB-Funktion aufrufen ---
parse(databuf);
databuf = ''; // Datenbuffer leeren
prev = next + 1;
}
databuf += datastr.substring(prev);
readElement();//Abfragen des nächsten Wertes
//------------------------------------------------------------------------------
});
// =============================================================================
! // =============================================================================
// Verbindungsabbau
// =============================================================================
client.on('close', function(fertig) {
if (logging) {
if (logging) log('4. -----> Verbindung geschlossen .');
client.destroy();
}
});
// =============================================================================
! // =============================================================================
// --- SUB-Funktion --- Daten-String aufteilen
// =============================================================================
function parse(data) {
var arr = data.toString().split(/\r?;/); // wie viele Werte werden durch ";" getrennt
if (logging) log('3d.'+ step + ' Menge an Daten durch ; getrennt : ' + arr.length);
var fields = data.toString().split(';'); // hier wird auf den = getriggert
if (logging) log('anzahl an Feldern : ' + fields.length);
if(fields.length > 0) { // 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 + Elemente[step], WertVor); // Werte setzen
if (logging) log('4.'+ step + ' im Datenpunkt "' +pfad + '" wird "' + WertVor + '" gespeichert');
}
}
// =============================================================================
! // =============================================================================
// --- Function --- Fehler abfangen und ausgeben
// =============================================================================
client.on('error', function(err) {
client.destroy();
if (logging) log(' Es ist ein Fehler aufgetreten : '+ err);
});
// =============================================================================
! // =============================================================================
// Verbindungsaufbau
// =============================================================================
client.connect(PORT, HOST, function(){
readElement();
if (logging) log('1. Verbindungsaufbau zu : ' + HOST + ':' + PORT);
! });
// =============================================================================
! anlegen(); //States anlegen
! //setInterval(readElement, 60000);</elemente.length;i++)>`
[/i][/i][/i]