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

ch.eick

#9
Moin,
ich habe nochmal in den userReadings einige Änderungen vorgenommen.

- Berechnungen für avg, min, max und Trigger Preise beginnen jetzt jeweils mit der
  Stunde der Abfragung da die Preise davor ja nicht mehr relevant sind.

- Durch den Wechsel auf den 15 Minuten Takt kann ein trigger Fenster auch mal ziemlich
  kurz werden. Mit dem reading fc[0|1]_trigger_dauer wird nun auch die Dauer berechnet.

Als nächstes starte ich jetzt mit der Übername vom Tibber_Live.

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

ch.eick

Moin,
im contrib wurde das Stromboerse und Stromboerse_connect Device aktualisiert.

Da ist nun einiges für Tibber_Live dazu gekommen und es sollte auch bereits funktionieren.
Das alte EVU_Tibber müsste für Tests natürlich deaktiviert werden.

- Im Device Stromboerse_connect in den Attibuten die eigenen Netto EVU und Netzbetreiber Kosten eintragen
- Den eigenen Jahres Stromverbrauch eintragen
- Bei Tibber_Live wird noch auf den alten Key Store Eintrag zugegriffen
- Die set Menünamen im Stromboerse_connect sind leider noch nicht so plausiebel benannt, da denke ich gerade noch etwas drüber nach

- Im Device Stromboerse wählt man dann unter Börse aus, was man haben möchte
- Unter Tibber_Live ist dann ein connect/disconnect möglich, was natürlich nur Kunden machen können

Die Genauigkeit der Berechnung für Tibber und aWATTar hängt sehr stark davon ab, ob Ihr Eure Einzelpreise richtig eingetragen habt!

Bitte betrachtes das Device als einen Preview und gebt mir Euren Eindruck zurück.

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

ch.eick

#11
Hallo zusammen,
im contrib liegt eine neue Version vom Stromboerse_connect, und vom Stromboerse Device.

Durch den 15 Minuten Takt der Strombörse und bei Tibber gibt es immer wieder 15 Minuten Fenster als Trigger, was für die mir bekannten Starkverbraucher ein sehr kurzer Trigger ist. Aus diesem Grund beinhaltet diese Version ein Überspringen von 15 Minuten Fenstern, damit etwas Ruhe in den Trigger kommt.

Weiterhin habe ich eine Start/Stop Zeit für den Speicher eingebaut, bei dem die Preisbestimmung 30% unter dem Maximalpreis liegt. Damit sollten 20% Speicherverluste und zusätzlich 10% Marge ausgeglichen werden. Der normale Trigger Preis kann auch weniger wie 20% abstand zum Maximal Preis liegen, wodurch ein Laden des Speichers sinnlos wird, da die Speiche Verluste zu hoch liegen.
Den Prozentsatz lege ich später noch in ein Attribut.

Die reading Namen haben sich ebenfalls dadurch etwas geändert.

Als zukünftige Erweiterung für die Preisberechnung kann ich mir noch den §14a mit Modul 1 und Modul 3 vorstellen, da man da das Netzentgeld noch reduzieren kann.

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

ch.eick

Moin zusammen,
es gibt schon wieder ein Update, diesmal mit vielen Code Bereinigungen und wieder Neuerungen, also Vorsicht, es ist immer noch eine Arbeitsversion.
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

ch.eick

Tachchen,
im contrib ist ein neues Update für Stomboerse_connect, jetzt läuft es schon schön rund.

Falls jemand das nutzt und im Grafana schöne Stufen haben möchte, dann könnte ich auf Nachfrage noch für Oracle MySQL > Version 8 passende SQLs liefern.
Daran hatte ich die letzten Wochen noch echt zu knapsen ;-)

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

ch.eick

Hallo nochmal,
hier wäre mal mein aktuelles Leistungsdiagramm mit den Strombörse Triggern, bei dem ich ziemlich mit der Darstellung vom Tagesverlauf gekämpft habe.
Die Strombörse habe ich durch einen Offset nach oben ins Diagramm geschoben. Man sieht den Preisverlauf im 15 Minuten Takt und die einzelnen Trigger als Stufen.
Ist die Stufe oben, so ist der Trigger aktiv.
Für die Net und Bat Freigabe sind etwas unterschiedliche Berechnungen gewählt, was dann zu abweichenden Zeiten führt.
Trigger Zeiten von 15 Minuten werden unterdrückt, da das ansonsten zu zappelig wäre und zu einem ständigen Ein/Ausschalten der Starkverbraucher führen würde.
Im Diagramm wird immer nur das nächste Ereignis der Trigger im Tagesverlauf angezeigt, dass sich jedoch aufgrund der sich veränderten Daten auch immer wieder etwas verschieben kann. Aus diesem Grund habe ich auch die Berechnung auf ein mal pro Stunde reduziert.
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

ch.eick

Nächste Schritte wären jetzt die Kostenberechnung, die bei den Tibber Kunden über deren Portal kommen, jedoch nicht bei den eventuell interessierten, die noch keine Kunden sind.

Für die early birds hätte ich hier mal ein MySQL, das die Kosten innerhalb der Datenbank berechnet und dort auch direkt einträgt, es erfolgt somit keine Ausgabe als Tabelle, was jedoch auch möglich wäre. Momentan habe ich jedoch Probleme mit dem DBI vom FHEM zur Datenbank :-(
Die Ausgabe soll gleich der von Tibber sein, damit ein Wechsel nicht direkt mit Anpassungen innerhalb der Datenbank einhergeht.

- Für den INSERT sind die Kommentare zu entfernen

- Der eigene Zähler müsste an dieser Stelle eingetragen werden
    WHERE DEVICE  = 'WR_0_KSEM'
      AND READING = 'Active_energy+'

- Man kann natürlich die Zeiträume ändern, das Muster ist nur für den aktuellen Tag ausgelegt

-- INSERT INTO history (TIMESTAMP, DEVICE, TYPE, READING, VALUE)


WITH price AS (
  SELECT
    TIMESTAMP AS interval_start,
    VALUE AS price_ct_per_kWh   -- z.B. Cent/kWh
  FROM history
  WHERE DEVICE = 'Stromboerse_connect'
    AND READING = 'fc0_total'
    AND TIMESTAMP >= CURDATE()
    AND TIMESTAMP < CURDATE() + INTERVAL 1 DAY
),

consumption AS (
  SELECT
    interval_start,
    CASE
      WHEN interval_start = CURDATE() THEN 0
      WHEN VALUE < LAG(VALUE) OVER (ORDER BY interval_start) THEN NULL
      ELSE VALUE - LAG(VALUE) OVER (ORDER BY interval_start)
    END AS kWh_15min
  FROM (
    SELECT
      FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(TIMESTAMP) / 900) * 900) AS interval_start,
      VALUE,
      ROW_NUMBER() OVER (
        PARTITION BY FLOOR(UNIX_TIMESTAMP(TIMESTAMP) / 900)
        ORDER BY TIMESTAMP DESC
      ) AS rn
    FROM history
    WHERE DEVICE  = 'WR_0_KSEM'
      AND READING = 'Active_energy+'
      AND TIMESTAMP >= CURDATE() - INTERVAL 15 MINUTE
  ) t
  WHERE rn = 1
    AND interval_start >= CURDATE()
    AND interval_start < CURDATE() + INTERVAL 1 DAY
)

SELECT *
FROM (
  SELECT
    c.interval_start                   AS TIMESTAMP,
    'Stromboerse_connect'              AS DEVICE,
    'cost'                             AS TYPE,
    'nodes_cost'                       AS READING,
ROUND(COALESCE(c.kWh_15min,0) * COALESCE(p.price_ct_per_kWh,0) / 100, 6 ) AS VALUE
  FROM consumption c
LEFT JOIN price p
       ON p.interval_start = c.interval_start
) AS new_values

-- ON DUPLICATE KEY UPDATE
--   VALUE = new_values.VALUE;

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

ch.eick

#16
Hallo zusammen,
die nächste Version ist da und liegt im contrib.
Bitte denkt daran für die Kostenberechnung Euren letzten Jahresverbrauch einzutragen, da darüber die Grundkosten auf Preis/kWh umgerechnet werden.

- Fehler Korrekturen

- Code Optimierungen

- SQL Optimierungen
  Es wurde versucht einzelne INSERT jeweils zu massen INSERT umzustellen, was performanter ist

- Kostenberechnung bei Tibber ohne Vertrag
  Hier wird ein lokales SmartMeter oder ein Lesekopf auf dem Zähler benötigt
  Das SmartMeter wird in den Attributen definiert
  Die Berechnung erfolgt in der Datenbank und wird im Anschluss auch als readings im Device angezeigt

- Änderung beim fc_max zu fc_max1 und fc_max2
  In den letzten Tagen gab es Abends jeweils einen extrem hohen Maximalpreis, der dem fc_trigger_max_price
  unverhältnismäßeg nach eben gerissen hat. Mit der Umstellung gibt es nun auch noch den zweit höchsten Preis,
  der bei einer Abweichung von 20% zum fc_max1 genommen wird. Hierdurch wird das fc0_trigger_max Fenster größer.

- Beim fc0_trigger_*_stop wurde leider eine viertel Stunde zu spät gestoppt, was jetzt korrigiert ist.

Beim Device Stromboerse muss man auch etwas korrigieren und ich habe mal ganz unten das lokale SmartMeter eingeblendet.
Du darfst diesen Dateianhang nicht ansehen.

