Autor Thema: Alternative Methode zum Auslesen von Zählern (Wasseruhr, Gaszähler etc)  (Gelesen 23569 mal)

Offline habee

  • New Member
  • *
  • Beiträge: 10
Moin,

tolles Projekt hier, war auch schon einige Jahre auf der Suche nach einer zuverlässigen Methode um meinen Wasserverbrauch mitzuplotten. Ich find es auch unheimlich
praktisch sozusagen ein aktuelles Bild vom Zählerstand zu haben, da ich nur schlecht an den Zähler rankomme (steht ein Schrank vor...).

Nachdem ich jetzt einigermaßen brauchbar den Wasserzähler konfiguriert habe, habe ich meinen zweiten ESP32 mal auf die Schnelle auf die Gasuhr gerichtet.

Da ich wenig Platz vor dem Zähler habe und um Reflexionen zu verringern schaut er leicht von unten auf das Zählwerk. Erkennung läuft einigermaßen, allerdings bekomme ich die Dezimalstellen nicht konfiguriert.

Gemäß der Anleitung (https://github.com/jomjol/AI-on-the-edge-device/wiki/Configuration-Parameter-Details) verschiebe ich quasi den Dezimal-Punkt um die genannte Zahl, nach links mit negativen Vorzeichen. Das Beispiel zeigt aber eine Erkennung mit 6 Zahlen, digital und analog. Ich habe aber 7 Zahlen und nur digital. Von wo wird denn dann gezählt?

Für den Gaszähler brauch ich ja nur die digitalen Zahlen, es werden ja keine analogen Pfeile benötigt. Daher hatte ich die Analog-Erkennung ausgeschaltet. Ich denke da liegt das Problem, wenn ich dann nämlich "DecimalShift" -2 eingebe erhalte ich als Zahl z.B. 1234567.00...

Irgendwie versteh ich das nicht... ???

Gruß

habee



 

Offline plin

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 809
    • FHEM-Landschaft von plin
Für den Gaszähler brauch ich ja nur die digitalen Zahlen, es werden ja keine analogen Pfeile benötigt. Daher hatte ich die Analog-Erkennung ausgeschaltet. Ich denke da liegt das Problem, wenn ich dann nämlich "DecimalShift" -2 eingebe erhalte ich als Zahl z.B. 1234567.00...

Irgendwie versteh ich das nicht... ???
Was genau ist denn jetzt eigentlich Dein Problem? Dem Screenshot zufolge hast Du ja die analogen Zähler erfolgreich ausgeschaltet. Es werden auch erfolgreich 7 Stellen erkannt. Aber Dein manuell vorgegebenes preValue hast Du ohne Dezimalstelle angegeben (korrekt wäre in Deinem Beispiel 39565.76). Ansonsten wird 39565.76-3956576 = negativer Wert erkannt und der abgelesene Wert verworfen.
FHEM1 (Main) Raspi3b mit CUL, Homematic, SDUINO 433/OOK, zentrale Steuerung
FHEM2 (Keller) x86 mit CUL/hmland, IP-basierte Module
FHEM3 (Erdgeschoss) Raspi2 mit SDUINO 868/GFSK
FHEM4 (Hausanschlussraum), USV und OBIS-Modul
FHEM5 (Docker) mit FHEM2FHEM, InfluxDB

Offline habee

  • New Member
  • *
  • Beiträge: 10
Den Versuch mit dem Dezimalpunkt im preValue setzen hatte ich schon durch, hat irgendwie auch nicht funktioniert.

Macht aber nichts, ich lasse jetzt das Postprocessing sein, setze den DecimalShift auf "-2" und es funktioniert soweit.

Werde es mal beobachten.

Gruß

habee


Offline svenkoni

  • New Member
  • *
  • Beiträge: 21
Hallo pink99panther,



Hat ein Weilchen gedauert, hatte schon alles umgebaut auf WaterCalCulator.

Hier nun die 2 Listings.
Internals:
   CFGFN     
   CID        wasser
   DEF        wasser
   DEVICETOPIC MQTT2_wasser
   FUUID      5fb41ab4-f33f-f73e-3dff-eac4d4986615e0ed
   IODev      MyBroker
   LASTInputDev MyBroker
   MSGCNT     7
   MyBroker_MSGCNT 7
   MyBroker_TIME 2020-11-17 20:33:16
   NAME       MQTT2_wasser
   NR         372
   STATE      <b>Zählerstand:</b> 0.5850 m<sup>3</sup><br><b>Verbrauch heute:</b> 0.00 Liter<br><b>Durchfluss:</b> 0.00 Liter/min
   TYPE       MQTT2_DEVICE
   READINGS:
     2020-11-17 20:33:16   dtime           350
     2020-11-17 20:33:16   flow            0
     2020-11-17 20:33:16   readout         182.5850
     2020-11-17 20:33:16   statFlowDay     Min: 0 Avg: 0 Max: 0 (since: 2020-11-17_20:27:26 )
     2020-11-17 20:33:16   statFlowHour    Min: 0 Avg: 0 Max: 0 (since: 2020-11-17_20:27:26 )
     2020-11-17 20:33:16   statFlowMonth   Min: 0 Avg: 0 Max: 0 (since: 2020-11-17_20:27:26 )
     2020-11-17 20:33:16   statFlowYear    Min: 0 Avg: 0 Max: 0 (since: 2020-11-17_20:27:26 )
     2020-11-17 20:33:16   statValueDay    Min: 0.5829 Avg: 0.5829 Max: 0.5850 (since: 2020-11-17_20:27:26 )
     2020-11-17 20:33:16   statValueHour   Min: 0.5829 Avg: 0.5829 Max: 0.5850 (since: 2020-11-17_20:27:26 )
     2020-11-17 20:33:16   statValueMonth  Min: 0.5829 Avg: 0.5829 Max: 0.5850 (since: 2020-11-17_20:27:26 )
     2020-11-17 20:33:16   statValueYear   Min: 0.5829 Avg: 0.5829 Max: 0.5850 (since: 2020-11-17_20:27:26 )
     2020-11-17 20:33:16   statVolumeDay   Min: 0 Avg: 0 Max: 0 (since: 2020-11-17_20:27:26 )
     2020-11-17 20:33:16   statVolumeHour  Min: 0 Avg: 0 Max: 0 (since: 2020-11-17_20:27:26 )
     2020-11-17 20:33:16   statVolumeMonth Min: 0 Avg: 0 Max: 0 (since: 2020-11-17_20:27:26 )
     2020-11-17 20:33:16   statVolumeYear  Min: 0 Avg: 0 Max: 0 (since: 2020-11-17_20:27:26 )
     2020-11-17 20:33:16   value           0.5850
     2020-11-17 20:33:16   valueDay        0
     2020-11-17 20:33:16   valueHour       0
     2020-11-17 20:33:16   volume          2.10000000000002
   helper:
     _98_statistics Wasserstatistik
Attributes:
   IODev      MyBroker
   alias      Haus_Wasserverbrauch
   event-on-change-reading .*(flow|volume|value|stat).*
   event-on-update-reading .*readout|statFlowHourLast.*
   icon       sani_water_tap
   readingList wasser:watermeter/readout:.* readout
   room       MQTT2_DEVICE
   stateFormat {
  my @dayval = split(" ",ReadingsVal($name,"statValue","Hour: 0 Day: 0 Month: 0"));;
  sprintf("<b>Zählerstand:</b> %.4f m<sup>3</sup><br>".
          "<b>Verbrauch heute:</b> %0.2f Liter<br>".
          "<b>Durchfluss:</b> %0.2f Liter/min",
          ReadingsVal($name,"value",0),
          $dayval[3]*1000,
          ReadingsVal($name,"flow",0)
         );;
}
   userReadings flow:readout.* {
  my $td = ReadingsVal($name,"dtime",1);;
  my $oldval = ReadingsVal($name,"flow",0);;
  ($td lt 20) ? $oldval : ReadingsVal($name,"volume",0)/$td*60;;
},
valueHour:readout.* {
  my ($d,$value) = split(" ",ReadingsVal($name,"statValue","Hour: 0 Day: 0 Year: 0"));;
  $value*1000;;
},
valueDay:readout.* {
  my ($d1,$d2,$d3,$value) = split(" ",ReadingsVal($name,"statValue","Hour: 0 Day: 0 Year: 0"));;
  $value*1000;;
},
volume:readout.* difference {ReadingsVal($name,"value",0)*1000;;},
dtime:readout.* difference {time_str2num(ReadingsTimestamp($name,"value",0));;},
value:readout.* {
  my ($inint,$inrest) = split(/\./,ReadingsVal($name,"readout",0));;
  my ($valint,$valrest) = split(/\./,ReadingsVal($name,"value",0));;
  my $oldval = ($valint.".".$valrest);;
  $valint = $inint if ($inint !~ m/.*N.*/);;
  $valrest = $inrest if ($inrest !~ m/.*N.*/);;
  $valint++ if (($valrest-$inrest) > 8000);; # wahrscheinlich Nulldurchgang
  $valint = int($oldval) if (($valint - int($oldval)) gt 1);; # wahrscheinlich Fehlerkennung
  my $result = ($valint.".".$valrest);;
  return ($result ge $oldval)?$result:$oldval;; # sichere monotones Steigen
}

Internals:
   CFGFN     
   DEF        MQTT2_wasser
   DEV_REGEXP MQTT2_wasser
   FUUID      5fb422ca-f33f-f73e-767e-e2a7bf1f5c7101c4
   NAME       Wasserstatistik
   NOTIFYDEV  global,MQTT2_wasser
   NR         436
   NTFY_ORDER 10-Wasserstatistik
   PREFIX     stat
   STATE      Updated stats for: MQTT2_wasser
   TYPE       statistics
   READINGS:
     2020-11-17 20:27:26   monitoredDevicesMQTT2_DEVICE MQTT2_wasser
     2020-11-17 20:21:57   monitoredDevicesUnsupported MQTT2_wasser#MQTT2_DEVICE
     2020-11-17 20:21:57   nextPeriodChangeCalc 2020-11-17 20:59:55
     2020-11-17 20:41:31   state           Updated stats for: MQTT2_wasser
   fhem:
     modulVersion $Date: 2019-12-24 00:07:57 +0100 (Tue, 24 Dec 2019) $
     nextPeriodChangeTime 1605643195
Attributes:
   deltaReadings value
   minAvgMaxReadings value,flow,volume
   room       zz_Verbrauch

Danke schon mal für Deine Mühe.

Hast Du eigentlich das Problem gelöst, dass bei Dir kein "statValue" mit den Werten "Hour: 0 Day: 0 Month: 0" erzeugt wird ? bei mir fehlt es nämlich, weswegen auch keine Verbrauchswerte angezeigt werden.

Gruß
Sven

Offline pink99panther

  • Full Member
  • ***
  • Beiträge: 366
Hallo Sven,
habe mich nicht wirklich weiter mit statistics abgemüht.
Läuft auf WaterCalCulator und der bringt mir alle wichtigen Infos.

LG
p99p
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline svenkoni

  • New Member
  • *
  • Beiträge: 21
Alles klar, vielen Dank. Dann werde ich mich auch mal mit dem WaterCalCulator beschäftigen.

LG
Sven