GithubHelp home page GithubHelp logo

Fragen zum Adapter about iobroker.apg-info HOT 9 CLOSED

Skol6 avatar Skol6 commented on September 22, 2024
Fragen zum Adapter

from iobroker.apg-info.

Comments (9)

HGlab01 avatar HGlab01 commented on September 22, 2024

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
    image
    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.

Skol6 avatar Skol6 commented on September 22, 2024

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.

HGlab01 avatar HGlab01 commented on September 22, 2024
  • "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
    image
    wenn dich v.a. der spezielle Adapter interessiert kannst im Github Releases watchen
    image

from iobroker.apg-info.

Skol6 avatar Skol6 commented on September 22, 2024

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.

HGlab01 avatar HGlab01 commented on September 22, 2024

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.

Skol6 avatar Skol6 commented on September 22, 2024

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.

HGlab01 avatar HGlab01 commented on September 22, 2024

Fee calculation can be tested in 0.1.5-alpha.0

Console:
iob upgrade [email protected]

from iobroker.apg-info.

Skol6 avatar Skol6 commented on September 22, 2024

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.

Skol6 avatar Skol6 commented on September 22, 2024

from iobroker.apg-info.

Related Issues (19)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.