Generell war ich auch die wichtigen letzten Wintermonate ziemlich enttäuscht von den Preisen. Natürlich waren sie hoch, wie schon lange.
Wichtiger jedoch waren die Schwankungen im Winter nicht so stark, dass sich ein Laden des Speichers gelohnt hätte, was ich in der Simulation auf 20% unter dem Maximalpreis eingestellt hatte. Auch ein Verschieben meiner Starkverbraucher hätte in Summe nicht soviel gesparrt, wie mich Tibber gekostet hätte. Ich scheine wohl ein sehr gutes EVU gepaart mit einer größeren PV zu haben.
Gedanklich werde ich mich mal mit dem Modul 1+3 des § 14a EnWG beschäftigen und testen, ob man über die Netzgebühren etwas sparen kann.

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

rabehd

#17
Ich habe es auch mal ausprobiert.

Zitatnodes_consumption_day  Please define LogDBRep_Stromboerse_connect_SQL first
nodes_consumption_month  Please define LogDBRep_Stromboerse_connect_SQL first
nodes_consumption_year  Please define LogDBRep_Stromboerse_connect_SQL first
nodes_cost_avg  Please define LogDBRep_Stromboerse_connect_SQL first
nodes_cost_max  Please define LogDBRep_Stromboerse_connect_SQL first
nodes_cost_min  Please define LogDBRep_Stromboerse_connect_SQL first
total_cost_day  Please define LogDBRep_Stromboerse_connect_SQL first
total_cost_month  Please define LogDBRep_Stromboerse_connect_SQL first
total_cost_year  Please define LogDBRep_Stromboerse_connect_SQL first

Was habe ich in der hier übersehen?
Auch funktionierende Lösungen kann man hinterfragen.

ch.eick

In meinem contrib findest Du noch ein DbRep Device, das Du entsprechend als LogDBRep_Stromboerse_connect_SQL benennen musst. Damit werden aus der DbLog Werte geholt und geschrieben.

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

ch.eick

Besonders wichtig für die Berechnung sind Eure Preise des EVU und Netzbetreiber, die sollten in den Abrechnungen oder im Internet zufinden sein.
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

rabehd

Zitat von: ch.eick am 19 März 2026, 20:41:18In meinem contrib findest Du noch ein DbRep Device, das Du entsprechend als LogDBRep_Stromboerse_connect_SQL benennen musst. Damit werden aus der DbLog Werte geholt und geschrieben.

VG Christian

Danke, hatte ich nicht für notwendig erachtet.

Ist das auch ein Versäumnis von mir?
ZitatDBD::MariaDB::st execute failed: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'AS new ON DUPLICATE KEY UPDATE VALUE = new.VALUE' at line 1 at ./FHEM/93_DbRep.pm line 7073.
Auch funktionierende Lösungen kann man hinterfragen.

ch.eick

#21
Zitat von: rabehd am 20 März 2026, 09:22:13Ist das auch ein Versäumnis von mir?
ZitatDBD::MariaDB::st execute failed: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'AS new ON DUPLICATE KEY UPDATE VALUE = new.VALUE' at line 1 at ./FHEM/93_DbRep.pm line 7073.
Sorry, ich verwende die original Oracle MySQL Datenbank.
Du könntest gerne den MySQL Syntax auf MariaDB anpassen, eventuell hiltft ChatGBT auch einwenig.
MariaDB ist wohl etwas schlanker und hat nicht alle aktuellen Änderungen von MySQL. Im original MySQL bekomme ich die aktuellen Sicherheitsänderungen, was mir wichtig ist.

Ich schau mal was ChatGBT für MariaDB als Kompatibel vorschlägt.

Beispiel vom userReadings

nodes_TIMESTAMP:current_price.* {
...
MySQL Version >8 Syntax zu MariaDB übersetzen

MYSQL V8

INSERT INTO history (TIMESTAMP, DEVICE, TYPE, READING, VALUE)
      WITH price AS (
        SELECT
          TIMESTAMP AS interval_start,
          VALUE AS price_ct_per_kWh
        FROM history
        WHERE DEVICE = '$name'
          AND READING = 'fc0_total'
          AND TIMESTAMP >= CURDATE()
          AND TIMESTAMP < CURDATE() + INTERVAL 1 DAY
      ),
     
      consumption AS (
        SELECT
          interval_start,
          CASE
            WHEN interval_start = CURDATE() THEN 0
            WHEN VALUE < LAG(VALUE) OVER (ORDER BY interval_start) THEN NULL
            ELSE VALUE - LAG(VALUE) OVER (ORDER BY interval_start)
          END AS kWh_15min
        FROM (
          SELECT
            FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(TIMESTAMP) / 900) * 900) AS interval_start,
            VALUE,
            ROW_NUMBER() OVER (
              PARTITION BY FLOOR(UNIX_TIMESTAMP(TIMESTAMP) / 900)
              ORDER BY TIMESTAMP DESC
            ) AS rn
          FROM history
          WHERE DEVICE  = '$conf_Netz_Zaehler'
            AND READING = '$conf_Netz_Zaehler_Reading'
            AND TIMESTAMP >= CURDATE() - INTERVAL 2 DAY
        ) t
        WHERE rn = 1
          AND interval_start >= CURDATE()
          AND interval_start < CURDATE() + INTERVAL 1 DAY
      )
     
      SELECT *
      FROM (
        SELECT
          c.interval_start                   AS TIMESTAMP,
          '$name'              AS DEVICE,
          'cost'                             AS TYPE,
          'nodes_cost'                       AS READING,
      ROUND(COALESCE(c.kWh_15min,0) * COALESCE(p.price_ct_per_kWh,0) / 100, 6 ) AS VALUE
        FROM consumption c
      LEFT JOIN price p
             ON p.interval_start = c.interval_start
      ) AS new
      WHERE TIMESTAMP >= CURDATE()
      ON DUPLICATE KEY UPDATE
        VALUE = new.VALUE;



Dein MySQL-8 Statement ist syntaktisch völlig korrekt – aber genau diese Kombination ist in MariaDB oft problematisch:

❗ INSERT ... WITH ... SELECT ... ON DUPLICATE KEY UPDATE
→ funktioniert je nach MariaDB-Version nicht zuverlässig



🔧 Saubere MariaDB-kompatible Lösung

Die stabilste Variante ist:
👉 CTE in ein Derived Table (Subquery) kapseln

INSERT INTO history (TIMESTAMP, DEVICE, TYPE, READING, VALUE)
SELECT *
FROM (
    WITH price AS (
        SELECT
            TIMESTAMP AS interval_start,
            VALUE AS price_ct_per_kWh
        FROM history
        WHERE DEVICE = '$name'
          AND READING = 'fc0_total'
          AND TIMESTAMP >= CURDATE()
          AND TIMESTAMP < CURDATE() + INTERVAL 1 DAY
    ),

    consumption AS (
        SELECT
            interval_start,
            CASE
                WHEN interval_start = CURDATE() THEN 0
                WHEN VALUE < LAG(VALUE) OVER (ORDER BY interval_start) THEN NULL
                ELSE VALUE - LAG(VALUE) OVER (ORDER BY interval_start)
            END AS kWh_15min
        FROM (
            SELECT
                FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(TIMESTAMP) / 900) * 900) AS interval_start,
                VALUE,
                ROW_NUMBER() OVER (
                    PARTITION BY FLOOR(UNIX_TIMESTAMP(TIMESTAMP) / 900)
                    ORDER BY TIMESTAMP DESC
                ) AS rn
            FROM history
            WHERE DEVICE  = '$conf_Netz_Zaehler'
              AND READING = '$conf_Netz_Zaehler_Reading'
              AND TIMESTAMP >= CURDATE() - INTERVAL 2 DAY
        ) t
        WHERE rn = 1
          AND interval_start >= CURDATE()
          AND interval_start < CURDATE() + INTERVAL 1 DAY
    )

    SELECT
        c.interval_start AS TIMESTAMP,
        '$name'          AS DEVICE,
        'cost'           AS TYPE,
        'nodes_cost'     AS READING,
        ROUND(
            COALESCE(c.kWh_15min,0) * COALESCE(p.price_ct_per_kWh,0) / 100,
            6
        ) AS VALUE
    FROM consumption c
    LEFT JOIN price p
           ON p.interval_start = c.interval_start
) AS new
WHERE TIMESTAMP >= CURDATE()

ON DUPLICATE KEY UPDATE
    VALUE = new.VALUE;



⚠️ Warum das nötig ist

MariaDB hat hier mehrere Eigenheiten:

CTE + INSERT + UPDATE Kombination buggy

ON DUPLICATE KEY UPDATE kann Probleme mit CTE-Aliasen machen

Window Functions (LAG, ROW_NUMBER) sind ok – aber nur sauber in Subqueries



💡 Alternative (noch robuster)

Falls du auf Nummer sicher gehen willst (z. B. ältere MariaDB):

👉 CTE komplett vermeiden → nur Subqueries verwenden

Das wird länger, aber 100 % kompatibel.



🧠 Kurzfazit

Dein MySQL-8 Code = ✔️ korrekt

Für MariaDB:

❌ Direkt übernehmen → oft Fehler

✅ In SELECT FROM (WITH ...) AS new kapseln → stabil


⚠️ Wichtige Unterschiede MySQL vs. MariaDB

MySQL 8: INSERT ... WITH ... SELECT direkt möglich

MariaDB:

CTE (WITH) erst ab 10.2

Stabil mit INSERT erst ab 10.3+

Reihenfolge manchmal empfindlicher
In solch einer Session sollte die Umsetzung recht gut funktionieren. Es würde mich sehr freuen, wenn Du mir das dann getestet zusendest, dann würde ich im contrib zusätzlich das userReadings für MariaDB ablegen.


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

ch.eick

By the way...

Wenn Ihr kein Tibber-Live verwenden möchtet, könntet Ihr einfach die userReadings davon entfernen und bei Bedarf später wieder mit der aktuellsten Version einsteigen.
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

