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]
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