HTTPMOD: Aktueller Strompreis EEX Strombörse Leipzig abfragen

Begonnen von ch.eick, 30 Juli 2025, 15:26:34

Vorheriges Thema - Nächstes Thema

ch.eick

Hallo zusammen,
das Thema kommt bereits in anderen Threads vor, ist jedoch nie weiter voran gegangen.
Ich habe mir erlaubt es nun hier nochmals zu öffnen.

Die nächste Stufe in diesem generischen Device wäre dann die Preisberchnung für die jeweiligen Wiederverkäufer, also aWATTar und Tibber.
Somit könnte man in einem Device generisch auf epexspot für die PV-Anlagen Betreiber reagieren und zusätzlich die Preise für die Wiederverkäufer abbilden.
Äquivalent zu meinen beiden Beispielen von EVU_aWATTar_connect und EVU_Tibber_connect würde man dann noch die max/min Preise und Trigger Fenster mit abbilden können.

Andere Threads:
Tibber & Tibber Pulse
aWATTar in Deutschland verfügbar


Um bei der Strompreis Frage direkt die Börsenpreise zu bekommen, ohne sich an Tibber oder aWATTar zu hängen möchte ich mal diesen Link ins Rennen werfen.
epexspot Part of EEX Group
Das sieht für mich nach der Quelle der Börsenpreise aus.
Mit etwas HTTPMOD und regex bekommt man dort die Basis Preise für den aktuellen und den nächsten Tag.

Aufgerufen mit dem aktuellen Datum und nochmals mit dem Datum des Folgetages

delivery_date=2025-07-30
https://www.epexspot.com/en/market-results?market_area=DE-LU&auction=MRC&trading_date=2025-07-29&delivery_date=2025-07-30&underlying_year=&modality=Auction&sub_modality=DayAhead&technology=&data_mode=table&period=&production_period=


