Skip to content

Commit

Permalink
Docs: Added training folder to hold educational presentations for the…
Browse files Browse the repository at this point in the history
… EAF
  • Loading branch information
zoernert committed Jan 15, 2024
1 parent 1bc7029 commit 2a774b3
Show file tree
Hide file tree
Showing 15 changed files with 465 additions and 50 deletions.
Binary file added docs/de/training/bg_stromdao.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
195 changes: 195 additions & 0 deletions docs/de/training/bilanzierung.html

Large diffs are not rendered by default.

177 changes: 177 additions & 0 deletions docs/de/training/bilanzierung.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
---
marp: true
backgroundImage: url('./bg_stromdao.png')
---

# Bilanzierung und Fakturierung bei Dynamischen Stromtarifen
## Umsetzung im Energy Application Framework

---

# Übersicht
- Einführung in die Dynamischen Stromtarife
- Wichtigkeit der kontinuierlichen Messwertverarbeitung
- Der Prozess des Settlements
- Unterscheidung zwischen Fakturierung und Bilanzierung
- Herausforderungen der synchronen Abrechnung
- Lösungsansatz im STROMDAO EAF: Trennung von Clearing und Balancing

---

# Dynamische Stromtarife
- Definition und Relevanz
- Ablesen der Stromzählerstände
- Kontinuierliche Erfassung als Grundlage der Tarifierung

---

# Dynamische Stromtarife
## Was sind sie?

- Definition: Stromtarife, die basierend auf Echtzeit-Marktkonditionen oder Netzlast variieren können
- Relevanz: Fördern ein effizienteres Energiemanagement und erlauben Konsumenten, Kosten zu sparen
- Anpassungsfähig an Angebot und Nachfrage sowie erneuerbare Energieresourcen

---

# Die Bedeutung des Ablesens der Stromzählerstände
## Eine kontinuierliche Notwendigkeit

- Zählerstände geben den exakten Energieverbrauch wieder
- Grundlage für die genaue Abrechnung und Tarifierung
- Wichtig für die Abrechnung bei dynamischen Tarifen, die sich kurzfristig ändern können

---

# Kontinuierliche Erfassung der Stromzählerstände
## Die Grundlage der Tarifierung

- Erfassung von Energieverbrauch in Echtzeit oder in kurzen Intervallen
- Wichtig für korrekte Anpassung der Tarife gemäß dem tatsächlichen Verbrauchsmuster
- Ermöglicht verbrauchsabhängige Preismodelle und Transparenz für den Verbraucher

---
# Kontinuierliche Messwertverarbeitung
- Notwendigkeit regelmäßiger Zählerstandsgänge
- Bedeutung für Kunden und Energiewirtschaft
- Prozessüberblick vom Zählerstand zum Settlement

---
# Kontinuierliche Messwertverarbeitung
## Notwendigkeit regelmäßiger Zählerstandsgänge

- Regelmäßige Übermittlung von Zählerständen für genaue Stromtarifierung
- Technische Lösungen: Smart Meter Gateways und Leseköpfe auf modernen Messeinrichtungen
- Zukünftige Entwicklungen im Bereich der Messdatenübertragung

<!--
Messwertverarbeitung und ihre Bedeutung für die genaue Stromtarifierung.
Beginnen wir mit der Rolle der regelmäßigen Zählerablesungen, die eine hohe Wichtigkeit für die Zuverlässigkeit und Präzision der Stromtarife haben. Stellen Sie sich vor, ohne diese genauen Daten wäre es für Stromversorger und -verbraucher nahezu unmöglich, den tatsächlichen Stromverbrauch korrekt abzurechnen.
Um diese kritischen Daten zu erfassen, setzen sowohl Haushalte als auch Unternehmen auf verschiedene technische Lösungen. Eine prominente Technologie sind die Smart Meter Gateways, die für eine sichere und effiziente Datenübertragung sorgen. Alternativ werden auch Leseköpfe eingesetzt, die an modernen Messeinrichtungen angebracht werden, um die Zählerstände zu erfassen und weiterzuleiten.
Schließlich ist es wichtig, einen Blick auf zukünftige Entwicklungen im Bereich der Messdatenübertragung zu werfen. Mit der fortschreitenden Digitalisierung des Energiesektors können wir spannende Innovationen erwarten, die eine noch präzisere und zeitnahe Datenerfassung ermöglichen werden.
Fassen wir zusammen, dass die regelmäßige Übermittlung dieser Daten grundlegend für unser Stromversorgungssystem ist und dass die Weiterentwicklung dieser Technologien einen enormen Einfluss auf die Energiebranche haben wird.
Denken Sie während des Vortrags daran, die Bedeutung jeder dieser Komponenten zu verdeutlichen und die Zuhörer zu ermutigen, Fragen zu stellen, insbesondere zu technischen Lösungen und zukünftigen Entwicklungen.
-->