rabehd

#23
Zitat von: ch.eick am 20 März 2026, 10:02:50Es würde mich sehr freuen, wenn Du mir das dann getestet zusendest, dann würde ich im contrib zusätzlich das userReadings für MariaDB ablegen.

Ich habe alle Vorkommen ersetzt und keine Fehlermeldung mehr.

Aus:
AS new
WHERE TIMESTAMP >= CURDATE()
ON DUPLICATE KEY UPDATE
VALUE = new.VALUE;
wird:

WHERE TIMESTAMP >= CURDATE()
ON DUPLICATE KEY UPDATE
VALUE = VALUES(VALUE);
--AS new muss auch weg
Auch funktionierende Lösungen kann man hinterfragen.

ch.eick

Hallo rabehd,
in MySQL > V8 ist dieser Syntax bereits abgekündigt :-) , aber gut wenn es dann in MariaDB läuft.

Läuft der Rest mit dem "with" dann auch?
Welche MariaDb Version müsste dann verwendet werden?
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

ch.eick

Hallo zusammen,
da hatte sich noch ein Fehler beim userReadings current_level eingeschlichen.
Es liegt im contrib und kann selectiv ausgetauscht werden.

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

rabehd

Zitat von: ch.eick am 20 März 2026, 16:49:37Läuft der Rest mit dem "with" dann auch?
Welche MariaDb Version müsste dann verwendet werden?

Sorry, dazu bin ich noch nicht gekommen. Sollte in den nächste Tagen klappen.

Aktuell bin ich an meiner lorawan-Wetterstation dran. Aber mit dem Herstellersupport war es in wenigen Stunden erledigt. Solchen Service habe ich in Europe zuletzt 1995 erlebt.
Auch funktionierende Lösungen kann man hinterfragen.

ch.eick

Zitat von: rabehd am 25 März 2026, 13:47:39Aktuell bin ich an meiner lorawan-Wetterstation dran. Aber mit dem Herstellersupport war es in wenigen Stunden erledigt. Solchen Service habe ich in Europe zuletzt 1995 erlebt.
Mir reicht der DWD und wunderground, da brauche ich keine extra HW und über die Prognose läuft ein entsprechendes Wettermodel :-)
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

ch.eick

#28
Moin,
hatte ich schon erwähnt, dass ich die Zeitumstellung nicht leiden kann :-)
Ich bin schon dran...

EDIT: Letztes Jahr habe ich diesen Tag einfach ignoriert :-)

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

f_sieler

Danke ch.eick für Deine umfangreiche Arbeit. ;D

Ich bin versuchsweise von "Tibber_connect" auf "Stromboerse_connect" umgestiegen.
Auf meiner Rechnung von Tibber werden als Preisbestandteile:
"Stromverbrauch Februar ......... 22,18 Cent/kWh" das ist der verbrauchsabhängige Teil 
"Tibber Gebühr 3,35€"  monatlich
"Netznutzungsgebühr 0,24€/Tag"
"Messstellengebühr 0,06€/Tag"
aufgeführt.
Wie bringe ich das mit "conf_EVU_Tibber_Grundgebuehr_EUR_Jahr, conf_EVU_Tibber_Korrektur, conf_EVU_Tibber_Zuschlag_ct_kWh" in Übereinstimmung?
FHEM 5.5 auf FritzBox 7390, CUL für FS20, 8x fht80b, 7x fht80TF, 3x fs20st-4,  FB_Callmonitor

ch.eick

#30
Hallöchen,
ich habe bereits den ersten Schritt für die Sommerzeitumstellung zum Testen bereit.


Es betrifft die userReadings
  - current_level
    Hier habe ich die Erkennung für die Sommerzeit eingebaut und die gelieferten Werte entsprechend verschoben.
    fc0_02mm_total werden auf null gesetzt

  - fc_DbLog
    Damit der Datenbank Fehler mit den ungültigen TIMESTAMPs nicht mehr kommt wird fc0_02mm_total übersprungen.

  - Für die Umstellung auf die Winterzeit bekommt man dann ja die Stunde 02 zweimal, da wäre zu überlegen wie verfahren werden soll
    1. Einfach mal nicht tun und die zweite Stunde 02 einfach entfallen zu lassen, da ja bereits ein Eintrag da ist, oder
    2. Einen Durchschnitt berechnen und den dann eintragen.
    Gebt mir mal Rückmeldung dazu.

Zum Testen bitte verbose 4 setzen und ins Log schauen
current_level:fc._0000_total.* {
  my $hash = $defs{$name};
  my ($sec, $min, $hour, $mday, $mon, $year) = localtime();$year += 1900;$mon  += 1;

# --- DST Korrektur Logik (Sommerzeit-Sprung am letzten Sonntag im März) ---
  my $is_summer_jump = 0;
  my ($m_day, $m_month, $m_year) = (localtime(time))[3,4,5];
 
  eval {
    use Time::Local;
    my $epoch_today = timelocal(0, 0, 0, $m_day, $m_month, $m_year);
    my $epoch_next  = $epoch_today + 93600;
    my ($nd, $nm, $ny) = (localtime($epoch_next))[3,4,5];
    my $epoch_tomorrow = timelocal(0, 0, 0, $nd, $nm, $ny);
    $is_summer_jump = 1 if (($epoch_tomorrow - $epoch_today) == 82800);
  };

  if ($is_summer_jump && ReadingsVal($name, sprintf("fc0_0200_total"), 0) ne "null") {
    my @all_fc_readings = grep { /^fc[01]_\d{4}_total$/ } keys %{$hash->{READINGS}};
    my $count = scalar(@all_fc_readings);
    Log3($name, 3, "$name ur_02: DST-Korrektur aktiv ($count Readings)");

    # --- 1. MITTAGS-LOGIK (fc1 schieben) ---
    if ($count >= 188) {
      # fc1 um 1 Stunde nach hinten (22 -> 23 ... 00 -> 01)
      for (my $h = 22; $h >= 0; $h--) {
        for (my $m = 0; $m <= 45; $m += 15) {
          my $val = ReadingsVal($name, sprintf("fc1_%02d%02d_total", $h, $m), 0);
          readingsBulkUpdate($hash, sprintf("fc1_%02d%02d_total", $h+1, $m), $val);
        }
      }
      # Übertrag fc0_23xx -> fc1_00xx
      for (my $m = 0; $m <= 45; $m += 15) {
        my $val = ReadingsVal($name, sprintf("fc0_23%02d_total", $m), 0);
        readingsBulkUpdate($hash, sprintf("fc1_00%02d_total", $m), $val);
      }
    }

    # --- 2. MORGENS-LOGIK (fc0 schieben) ---
    if ($count >= 92) {
      # WICHTIG: Wir schieben alles ab Stunde 2 EINE STUNDE WEITER.
      # Der Wert von 02:00 wird zu 03:00, 03:00 zu 04:00 usw.
      for (my $h = 22; $h >= 2; $h--) {
        for (my $m = 0; $m <= 45; $m += 15) {
          my $old_val = ReadingsVal($name, sprintf("fc0_%02d%02d_total", $h, $m), 0);
          readingsBulkUpdate($hash, sprintf("fc0_%02d%02d_total", $h+1, $m), $old_val);
        }
      }

      # Erst NACHDEM die Werte von 02:xx sicher in 03:xx gelandet sind,
      # wird die "Lücke" in Stunde 2 (die es nicht gibt) genullt.
      for (my $m = 0; $m <= 45; $m += 15) {
        readingsBulkUpdate($hash, sprintf("fc0_02%02d_total", $m), 'null');
      }
     
      Log3($name, 3, "$name ur_02: fc0 erfolgreich verschoben (02xx -> 03xx)");
    }
  }

# --- WINTERZEIT (Oktober, letzter Sonntag) ---
    if ($is_winter_jump && ReadingsVal($name, "fc1_0000_total", "null") ne "null") {
     
      # 1. MORGENS-LOGIK (100 Readings vorhanden)
      # fc0_00xx bis fc0_23xx vorhanden + fc1_00xx (als 25. Stunde)
      if ($count >= 100 && $count < 196) {
        Log3($name, 3, "$name ur_02: Winter-DST Morgen (100rd) - Ziehe fc1_00xx auf fc0_23xx vor");
       
        # Die Werte von 03:00 bis 23:45 um eine Stunde vorziehen (03 -> 02, ..., 23 -> 22)
        for (my $h = 3; $h <= 23; $h++) {
          for (my $m = 0; $m <= 45; $m += 15) {
            my $val = ReadingsVal($name, sprintf("fc0_%02d%02d_total", $h, $m), 0);
            readingsBulkUpdate($hash, sprintf("fc0_%02d%02d_total", $h-1, $m), $val);
          }
        }
       
        # Die "überhängenden" fc1_00xx Readings auf fc0_23xx schieben
        for (my $m = 0; $m <= 45; $m += 15) {
          my $val_25 = ReadingsVal($name, sprintf("fc1_00%02d_total", $m), 0);
          readingsBulkUpdate($hash, sprintf("fc0_23%02d_total", $m), $val_25);
        }
       
        # Das nun falsche fc1_00xx "nullen" oder löschen, damit es morgens nicht stört
        for (my $m = 0; $m <= 45; $m += 15) {
          readingsBulkUpdate($hash, sprintf("fc1_00%02d_total", $m), "null");
        }
      }

      # 2. MITTAGS-LOGIK (196 Readings vorhanden)
      # fc1 ist nun komplett da, muss aber komplett um 1h verschoben werden
      if ($count >= 196) {
        Log3($name, 3, "$name ur_02: Winter-DST Mittag (196rd) - Synchronisiere fc1");

        # Zuerst fc0 ab 03:00 Uhr wie morgens korrigieren (falls noch nicht geschehen oder Refresh)
        for (my $h = 3; $h <= 23; $h++) {
          for (my $m = 0; $m <= 45; $m += 15) {
            my $val = ReadingsVal($name, sprintf("fc0_%02d%02d_total", $h, $m), 0);
            readingsBulkUpdate($hash, sprintf("fc0_%02d%02d_total", $h-1, $m), $val);
          }
        }

        # Jetzt den Übergang: Das "echte" neue fc1_00xx auf fc0_23xx ziehen
        for (my $m = 0; $m <= 45; $m += 15) {
          my $val_transition = ReadingsVal($name, sprintf("fc1_00%02d_total", $m), 0);
          readingsBulkUpdate($hash, sprintf("fc0_23%02d_total", $m), $val_transition);
        }

        # Hier muss bei den readings noch eine Stunde 24 gelesen werden, da ja eine reading Gruppe mehr kommt
        # Dann den gesamten fc1 Block um eine Stunde vorziehen (01 -> 00, ..., 24 -> 23)
        for (my $h = 1; $h <= 24; $h++) {
          for (my $m = 0; $m <= 45; $m += 15) {
            my $val = ReadingsVal($name, sprintf("fc1_%02d%02d_total", $h, $m), 0);
            readingsBulkUpdate($hash, sprintf("fc1_%02d%02d_total", $h-1, $m), $val);
          }
        }
       
        # Die überstehende 25. Stunde löschen
        fhem("deletereading $name fc0_24.*_total");
      }
    }
  # --- Ende DST Korrektur ---

## Aktueller Preis

  # --- Readings setzen ---
  readingsBeginUpdate($hash);
  readingsBulkUpdate($hash,"current_price",ReadingsVal($name,sprintf("fc0_%02d%02d_total",$hour, int($min/15)*15),0) );
  readingsBulkUpdate($hash,"current_date",sprintf("%d-%02d-%02d %02d:%02d:00", $year, $mon, $mday, $hour, int($min/15)*15) );
  Log3($name,3,sprintf("%-20s ur_02 : fc  Current Werte gesetzt", $name));
  readingsBulkUpdate($hash,"fc0_0000_startsAt",sprintf("%d-%02d-%02d 00:00:00", $year, $mon, $mday) );
  Log3($name,3,sprintf("%-20s ur_02 : fc0 Startzeit der Daten gesetzt", $name));

  if (      ReadingsVal($name,"fc1_0000_total","null") eq "null"             ## Der nächste Tag ist noch nicht da
      and ReadingsVal($name,"fc1_0000_startsAt","9999-99-99 00:00:00") ge sprintf("%d-%02d-%02d 00:00:00", $year, $mon, $mday))
  {
    fhem("deletereading ".$name." fc1_0000_startsAt");
    Log3($name,3,sprintf("%-20s ur_02 : fc1 Daten sind noch nicht da", $name));
  } else {
    readingsBulkUpdate($hash,"fc1_0000_startsAt",strftime("%Y-%m-%d 00:00:00",localtime(time+86400)) );
    Log3($name,3,sprintf("%-20s ur_02 : fc1 Startzeit der Daten gesetzt", $name));
  } # end if
},