^.*<td>(\d+\.\d\d)<\/td>\n.*<\/tr>Ein Ausschnitt der Seite
<div class="custom-tables 60min">
    <div class="fixed-column js-table-times">
        <span class="fixed-head-column">Hours</span>
        <ul>
                                           
                                                            <li class="child  no-children"><a href="#">00 - 01</a></li>
                                                                               
                                                            <li class="child impair no-children"><a href="#">01 - 02</a></li>
                                                                               
                                                            <li class="child  no-children"><a href="#">02 - 03</a></li>
                                                                               
                                                            <li class="child impair no-children"><a href="#">03 - 04</a></li>
                                                                               
                                                            <li class="child  no-children"><a href="#">04 - 05</a></li>
                                                                               
                                                            <li class="child impair no-children"><a href="#">05 - 06</a></li>
                                                                               
                                                            <li class="child  no-children"><a href="#">06 - 07</a></li>
                                                                               
                                                            <li class="child impair no-children"><a href="#">07 - 08</a></li>
                                                                               
                                                            <li class="child  no-children"><a href="#">08 - 09</a></li>
                                                                               
                                                            <li class="child impair no-children"><a href="#">09 - 10</a></li>
                                                                               
                                                            <li class="child  no-children"><a href="#">10 - 11</a></li>
                                                                               
                                                            <li class="child impair no-children"><a href="#">11 - 12</a></li>
                                                                               
                                                            <li class="child  no-children"><a href="#">12 - 13</a></li>
                                                                               
                                                            <li class="child impair no-children"><a href="#">13 - 14</a></li>
                                                                               
                                                            <li class="child  no-children"><a href="#">14 - 15</a></li>
                                                                               
                                                            <li class="child impair no-children"><a href="#">15 - 16</a></li>
                                                                               
                                                            <li class="child  no-children"><a href="#">16 - 17</a></li>
                                                                               
                                                            <li class="child impair no-children"><a href="#">17 - 18</a></li>
                                                                               
                                                            <li class="child  no-children"><a href="#">18 - 19</a></li>
                                                                               
                                                            <li class="child impair no-children"><a href="#">19 - 20</a></li>
                                                                               
                                                            <li class="child  no-children"><a href="#">20 - 21</a></li>
                                                                               
                                                            <li class="child impair no-children"><a href="#">21 - 22</a></li>
                                                                               
                                                            <li class="child  no-children"><a href="#">22 - 23</a></li>
                                                                               
                                                            <li class="child impair no-children"><a href="#">23 - 24</a></li>
                                                        </ul>
    </div>
    <div class="js-table-values">
                    <table data-head="31.07.25" class="table-01 table-length-1">
                <thead>
               
                <tr class="white">
                    <th style="height:30px;" colspan="8"></th>
                </tr>

                                                                            <tr>
                                                            <th><div class="msk">Index</span></div></th>
                                                            <th><div class="msk">Price <br /><span>(€/MWh)</span></div></th>
                                                    </tr>
                                                                <tr class="flex-row white">
                            <th>Baseload</th>
                            <th>
                                <div class="flex day-1">
                                    <span>85.52</span>
                                </div>
                            </th>
                        </tr>
                                            <tr class="flex-row ">
                            <th>Peakload</th>
                            <th>
                                <div class="flex day-2">
                                    <span>74.36</span>
                                </div>
                            </th>
                        </tr>
                   
                    <tr class="white">
                        <th style="height:30px;" colspan="8"></th>
                    </tr>
                               
                <tr>
                                            <th>Buy Volume<br /><span>(MWh)</span></th>
                                            <th>Sell Volume<br /><span>(MWh)</span></th>
                                            <th>Volume<br /><span>(MWh)</span></th>
                                            <th>Price<br /><span>(€/MWh)</span></th>
                                    </tr>
                </thead>
                <tbody>
                                    <tr class="child ">
                                                                                    <td>23,099.6</td>
                                                            <td>18,950.4</td>
                                                            <td>23,099.6</td>
                                                            <td>88.93</td>
                                                                        </tr>
                                    <tr class="child impair">
                                                                                    <td>24,126.0</td>
                                                            <td>19,595.7</td>
                                                            <td>24,126.0</td>
                                                            <td>82.11</td>
                                                                        </tr>
                                    <tr class="child ">
                                                                                    <td>23,931.6</td>
                                                            <td>20,025.3</td>
                                                            <td>23,931.6</td>
                                                            <td>79.00</td>
                                                                        </tr>
                                    <tr class="child impair">
                                                                                    <td>23,874.7</td>
                                                            <td>19,953.6</td>
                                                            <td>23,874.7</td>
                                                            <td>77.27</td>
                                                                        </tr>
                                    <tr class="child ">
                                                                                    <td>24,133.1</td>
                                                            <td>19,459.7</td>
                                                            <td>24,133.1</td>
                                                            <td>78.51</td>
                                                                        </tr>
                                    <tr class="child impair">
                                                                                    <td>24,589.7</td>
                                                            <td>19,024.1</td>
                                                            <td>24,589.7</td>
                                                            <td>85.43</td>
                                                                        </tr>
                                    <tr class="child ">
                                                                                    <td>25,273.5</td>
                                                            <td>18,546.6</td>
                                                            <td>25,273.5</td>
                                                            <td>98.14</td>
                                                                        </tr>
                                    <tr class="child impair">
                                                                                    <td>26,838.6</td>
                                                            <td>20,687.2</td>
                                                            <td>26,838.6</td>
                                                            <td>100.46</td>
                                                                        </tr>
                                    <tr class="child ">
                                                                                    <td>29,825.2</td>
                                                            <td>22,822.4</td>
                                                            <td>29,825.2</td>
                                                            <td>94.09</td>
                                                                        </tr>
                                    <tr class="child impair">
                                                                                    <td>31,294.3</td>
                                                            <td>25,892.7</td>
                                                            <td>31,294.3</td>
                                                            <td>88.91</td>
                                                                        </tr>
                                    <tr class="child ">
                                                                                    <td>32,706.4</td>
                                                            <td>28,762.1</td>
                                                            <td>32,706.4</td>
                                                            <td>74.17</td>
                                                                        </tr>
                                    <tr class="child impair">
                                                                                    <td>35,475.1</td>
                                                            <td>31,458.2</td>
                                                            <td>35,475.1</td>
                                                            <td>70.04</td>
                                                                        </tr>
                                    <tr class="child ">
                                                                                    <td>35,768.2</td>
                                                            <td>33,463.3</td>
                                                            <td>35,768.2</td>
                                                            <td>61.15</td>
                                                                        </tr>
                                    <tr class="child impair">
                                                                                    <td>35,079.4</td>
                                                            <td>34,255.8</td>
                                                            <td>35,079.4</td>
                                                            <td>48.05</td>
                                                                        </tr>
                                    <tr class="child ">
                                                                                    <td>34,328.9</td>
                                                            <td>34,332.6</td>
                                                            <td>34,332.6</td>
                                                            <td>35.06</td>
                                                                        </tr>
                                    <tr class="child impair">
                                                                                    <td>34,064.1</td>
                                                            <td>33,364.6</td>
                                                            <td>34,064.1</td>
                                                            <td>55.07</td>
                                                                        </tr>
                                    <tr class="child ">
                                                                                    <td>33,072.7</td>
                                                            <td>30,866.0</td>
                                                            <td>33,072.7</td>
                                                            <td>72.43</td>
                                                                        </tr>
                                    <tr class="child impair">
                                                                                    <td>31,141.2</td>
                                                            <td>27,142.0</td>
                                                            <td>31,141.2</td>
                                                            <td>84.56</td>
                                                                        </tr>
                                    <tr class="child ">
                                                                                    <td>30,058.3</td>
                                                            <td>24,311.1</td>
                                                            <td>30,058.3</td>
                                                            <td>96.90</td>
                                                                        </tr>
                                    <tr class="child impair">
                                                                                    <td>28,776.4</td>
                                                            <td>21,491.7</td>
                                                            <td>28,776.4</td>
                                                            <td>111.92</td>
                                                                        </tr>
                                    <tr class="child ">
                                                                                    <td>27,862.8</td>
                                                            <td>20,213.6</td>
                                                            <td>27,862.8</td>
                                                            <td>128.27</td>
                                                                        </tr>
                                    <tr class="child impair">
                                                                                    <td>27,061.7</td>
                                                            <td>19,947.4</td>
                                                            <td>27,061.7</td>
                                                            <td>125.11</td>
                                                                        </tr>
                                    <tr class="child ">
                                                                                    <td>24,824.9</td>
                                                            <td>19,010.5</td>
                                                            <td>24,824.9</td>
                                                            <td>114.16</td>
                                                                        </tr>
                                    <tr class="child impair">
                                                                                    <td>23,882.1</td>
                                                            <td>18,008.9</td>
                                                            <td>23,882.1</td>
                                                            <td>102.79</td>
                                                                        </tr>
                                </tbody>
            </table>
            </div>
