Plausibilisierung: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(15 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 == | ||
* Intern speichert OrgaMon nur 3 Felder | * 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 === | === Import === | ||
==== Dazu braucht man im Import die 3 Werte ==== | |||
# <code>Verbrauch_Datum()</code> Datum einer Ablesung | |||
# <code>Verbrauch_Zähler_Stand()</code> der Ablesewert an dem Datum | |||
# <code>Verbrauch_Pro_Jahr()</code> der Jahresverbrauch | |||
==== 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 57: | 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;