fc_DbLog:current_level.* {
## Schreibt die readings fc*_hhmm_total als fc*_total mit passendem TIMESTAMP in die Datenbank
  my ($timestamp,$date,$value);
  my $conf_EVU = ReadingsVal("$name","conf_EVU","EPEX_Spot");
  my @values_sql;                                                          # Array für alle INSERT-Werte

  Log3($name,3,sprintf("%-20s ur_36 : ", $name)."fc*_total Daten für $conf_EVU in die Datenbank schreiben");
  my $stop_fc = (ReadingsVal("$name","fc1_0000_startsAt","null") ne "null") ? 1 : 0;
  for (my $loop_fc = 0; $loop_fc <= $stop_fc; $loop_fc++) {
    $date = ReadingsVal("$name","fc${loop_fc}_0000_startsAt","null");
    next if (!$date || $date eq "null");
    $date = (split(' ',$date))[0];
    Log3($name,3,sprintf("%-20s ur_36 : ", $name)."fc$loop_fc Daten vom $date für $conf_EVU gefunden");
    for (my $loop_hour = 0; $loop_hour <= 23; $loop_hour++) {
      for (my $loop_quarter = 0; $loop_quarter <= 3; $loop_quarter++) {
        $timestamp = sprintf("%s %02d:%02d:00",$date,$loop_hour,$loop_quarter*15);
        $value     = ReadingsVal("$name",sprintf("fc%d_%02d%02d_total",$loop_fc,$loop_hour,$loop_quarter*15),"null");
        if ( $value ne "null" ) {
##          Log3($name,4,sprintf("%-20s ur_36 : ", $name)."  $timestamp $name $conf_EVU fc${loop_fc}_total $value");
          push @values_sql,sprintf("('%s','%s','%s','%s','%s')",$timestamp,$name,$conf_EVU,"fc${loop_fc}_total",$value);
        } else {
          Log3($name,4,sprintf("%-20s ur_36 : ", $name)."  $timestamp fc${loop_fc}_total $value - Sommerzeit-Sprung am letzten Sonntag im März");
        }
      } # end quarter
    } # end loop_hour
  } # end loop_fc

  if (@values_sql) {
    my $sql = "INSERT INTO history (TIMESTAMP,DEVICE,TYPE,READING,VALUE) VALUES " . join(", ",@values_sql) . " AS new ON DUPLICATE KEY UPDATE VALUE = new.VALUE;";
    Log3($name,4,sprintf("%-20s ur_36 : Eintragen neuer Daten in die Datenbank\n%s", $name, ($sql =~ s/\),\s*\(/\),\n\(/gr) ));   # für die Anzeige lesbar umformatieren
    ::CommandGet(undef,"LogDBRep_${name}_SQL sqlCmdBlocking $sql");
  }

  return ReadingsTimestamp("$name","fc0_0000_startsAt","null");
}


Im Log sollte es dann so aussehen
2026.03.29 18:15:00.185 4: Stromboerse_connect: get will now request 01_Preis_Info_EPEX_Spot, no optional value
2026.03.29 18:15:00.190 4: Stromboerse_connect: HandleSendQueue sends get01 with timeout 15 to https://api.energy-charts.info/price?bzn=DE-LU&start=2026-03-29&end=2026-03-30, No Data, No Header
2026.03.29 18:15:00.673 4: Stromboerse_connect: Read callback: request type was get01 retry 0,
header: HTTP/1.1 200 OK
date: Sun, 29 Mar 2026 18:15:00 GMT
content-length: 3364
content-type: application/json
server: Nginx
content-security-policy: frame-ancestors 'self' *.ise.fraunhofer.de ;
access-control-allow-origin: https://www.api.energy-charts.info
strict-transport-security: max-age=16000000; includeSubDomains; preload;
connection: close, body length 3364
2026.03.29 18:15:00.674 4: Stromboerse_connect: BodyDecode is not decoding the response body (charset not found, bodyDecode defaults to none)
2026.03.29 18:15:00.676 4: Stromboerse_connect: extracted JSON values to internal
2026.03.29 18:15:00.676 4: Stromboerse_connect: checking for redirects, code=200, ignore=0
2026.03.29 18:15:00.676 4: Stromboerse_connect: no redirects to handle
2026.03.29 18:15:00.678 4: Stromboerse_connect: Read response matched 188, unmatch 0 Reading(s)           <<< Es werden weniger readings geliefert


2026.03.29 18:15:00.687 3: Stromboerse_connect ur_02: DST-Korrektur aktiv (192 Readings)                  <<< Die unmatched readings werden wohl später gelöscht
2026.03.29 18:15:00.687 3: Stromboerse_connect ur_02: fc0 erfolgreich verschoben (02xx -> 03xx)

# Wenn man zum Testen mal die fc.*_total vorher löscht
2026.03.29 17:37:42.156 4: Stromboerse_connect: Read response matched 188, unmatch 0 Reading(s)
2026.03.29 17:37:42.159 3: Stromboerse_connect ur_02: DST-Korrektur aktiv (188 Readings)                  <<< Dann werden auch nur 188, bzw 92 erstellt
2026.03.29 17:37:42.160 3: Stromboerse_connect ur_02: fc0 erfolgreich verschoben (02xx -> 03xx)
########################################

