Comments (9)
Hallo @Skol6, danke fürs Feedback!
Ich versuch mal die Fragen zu beantworten ;-)
- Peaktime: über die Feiertag gibt geht es dem Stromnetz sehr gut, daher gibt es keine Peaktimes. Die Peaktimes wird es vermutlich wieder nach dem 06.01. geben. In diesen Peaktimes wäre es global gesehen am besten, wenn der Stromkonsum eingeschränkt wird.
Infos dazu gibt es hier https://www.apg.at/powermonitor/
Hab jetzt leider auch kein Bsp. parat wie die States aussehen, wenn es Daten gibt. Aber auch wieder auf Stundenbasis - du hast recht mit 00_to_01 wird es ein wenig komplexer den State zu lesen. Ich mach es zB so
function updateCurrentPrice(): void {
let sBeginHour: string = String(new Date().getHours());
let sEndHour: string = String(new Date().getHours() + 1);
const pad = '00';
sBeginHour = pad.substring(0, pad.length - sBeginHour.length) + sBeginHour;
sEndHour = pad.substring(0, pad.length - sEndHour.length) + sEndHour;
const range = sBeginHour + '_to_' + sEndHour;
let price: number = getState(path_todaysMarketprices + range).val;
setState(state_currentMarketPrice, price, true);
}
sBeginnHour könnte man auch in eine Schleife stecken
for (let i=0; .....) {
sBeginHour = String(i);
sEndHour: = String(i+1);
.....
}
- negative Werte: Treshold auf 0 stellen und dann bekommst du bei apg-info.0.marketprice.belowThreshold diese Werte wäre wohl die einfachste Lsg?
- Wechsel heute/morgen: der Adapter läuft über den Cronjob gesteuert in der Instanz
Sinnvollerweise läuft der Cronjob kurz nach Mitternacht (bei mir 5 Sekunden nach Mitternacht). Der Job rennt somit um 00:00:05 los, hat per Zufallsgenerator eine Wartezeit von 0 bis 25 Sekunden, somit ist er spätestens um 00:00:30 fertig und heute ist heute und nicht mehr gestern. Daten für morgen wird es noch nicht geben, da kannst du um 13.00 Uhr mal sehen ob die Daten schon da sind und um 15.00 Uhr ein zweites Mal. So ist der Cronjob bei Erstinstallation konfiguriert"5 0 0,13,15 * * *"
- Updates - nicht ganz sicher wie du es meinst, aber so informiere ich mich zB über die Preise
on({ id: 'apg-info.0.marketprice.today_sorted.short', change: "ne" }, function (obj) {
setTimeout(checkCheapestToday, 2000); //2 Sekunden verzögert damit alles eingetragen ist
});
function checkCheapestToday() {
if (existsState(state_todayCheapest)) {
let state = getState(state_todayCheapest);
if (!state.val) return;
let value: any = JSON.parse(state.val);
let price: number = Number(value[1]);
let time = String(value[0]);
let theDay = 'Today';
let average = getState(state_averageToday).val;
visLog(`${theDay}s cheapest price: ${price} cent`);
log(`${theDay}s cheapest price: ${price} [${time}] on average ${average}`);
sendTelegram(`${theDay}s cheapest price: ${price} [${time}] on average ${average}`);
}
}
- Anwendungsbeispiele; ich habe eine PV und einen Akku. Ich rechne mir aus wieviel die PV liefern wird, wie viel ich heute Strom brauchen werde und errechne mir wieviel Strom fehlt und wie lange ich die Batterie laden sollte damit ich über den Tag komme. Dann suche ich mir die günstigsten Stunden für die Dauer des notwendigen Ladens und checke noch ob der Preis kleiner als 75% vom Average ist (sonst zahlt sich das Laden in die Batterie nicht aus. Ist halt schon ein komplexer Anwendungsfall.
Über den Treshold nutze ich die günstigen Stunden um E-Auto und E-Motorrad aufzuladen
from iobroker.apg-info.
So viele Antworten :)
-
Peaktime: hab ich verstanden. Ist quasi kein feature zum Preis sondern zur allgemeinen Netzbelastung. Vermutlich hat das indirekt aber eine Auswirkung auf den Preis
-
"00_to_01": Würde sich das nicht einfacher auf 0,1,2,.. ändern lassen bei dir im Adapter? dann muss keiner da irgendwelche Texte zusammenbasteln. Info geht im Readme und dein Adapter ist noch relativ jung.
-
negative Werte: Da geb ich dir grundsätzlich Recht.
Das Limit hat für mich aber noch einen anderen Sinn: z.b. unter 9Cent ist es mir relativ egal ob der Strom noch billiger ist oder nicht. UND: wenn ich Geld dafür bekomme wäre das eine andere Funktion. Alternativ noch ein Limit einführen? -
Wechsel heute/morgen: passt verstanden.
D.h. wenn mein Skript um 00:03 läuft, dann muss ich die Werte von morgen nehmen. -
Update: Wie bekomme ich im Iobroker die Info das es von deinem Adapter eine neue Version gibt. Bei mir lief noch die erste und hab gestern durch Zufall gesehen das es bereits eine neue Version gibt.
-Beispiel: finde ich super.
Speicher hab ich leider noch keinen. Ich versuche gerade meine Wärmepumpe in den günstigen Stunden höherlaufen zu lassen und in den teuren zu reduzieren. Mal sehen was das bringt.
from iobroker.apg-info.
- "00_to_01": werde mir was überlegen. Mir gefällt (habs ja auch so gemacht) die Variante bei der klar ist, was der Wert bedeutet. Vielleicht biete ich beide Optionen an
Update: habe mir die Auswirkungen angesehen und da wäre einiges zu tun. Da macht es aus meiner SIcht mehr Sinn einfach folgende Funktion im JavaScript bei iobroker zu verwenden
/**
* @param {number} startingHour
* @returns {string}
*/
function getRange(startingHour) {
const pad = '00';
let sBeginHour = String(startingHour);
let sEndHour = String(startingHour + 1);
sBeginHour = pad.substring(0, pad.length - sBeginHour.length) + sBeginHour;
sEndHour = pad.substring(0, pad.length - sEndHour.length) + sEndHour;
return (`${sBeginHour}_to_${sEndHour}`);
}
und dann zB einfach in der for-Schleide das i
mit getRange(i)
zu ersetzen
- negative Werde: in dem Fall würde doch folgendes reichen
schedule('33 0 * * * *', function () {
let sBeginHour: string = String(new Date().getHours());
let sEndHour: string = String(new Date().getHours() + 1);
const pad = '00';
sBeginHour = pad.substring(0, pad.length - sBeginHour.length) + sBeginHour;
sEndHour = pad.substring(0, pad.length - sEndHour.length) + sEndHour;
const range = sBeginHour + '_to_' + sEndHour;
let price: number = getState(path_todaysMarketprices + range).val;
if (price < 0) {
YOUR CODE
}
})
oder smarter mit der Funktion getRange()
schedule('33 0 * * * *', function () {
let price: number = getState(path_todaysMarketprices + getRange(new Date().getHours())).val;
if (price < 0) {
YOUR CODE
}
})
- heute/morgen: Cron läuft bis 00.00.30 durch, dein script läuft um 00.03.00 wenn ich es richtig verstehe.
Da ist heute schon heute
Aber du kannst dir im Log mal ansehen wann der Adapter gegen 00.00 Uhr läuft bzw fertig ist - Update: wenn du am Beta-Repo bist bekommst die Updates schneller angezeigt
wenn dich v.a. der spezielle Adapter interessiert kannst im Github Releases watchen
from iobroker.apg-info.
Topp. Läuft alles.
Das Problem mit den Preisen konnte ich über die sortierte Liste umgehen, damit gehts einfach wenn man die ID hat
`var CurrentHour, ListSortedShort, i, CurrentPrice, OffPeak;
schedule("1 * * * *", async () => {
CurrentHour = (new Date().getHours());
ListSortedShort = (function () { try { return JSON.parse((CurrentHour > 0 ? getState('apg-info.0.marketprice.today_sorted.short').val : getState('apg-info.0.marketprice.tomorrow_sorted.short').val)); } catch (e) { return {}; }})();
console.log(('APG: Liste sortiert: ' + String(ListSortedShort)));
// Prüfe die sortierte Liste
for (i = 1; i <= 24; i++) {
// Suche den Index der aktuellen Stunde
if (CurrentHour == ListSortedShort[(i - 1)]) {
break;
}
}
CurrentPrice = getAttr(getState(('apg-info.0.marketprice.today_sorted.' + String(i - 1))).val, '1');
console.log(('APG:Current Price: ' + String(CurrentPrice)));
if (CurrentPrice < 1) {
// Strompreis <1 Cent = Saubillig - alles Einschalten
console.log('APG: Current Price: NEGATIV Verbraucher Einschalten!!! ');
} else if (i <= 8) {
// Strompreis Offpeak - 8h
OffPeak = true;
console.log(('APG: OffPeak - Uhrzeit: ' + String(CurrentHour)));
} else if (i <= 16) {
// Strompreis Shoulder - 8h);
} else {
// 8 teuerste Stunden - Peak
console.log(('APG: Peak - Uhrzeit: ' + String(CurrentHour)));
}
});`
Ich hätte noch eine Idee für ein nettes Feature.
Dein Preis ist ja direkt der Marktpreis. Super wäre es wenn man in Iobroker seine Aufschläge vom Stromanbieter eingeben könnte und dann hätte man seinen wirklichen Strompreis.
from iobroker.apg-info.
Feature klingt interessant
Muss ich mir überlegen wie ich da ausreichend Flexibilität reinbringen mit Fee, Steuern, Netzabgabe, nochmals Steuern, Strompreisbremse etc
Aber eine Überlegung wert!
from iobroker.apg-info.
Glaub beim awattar Plugin war so was drinnen - Netzgebühren würde ich mir fast schenken und nur auf den Energiepreis schauen
from iobroker.apg-info.
Fee calculation can be tested in 0.1.5-alpha.0
Console:
iob upgrade [email protected]
from iobroker.apg-info.
Oder gleich die jeweiligen dynamischen Stromanbieter dazufügen :)
Für Smart Energy gibts noch keinen Adapter - deren Api liefert aber die Preise https://apis.smartenergy.at/market/v1/price
Die Alpha probiere ich am Abend aus
from iobroker.apg-info.
from iobroker.apg-info.
Related Issues (19)
- Require node 18 if no node 16 tests HOT 2
- Error in ExecuteRequestDayAhead(): Error: unable to verify the first certificate) HOT 1
- "no marketprice found" when price is 0.00
- AxiosError: Request failed with status code 500
- debug mode: Cannot read properties of null (reading 'data')
- Preis aufsteigend HOT 1
- Update stable version in repo from 0.1.5 to 0.1.6 HOT 1
- Support additional market (Suisse) HOT 16
- Object containing the Date HOT 2
- Please consider fixing issues detected by repository checker HOT 1
- Update stable version in repo from 0.1.7 to 0.1.8 HOT 1
- Please consider fixing issues detected by repository checker HOT 3
- Please consider fixing issues detected by repository checker HOT 3
- Please consider fixing issues detected by repository checker HOT 3
- Please consider fixing issues detected by repository checker HOT 1
- Please consider fixing issues detected by repository checker HOT 2
- Please consider fixing issues detected by repository checker
- Compatibility check and testing for node.js 22 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from iobroker.apg-info.