NEWS
Array nach Preisen sortiert mit Startzeit aus Tibberconnect
-
@babl
Gemäß Deinem Wunsch, ein nach Preisen sortiertes Array zu erhalten, in dessen Objekten auch die Startzeit enthalten ist, schlage ich folgendes Skript vor. Es soll die Preise und Startstunden für heute 17:00 Uhr bis morgen 16:00 Uhr liefern (hoffe ich). Format:[{start: 4, preis: 0.24}, {start: 3, preis: 0.25}, ...]
const tibber = 'tibberconnect.0.Homes.ffXXX.'; // Anpassen! const idSort = '0_userdata.0.Tibber.Preise.sortiert'; // DP-Typ: "array" function sortPreis(a, b) { return a.preis - b.preis; } schedule('57 16 * * *', function() { const preise = []; for(let i = 17; i < 24; i++) { let obj = {}; let idStart = tibber + 'PricesToday.' + i + '.startsAt'; let idPreis = tibber + 'PricesToday.' + i + '.total'; obj.start = new Date(getState(idStart).val).getHours(); obj.preis = getState(idPreis).val; preise.push(obj); } for(let i = 0; i < 17; i++) { let obj = {}; let idStart = tibber + 'PricesTomorrow.' + i + '.startsAt'; let idPreis = tibber + 'PricesTomorrow.' + i + '.total'; obj.start = new Date(getState(idStart).val).getHours(); obj.preis = getState(idPreis).val; preise.push(obj); } preise.sort(sortPreis); setState(idSort, preise, true); });
Das Skript ist nicht getestet, da keine Datenpunkte vorhanden.
Das Array im Datenpunkt lässt sich auch mit Blockly weiter verarbeiten. -
@paul53 bin auf dein script gestossen
in Zeile 26
preise.sort(sortPreis);
in der funktion sind aber 2 parameter
function sortPreis(a, b) { return a.preis - b.preis; }
-
@arteck sagte: in Zeile 26
Das ist eine Funktionsreferenz für die Javascriptfunktion array.sort().
-
@paul53 das kannst du auch so schreiben
preise.sort(function(a, b) { return a.preis - b.preis; });
übrigends funktionert gut
-
@arteck sagte: das kannst du auch so schreiben
Richtig.