2026.03.29 18:15:00.687 3: Stromboerse_connect  ur_02 : fc  Current Werte gesetzt
2026.03.29 18:15:00.688 3: Stromboerse_connect  ur_02 : fc0 Startzeit der Daten gesetzt
2026.03.29 18:15:00.688 3: Stromboerse_connect  ur_02 : fc1 Startzeit der Daten gesetzt
2026.03.29 18:15:00.688 4: Stromboerse_connect  ur_03 :  fc0 18:15 fc_sum 31.12
2026.03.29 18:15:00.688 4: Stromboerse_connect  ur_03 :  fc0 18:30 fc_sum 64.27
2026.03.29 18:15:00.688 4: Stromboerse_connect  ur_03 :  fc0 18:45 fc_sum 100.05
2026.03.29 18:15:00.688 4: Stromboerse_connect  ur_03 :  fc0 19:00 fc_sum 133.35
2026.03.29 18:15:00.688 4: Stromboerse_connect  ur_03 :  fc0 19:15 fc_sum 167.79
2026.03.29 18:15:00.688 4: Stromboerse_connect  ur_03 :  fc0 19:30 fc_sum 202.20
2026.03.29 18:15:00.688 4: Stromboerse_connect  ur_03 :  fc0 19:45 fc_sum 236.31
2026.03.29 18:15:00.688 4: Stromboerse_connect  ur_03 :  fc0 20:00 fc_sum 272.04
2026.03.29 18:15:00.688 4: Stromboerse_connect  ur_03 :  fc0 20:15 fc_sum 306.37
2026.03.29 18:15:00.688 4: Stromboerse_connect  ur_03 :  fc0 20:30 fc_sum 337.52
2026.03.29 18:15:00.688 4: Stromboerse_connect  ur_03 :  fc0 20:45 fc_sum 367.57
2026.03.29 18:15:00.688 4: Stromboerse_connect  ur_03 :  fc0 21:00 fc_sum 400.52
2026.03.29 18:15:00.688 4: Stromboerse_connect  ur_03 :  fc0 21:15 fc_sum 432.16
2026.03.29 18:15:00.688 4: Stromboerse_connect  ur_03 :  fc0 21:30 fc_sum 461.26
2026.03.29 18:15:00.688 4: Stromboerse_connect  ur_03 :  fc0 21:45 fc_sum 489.13
2026.03.29 18:15:00.688 4: Stromboerse_connect  ur_03 :  fc0 22:00 fc_sum 522.12
2026.03.29 18:15:00.688 4: Stromboerse_connect  ur_03 :  fc0 22:15 fc_sum 552.89
2026.03.29 18:15:00.688 4: Stromboerse_connect  ur_03 :  fc0 22:30 fc_sum 581.78
2026.03.29 18:15:00.688 4: Stromboerse_connect  ur_03 :  fc0 22:45 fc_sum 606.91
2026.03.29 18:15:00.688 4: Stromboerse_connect  ur_03 :  fc0 23:00 fc_sum 634.97
2026.03.29 18:15:00.688 4: Stromboerse_connect  ur_03 :  fc0 23:15 fc_sum 659.41
2026.03.29 18:15:00.688 4: Stromboerse_connect  ur_03 :  fc0 23:30 fc_sum 682.99
2026.03.29 18:15:00.688 4: Stromboerse_connect  ur_03 :  fc0 23:45 fc_sum 705.07
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 00:00 fc_sum 728.67
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 00:15 fc_sum 751.28
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 00:30 fc_sum 773.39
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 00:45 fc_sum 795.40
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 01:00 fc_sum 817.40
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 01:15 fc_sum 839.26
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 01:30 fc_sum 860.94
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 01:45 fc_sum 882.45
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 02:00 fc_sum 904.59
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 02:15 fc_sum 926.62
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 02:30 fc_sum 948.70
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 02:45 fc_sum 970.80
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 03:00 fc_sum 992.65
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 03:15 fc_sum 1014.60
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 03:30 fc_sum 1036.55
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 03:45 fc_sum 1058.58
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 04:00 fc_sum 1080.33
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 04:15 fc_sum 1102.24
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 04:30 fc_sum 1124.21
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 04:45 fc_sum 1146.61
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 05:00 fc_sum 1168.52
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 05:15 fc_sum 1190.91
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 05:30 fc_sum 1214.45
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 05:45 fc_sum 1241.33
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 06:00 fc_sum 1265.92
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 06:15 fc_sum 1294.97
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 06:30 fc_sum 1326.92
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 06:45 fc_sum 1359.12
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 07:00 fc_sum 1389.31
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 07:15 fc_sum 1421.45
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 07:30 fc_sum 1454.90
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 07:45 fc_sum 1488.06
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 08:00 fc_sum 1523.44
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 08:15 fc_sum 1557.81
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 08:30 fc_sum 1592.20
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 08:45 fc_sum 1626.01
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 09:00 fc_sum 1660.81
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 09:15 fc_sum 1694.45
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 09:30 fc_sum 1727.41
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 09:45 fc_sum 1758.06
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 10:00 fc_sum 1789.78
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 10:15 fc_sum 1819.78
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 10:30 fc_sum 1851.06
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 10:45 fc_sum 1879.17
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 11:00 fc_sum 1909.14
2026.03.29 18:15:00.689 4: Stromboerse_connect  ur_03 :  fc1 11:15 fc_sum 1936.61
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 11:30 fc_sum 1962.76
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 11:45 fc_sum 1987.02
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 12:00 fc_sum 2013.20
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 12:15 fc_sum 2037.66
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 12:30 fc_sum 2061.52
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 12:45 fc_sum 2084.20
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 13:00 fc_sum 2107.78
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 13:15 fc_sum 2131.12
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 13:30 fc_sum 2153.79
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 13:45 fc_sum 2175.58
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 14:00 fc_sum 2198.19
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 14:15 fc_sum 2220.71
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 14:30 fc_sum 2243.10
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 14:45 fc_sum 2265.13
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 15:00 fc_sum 2287.74
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 15:15 fc_sum 2310.50
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 15:30 fc_sum 2333.38
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 15:45 fc_sum 2357.24
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 16:00 fc_sum 2379.92
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 16:15 fc_sum 2404.19
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 16:30 fc_sum 2430.94
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 16:45 fc_sum 2459.93
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 17:00 fc_sum 2486.83
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 17:15 fc_sum 2516.11
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 17:30 fc_sum 2547.92
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 17:45 fc_sum 2582.75
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 18:00 fc_sum 2614.36
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 18:15 fc_sum 2648.34
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 18:30 fc_sum 2682.85
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 18:45 fc_sum 2718.61
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 19:00 fc_sum 2753.67
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 19:15 fc_sum 2789.11
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 19:30 fc_sum 2825.15
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 19:45 fc_sum 2862.47
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 20:00 fc_sum 2898.81
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 20:15 fc_sum 2935.10
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 20:30 fc_sum 2971.74
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 20:45 fc_sum 3008.21
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 21:00 fc_sum 3045.89
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 21:15 fc_sum 3082.23
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 21:30 fc_sum 3118.95
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 21:45 fc_sum 3154.22
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 22:00 fc_sum 3191.13
2026.03.29 18:15:00.690 4: Stromboerse_connect  ur_03 :  fc1 22:15 fc_sum 3226.83
2026.03.29 18:15:00.691 4: Stromboerse_connect  ur_03 :  fc1 22:30 fc_sum 3262.61
2026.03.29 18:15:00.691 4: Stromboerse_connect  ur_03 :  fc1 22:45 fc_sum 3297.86
2026.03.29 18:15:00.691 4: Stromboerse_connect  ur_03 :  fc1 23:00 fc_sum 3333.06
2026.03.29 18:15:00.691 4: Stromboerse_connect  ur_03 :  fc1 23:15 fc_sum 3367.66
2026.03.29 18:15:00.691 4: Stromboerse_connect  ur_03 :  fc1 23:30 fc_sum 3401.95
2026.03.29 18:15:00.691 4: Stromboerse_connect  ur_03 :  fc1 23:45 fc_sum 3435.64
2026.03.29 18:15:00.691 3: Stromboerse_connect  ur_03 : berechne Durchschnittspreis 28.63
2026.03.29 18:15:00.699 3: Stromboerse_connect  ur_04 : berechne Medianwert         30.42
2026.03.29 18:15:00.700 4: Stromboerse_connect  ur_05 :  fc0 18:15 fc_min 31.12
2026.03.29 18:15:00.700 4: Stromboerse_connect  ur_05 :  fc0 20:45 fc_min 30.05
2026.03.29 18:15:00.700 4: Stromboerse_connect  ur_05 :  fc0 21:30 fc_min 29.10
2026.03.29 18:15:00.700 4: Stromboerse_connect  ur_05 :  fc0 21:45 fc_min 27.88
2026.03.29 18:15:00.700 4: Stromboerse_connect  ur_05 :  fc0 22:45 fc_min 25.13
2026.03.29 18:15:00.700 4: Stromboerse_connect  ur_05 :  fc0 23:15 fc_min 24.44
2026.03.29 18:15:00.700 4: Stromboerse_connect  ur_05 :  fc0 23:30 fc_min 23.58
2026.03.29 18:15:00.700 4: Stromboerse_connect  ur_05 :  fc0 23:45 fc_min 22.08
2026.03.29 18:15:00.700 4: Stromboerse_connect  ur_05 :  fc1 00:45 fc_min 22.02
2026.03.29 18:15:00.700 4: Stromboerse_connect  ur_05 :  fc1 01:00 fc_min 21.99
2026.03.29 18:15:00.700 4: Stromboerse_connect  ur_05 :  fc1 01:15 fc_min 21.86
2026.03.29 18:15:00.700 4: Stromboerse_connect  ur_05 :  fc1 01:30 fc_min 21.68
2026.03.29 18:15:00.700 4: Stromboerse_connect  ur_05 :  fc1 01:45 fc_min 21.52
2026.03.29 18:15:00.701 3: Stromboerse_connect  ur_05 : berechne Minimalpreis       21.52
2026.03.29 18:15:00.701 4: Stromboerse_connect  ur_06 :  fc0 18:15 fc_max1: 31.12 fc_max2: 0.00
2026.03.29 18:15:00.701 4: Stromboerse_connect  ur_06 :  fc0 18:30 fc_max1: 33.15 fc_max2: 31.12
2026.03.29 18:15:00.701 4: Stromboerse_connect  ur_06 :  fc0 18:45 fc_max1: 35.78 fc_max2: 33.15
2026.03.29 18:15:00.701 4: Stromboerse_connect  ur_06 :  fc1 19:30 fc_max1: 36.04 fc_max2: 35.78
2026.03.29 18:15:00.701 4: Stromboerse_connect  ur_06 :  fc1 19:45 fc_max1: 37.32 fc_max2: 36.04
2026.03.29 18:15:00.702 4: Stromboerse_connect  ur_06 :  fc1 21:00 fc_max1: 37.67 fc_max2: 37.32
2026.03.29 18:15:00.702 3: Stromboerse_connect  ur_06 : berechne Maximalpreis       37.67 37.32
2026.03.29 18:15:00.703 3: Stromboerse_connect  ur_02 : fc  Current Werte gesetzt
2026.03.29 18:15:00.703 3: Stromboerse_connect  ur_02 : fc0 Startzeit der Daten gesetzt
2026.03.29 18:15:00.703 3: Stromboerse_connect  ur_02 : fc1 Startzeit der Daten gesetzt
2026.03.29 18:15:00.703 3: Stromboerse_connect  ur_07 : berechne current_level Einteilung
2026.03.29 18:15:00.703 4: Stromboerse_connect  ur_07 :  avg: 28.63 min: 21.52 max: 37.67 range: 16.15 current_price: 31.12 current_level: TEUER
2026.03.29 18:15:00.703 3: Stromboerse_connect  ur_07 : berechne Triggerpreis  net: 25.07 bat: 30.14
2026.03.29 18:15:00.704 3: Stromboerse_connect  ur_07 : Neuberechnung von fc0_trigger_net_start gesperrt (Minute 15)
2026.03.29 18:15:00.705 3: Stromboerse_connect  ur_10 : fc0_trigger_bat             off
2026.03.29 18:15:00.705 3: Stromboerse_connect  ur_10 : fc0_trigger_net             off
2026.03.29 18:15:00.706 3: Stromboerse_connect  ur_11 : Neuberechnung von fc1_trigger_net_start gesperrt (Minute 15)
2026.03.29 18:15:00.706 3: Stromboerse_connect  ur_15 : Neuberechnung von fc0_trigger_max_start gesperrt (Minute 15)
2026.03.29 18:15:00.706 3: Stromboerse_connect  ur_18 : fc0_trigger_max             off
2026.03.29 18:15:00.707 3: Stromboerse_connect  ur_19 : Neuberechnung von fc1_trigger_max_start gesperrt (Minute 15)
2026.03.29 18:15:00.708 3: Stromboerse_connect  ur_24 : Neuberechnung der Kosten gesperrt (Minute 15)
2026.03.29 18:15:00.709 3: Stromboerse_connect  ur_36 : fc*_total Daten für Tibber in die Datenbank schreiben
2026.03.29 18:15:00.709 3: Stromboerse_connect  ur_36 : fc0 Daten vom 2026-03-29 für Tibber gefunden
2026.03.29 18:15:00.709 4: Stromboerse_connect  ur_36 :   2026-03-29 02:00:00 fc0_total null - Sommerzeit-Sprung am letzten Sonntag im März
2026.03.29 18:15:00.709 4: Stromboerse_connect  ur_36 :   2026-03-29 02:15:00 fc0_total null - Sommerzeit-Sprung am letzten Sonntag im März
2026.03.29 18:15:00.709 4: Stromboerse_connect  ur_36 :   2026-03-29 02:30:00 fc0_total null - Sommerzeit-Sprung am letzten Sonntag im März
2026.03.29 18:15:00.709 4: Stromboerse_connect  ur_36 :   2026-03-29 02:45:00 fc0_total null - Sommerzeit-Sprung am letzten Sonntag im März
2026.03.29 18:15:00.709 3: Stromboerse_connect  ur_36 : fc1 Daten vom 2026-03-30 für Tibber gefunden
2026.03.29 18:15:00.710 4: Stromboerse_connect  ur_36 : Eintragen neuer Daten in die Datenbank
INSERT INTO history (TIMESTAMP,DEVICE,TYPE,READING,VALUE) VALUES ('2026-03-29 00:00:00','Stromboerse_connect','Tibber','fc0_total','36.4687'),
('2026-03-29 00:15:00','Stromboerse_connect','Tibber','fc0_total','35.7964'),
('2026-03-29 00:30:00','Stromboerse_connect','Tibber','fc0_total','34.3743'),
('2026-03-29 00:45:00','Stromboerse_connect','Tibber','fc0_total','33.8472'),
('2026-03-29 01:00:00','Stromboerse_connect','Tibber','fc0_total','34.8230'),
('2026-03-29 01:15:00','Stromboerse_connect','Tibber','fc0_total','34.2827'),
('2026-03-29 01:30:00','Stromboerse_connect','Tibber','fc0_total','34.2232'),
('2026-03-29 01:45:00','Stromboerse_connect','Tibber','fc0_total','33.8912'),
('2026-03-29 03:00:00','Stromboerse_connect','Tibber','fc0_total','33.6401'),        <<<< Stunde 02 muss fehlen
('2026-03-29 03:15:00','Stromboerse_connect','Tibber','fc0_total','33.4200'),
('2026-03-29 03:30:00','Stromboerse_connect','Tibber','fc0_total','33.5294'),
('2026-03-29 03:45:00','Stromboerse_connect','Tibber','fc0_total','33.5211'),
('2026-03-29 04:00:00','Stromboerse_connect','Tibber','fc0_total','34.5088'),
('2026-03-29 04:15:00','Stromboerse_connect','Tibber','fc0_total','33.7877'),
('2026-03-29 04:30:00','Stromboerse_connect','Tibber','fc0_total','33.9031'),
('2026-03-29 04:45:00','Stromboerse_connect','Tibber','fc0_total','33.8436'),
('2026-03-29 05:00:00','Stromboerse_connect','Tibber','fc0_total','33.8138'),
('2026-03-29 05:15:00','Stromboerse_connect','Tibber','fc0_total','33.8269'),
('2026-03-29 05:30:00','Stromboerse_connect','Tibber','fc0_total','34.0126'),
('2026-03-29 05:45:00','Stromboerse_connect','Tibber','fc0_total','34.0947'),
('2026-03-29 06:00:00','Stromboerse_connect','Tibber','fc0_total','33.6663'),
('2026-03-29 06:15:00','Stromboerse_connect','Tibber','fc0_total','34.0197'),
('2026-03-29 06:30:00','Stromboerse_connect','Tibber','fc0_total','35.0062'),
('2026-03-29 06:45:00','Stromboerse_connect','Tibber','fc0_total','35.5072'),
('2026-03-29 07:00:00','Stromboerse_connect','Tibber','fc0_total','35.7297'),
('2026-03-29 07:15:00','Stromboerse_connect','Tibber','fc0_total','35.2026'),
('2026-03-29 07:30:00','Stromboerse_connect','Tibber','fc0_total','34.9360'),
('2026-03-29 07:45:00','Stromboerse_connect','Tibber','fc0_total','34.8420'),
('2026-03-29 08:00:00','Stromboerse_connect','Tibber','fc0_total','36.0630'),
('2026-03-29 08:15:00','Stromboerse_connect','Tibber','fc0_total','36.3640'),
('2026-03-29 08:30:00','Stromboerse_connect','Tibber','fc0_total','34.4588'),
('2026-03-29 08:45:00','Stromboerse_connect','Tibber','fc0_total','33.7353'),
('2026-03-29 09:00:00','Stromboerse_connect','Tibber','fc0_total','34.8456'),
('2026-03-29 09:15:00','Stromboerse_connect','Tibber','fc0_total','32.7726'),
('2026-03-29 09:30:00','Stromboerse_connect','Tibber','fc0_total','32.0872'),
('2026-03-29 09:45:00','Stromboerse_connect','Tibber','fc0_total','31.1839'),
('2026-03-29 10:00:00','Stromboerse_connect','Tibber','fc0_total','33.1463'),
('2026-03-29 10:15:00','Stromboerse_connect','Tibber','fc0_total','31.4743'),
('2026-03-29 10:30:00','Stromboerse_connect','Tibber','fc0_total','29.8845'),
('2026-03-29 10:45:00','Stromboerse_connect','Tibber','fc0_total','27.0594'),
('2026-03-29 11:00:00','Stromboerse_connect','Tibber','fc0_total','29.8904'),
('2026-03-29 11:15:00','Stromboerse_connect','Tibber','fc0_total','28.0685'),
('2026-03-29 11:30:00','Stromboerse_connect','Tibber','fc0_total','26.5953'),
('2026-03-29 11:45:00','Stromboerse_connect','Tibber','fc0_total','22.6778'),
('2026-03-29 12:00:00','Stromboerse_connect','Tibber','fc0_total','24.6104'),
('2026-03-29 12:15:00','Stromboerse_connect','Tibber','fc0_total','22.4148'),
('2026-03-29 12:30:00','Stromboerse_connect','Tibber','fc0_total','22.0471'),
('2026-03-29 12:45:00','Stromboerse_connect','Tibber','fc0_total','21.5152'),
('2026-03-29 13:00:00','Stromboerse_connect','Tibber','fc0_total','21.6187'),
('2026-03-29 13:15:00','Stromboerse_connect','Tibber','fc0_total','21.4890'),
('2026-03-29 13:30:00','Stromboerse_connect','Tibber','fc0_total','21.4819'),
('2026-03-29 13:45:00','Stromboerse_connect','Tibber','fc0_total','21.3641'),
('2026-03-29 14:00:00','Stromboerse_connect','Tibber','fc0_total','21.3688'),
('2026-03-29 14:15:00','Stromboerse_connect','Tibber','fc0_total','21.3450'),
('2026-03-29 14:30:00','Stromboerse_connect','Tibber','fc0_total','21.2379'),
('2026-03-29 14:45:00','Stromboerse_connect','Tibber','fc0_total','21.1546'),
('2026-03-29 15:00:00','Stromboerse_connect','Tibber','fc0_total','21.2486'),
('2026-03-29 15:15:00','Stromboerse_connect','Tibber','fc0_total','21.2034'),
('2026-03-29 15:30:00','Stromboerse_connect','Tibber','fc0_total','21.2427'),
('2026-03-29 15:45:00','Stromboerse_connect','Tibber','fc0_total','21.2617'),
('2026-03-29 16:00:00','Stromboerse_connect','Tibber','fc0_total','21.4795'),
('2026-03-29 16:15:00','Stromboerse_connect','Tibber','fc0_total','21.4890'),
('2026-03-29 16:30:00','Stromboerse_connect','Tibber','fc0_total','21.4890'),
('2026-03-29 16:45:00','Stromboerse_connect','Tibber','fc0_total','21.9138'),
('2026-03-29 17:00:00','Stromboerse_connect','Tibber','fc0_total','21.7865'),
('2026-03-29 17:15:00','Stromboerse_connect','Tibber','fc0_total','23.2038'),
('2026-03-29 17:30:00','Stromboerse_connect','Tibber','fc0_total','25.5648'),
('2026-03-29 17:45:00','Stromboerse_connect','Tibber','fc0_total','31.2565'),
('2026-03-29 18:00:00','Stromboerse_connect','Tibber','fc0_total','28.3970'),
('2026-03-29 18:15:00','Stromboerse_connect','Tibber','fc0_total','31.1173'),
('2026-03-29 18:30:00','Stromboerse_connect','Tibber','fc0_total','33.1486'),
('2026-03-29 18:45:00','Stromboerse_connect','Tibber','fc0_total','35.7809'),
('2026-03-29 19:00:00','Stromboerse_connect','Tibber','fc0_total','33.2986'),
('2026-03-29 19:15:00','Stromboerse_connect','Tibber','fc0_total','34.4410'),
('2026-03-29 19:30:00','Stromboerse_connect','Tibber','fc0_total','34.4148'),
('2026-03-29 19:45:00','Stromboerse_connect','Tibber','fc0_total','34.1042'),
('2026-03-29 20:00:00','Stromboerse_connect','Tibber','fc0_total','35.7345'),
('2026-03-29 20:15:00','Stromboerse_connect','Tibber','fc0_total','34.3303'),
('2026-03-29 20:30:00','Stromboerse_connect','Tibber','fc0_total','31.1494'),
('2026-03-29 20:45:00','Stromboerse_connect','Tibber','fc0_total','30.0475'),
('2026-03-29 21:00:00','Stromboerse_connect','Tibber','fc0_total','32.9523'),
('2026-03-29 21:15:00','Stromboerse_connect','Tibber','fc0_total','31.6409'),
('2026-03-29 21:30:00','Stromboerse_connect','Tibber','fc0_total','29.0955'),
('2026-03-29 21:45:00','Stromboerse_connect','Tibber','fc0_total','27.8781'),
('2026-03-29 22:00:00','Stromboerse_connect','Tibber','fc0_total','32.9832'),
('2026-03-29 22:15:00','Stromboerse_connect','Tibber','fc0_total','30.7698'),
('2026-03-29 22:30:00','Stromboerse_connect','Tibber','fc0_total','28.8944'),
('2026-03-29 22:45:00','Stromboerse_connect','Tibber','fc0_total','25.1292'),
('2026-03-29 23:00:00','Stromboerse_connect','Tibber','fc0_total','28.0566'),
('2026-03-29 23:15:00','Stromboerse_connect','Tibber','fc0_total','24.4402'),
('2026-03-29 23:30:00','Stromboerse_connect','Tibber','fc0_total','23.5822'),
('2026-03-29 23:45:00','Stromboerse_connect','Tibber','fc0_total','22.0793'),
('2026-03-30 00:00:00','Stromboerse_connect','Tibber','fc1_total','23.6025'),
('2026-03-30 00:15:00','Stromboerse_connect','Tibber','fc1_total','22.6112'),
('2026-03-30 00:30:00','Stromboerse_connect','Tibber','fc1_total','22.1042'),
('2026-03-30 00:45:00','Stromboerse_connect','Tibber','fc1_total','22.0162'),
('2026-03-30 01:00:00','Stromboerse_connect','Tibber','fc1_total','21.9948'),
('2026-03-30 01:15:00','Stromboerse_connect','Tibber','fc1_total','21.8627'),
('2026-03-30 01:30:00','Stromboerse_connect','Tibber','fc1_total','21.6782'),
('2026-03-30 01:45:00','Stromboerse_connect','Tibber','fc1_total','21.5152'),
('2026-03-30 02:00:00','Stromboerse_connect','Tibber','fc1_total','22.1411'),
('2026-03-30 02:15:00','Stromboerse_connect','Tibber','fc1_total','22.0245'),
('2026-03-30 02:30:00','Stromboerse_connect','Tibber','fc1_total','22.0804'),
('2026-03-30 02:45:00','Stromboerse_connect','Tibber','fc1_total','22.0995'),
('2026-03-30 03:00:00','Stromboerse_connect','Tibber','fc1_total','21.8555'),
('2026-03-30 03:15:00','Stromboerse_connect','Tibber','fc1_total','21.9412'),
('2026-03-30 03:30:00','Stromboerse_connect','Tibber','fc1_total','21.9543'),
('2026-03-30 03:45:00','Stromboerse_connect','Tibber','fc1_total','22.0257'),
('2026-03-30 04:00:00','Stromboerse_connect','Tibber','fc1_total','21.7496'),
('2026-03-30 04:15:00','Stromboerse_connect','Tibber','fc1_total','21.9103'),
('2026-03-30 04:30:00','Stromboerse_connect','Tibber','fc1_total','21.9745'),
('2026-03-30 04:45:00','Stromboerse_connect','Tibber','fc1_total','22.3958'),
('2026-03-30 05:00:00','Stromboerse_connect','Tibber','fc1_total','21.9103'),
('2026-03-30 05:15:00','Stromboerse_connect','Tibber','fc1_total','22.3958'),
('2026-03-30 05:30:00','Stromboerse_connect','Tibber','fc1_total','23.5394'),
('2026-03-30 05:45:00','Stromboerse_connect','Tibber','fc1_total','26.8797'),
('2026-03-30 06:00:00','Stromboerse_connect','Tibber','fc1_total','24.5890'),
('2026-03-30 06:15:00','Stromboerse_connect','Tibber','fc1_total','29.0455'),
('2026-03-30 06:30:00','Stromboerse_connect','Tibber','fc1_total','31.9563'),
('2026-03-30 06:45:00','Stromboerse_connect','Tibber','fc1_total','32.1955'),
('2026-03-30 07:00:00','Stromboerse_connect','Tibber','fc1_total','30.1903'),
('2026-03-30 07:15:00','Stromboerse_connect','Tibber','fc1_total','32.1371'),
('2026-03-30 07:30:00','Stromboerse_connect','Tibber','fc1_total','33.4509'),
('2026-03-30 07:45:00','Stromboerse_connect','Tibber','fc1_total','33.1665'),
('2026-03-30 08:00:00','Stromboerse_connect','Tibber','fc1_total','35.3799'),
('2026-03-30 08:15:00','Stromboerse_connect','Tibber','fc1_total','34.3720'),
('2026-03-30 08:30:00','Stromboerse_connect','Tibber','fc1_total','34.3874'),
('2026-03-30 08:45:00','Stromboerse_connect','Tibber','fc1_total','33.8067'),
('2026-03-30 09:00:00','Stromboerse_connect','Tibber','fc1_total','34.7992'),
('2026-03-30 09:15:00','Stromboerse_connect','Tibber','fc1_total','33.6461'),
('2026-03-30 09:30:00','Stromboerse_connect','Tibber','fc1_total','32.9535'),
('2026-03-30 09:45:00','Stromboerse_connect','Tibber','fc1_total','30.6520'),
('2026-03-30 10:00:00','Stromboerse_connect','Tibber','fc1_total','31.7218'),
('2026-03-30 10:15:00','Stromboerse_connect','Tibber','fc1_total','30.0023'),
('2026-03-30 10:30:00','Stromboerse_connect','Tibber','fc1_total','31.2756'),
('2026-03-30 10:45:00','Stromboerse_connect','Tibber','fc1_total','28.1078'),
('2026-03-30 11:00:00','Stromboerse_connect','Tibber','fc1_total','29.9713'),
('2026-03-30 11:15:00','Stromboerse_connect','Tibber','fc1_total','27.4747'),
('2026-03-30 11:30:00','Stromboerse_connect','Tibber','fc1_total','26.1502'),
('2026-03-30 11:45:00','Stromboerse_connect','Tibber','fc1_total','24.2546'),
('2026-03-30 12:00:00','Stromboerse_connect','Tibber','fc1_total','26.1788'),
('2026-03-30 12:15:00','Stromboerse_connect','Tibber','fc1_total','24.4676'),
('2026-03-30 12:30:00','Stromboerse_connect','Tibber','fc1_total','23.8583'),
('2026-03-30 12:45:00','Stromboerse_connect','Tibber','fc1_total','22.6790'),
('2026-03-30 13:00:00','Stromboerse_connect','Tibber','fc1_total','23.5775'),
('2026-03-30 13:15:00','Stromboerse_connect','Tibber','fc1_total','23.3395'),
('2026-03-30 13:30:00','Stromboerse_connect','Tibber','fc1_total','22.6683'),
('2026-03-30 13:45:00','Stromboerse_connect','Tibber','fc1_total','21.7972'),
('2026-03-30 14:00:00','Stromboerse_connect','Tibber','fc1_total','22.6076'),
('2026-03-30 14:15:00','Stromboerse_connect','Tibber','fc1_total','22.5207'),
('2026-03-30 14:30:00','Stromboerse_connect','Tibber','fc1_total','22.3922'),
('2026-03-30 14:45:00','Stromboerse_connect','Tibber','fc1_total','22.0257'),
('2026-03-30 15:00:00','Stromboerse_connect','Tibber','fc1_total','22.6052'),
('2026-03-30 15:15:00','Stromboerse_connect','Tibber','fc1_total','22.7659'),
('2026-03-30 15:30:00','Stromboerse_connect','Tibber','fc1_total','22.8766'),
('2026-03-30 15:45:00','Stromboerse_connect','Tibber','fc1_total','23.8666'),
('2026-03-30 16:00:00','Stromboerse_connect','Tibber','fc1_total','22.6766'),
('2026-03-30 16:15:00','Stromboerse_connect','Tibber','fc1_total','24.2665'),
('2026-03-30 16:30:00','Stromboerse_connect','Tibber','fc1_total','26.7560'),
('2026-03-30 16:45:00','Stromboerse_connect','Tibber','fc1_total','28.9860'),
('2026-03-30 17:00:00','Stromboerse_connect','Tibber','fc1_total','26.8988'),
('2026-03-30 17:15:00','Stromboerse_connect','Tibber','fc1_total','29.2788'),
('2026-03-30 17:30:00','Stromboerse_connect','Tibber','fc1_total','31.8170'),
('2026-03-30 17:45:00','Stromboerse_connect','Tibber','fc1_total','34.8277'),
('2026-03-30 18:00:00','Stromboerse_connect','Tibber','fc1_total','31.6040'),
('2026-03-30 18:15:00','Stromboerse_connect','Tibber','fc1_total','33.9876'),
('2026-03-30 18:30:00','Stromboerse_connect','Tibber','fc1_total','34.5052'),
('2026-03-30 18:45:00','Stromboerse_connect','Tibber','fc1_total','35.7571'),
('2026-03-30 19:00:00','Stromboerse_connect','Tibber','fc1_total','35.0622'),
('2026-03-30 19:15:00','Stromboerse_connect','Tibber','fc1_total','35.4453'),
('2026-03-30 19:30:00','Stromboerse_connect','Tibber','fc1_total','36.0391'),
('2026-03-30 19:45:00','Stromboerse_connect','Tibber','fc1_total','37.3160'),
('2026-03-30 20:00:00','Stromboerse_connect','Tibber','fc1_total','36.3390'),
('2026-03-30 20:15:00','Stromboerse_connect','Tibber','fc1_total','36.2926'),
('2026-03-30 20:30:00','Stromboerse_connect','Tibber','fc1_total','36.6437'),
('2026-03-30 20:45:00','Stromboerse_connect','Tibber','fc1_total','36.4699'),
('2026-03-30 21:00:00','Stromboerse_connect','Tibber','fc1_total','37.6718'),
('2026-03-30 21:15:00','Stromboerse_connect','Tibber','fc1_total','36.3426'),
('2026-03-30 21:30:00','Stromboerse_connect','Tibber','fc1_total','36.7186'),
('2026-03-30 21:45:00','Stromboerse_connect','Tibber','fc1_total','35.2775'),
('2026-03-30 22:00:00','Stromboerse_connect','Tibber','fc1_total','36.9019'),
('2026-03-30 22:15:00','Stromboerse_connect','Tibber','fc1_total','35.7012'),
('2026-03-30 22:30:00','Stromboerse_connect','Tibber','fc1_total','35.7809'),
('2026-03-30 22:45:00','Stromboerse_connect','Tibber','fc1_total','35.2514'),
('2026-03-30 23:00:00','Stromboerse_connect','Tibber','fc1_total','35.2014'),
('2026-03-30 23:15:00','Stromboerse_connect','Tibber','fc1_total','34.5969'),
('2026-03-30 23:30:00','Stromboerse_connect','Tibber','fc1_total','34.2934'),
('2026-03-30 23:45:00','Stromboerse_connect','Tibber','fc1_total','33.6913') AS new ON DUPLICATE KEY UPDATE VALUE = new.VALUE;
2026.03.29 18:15:00.737 3: Stromboerse      diagram   : fc0 Daten wurden im Diagramm gesetzt
2026.03.29 18:15:00.738 3: Stromboerse      diagram   : fc1 Daten wurden im Diagramm gesetzt
2026.03.29 18:15:00.761 3: Stromboerse      set price : Setzen aktueller Preis
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

