Alternative Methode zum Auslesen von Zählern (Wasseruhr, Gaszähler etc)

Begonnen von eki, 02 November 2020, 17:25:39

Vorheriges Thema - Nächstes Thema

habee

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




plin

Zitat von: habee am 05 Mai 2021, 19:49:54
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) Raspi4 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

habee

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


svenkoni

Hallo pink99panther,



Zitat von: pink99panther am 17 November 2020, 20:45:45
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

pink99panther

Hallo Sven,
habe mich nicht wirklich weiter mit statistics abgemüht.
Läuft auf WaterCalCulator und der bringt mir alle wichtigen Infos.

LG
p99p

svenkoni

Alles klar, vielen Dank. Dann werde ich mich auch mal mit dem WaterCalCulator beschäftigen.

LG
Sven

Gisbert

Hallo zusammen,

nachdem ich einen neuen Wasserzähler bekommen habe, den ich nicht mehr mit einem induktiven Näherungssensor auslesen kann, habe ich mich an der ESP32-CAM versucht.

Im Prinzip funktioniert der Aufbau, und das Bild in Overview ändert sich auch gelegentlich, aber das war es auch schon. MQTT funktioniert im Prinzip, ich hab's geprüft; es kommen aber bis den  Anfang keine Daten mehr rein.

Wie komme ich weiter?

Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Gisbert

Hallo zusammen,

mein MQTT-Problem ist gelöst. Es lag beim Fhem-Device. Ich stelle immer wieder fest, dass nach Attributänderungen oder raw-Editierung MQTT nicht mehr funktioniert. Abhilfe ist dann autosubscribe... zu ändern und wieder auf das richtige Topic zu setzen und die Änderungen abzuspeichern.

Die Auslesung funktioniert im Prinzip, scheint aber schleppend zu sein. Wie im angehängten Bild zu sehen ist, zeigt das Foto einen höheren Wert als den value-Wert an. Ich kann ja, ohne den Aufbau zu ändern, nicht mehr nachschauen, wie der aktuelle Wert ist.

Ist das Verhalten üblich?

Noch eine Frage. Wenn der Messaufbau verändert wird, muss man dann die SD-Karte auf den Ursprung zurücksetzen, oder gibt es eine andere Möglichkeit den Bereich der Ziffern neu zu definieren?

Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Frank_Huber

Hi Gisbert,

Durch Spiegelungen im Bild bekommst du falsche Werte. Ich würde evtl die Kamera anderst justieren.
Ebenso würde ich den roten Zählbereich entfernen. Die digitalen reichen dir doch aus.
Wenn keine analogen Zähler vorhanden sind kannst die auch in der konfig entfernen.

grüße
Frank


Gisbert

Hallo Frank,

ich verstehe nicht genau, was du mir mitteilen willst. Die roten drei Ziffern sind die Hunderter, Zehner ein Ein-Liter-Werte. Die benötige ich doch schon, oder nicht? Analoge Rädchen hab ich nicht.

An der Ausrichtung muss ich dann wohl noch arbeiten. Leider habe ich den Ring der kleinen Kamera ganz schön maltretiert, bevor sie sich bewegt hat. Bei ca. 4-5 cm bekomme ich ein scharfes Bild. In der Anleitung hab ich gelesen, dass man auf 10 cm scharf stellen soll - das hab ich leider nicht geschafft.

Wie kann ich denn im laufenden Betrieb ein neues Referenzbild definieren und die dazu passenden Bereich für die einzelnen Ziffern? Geht das überhaupt?

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

eki

Ja, das geht. Du rufst die Webseite des Gerätes auf, so wie es in Deinem Bild zu sehen ist, und gehst über den Menüpunkt "Configuration" und darunter dann auf "Edit Configuration". Danach geht eine neue Seite auf und dort gibt es die Unterpunkte "Alignment" zur Festlegung des Referenzbildes und "Regions of Interst (ROI)" zum Festlegen der Zahlenbereiche.

Gisbert

Hallo eki,

danke für den Hinweis. Es bewahrheitet sich mal wieder der Spruch: "Man sieht nur, was man kennt."

Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Frank_Huber

Zitat von: Gisbert am 06 Dezember 2021, 22:13:34
ich verstehe nicht genau, was du mir mitteilen willst. Die roten drei Ziffern sind die Hunderter, Zehner ein Ein-Liter-Werte. Die benötige ich doch schon, oder nicht? Analoge Rädchen hab ich nicht.
An der Ausrichtung muss ich dann wohl noch arbeiten. Leider habe ich den Ring der kleinen Kamera ganz schön maltretiert, bevor sie sich bewegt hat. Bei ca. 4-5 cm bekomme ich ein scharfes Bild. In der Anleitung hab ich gelesen, dass man auf 10 cm scharf stellen soll - das hab ich leider nicht geschafft.

Hi Gisbert,

Ja, wenn durch Spiegelung falsche Zahlen erkannt werden ist das ein Problem. das negative zählen müsste man ihm in den Einstellungen verbieten.
Wenn er nicht negativ zählen darf dauert es bis der gelesene Wert höher ist als der falsch gelesene bis wieder ein neuer Wert kommt.

Was mich an deinem Bild wundert ist der rote Rahmen um alle Digits. daher dachte ich an die analogen. die sind bei mir rot.
Ich habe aber auch nicht die aktuelle Version drauf. wenns mal läuft machst da ja kein Update mehr.
Jetzt wo ich gerade bei meinem drauf war sehe ich auch dass die analogen grün sind.
Aber was hast Du da für einen roten Rahmen um alle Zahlen?

Grüße
Frank




Gisbert

Hallo Frank,

bei der Installation kam die Frage nach interessanten Bereich (oder so ähnlich), da hab ich alle Ziffern ausgewählt mit rotem Rahmen. Ich glaube, dass ich mich um ein neues Referenzbild mit weniger Spiegelungen bemühen werde, und dann sehe, wie es von dort weitergeht.

Hilft es eventuell die LED mit weißem Papier zu dimmen?

Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Frank_Huber

Eine Diffusor Folie könnte wirich helfen, dadurch wird das Licht indirekter.
Musst ausprobieren. Und vor allem von außen abdunkeln dass nichts von der seite kommt. Ich hab das alles in nem HT Rohr.

Ich meine man wählt am Anfang zwei kontrastreiche statische Bereiche aus anhand derer das Bild vor dem Bereich ausgerichtet werden kann.
An den Digits ist ja nichts wirklich statisch.

Grüße
Frank