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

Ajuba

Zitat von: rabehd am 06 April 2023, 13:34:26War bei mir auch so.
Ein paar Tage warten und es füllt sich mit Wasser.

Stimmt, heute ist es schon wesentlich besser.  :)
FHEM auf RPi3, Homematic CCU3 mit Cuxd und CUL 868 für FS20, Siemens S7 über CP343-1,
DbLog zu MySQL auf NAS QNAP TS-253D,
Yeelight

dieter114

Kann mir mal Jemand verraten wie man das Teil vom "Normalbetrieb" zurück
in den "Init" Modus bekommt?
Das mus doch auch ohne totale Neuinstallation gehen?
RPi II+III+V,OWX,div.1W Module,HM Zisterne,div. CUL, sduino MAPLESDuino(adv), div ESPEasy, div Tasmota, MQTT2Server,WU-Upload,TabletUI,Poolsteuerung mit fhem, Fronius, BYD Solaranlage

MartinD

Hallo,

das Auslesen funktioniert bei mir im Prinzip sehr gut. Die sehr seltene Fehlwerte kann ich problemlos durch Korrektur (direkter Zugriff auf ESP-Adresse) beheben. Allerdings nur nur im lokalen Netzsegment (192.168.....).
Ich habe mir ein Proxy-Zugriff auf Fhem gebastelt. Dadurch kann ich über https-Port von Außen auf fhem zugreifen. Ein Versuch so etwas auf AI on the Edge auszuweiten scheiterte.
Nun versuche ich hochgradig erfolglos prevalue neu zu setzen.

setreading MQTT2_watermeter pre ....

setzt zwar das Reading in fhem auf gewünschtes Wert, dieses wird aber nicht aus das device weitergegeben. Die Auswirkung: einmal falsch ausgelesenes Wert produziert (bei 0.00 qm Verbrauch - bin gerade im Urlaub) wiederholt ,,error Neg. Rate". Siehe Details.

Weiß jemand ein Rat?

Mit besten Grüßen

Martin

Details:

——-
defmod MQTT2_watermeter MQTT2_DEVICE watermeter
attr MQTT2_watermeter DbLogInclude Wasserverbrauch
attr MQTT2_watermeter event-min-interval .*:1800
attr MQTT2_watermeter event-on-change-reading Wasserverbrauch:0.01,.*
attr MQTT2_watermeter readingList watermeter:watermeter/status:.* status\
watermeter:watermeter/MAC:.* MAC\
watermeter:watermeter/IP:.* IP\
watermeter:watermeter/hostname:.* hostname\
watermeter:watermeter/interval:.* interval\
watermeter:watermeter/connection:.* connection\
watermeter:watermeter/uptime:.* uptime\
watermeter:watermeter/freeMem:.* freeMem\
watermeter:watermeter/wifiRSSI:.* wifiRSSI\
watermeter:watermeter/CPUtemp:.* CPUtemp\
watermeter:watermeter/main/error:.* error\
watermeter:watermeter/main/raw:.* raw\
watermeter:watermeter/main/json:.* { json2nameValue($EVENT) }\
watermeter:watermeter/main/value:.* value\
watermeter:watermeter/main/rate:.* rate\
watermeter:watermeter/main/rate_per_time_unit:.* rate_per_time_unit\
watermeter:watermeter/main/changeabsolut:.* changeabsolut\
watermeter:watermeter/main/rate_per_digitalization_round:.* rate_per_digitalization_round\
watermeter:watermeter/main/timestamp:.* timestamp
attr MQTT2_watermeter room MQTT2_DEVICE,Messungen
attr MQTT2_watermeter stateFormat value
attr MQTT2_watermeter userReadings Wasserverbrauch {sprintf("%.4f",ReadingsVal("MQTT2_watermeter","value","???"))}