---

# Bedeutung der Messwertverarbeitung
## Für Kunden und Energieversorger

- Gewährleistung von Betriebssicherheit in Ablesung und Kommunikation
- Wichtig für die Verlässlichkeit und Genauigkeit der Stromabrechnung
- Aufbau eines vertrauensvollen Verhältnisses zwischen Kunden und Energiewirtschaft

---

# Vom Zählerstand zum Settlement
## Ein Prozessüberblick

- Ankunft der Zählerstände bei Systemen wie dem STROMDAO EAF
- Authentifizierung und Autorisierung der Daten als erster Schritt
- Plausibilitätsprüfung zur Sicherstellung der Messwertqualität
- Überführung der Daten in nachfolgende Schritte zur Abrechnung

---

# Der Settlement-Prozess
- Von zwei Ablesungen zum Settlement
- Energieaufteilung bei veränderlichen Bedingungen
- Abgrenzung bei schwankenden Strompreisen

---
# Der Settlement-Prozess
## Einführung

- Definition von "Zählerstandsgang" als Differenz zwischen zwei aufeinanderfolgenden Zählerablesungen
- Wichtigkeit des Zählerstandsgangs als Basis für das Settlement

---

# Erfassung des Verbrauchs
## Ermittlung der Energiemengen

- Ermittlung der verbrauchten Energiemenge auf Basis des Zählerstandsgangs
- Settlement als Prozess zur Energiebilanzierung zwischen den Ablesungen

---

# Energieaufteilung unter variablen Bedingungen
## Herausforderungen und Methoden

- Bedingungen wie Preise oder Verbrauch können zwischen den Ablesungen variieren
- Notwendige Abgrenzung zur gerechten Aufteilung der Energiemengen

---

# Abgrenzung bei Strompreisschwankungen
## Anpassung des Settlements

- Berücksichtigung schwankender Strompreise im Abrechnungszeitraum
- Verfahren zur korrekten Abgrenzung der Kosten entsprechend den Veränderungen

---

# Zusammenfassung Settlement
## Wichtigkeit einer präzisen Abgrenzung

- Eine genaue Abgrenzung ist entscheidend für faire und transparente Abrechnungen
- Gewährleistet die korrekte Zuweisung von Energiekosten und -mengen

---
# Fakturierung vs. Bilanzierung
- Fakturierung: Abrechnung mit dem Stromkunden
- Bilanzierung: Abrechnung auf Energiewirtschaftsebene
- Sichtweisen und Zuständigkeiten

---

# Herausforderungen der synchronen Abrechnung
- Asynchronität bei Bilanzierung und Fakturierung
- Endgültige Abrechnung vs. Echtzeit-Fakturierung
- Geschätzte vs. reale Strommengen

---

# Lösung im STROMDAO EAF
- Trennung der Prozesse: Clearing und Balancing
- Clearing: Fakturierung der Stromkunden
- Balancing: Bilanzierung im Energiesektor
- Anpassung an Echtzeitbedingungen und flexible Tarife

---

# Zusammenfassung
- Wichtigkeit der getrennten Verarbeitung im STROMDAO EAF
- Vorteile der Unabhängigkeit von Clearing und Balancing
- Zukünftige Entwicklungen und Herausforderungen

---

