Plausibilisierung: Unterschied zwischen den Versionen

Aus OrgaMon Wiki
Zur Navigation springen Zur Suche springen
 
(6 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 36: Zeile 36:


  VERBRAUCH_PRO_JAHR = ((Verbrauch_Zähler_Stand - Verbrauch_0_Zähler_Stand) / TageZwischen(Verbrauch_0_Datum, Verbrauch_Datum)) * 365
  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 46: Zeile 50:


* der Transport erfolgt über Zähler-Infos (bitte testen!)
* 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 ===


Q07 Ablesestand unterschreitet massiv untere Grenze
==== Toleranzband-Methode ====


Q08 Ablesestand unterschreitet leicht untere Grenze
  Toleranzband := JahresVerbrauch * (3.0 / 12.0);


Q09 Ablesestand überschreitet massiv obere Grenze
==== 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

  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;