setstate MQTT2_watermeter 2023-08-19 10:12:13 CPUtemp 56
setstate MQTT2_watermeter 2023-07-11 10:14:19 IODev myBroker
setstate MQTT2_watermeter 2023-07-22 21:38:45
setstate MQTT2_watermeter 2023-07-22 21:38:45
setstate MQTT2_watermeter 2023-08-19 10:21:55 Wasserverbrauch 0.0000
setstate MQTT2_watermeter 2023-08-19 10:12:13 changeabsolut 0.0000
setstate MQTT2_watermeter 2023-08-19 10:12:13 connection connected
setstate MQTT2_watermeter 2023-08-19 10:12:13 error Neg. Rate - Read:  - Raw: 0124.7562 - Pre: 124.7663
setstate MQTT2_watermeter 2023-08-19 10:12:13 freeMem 814739
setstate MQTT2_watermeter 2023-07-22 21:38:45 hostname wasseruhr
setstate MQTT2_watermeter 2023-07-22 21:38:45 interval 10.0
setstate MQTT2_watermeter 2023-08-19 10:12:13 pre 124.7663
setstate MQTT2_watermeter 2023-08-19 10:12:13 rate
setstate MQTT2_watermeter 2023-08-19 10:12:13 rate_per_digitalization_round 0.0000
setstate MQTT2_watermeter 2023-08-15 02:03:15 rate_per_time_unit 0.000000
setstate MQTT2_watermeter 2023-08-19 10:12:13 raw 0124.7562
setstate MQTT2_watermeter 2023-08-19 10:21:55 status Aligning
setstate MQTT2_watermeter 2023-07-11 10:15:19 subscriptions watermeter/ctrl/flow_start watermeter/ctrl/set_prevalue
setstate MQTT2_watermeter 2023-08-19 10:12:13 timestamp 2023-08-15T02:09:27+0200
setstate MQTT2_watermeter 2023-08-19 10:12:13 uptime 2378414
setstate MQTT2_watermeter 2023-08-19 10:12:13 value
setstate MQTT2_watermeter 2023-08-19 10:12:13 wifiRSSI -89
—-



Sailor

Hallo Martin

Zitat von: MartinD am 19 August 2023, 11:16:35Nun versuche ich hochgradig erfolglos prevalue neu zu setzen.
setreading MQTT2_watermeter pre ....
setzt zwar das Reading in fhem auf gewünschtes Wert, dieses wird aber nicht aus das device weitergegeben. Die Auswirkung: einmal falsch ausgelesenes Wert produziert (bei 0.00 qm Verbrauch - bin gerade im Urlaub) wiederholt ,,error Neg. Rate". Siehe Details.
Weiß jemand ein Rat?

Ich habe mir ein userReadings wie folgt angelegt:
lastValue:value:.* {
my $value    = ReadingsVal($NAME,"value","");
my $OldValue = ReadingsVal($NAME,"lastValue","");
Log 5, $NAME . "_____________________________________";
Log 5, $NAME . " - value             : " . $value;
if ($value ne "") {
Log 5, $NAME . " - returnvalue       : " . $value;
$value
}
else {
Log 5, $NAME . " - returnvalue       : " . $OldValue;
$OldValue
}
}

Gruß
    Sailor
******************************
Man wird immer besser...

MartinD

Hallo Sailor.

vielen Dank!
Allerdings verstehe ich nicht ganz:
was bewirkt:
ZitatLog 5, $NAME . "_____________________________________";

und:
wird ein Eintrag in der Log-Datei korrigiert oder ein Wert an ESP32 gesendet?

Ich logge alles mir DBLog.

Mit besten Grüßen

Martin

Sailor

Hallo Martin

Zitat von: MartinD am 21 August 2023, 20:19:49Allerdings verstehe ich nicht ganz:
was bewirkt:
Log 5, $NAME . "_____________________________________";
Das bewirkt nur, das du einen Strich in deinem Log-File bekommst, damit du die Werte zwecks Fehlersuche besser finden kannst.