# Q&A
### Haben Sie Fragen?
6 changes: 6 additions & 0 deletions framework/public/devUI/assets/js/uc_assets.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ $(document).ready(function() {
html += '<button class="btn btn-xs btn-dark btnClear openProfile" title="Lastgangprofil öffnen" data-id="'+data[i].meterId+'"><i class="fa fa-bar-chart-o"></i></button>';
html += '<button class="btn btn-xs btn-dark btnClear openReading" title="Zählerstandserfassung öffnen" data-id="'+data[i].meterId+'"><i class="fa fa-pencil"></i></button>';
html += '<button class="btn btn-xs btn-dark btnClear openClearing" title="Clearing öffnen" data-id="'+data[i].meterId+'"><i class="fa fa-euro"></i></button>';
html += '<button class="btn btn-xs btn-dark btnClear openBalancing" title="Bilanzierung öffnen" data-id="'+data[i].meterId+'"><i class="fa fa-balance-scale"></i></button>';
html += '</td>';
html += '</tr>';
}
Expand Down Expand Up @@ -53,6 +54,11 @@ $(document).ready(function() {
const meterId = $(this).data('id');
location.href="./uc_clearing.html?meterId="+meterId;
});
$('.openBalancing').off();
$('.openBalancing').click(function() {
const meterId = $(this).data('id');
location.href="./uc_balancing.html?assetId="+meterId;
});

}

