NEWS
Wert aus callback an Programm übergeben
-
Hallo,
ich möchte gerne historische Daten auslesen und weiter verarbeiten. Das Auslesen klappt auch soweit aber die Funktion sendTo erwartet eine Callback Funktion mit festen Parametern. Wie bekomme ich die Daten von der Callback Funktion an das Programm übergeben? Aktuell verwende ich den Umweg über einen zusätzlichen Datenpunkt aber das führt zu diversen Problemen.// -------------------------------------------------------------------- // Give 7 latest values of variables sendTo('history.0', 'getHistory', {id: 'javascript.0.Solar.DailyTotal', options: {end: new Date().getTime(), count: 20, aggregate: 'onchange'}}, cbSendTo1); function cbSendTo1(result) { let tmpDay = ''; let tmpSTR = ''; let x = 0; for (var i = result.result.length-1; i >= 0; i--) { if (tmpDay != new Date(result.result[i].ts).getDate().toString()) { tmpDay = new Date(result.result[i].ts).getDate().toString(); tmpSTR += "data.setCell(" + x.toString() + ", 0, '" + new Date(result.result[i].ts).getDate() + "." + new Date(result.result[i].ts).getMonth() + "." + "');\n"; if(result.result[i].val == null) {tmpSTR += "data.setCell(" + x.toString() + ", 1, '0');\n";} else {tmpSTR += "data.setCell(" + x.toString() + ", 1, '" + result.result[i].val + "');\n";} x++; if (x > 6) break; console.log('Total: ' + x.toString() + ' -> ' + new Date(result.result[i].ts).getDate() + "." + new Date(result.result[i].ts).getMonth() + ' -> ' + result.result[i].val); } } setState('Solar.html1', tmpSTR); } tmpData += getState('Solar.html1').val; console.log(getState('Solar.html1').val); -
Hallo,
ich möchte gerne historische Daten auslesen und weiter verarbeiten. Das Auslesen klappt auch soweit aber die Funktion sendTo erwartet eine Callback Funktion mit festen Parametern. Wie bekomme ich die Daten von der Callback Funktion an das Programm übergeben? Aktuell verwende ich den Umweg über einen zusätzlichen Datenpunkt aber das führt zu diversen Problemen.// -------------------------------------------------------------------- // Give 7 latest values of variables sendTo('history.0', 'getHistory', {id: 'javascript.0.Solar.DailyTotal', options: {end: new Date().getTime(), count: 20, aggregate: 'onchange'}}, cbSendTo1); function cbSendTo1(result) { let tmpDay = ''; let tmpSTR = ''; let x = 0; for (var i = result.result.length-1; i >= 0; i--) { if (tmpDay != new Date(result.result[i].ts).getDate().toString()) { tmpDay = new Date(result.result[i].ts).getDate().toString(); tmpSTR += "data.setCell(" + x.toString() + ", 0, '" + new Date(result.result[i].ts).getDate() + "." + new Date(result.result[i].ts).getMonth() + "." + "');\n"; if(result.result[i].val == null) {tmpSTR += "data.setCell(" + x.toString() + ", 1, '0');\n";} else {tmpSTR += "data.setCell(" + x.toString() + ", 1, '" + result.result[i].val + "');\n";} x++; if (x > 6) break; console.log('Total: ' + x.toString() + ' -> ' + new Date(result.result[i].ts).getDate() + "." + new Date(result.result[i].ts).getMonth() + ' -> ' + result.result[i].val); } } setState('Solar.html1', tmpSTR); } tmpData += getState('Solar.html1').val; console.log(getState('Solar.html1').val);@stephan1827 sagte:
Wie bekomme ich die Daten von der Callback Funktion an das Programm übergeben?
Weshalb willst Du die Daten an das Hauptprogramm übergeben und nicht innerhalb der Callback-Funktion weiter verarbeiten ?
Eine Möglichkeit, den Wert eines Datenpunktes zu verarbeiten, ist ein Trigger.var tmpData = ''; on({id: 'Solar.html1'}, function(dp) { tmpData += dp.state.val; log(dp.state.val); }); -
@stephan1827 was genau meinst du mit übergeben?
Du könntest daraus auch ein Promise machen und dann in einer asynchronen Funktion auf den Wert warten, dann musst du das nicht in einen State schreiben.
Oder du verarbeitest es direkt in deinem Callback.
-
Ich muss diese Funktion mehrfach aufrufen und die Daten dann weiter verarbeiten. Ich habe es jetzt so gelöst.
Funktionsaufruf
const history = await GetData('javascript.0.Solar.DailyTotal');Funktion
async function GetData(strID) { return new Promise(function (resolve, reject) { sendTo('history.0', 'getHistory', { id: strID, options: { end: new Date().getTime(), count: 20, aggregate: 'onchange' } }, (result) => { if (result.error) { reject('Error: ' + result.error); } else { let retData = ''; let tmpDay = ''; let x = 0; for (var i = result.result.length - 1; i >= 0; i--) { if (tmpDay != new Date(result.result[i].ts).getDate().toString()) { tmpDay = new Date(result.result[i].ts).getDate().toString(); retData += "data.setCell(" + x.toString() + ", 0, '" + new Date(result.result[i].ts).getDate() + "." + new Date(result.result[i].ts).getMonth() + "." + "');\n"; if (result.result[i].val == null) { retData += "data.setCell(" + x.toString() + ", 1, '0');\n"; } else { retData += "data.setCell(" + x.toString() + ", 1, '" + result.result[i].val + "');\n"; } x++; if (x > 6) break; console.log('Total: ' + x.toString() + ' -> ' + new Date(result.result[i].ts).getDate() + "." + new Date(result.result[i].ts).getMonth() + ' -> ' + result.result[i].val); } //console.log('1---->' + retData + '<----'); }; resolve(retData); } }); }); }
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