Zitat von: MartinD am 21 August 2023, 20:19:49und: wird ein Eintrag in der Log-Datei korrigiert oder ein Wert an ESP32 gesendet?
Ich logge alles mir DBLog.
Du erhälst ein neues Reading namens "lastValue".
Die Log- Datei speichert alle Fehlermeldungen und Einträge, die mit "Log [1-5]," geschrieben werden - Beispiel: /opt/fhem/log/fhem-2023-08.log
Die DB-Log Datenbank speichert alle definierten bzw. gefilterten Werte der Readings - Beispiel: /opt/fhem/fhem.db

Zwei verschiedene Baustellen.

Gruß
    Sailor
******************************
Man wird immer besser...

MartinD

Hallo,

OK, vielen Dank!
Das hat auch geholfen!

Mit besten Grüßen
Martin

JWRu

Hallo zusammen!
Ich habe Probleme bei der richtigen Interpretation von (digitalen) Zahlenübergängen.
Der korrekte Wert 679 (siehe Foto) wird entweder als 659 oder 669 erkannt.
Ich habe alle digitalen Modelle ausprobiert - kein Unterschied.
"Post processing previous value" ist aktiviert - "Analog/Digital Transition Start" steht auf 9,2
Du darfst diesen Dateianhang nicht ansehen.
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon-Sensoren; TFA-Sensoren; Steuerung Viessmann-Heizung; Arduinos für Strom-, Wasser-, Gaszähler, Rauchmelder und FI-Schutzschalter

jnewton957

Wenn ich das richtig sehe, bietet
https://smart-stuff.nl/product/esphome-waterlezer-dongle/

das Teil für ca. 30 € zzgl. Versand und ggf. 5 € 3D-Druck-Halter an.

Hat vielleicht zufällig schon jemand dieses Teil und wie beschrieben angeschlossen?
FHEM6.2 auf Pi5
V 1.66 nanoCUL 433 (IT)
V 1.66 nanoCUL868 (HM)
sqlite3 LogDb
ELRO AB440, DECT200,  TFA30.3125, esp8266, HM, TabletUI, IR-Schreiblesekopf (Udo),tibber Pulse, Kostal Pico, cfos Wallbox, Modbus TCP

JWRu

ZitatHat vielleicht zufällig schon jemand dieses Teil und wie beschrieben angeschlossen?
Das ist kein optischer Sensor (AI on the Edge) sondern ein induktiver.
Dafür muss man eine geeignete Wasseruhr haben.
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon-Sensoren; TFA-Sensoren; Steuerung Viessmann-Heizung; Arduinos für Strom-, Wasser-, Gaszähler, Rauchmelder und FI-Schutzschalter

el_diabolo

Hallo 

kann mir jemand helfen der das AI komplett zum Laufen bekommen hat...
Ich komme damit nicht so ganz klar, hier mal meine RAW-Def.

LG Gerrit

defmod watermeter MQTT2_DEVICE watermeter
attr watermeter event-on-change-reading .*(rate|rate_per_time_unit|rate_per_digitization_round|flow|volume|value|statValue|statValueLast).*
attr watermeter event-on-update-reading .*readout|statFlowHourLast.*
attr watermeter icon measure_water_meter
attr watermeter jsonMap value:readout timestamp:0
attr watermeter readingList watermeter:watermeter/status:.* status\
watermeter:watermeter/connection:.* connection\
watermeter:watermeter/uptime:.* uptime\
watermeter:watermeter/freeMem:.* freeMem\
watermeter:watermeter/wifiRSSI:.* wifiRSSI\
watermeter:watermeter/CPUtemp:.* CPUtemp\
watermeter:watermeter/main/value:.* value\
watermeter:watermeter/main/error:.* error\
watermeter:watermeter/main/rate:.* rate\
watermeter:watermeter/main/rate_per_time_unit:.* rate_per_time_unit\
watermeter:watermeter/main/changeabsolut:.* changeabsolut\
watermeter:watermeter/main/rate_per_digitization_round:.* rate_per_digitization_round\
watermeter:watermeter/main/raw:.* raw\
watermeter:watermeter/main/timestamp:.* timestamp\
watermeter:watermeter/main/json:.* { json2nameValue($EVENT, 'json_', $JSONMAP) }\
watermeter:watermeter/fwVersion:.* fwVersion\
watermeter:watermeter/MAC:.* MAC\
watermeter:watermeter/IP:.* IP\
\
watermeter:watermeter/hostname:.* hostname\
watermeter:watermeter/interval:.* interval
attr watermeter room Wasserverbrauch
attr watermeter 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)\
         );;;;\
}
attr watermeter 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) > 5000);;;; # wahrscheinlich Nulldurchgang\
  $valint = int($oldval) if (($valint - int($oldval)) > 1);;;; # wahrscheinlich Fehlerkennung\
  my $result = ($valint.".".$valrest);;;;\
  return ($result ge $oldval)?$result:$oldval;;;; # sichere monotones Steigen\
}

