Plausibilisierung: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(→Import) |
|||
| (12 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
== Motivation == | == Motivation == | ||
* Verhinderung von Fehleingaben (Zahlendreher, Stellen vergessen, Komma falsch gesetzt) | * Verhinderung von Fehleingaben beim Zählerstand des Ausbauzählers (Zahlendreher, Stellen vergessen, Komma falsch gesetzt) | ||
== Funktionsweise == | == Funktionsweise == | ||
| Zeile 16: | Zeile 16: | ||
=== Import === | === Import === | ||
==== Dazu braucht man im Import die 3 Werte ==== | |||
# <code>Verbrauch_Datum()</code> Datum einer Ablesung | # <code>Verbrauch_Datum()</code> Datum einer Ablesung | ||
| Zeile 22: | Zeile 22: | ||
# <code>Verbrauch_Pro_Jahr()</code> der Jahresverbrauch | # <code>Verbrauch_Pro_Jahr()</code> der Jahresverbrauch | ||
alternativ aber auch 4 Werte | ==== alternativ aber auch 4 Werte ==== | ||
* OrgaMon berechnet den Jahresverbrauch dann selbst | |||
* ACHTUNG: Die Import-Reihenfolge muss genau wie angegeben eingehalten werden | |||
# <code>Verbrauch_Datum()</code> Datum einer Ablesung | |||
# <code>Verbrauch_Zähler_Stand()</code> der Ablesewert an dem Datum | |||
# <code>Verbrauch_0_Datum()</code> 2. Datum einer Ablesung | |||
# <code>Verbrauch_0_Zähler_Stand()</code> der Ablesewert an dem 2. Datum | |||
* in diesem Fall wird der Jahresverbrauch selbst durch OrgaMon berechnet: | |||
VERBRAUCH_PRO_JAHR = ((Verbrauch_Zähler_Stand - Verbrauch_0_Zähler_Stand) / TageZwischen(Verbrauch_0_Datum, Verbrauch_Datum)) * 365 | |||
=== Lastkurve === | |||
[[Datei:20230613 180501.jpg|200px]] | |||
== Transaktionen == | == Transaktionen == | ||
| Zeile 54: | Zeile 45: | ||
siehe [[Transaktionen#HA7]] | siehe [[Transaktionen#HA7]] | ||
== | == Qualitätssicherung == | ||
=== in der OrgaMon-App === | |||
* der Transport erfolgt über Zähler-Infos (bitte testen!) | |||
= | ZaehlerInfo.values['P0'] := inttostr(round(ZaehlerstandExact - Toleranzband)); | ||
ZaehlerInfo.values['P1'] := inttostr(round(ZaehlerstandExact + Toleranzband)); | |||
=== vor der Ergebnismeldung === | === vor der Ergebnismeldung === | ||
==== Toleranzband-Methode ==== | |||
Toleranzband := JahresVerbrauch * (3.0 / 12.0); | |||
==== Grenz-Methode ==== | |||
Q10 Ablesestand überschreitet leicht obere Grenze | v := sZaehlerInfo.values['v1'] | ||
b := sZaehlerInfo.values['b1'] | |||
a := sZaehlerInfo.values['a1'] | |||
s := Zählerstand( / 'ET' / HT) | |||
E2 | |||
v := sZaehlerInfo.values['v2'] | |||
b := sZaehlerInfo.values['b2'] | |||
a := sZaehlerInfo.values['a2'] | |||
s := Zählerstand('E2') | |||
if (V < 0) then | |||
begin | |||
Log('[Q16] keine "Untere Grenze" definiert' + MoreInfo); | |||
end; | |||
if (b < 0) then | |||
begin | |||
Log('[Q17] keine "Obere Grenze" definiert' + MoreInfo); | |||
end; | |||
if (a < 0) then | |||
begin | |||
Log('[Q18] kein "Letzter Stand" definiert' + MoreInfo); | |||
end; | |||
// | |||
if (ZWS < 0) then | |||
begin | |||
Log('[Q01] Ablesestand fehlt' + MoreInfo); | |||
break; | |||
end; | |||
if (a > 0) and (ZWS < a) then | |||
begin | |||
if (ZWS + 10 >= a) then | |||
Log('[Q13] Ablesestand unterschreitet leicht letzten Stand' + MoreInfo) | |||
else | |||
Log('[Q19] Ablesestand kleiner als letzter Stand' + MoreInfo); | |||
break; | |||
end; | |||
if (b - V < 0) then | |||
begin | |||
Log('[Q06] Zählwerk-Überlauf erwartet' + MoreInfo); | |||
end; | |||
BandErweiterung := max((b - V) * 3, 1000); | |||
if (ZWS < V) then | |||
begin | |||
if (ZWS < V - BandErweiterung) then | |||
Log('[Q07] Ablesestand unterschreitet massiv untere Grenze' + MoreInfo) | |||
else | |||
Log('[Q08] Ablesestand unterschreitet leicht untere Grenze' + MoreInfo); | |||
break; | |||
end; | |||
if (ZWS > b) then | |||
begin | |||
if (ZWS > b + BandErweiterung) then | |||
Log('[Q09] Ablesestand überschreitet massiv obere Grenze' + MoreInfo) | |||
else | |||
Log('[Q10] Ablesestand überschreitet leicht obere Grenze' + MoreInfo); | |||
break; | |||
end; | |||
Aktuelle Version vom 14. Juni 2023, 10:39 Uhr
Motivation
- Verhinderung von Fehleingaben beim Zählerstand des Ausbauzählers (Zahlendreher, Stellen vergessen, Komma falsch gesetzt)
Funktionsweise
- Intern speichert OrgaMon für jeden Auftrag nur 3 Felder für ein einziges Zählwerk
VERBRAUCH_DATUM VERBRAUCH_ZAEHLER_STAND VERBRAUCH_PRO_JAHR
- damit ist eine Prognose für den Ablesewert für den heutigen Ablesetag möglich
- Die Genauigkeit der Prognose wird verbessert, in dem verschiedene Lastkurven für Gas/Strom/Wasser verwendet werden
Import
Dazu braucht man im Import die 3 Werte
Verbrauch_Datum()Datum einer AblesungVerbrauch_Zähler_Stand()der Ablesewert an dem DatumVerbrauch_Pro_Jahr()der Jahresverbrauch
alternativ aber auch 4 Werte
- OrgaMon berechnet den Jahresverbrauch dann selbst
- ACHTUNG: Die Import-Reihenfolge muss genau wie angegeben eingehalten werden
Verbrauch_Datum()Datum einer AblesungVerbrauch_Zähler_Stand()der Ablesewert an dem DatumVerbrauch_0_Datum()2. Datum einer AblesungVerbrauch_0_Zähler_Stand()der Ablesewert an dem 2. Datum
- in diesem Fall wird der Jahresverbrauch selbst durch OrgaMon berechnet:
VERBRAUCH_PRO_JAHR = ((Verbrauch_Zähler_Stand - Verbrauch_0_Zähler_Stand) / TageZwischen(Verbrauch_0_Datum, Verbrauch_Datum)) * 365
Lastkurve
Transaktionen
siehe Transaktionen#HA7
Qualitätssicherung
in der OrgaMon-App
- der Transport erfolgt über Zähler-Infos (bitte testen!)
ZaehlerInfo.values['P0'] := inttostr(round(ZaehlerstandExact - Toleranzband));
ZaehlerInfo.values['P1'] := inttostr(round(ZaehlerstandExact + Toleranzband));
vor der Ergebnismeldung
Toleranzband-Methode
Toleranzband := JahresVerbrauch * (3.0 / 12.0);
Grenz-Methode
v := sZaehlerInfo.values['v1']
b := sZaehlerInfo.values['b1']
a := sZaehlerInfo.values['a1']
s := Zählerstand( / 'ET' / HT)
E2
v := sZaehlerInfo.values['v2']
b := sZaehlerInfo.values['b2']
a := sZaehlerInfo.values['a2']
s := Zählerstand('E2')
if (V < 0) then
begin
Log('[Q16] keine "Untere Grenze" definiert' + MoreInfo);
end;
if (b < 0) then
begin
Log('[Q17] keine "Obere Grenze" definiert' + MoreInfo);
end;
if (a < 0) then
begin
Log('[Q18] kein "Letzter Stand" definiert' + MoreInfo);
end;
//
if (ZWS < 0) then
begin
Log('[Q01] Ablesestand fehlt' + MoreInfo);
break;
end;
if (a > 0) and (ZWS < a) then
begin
if (ZWS + 10 >= a) then
Log('[Q13] Ablesestand unterschreitet leicht letzten Stand' + MoreInfo)
else
Log('[Q19] Ablesestand kleiner als letzter Stand' + MoreInfo);
break;
end;
if (b - V < 0) then
begin
Log('[Q06] Zählwerk-Überlauf erwartet' + MoreInfo);
end;
BandErweiterung := max((b - V) * 3, 1000);
if (ZWS < V) then
begin
if (ZWS < V - BandErweiterung) then
Log('[Q07] Ablesestand unterschreitet massiv untere Grenze' + MoreInfo)
else
Log('[Q08] Ablesestand unterschreitet leicht untere Grenze' + MoreInfo);
break;
end;
if (ZWS > b) then
begin
if (ZWS > b + BandErweiterung) then
Log('[Q09] Ablesestand überschreitet massiv obere Grenze' + MoreInfo)
else
Log('[Q10] Ablesestand überschreitet leicht obere Grenze' + MoreInfo);
break;
end;