</div>
       
            <div class="footnote-text-block">
        We would like to inform you that we expect a display issue on our website, which may impact the Market Results display for all instruments on the Long Clock Change day. Therefore, we highly recommend referring to the Market Results as published on the Market Data sftp server.
    </div>

Und man bekommt 24 readings mit dem Preis in €/MWh zurück.

Mit der Abfrage für Intraday bekommt man ebenso die 15 Minuten Preise für den aktuellen Tag, jedoch nicht für den nächsten.
https://www.epexspot.com/en/market-results?market_area=DE-LU&auction=IDA1&trading_date=2025-07-30&delivery_date=2025-07-30&underlying_year=&modality=Auction&sub_modality=Intraday&technology=&data_mode=table&period=&production_period=

VG  Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Wolle02

Ich habe den Code von hier genommen: https://forum.fhem.de/index.php?msg=1336809

Ich bekomme dann Readings mit den Preisen für jede Stunde.

energy.todayHours.12.hour 12 2025-07-31 07:00:10
energy.todayHours.12.priceComponents.0.priceExcludingVat 0.089 2025-07-31 07:00:10
energy.todayHours.12.priceComponents.0.priceIncludingVat 0.1058 2025-07-31 07:00:10
energy.todayHours.12.priceComponents.0.type taxes 2025-07-31 07:00:10
energy.todayHours.12.priceComponents.1.priceExcludingVat 0.0612 2025-07-31 07:00:10
energy.todayHours.12.priceComponents.1.priceIncludingVat 0.0728 2025-07-31 07:00:10
energy.todayHours.12.priceComponents.1.type power 2025-07-31 07:00:10
energy.todayHours.12.priceComponents.2.priceExcludingVat 0.11 2025-07-31 07:00:10
energy.todayHours.12.priceComponents.2.priceIncludingVat 0.1309 2025-07-31 07:00:10
energy.todayHours.12.priceComponents.2.type grid 2025-07-31 07:00:10
energy.todayHours.12.priceExcludingVat 0.2601 2025-07-31 07:00:10
energy.todayHours.12.priceIncludingVat 0.3095 2025-07-31 07:00:10