Frank_Huber

Zitat von: el_diabolo am 22 Januar 2025, 07:11:35Hallo 

kann mir jemand helfen der das AI komplett zum Laufen bekommen hat...
Ich komme damit nicht so ganz klar, hier mal meine RAW-Def.

LG Gerrit
Hi Gerrit,

Wo klemmts denn?
läuft der Zähler selbst wenn Du auf seiner lokalen Webseite bist?
läuft dein MQTT Server?

Nobbynews

Zitat von: el_diabolo am 22 Januar 2025, 07:11:35attr watermeter event-on-change-reading .*(rate|rate_per_time_unit|rate_per_digitization_round|flow|volume|value|statValue|statValueLast).*
attr watermeter event-on-update-reading .*readout|statFlowHourLast.*

Die Syntax für die beiden Attribute ist zumindest schon mal falsch.
Es handelt sich jeweils um eine durch Komma getrennte Liste.
attr watermeter event-on-change-reading rate,rate_per_time_unit,rate_per_digitization_round,flow,volume,value,statValue,statValueLast

Sailor

Moin tosammen

Zitat von: Frank_Huber am 22 Januar 2025, 08:47:17
Zitat von: el_diabolo am 22 Januar 2025, 07:11:35Hallo 
kann mir jemand helfen der das AI komplett zum Laufen bekommen hat...
Ich komme damit nicht so ganz klar, hier mal meine RAW-Def.
LG Gerrit
Hi Gerrit,
Wo klemmts denn?
läuft der Zähler selbst wenn Du auf seiner lokalen Webseite bist?
läuft dein MQTT Server?

Ich setze noch eine Frage hinterher:
Hast DU das MQTT_DEVICE erstellt, oder ist das automatisch nach dem Empfang des ersten MQTT - Telegramms erstellt worden?

Gruss
  Sailor
******************************
Man wird immer besser...

el_diabolo

Zitat von: Sailor am 22 Januar 2025, 08:56:30Moin tosammen

Zitat von: Frank_Huber am 22 Januar 2025, 08:47:17
Zitat von: el_diabolo am 22 Januar 2025, 07:11:35Hallo 
kann mir jemand helfen der das AI komplett zum Laufen bekommen hat...
Ich komme damit nicht so ganz klar, hier mal meine RAW-Def.
LG Gerrit
Hi Gerrit,
Wo klemmts denn?
läuft der Zähler selbst wenn Du auf seiner lokalen Webseite bist?
läuft dein MQTT Server?
Ja der MQTT läuft, und die AI on the edge auch sogar mit der Version v16.0.0-RC5


Ich setze noch eine Frage hinterher:
Hast DU das MQTT_DEVICE erstellt, oder ist das automatisch nach dem Empfang des ersten MQTT - Telegramms erstellt worden?

Gruss
  Sailor

Das MQTT_DEVICE wurde automatisch erstellt und weitestgehend angepasst aus den gesamten posts.


es hapert leider am : stateFormat
der zählerstand wird angezeigt und beim rest passiert nichts
Zählerstand: 265.0325 m3
Verbrauch heute: 0.00 Liter
Durchfluss: 0.00 Liter/min

Lg Gerrit