ch.eick

Zitat von: f_sieler am 29 März 2026, 18:02:16Danke ch.eick für Deine umfangreiche Arbeit. ;D

Ich bin versuchsweise von "Tibber_connect" auf "Stromboerse_connect" umgestiegen.
Auf meiner Rechnung von Tibber werden als Preisbestandteile:
"Stromverbrauch Februar ......... 22,18 Cent/kWh" das ist der verbrauchsabhängige Teil 
"Tibber Gebühr 3,35€"  monatlich
"Netznutzungsgebühr 0,24€/Tag"
"Messstellengebühr 0,06€/Tag"
aufgeführt.
Wie bringe ich das mit "conf_EVU_Tibber_Grundgebuehr_EUR_Jahr, conf_EVU_Tibber_Korrektur, conf_EVU_Tibber_Zuschlag_ct_kWh" in Übereinstimmung?
Oh je, ich habe noch nie eine Rechnung von Tibber gesehen, aber das könnte man ja anpassen :-)

Dieser Posten sollte dann wohl conf_EVU_Tibber_Zuschlag_ct_kWh sein und jeweils auf den Spot Preis addiert werden
"Stromverbrauch Februar ......... 22,18 Cent/kWh" das ist der verbrauchsabhängige Teil 

"Tibber Gebühr 3,35€"  monatlich  ==> 3.35 X 12 => conf_EVU_Tibber_Grundgebuehr_EUR_Jahr

Das hier würde ich auf 365 Tage rechnen und zu conf_EVU_Tibber_Grundgebuehr_EUR_Jahr addieren.
"Netznutzungsgebühr 0,24€/Tag"
"Messstellengebühr 0,06€/Tag"
Oder wir nehmen diese Einzelkosten ale Attribute für Tibber auf.

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

f_sieler

Danke für die schnelle Antwort.
In der Zeile für den Stromverbrauch steht wörtlich:

Stromverbrauch
Februar        88,01€
396,87 kWh     22,19 Cent/kWh

Ich hoffe das ist der zusammengerechnete Spot Preis. ???
Ich rechne:   "Tibber Gebühr 3,35€" = 40,02€
              "Netznutzungsgebühr 0,24€/Tag" = 87,6€
              "Messstellengebühr 0,06€/Tag" = 21,9€
zusammen und setze conf_EVU_Tibber_Grundgebuehr_EUR_Jahr = 149,52€
conf__Tibber_Korrektur, conf_EVU_Tibber_Zuschlag_ct_kWh = 0
FHEM 5.5 auf FritzBox 7390, CUL für FS20, 8x fht80b, 7x fht80TF, 3x fs20st-4,  FB_Callmonitor

ch.eick

Zitat von: f_sieler am 29 März 2026, 19:42:29Danke für die schnelle Antwort.
In der Zeile für den Stromverbrauch steht wörtlich:

