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

Offline Papaloewe

  • Sr. Member
  • ****
  • Beiträge: 712
Hier ist alles beschrieben.:
https://github.com/jomjol/AI-on-the-edge-device/wiki

Ich habe auch die Sachen bestellt und bin mal echt gespannt.
Es ist schon erstaunlich, was man mit den ESP-Dinger mitlerweile anstellen kann.

Offline eki

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1393

@eki
Habe versucht Dein MQTT2_Device zu benutzen,
komme aber mit den einstellungen für des Statistics-Modul nicht zurecht.
Wäre schön, wenn Du mir mal helfen könntest.
Auch habe ich keine Idee, wo das Reading "dtime" her kommt.
Ist das händisch gesetzt?

LG
p99p

Das Reading dtime ist ein userreading (habe gerade noch mal das Listing im ersten Beitrag aktualisiert, das hat da irgendwie gefehlt).
Für die Statistiken musst Du, falls Du das noch nicht für andere Dinge hast, ein “statistics” Device anlegen und in die Definition <devname>.* eintragen (<devname> natürlich entsprechend ersetzen). Zusätzlich noch “value” im Attribut deltaReadings und “value,flow,volume” beim Attribut minAvgMaxReadings setzen.

Falls Du schon ein statistics Device nutzt, musst Du eben die entsprechenden Dinge ergänzen.

Unten habe ich mal Plots angehängt, wie das dann bei inklusive der Statistik aussieht.
« Letzte Änderung: 15 November 2020, 18:46:36 von eki »

Offline Wolle02

  • Sr. Member
  • ****
  • Beiträge: 570

Aktuell sehe ich gerade bei heise,das es eine neue Version mit  USB-C Anschluss wohl gibt. (von M5stack)
https://www.heise.de/news/ESP32CAM-mit-USB-C-Anschluss-4951429.html

@jomjol und rcmcronny

Ist denn dieses Modul für das Projekt überhaupt nutzbar? Ich kann auf den Bilder von diesem Board keinen SD-Slot erkennen. Wenn ich jomjol richtig verstanden habe, ist eine SD-Karte aber zwingende Voraussetzung!?

Offline rcmcronny

  • Full Member
  • ***
  • Beiträge: 264
Stimmt, da ist kein SDCard Slot drauf wie es aussieht, dann geht es auch nicht mit dem Projekt logischerweise. Ich hatte mich drauf verlassen, das es "nur" ein USB-C zusätzlich hat :/

Ronny

Offline pink99panther

  • Full Member
  • ***
  • Beiträge: 366
@eki
Danke für die aktualisierung vom Listing und die Infos zu Statistics.
Leieder bekomme ich es damit auch nicht wirklich zum laufen.
Der auffälligste Fehler ist, dass im stateFomat bei Zählerstand 000. und nur die Nachkommastellen richtig angezeigt werden.

@jomjol
hab heute OTA-Update gemacht.
Hat einwandfrei funktioniert.

LG
p99p

Offline eki

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1393
Schick mal ein „List“ Deines Devices.

Offline eki

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1393
Schick mal ein „List“ Deines Devices und vom statistics Device.

Offline pink99panther

  • Full Member
  • ***
  • Beiträge: 366
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.

Offline eki

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1393
Kannst Du mal die folgende Zeile in den userreadings:

$valint = int($oldval) if (($valint - int($oldval)) gt 1);; # wahrscheinlich Fehlerkennung

durch

$valint = int($oldval) if (($valint - int($oldval)) > 1);; # wahrscheinlich Fehlerkennung

Offline pink99panther

  • Full Member
  • ***
  • Beiträge: 366
Hat leider nicht geholfen.
Die m³ fehlen immer noch.

Offline Christoph Morrison

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1768
  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)
         );;
}

Schau dir mal das Attribut singularReadings im statistics-Modul an.

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;;
},

Dito.

Den Rest schaue ich mir mal an, wenn mein Device läuft.

Offline eki

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1393
Hat leider nicht geholfen.
Die m³ fehlen immer noch.

Oh man, manchmal ist man echt blind. Das Problem ist schon die Zeile, die ich genannt habe. Das Problem ist, dass bei der Prüfung von einer Art eingeschwungenem Zustand ausgegangen wird (ich hatte den Fall, dass durch Falscherkennung ein Kubikmeter zu viel gemeldet wurde), da bei Dir aber der readout Wert und der value Wert sich um mehr als 1 unterscheiden, schlägt das immer zu.
Entweder du löscht diese Zeile ganz (mit den richtigen Einstellungen beim esp32-cam sollte dieser Fehler eigentlich laut jomjol nicht passieren) oder Du setzt einmal künstlich den value Wert mit set reading auf letzten readout Wert (in etwa so: "setreading MQTT2_wasser value 182.585" in der Fhem Kommandozeile eingeben).

Warum bei Dir das deltaReading nicht klappt, verstehe ich gerade auch nicht, da sollte dann ein Reading statValue mit einem Inhalt "Hour: xxx Day: xxx Month: xxx Year: xxx" entstehen.
« Letzte Änderung: 18 November 2020, 00:39:28 von eki »

Offline eki

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1393
Schau dir mal das Attribut singularReadings im statistics-Modul an.

Dito.

Den Rest schaue ich mir mal an, wenn mein Device läuft.

Bei mir hat singularReadings in Zusammenhang mit deltaReadings nicht funktioniert.

Online Frank_Huber

  • Hero Member
  • *****
  • Beiträge: 4428
Hi Ho! :-)

Kurze Frage, wo finde ich denn Infos zum MQTT client der integriert sein soll?
Ich habe heute nach https://github.com/jomjol/AI-on-the-edge-device/wiki/Installation die Installation vollzogen, finde aber die Optionen für MQTT nicht.
Bin ich nur blind?

Grüße
Frank

Offline rcmcronny

  • Full Member
  • ***
  • Beiträge: 264
Kannst Du doch im Webfrontend einstellen beim Setup :) Ist im Standard auskommentiert (in der .ini Datei :)

 

decade-submarginal