Preiskomponente 0 sind wohl die Steuern.
Preiskomponente 2 sind wohl die Netzentgelte
Preiskomponente 1 sind scheinbar die reinen Strompreise an der EEX in €/kWh inklusive und exklusive der Mehrwertsteuer.

Ich nehm dann für die Weiterverarbeitung der Preis "including VAT".

ch.eick

Zitat von: Wolle02 am 31 Juli 2025, 12:20:43Ich habe den Code von hier genommen: https://forum.fhem.de/index.php?msg=1336809
Das wäre die Afrage von Tibber und nicht die Quelle für die epexspot Preise.
Hier würde ich gerne die Quelle der Daten abfragen und die Preise von Tibber und aWATTar dann als zusatz mit den Endpreisen berechnen wollen.
Also am Besten nur ein Device für den Börsenpreise und die Wiedeverkäufer dann zum Auswählen.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Wolle02

Zitat von: ch.eick am 31 Juli 2025, 17:19:46Das wäre die Afrage von Tibber und nicht die Quelle für die epexspot Preise.

Bist du sicher?
Wenn ich deinen Link von oben nehme:
https://www.epexspot.com/en/market-results?market_area=DE-LU&auction=MRC&trading_date=2025-07-30&delivery_date=2025-07-31&underlying_year=&modality=Auction&sub_modality=DayAhead&technology=&data_mode=table&period=&production_period=
dann wird mir für die Stunde 12 (also 12-13 Uhr) ein Preis von 61,15 €/MWh angezeigt; also 0,06115 €/kWh.
Das entspricht nach Rundung exakt meinem Reading für die Stunde 12.
energy.todayHours.12.priceComponents.1.priceExcludingVat 0.0612 2025-07-31 07:00:10

Was verstehe ich grade nicht?

ch.eick

Zitat von: Wolle02 am 31 Juli 2025, 18:15:31
Zitat von: ch.eick am 31 Juli 2025, 17:19:46Das wäre die Afrage von Tibber und nicht die Quelle für die epexspot Preise.
Was verstehe ich grade nicht?
In Deiner Abfrage gehst Du auf Tibber, die sich letztendlich die Preise auch von epexspot holen. Leider hat jeder Wiederverkäufer wie Tibber oder aWATTar so seine Eigenheiten und die volle Leistung bekommt man erst als Kunde. Das ist der Grund, warum ich gerne die Preise direkt von der Quelle beziehen und die Wiederverkäufer als zusätzliche Berechnung ins Device aufnehme möchte. EVUs hat man auch schon kommen und gehen sehen.
Für die reinen PV-Anlagen Betreiber ist der epexspot Preis auch ohne EVU mit Stunden Tarif relevant.
Momentan frage ich auch mit meinem EVU_Tibber_connect ab, jedoch bin ich kein Kunde und das rechnet sich auch seit Jahren nicht für mich.

VG   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

alkazaa

Hier mal als aktuelles Beispiel die viertelstündlichen EPEX Preise für day und dayahead: https://forum.fhem.de/index.php?msg=1349563

alkazaa

#6
Moin!
Ich habe jetzt mein HTTPMOD device zum Auslesen der EPEX day und dayahead Preise auf der von ch.eick angelegten wiki Seite https://wiki.fhem.de/wiki/Stromb%C3%B6rse#3._EPEX_Spot veröffentlicht.

Wolle02

Hier noch ein etwas kürzeres JsonMod, das die gleichen Ergebnisse liefert:

defmod EEX JsonMod https://api.energy-charts.info/price?bzn=DE-LU
attr EEX event-on-change-reading .*
attr EEX interval 0 * * * *
attr EEX readingList complete();;
attr EEX timestamp-on-change-reading .*

ch.eick

#8
Hallo zusammen,
ich habe nun eine Arbeitsversion geschaffen, die das Thema Strombörse zusammen fassen soll.