Stromverbrauch
Februar        88,01€
396,87 kWh     22,19 Cent/kWh

Ich hoffe das ist der zusammengerechnete Spot Preis. ???
Ich rechne:   "Tibber Gebühr 3,35€" = 40,02€
              "Netznutzungsgebühr 0,24€/Tag" = 87,6€
              "Messstellengebühr 0,06€/Tag" = 21,9€
zusammen und setze conf_EVU_Tibber_Grundgebuehr_EUR_Jahr = 149,52€
conf__Tibber_Korrektur, conf_EVU_Tibber_Zuschlag_ct_kWh = 0

Das sieht für mich so aus, als ob Du noch in den ersten Monaten bist und Tibber Dir einen Durchschnittspreis berechnet.
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

f_sieler

Ich bin seit 6/2023 Tibber-Kunde und werde schon sehr lange erst stündlich und nun viertelstündlich abgerechnet.
Sicher, es gab Ausfälle bei der Datenübermittlung die aber nie länger als zwei Stunden waren.
Die 22,19 Cent/kWh errechnet Tibber sicher am Monatsende aus dem Gesamtpreis und dem Verbrauch.
Ich muss erst noch beobachten wie gross die Abweichung zum Preis in der Tibber-App ist.
FHEM 5.5 auf FritzBox 7390, CUL für FS20, 8x fht80b, 7x fht80TF, 3x fs20st-4,  FB_Callmonitor

ch.eick

Zitat von: f_sieler am 29 März 2026, 21:47:02Ich bin seit 6/2023 Tibber-Kunde und werde schon sehr lange erst stündlich und nun viertelstündlich abgerechnet.
Sicher, es gab Ausfälle bei der Datenübermittlung die aber nie länger als zwei Stunden waren.
Die 22,19 Cent/kWh errechnet Tibber sicher am Monatsende aus dem Gesamtpreis und dem Verbrauch.
Ich muss erst noch beobachten wie gross die Abweichung zum Preis in der Tibber-App ist.
1. Verwendung von Tibber
   Für das DEVICE sind die einzel Kosten wichtig, die dann in Summe ct/kWh auf den Spot Preis addiert werden.
   Schau mal in die Preis Zusammensetzung von Tibber, die Du eventuell zu beginn bekommen hast.
   Das wäre für diejenigen, die noch kein Tibber haben, es aber mal vergleichen möchten.

2. Verwendung von Tibber-Live
   Das ist für die, die bereits Kunde sind und somit die Preise von Tibber-Live bekommen.
   Da muss man dann mit seinem Token die Abfrage konfigurieren.
   Über eine Session werden dann die Tibber-Pulse Live Daten über die Tibber API abgefragt.

Mein Device verbindet somit eine Prognose für Tibber oder aWATTar oder die Abfrage von Tibber als Kunde, in einem FHEM Device.

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