Plausibilisierung: Unterschied zwischen den Versionen

Aus OrgaMon Wiki
Zur Navigation springen Zur Suche springen
 
(13 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
==== Dazu braucht man im Import die 3 Werte ====
 


# <code>Verbrauch_Datum()</code> Datum einer Ablesung
# <code>Verbrauch_Datum()</code> Datum einer Ablesung
Zeile 23: Zeile 22:
# <code>Verbrauch_Pro_Jahr()</code> der Jahresverbrauch
# <code>Verbrauch_Pro_Jahr()</code> der Jahresverbrauch


alternativ aber auch 4 Werte, OrgaMon berechnet den Jahresverbrauch dann selbst
==== 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


1) Datum einer Ablesung
   
   
2) der Ablesewert an dem Datum
* in diesem Fall wird der Jahresverbrauch selbst durch OrgaMon berechnet:
3) 2. Datum einer Ablesung
4) der Ablesewert an dem 2. Datum


VERBRAUCH_PRO_JAHR = ((Verbrauch_Zähler_Stand - Verbrauch_0_Zähler_Stand) / TageZwischen(Verbrauch_0_Datum, Verbrauch_Datum)) * 365


=== Lastkurve ===


wie muss das intern_Info Feld genau lauten, damit Orgamon den zuletzt abgelesenen Stand mit dem aktuellen Ausbaustand prüfen kann? Wie ist das prozentual? Wann massiv und wann leicht?
[[Datei:20230613 180501.jpg|200px]]
>
> Hallo Andreas,
>
>
>
>
> Ich gehe davon aus, dass wir das mit folgenden Einstellungen gemacht haben:
>
>
> Der GM-Kunde Mitnetzgas fragte das jetzt an, da der Monteur 10583 eingegeben hat, statt 18583.
>
> In der Baustelle MIT haben wir QS-Mode=0 eingerichtet. Ich kann dazu im Wiki nichts Erklärendes finden, was ist das nochmal und was wird damit abgedeckt? Im Beispiel von GM, wir der alte Zählerstand in der XML nicht geliefert. Wenn er das aber liefern würde, könnten wir das doch einrichten?
>


== Transaktionen ==
== Transaktionen ==
Zeile 55: Zeile 45:
siehe [[Transaktionen#HA7]]
siehe [[Transaktionen#HA7]]


== Importfelder ==
== Qualitätssicherung ==


Import-Feld                  Datenbank-Feld
=== in der OrgaMon-App ===
                              VERBRAUCH_DATUM
                              VERBRAUCH_ZAEHLER_STAND
                              VERBRAUCH_PRO_JAHR
Verbrauch_0_Datum
Verbrauch_0_Zähler_Stand


== Qualitätssicherung ==
* der Transport erfolgt über Zähler-Infos (bitte testen!)


=== in der OrgaMon-App ===
            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;