Expand Down
66 changes: 49 additions & 17 deletions framework/public/devUI/assets/js/uc_balancing.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,52 +20,84 @@ $(document).ready(function() {
html += '</thead>';
html += '<tbody>';
for(let i=0;i<data.length;i++) {
let marker = '';
if(data[i].epoch == window.highlightEpoch) {
marker = ' class="text-bg-success" ';
}
html += '<tr>';
html += '<td><button class="btn btn-sm btn-dark btnTx" data-epoch="'+data[i].epoch+'" data-label="'+data[i].label+'">' + new Date(data[i].time).toLocaleString() + '</button></td>';
html += '<td>' + customLabels[data[i].label] + '</td>';
html += '<td>' + (data[i].in/1000).toFixed(3).replace('.',',') + 'kWh</td>';
html += '<td>' + (data[i].out/1000).toFixed(3).replace('.',',') + 'kWh</td>';
html += '<td>' + ((data[i].out - data[i].in)/1000).toFixed(3).replace('.',',') + 'kWh</td>';
html += '<td'+marker+'><button class="btn btn-sm btn-dark btnLedger" data-epoch="'+data[i].epoch+'" data-label="'+data[i].label+'" data-in="'+data[i].in+'" data-out="'+data[i].out+'" data-time="'+data[i].time+'">' + new Date(data[i].time).toLocaleString() + '</button></td>';
html += '<td'+marker+'>' + customLabels[data[i].label] + '</td>';
html += '<td'+marker+'>' + (data[i].in/1000).toFixed(3).replace('.',',') + 'kWh</td>';
html += '<td'+marker+'>' + (data[i].out/1000).toFixed(3).replace('.',',') + 'kWh</td>';
html += '<td'+marker+'>' + ((data[i].out - data[i].in)/1000).toFixed(3).replace('.',',') + 'kWh</td>';
html += '</tr>';
}
html += '</tbody>';
html += '</table>';
$('#backBtn').attr('data-epoch',data[data.length-1].epoch);
$('#fwdBtn').attr('data-epoch',data[0].epoch + 24);
$('#epochbalance').html(html);
$('.btnTx').off();
$('.btnTx').click(function() {
console.log("Loading");
//$('#modalStatement').modal('show');
$('.btnLedger').off();
$('.btnLedger').click(function() {
$('#txTable').html('...');
$('#balanceModal').html('...');
let html = '<table class="table table-condensed">';
html += '<thead>';
html += '<tr>';
html += '<th>Zeitscheibe</th>';
html += '<th>Lieferung</th>';
html += '<th>Einspeisung</th>';
html += '<th>Saldo</th>';
html += '</tr>';
html += '</thead>';
html += '<tbody>';
html += '<tr>';
html += '<td>'+new Date($(this).attr('data-time')* 1).toLocaleString()+'</td>';
html += '<td>'+($(this).attr('data-in')/1000).toFixed(3).replace('.',',')+'kWh</td>';
html += '<td>'+($(this).attr('data-out')/1000).toFixed(3).replace('.',',')+'kWh</td>';
html += '<td>'+(($(this).attr('data-out') - $(this).attr('data-in'))/1000).toFixed(3).replace('.',',')+'kWh</td>';
html += '</tbody>';
html += '</table>';
console.log("html",html);
$('#balanceModal').html(html);
$('#modalStatement').modal('show');
$.getJSON("/api/balancing/statements?assetId="+window.assetId+"&epoch="+$(this).attr('data-epoch')+"&label="+$(this).attr('data-label'),function(data) {
let html = '<table class="table table-condensed table-striped">';
html += '<thead>';
html += '<tr>';
html += '<th>Zeitscheibe</th>';
html += '<th>Segment</th>';
html += '<th>Lieferung</th>';
html += '<th>Einspeisung</th>';
html += '<th>Saldo</th>';
html += '<th>Von</th>';
html += '<th>An</th>';
html += '<th>Energie</th>';
html += '</tr>';
html += '</thead>';
html += '<tbody>';
for(let i=0;i<data.length;i++) {
html += '<tr>';
html += '<td>' + new Date(data[i].time).toLocaleString() + '</td>';
html += '<td>' + customLabels[data[i].label] + '</td>';
html += '<td>' + (data[i].in/1000).toFixed(3).replace('.',',') + 'kWh</td>';
html += '<td><button class="btn btn-sm btn-dark btnAsset" data-assetId="'+data[i].from+'" data-epoch="'+data[i].epoch+'">' + data[i].from + '</button></td>';
html += '<td><button class="btn btn-sm btn-dark btnAsset" data-assetId="'+data[i].to+'" data-epoch="'+data[i].epoch+'">' + data[i].to + '</button></td>';
html += '<td>' + (data[i].energy/1000).toFixed(3).replace('.',',') + 'kWh</td>';
html += '</tr>';
}
html += '</tbody>';
html += '</table>';
$('#txTable').html(html);
$('.btnAsset').off();
$('.btnAsset').click(function() {
balanceRetrieve($(this).attr('data-assetId'),$(this).attr('data-epoch'));
$('#modalStatement').modal('hide');
});
});

});
}
const balanceRetrieve = (assetId,epoch) => {
window.assetId = assetId;
window.highlightEpoch = 1 * epoch;

$('#assetLabel').html(window.assetId);

let epochQuery = "";
if(epoch) {
epochQuery = "&epoch="+epoch;
Expand All @@ -78,10 +110,10 @@ $(document).ready(function() {
balanceRetrieve('eaf_general');
}
$('#backBtn').click(function() {
balanceRetrieve($.urlParam('assetId'),$(this).attr('data-epoch'));
balanceRetrieve(window.assetId,$(this).attr('data-epoch'));
});
$('#fwdBtn').click(function() {
balanceRetrieve($.urlParam('assetId'),$(this).attr('data-epoch'));
balanceRetrieve(window.assetId,$(this).attr('data-epoch'));
});
});
});
2 changes: 1 addition & 1 deletion framework/public/devUI/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
<li class="nav-item"><a class="nav-link" href="uc_tariff.html">Tarif</a></li>
<li class="nav-item"><a class="nav-link" href="uc_settlement.html">Settlement</a></li>
<li class="nav-item"><a class="nav-link" href="uc_assets.html">Zählpunkte</a></li>
<li class="nav-item"></li>
<li class="nav-item"><a class="nav-link" href="uc_balancing.html">Bilanzierung</a></li>
</ul>
<form class="ms-auto" action="./uc_assets.html" method="get">
<div class="input-group"><input class="form-control" type="search" id="searchMeter" name="meterId" required="" minlength="2"><button class="btn btn-dark" type="submit"><i class="fa fa-search"></i></button></div>
Expand Down
4 changes: 2 additions & 2 deletions framework/public/devUI/uc_assets.html
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
<li class="nav-item"><a class="nav-link" href="uc_tariff.html">Tarif</a></li>
<li class="nav-item"><a class="nav-link" href="uc_settlement.html">Settlement</a></li>
<li class="nav-item"><a class="nav-link" href="uc_assets.html">Zählpunkte</a></li>
<li class="nav-item"></li>
<li class="nav-item"><a class="nav-link" href="uc_balancing.html">Bilanzierung</a></li>
</ul>
<form class="ms-auto" action="./uc_assets.html" method="get">
<div class="input-group"><input class="form-control" type="search" id="searchMeter" name="meterId" required="" minlength="2"><button class="btn btn-dark" type="submit"><i class="fa fa-search"></i></button></div>
Expand Down Expand Up @@ -51,7 +51,7 @@ <h3>Zählpunkte / Messstellen&nbsp;</h3>
<script src="assets/js/jquery.min.js?h=6bcc3684f18aa21874fa709f122723cf"></script>
<script src="assets/bootstrap/js/bootstrap.min.js?h=e55bde7d6e36ebf17ba0b8c1e80e4065"></script>
<script src="assets/js/utils.js?h=13e600a17e8be592a9d46183d1921d45"></script>
<script src="assets/js/uc_assets.js?h=73adc4fcabf0e7994d850bb5e0ee32ed"></script>
<script src="assets/js/uc_assets.js?h=19e8b22e81756388207d8eb63a419419"></script>
</body>

</html>
29 changes: 14 additions & 15 deletions framework/public/devUI/uc_balancing.html
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
<li class="nav-item"><a class="nav-link" href="uc_tariff.html">Tarif</a></li>
<li class="nav-item"><a class="nav-link" href="uc_settlement.html">Settlement</a></li>
<li class="nav-item"><a class="nav-link" href="uc_assets.html">Zählpunkte</a></li>
<li class="nav-item"></li>
<li class="nav-item"><a class="nav-link" href="uc_balancing.html">Bilanzierung</a></li>
</ul>
<form class="ms-auto" action="./uc_assets.html" method="get">
<div class="input-group"><input class="form-control" type="search" id="searchMeter" name="meterId" required="" minlength="2"><button class="btn btn-dark" type="submit"><i class="fa fa-search"></i></button></div>
Expand All @@ -30,33 +30,32 @@
</nav>
</header>
<div class="container">
<form id="fetchSettlement">
<div class="card">
<div class="card-body">
<h3>
<div class="btn-group float-end" role="group"><button class="btn btn-dark" id="backBtn" type="button"><i class="fa fa-backward"></i></button><button class="btn btn-dark" id="fwdBtn" type="button"><i class="fa fa-forward"></i></button></div>Energie Bilanz
</h3>
<div id="epochbalance"></div>
</div>
<div class="card">
<div class="card-body">
<h3>
<div class="btn-group float-end" role="group"><button class="btn btn-dark" id="backBtn" type="button"><i class="fa fa-backward"></i></button><button class="btn btn-dark" id="fwdBtn" type="button"><i class="fa fa-forward"></i></button></div>Energie Bilanz:&nbsp;<span id="assetLabel">-</span>
</h3>
<div id="epochbalance"></div>
</div>
</form>
</div>
</div>
<div class="modal fade" role="dialog" tabindex="-1" id="modalStatement">
<div class="modal-dialog" role="document">
<div class="modal-dialog modal-lg modal-dialog-scrollable" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Transaktionen</h4><button class="btn-close" type="button" aria-label="Close" data-bs-dismiss="modal"></button>
<div id="balanceModal"></div><button class="btn-close" type="button" aria-label="Close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body" id="txTable">
<p>Wird geladen...</p>
<div class="modal-body">
<h4 class="modal-title">Transaktionen</h4>
<div id="txTable"></div>
</div>
</div>
</div>
</div>
<script src="assets/js/jquery.min.js?h=6bcc3684f18aa21874fa709f122723cf"></script>
<script src="assets/bootstrap/js/bootstrap.min.js?h=e55bde7d6e36ebf17ba0b8c1e80e4065"></script>
<script src="assets/js/utils.js?h=13e600a17e8be592a9d46183d1921d45"></script>
<script src="assets/js/uc_balancing.js?h=d69896214acb828f8814c3fad5b3d53c"></script>
<script src="assets/js/uc_balancing.js?h=19d0695f453dc896e301a4b2aaf5d564"></script>
</body>

</html>
Loading

0 comments on commit 2a774b3

Please sign in to comment.