Plausibilisierung

Aus OrgaMon Wiki
Version vom 14. Juni 2023, 10:39 Uhr von OrgaMon (Diskussion | Beiträge) (→‎Motivation)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

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

  1. Verbrauch_Datum() Datum einer Ablesung
  2. Verbrauch_Zähler_Stand() der Ablesewert an dem Datum
  3. Verbrauch_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
  1. Verbrauch_Datum() Datum einer Ablesung
  2. Verbrauch_Zähler_Stand() der Ablesewert an dem Datum
  3. Verbrauch_0_Datum() 2. Datum einer Ablesung
  4. Verbrauch_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;