Ziel:
- Eine Stelle um Anbieter mit Börsenpreisen zusammen zu fassen
- Basis soll die direkte Abfrage der EPEX_Spot Preise sein, also ohne einem Anbieter dazwischen, der auch nur die Börse in Leipzig abfragt
- Im FHEMWEB sollte es eine ansprechende Aufbereitung geben (was gerne noch diskutiert werden kann)
- Es soll auch für interessierte, z.B. ohne Tibber Vertrag möglich sein. Das bedeutet, man kann die Tibber Preise berechnen lassen, die man
  ansonsten ja nur bekommt, wenn man bereits ein Kunde ist.

Aktueller Stand:
- Es gibt zwei Devices
  1. Stromboerse_connect, was ein HTTPMOD ist
  2. Stromboerse, was ein DOIF im Perl Modus mit uitable und uistate ist

- Einstellbar ist
  1. EPEX_Spot  - Leipziger Börse
  2. Tibber      - Leipziger Börse und berechnet darüber die Kosten
  3. Tibber_Live - Euer Account bei Tibber
  4. aWATTar    - Leipziger Börse und berechnet darüber die Kosten

- Es gibt für fc0 und fc1 ein rudimentäres SVG für den schnellen Überblick.
- Brauchbare Werte werden einheitlich, zusätzlich berechnet (hier würde ich auch gerne noch Ideen entgegennehmen)
- Es gibt min/max Zeiten
- In der Basis läuft es auch ohne MySQL Datenbank, wenn man die entsprechenden Stellen raus löscht
- Mit einer Oracle MySQL Datenbank (die meisten kennen mich ja schon) hat man erweiterte Möglichkeiten

- Für die Berechnung muss man die eigenen lokalen Kosten des Anbieters und des Netzbetreibers eintragen

  conf_EVU_Tibber_Grundgebuehr_EUR_Jahr 57.84
  conf_EVU_Tibber_Korrektur 0.755
  conf_EVU_Tibber_Zuschlag_ct_kWh 2.15

  conf_EVU_aWATTar_Grundgebuehr_EUR_Jahr 46.20
  conf_EVU_aWATTar_Zuschlag_ct_kWh 0

  conf_Netz_Jahresverbrauch_kWh 5099

  conf_VAT  1.19

  conf_VNB  Mainzer Netze GmbH (64560)

  conf_VNB_Arbeitspreis_ct_kWh 7.54
  conf_VNB_KWKG_ct_kWh 0.446
  conf_VNB_Konzession_ct_kWh 1.32
  conf_VNB_MSB_iMSys_EUR_Jahr 120
  conf_VNB_MSB_mME_EUR_Jahr 16.81
  conf_VNB_Messstelle mME
  conf_VNB_Netzentgelt_ct_kWh 6.72
  conf_VNB_Paragraph_19_Umlage_ct_kWh 1.559
  conf_VNB_Stromsteuer_ct_kWh 2.05

  Die einzelnen Preise habe ich von der letzten Preiserhöhung meines EVUs genommen und mit ChatGBT nochmal verifiziert.
  Das müsstet Ihr dann auch für Eure Gegend machen.
  Wichtig ist auch Euer Jahresverbrauch, da die jährlichen Fixkosten auf ct/kWh verteilt werden.

  Erklärung zu conf_EVU_Tibber_Korrektur
    Da ich einen fremden Zugang zum Testen auslese passen natürlich die lokalen Preise des Netzbetreibers nicht. Mein Netzbetreiber hat
    ziemlich hohe Kosten, was generell zu hohen Preisen in meiner Gegend führt. Um einen direkten Vergleich zu haben ist nun ein
    conf_EVU_Tibber_Korrektur eingeflossen, worüber ich einen direkten Vergleich machen kann.

ToDos:
- Für Tibber_Live müssen noch die Kosten und Verbräuche aus dem EVU_Tibber_connect übernommen werden
- Die Statistiken aus der Datenbank kommen auch noch
- Tibber_Live mit dem Pulse Lesekopf kommt noch
- In der unteren uitable kommen dann noch die Statistiken rein

Achtung, für die, die das bisherige EVU_Tibber_connect verwendet haben. Bitte beachtet, dass im neuen Device die Preise jetzt in ct und nicht mehr in € angezeigt werden, falls Ihr bereits eigene Auswertungen oder Grafana Darstellungen gemacht habt.

Du darfst diesen Dateianhang nicht ansehen.

VG  Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick