Hauptmenü

Auslesen Gaszähler

Begonnen von Ivolein, 05 Januar 2018, 16:01:10

Vorheriges Thema - Nächstes Thema

Ivolein

Hallo Zusammen,

ich habe mir mit hilfe eines ESP8266 und eines Magnetfeld-Sensor eine Logging Funktion des Gaszähler gebaut.
Dies funktionert auch ganz gut und er aktuelle Zählerstand kann über ein Webinterface ausgelesen werden.
Ich möchte nun dieses Wert in FHEM mit hilfe des HTTPMOD-Moduls übernehmen und hier hab ich mein Problem...

Das Zugreifen funktionert aber ich ab noch Probleme mit dem Passenden filtern und.
Im dem Attribuite "Verbose 4" wird folgender String im Log angezeigt:;
2018.01.05 15:49:05 4 : Gaszaehler: Read callback: request type was update retry 0, Header: HTTP/1.1 200 OK Content-Type: text/plain Content-Length: 8 Connection: close Access-Control-Allow-Origin: *, Body: 7482.740

Wenn ich nun mein reading01Regex auf folgenden Wert setzte:
(.*)
Dann wird mir als Readings "HTTP/1.1 200 OK " angezeigt

Wie komm ich nun an die Zahl nach dem Body?
Ein Regex mit .*Body:(*.)hat leider keinen Erfolg gebracht - "Read response to update didn't match any Reading"
Ich gebe beim ESP8266 nur die Zahl aus - ohne sonstige Formatierung.

Wie komm ich nun an die Zahl des Zählers ?

Hier nochmal der komplette Auszug aus dem Log:


Save config
Gaszähler
Stromzähler
Umwelt
Unsorted
icoEverything Everything
Logfile
Commandref
Remote doc
Edit files
Select style
Event monitor
Events (Filter: .*)   FHEM log   
2018.01.05 16:00:05 4 : Gaszaehler: GetUpdate called (update)
2018.01.05 16:00:05 4 : Gaszaehler: update timer modified: will call GetUpdate in 60.0 seconds at 2018-01-05 16:01:05
2018.01.05 16:00:05 4 : Gaszaehler: AddToQueue adds update, initial queue len: 0
2018.01.05 16:00:05 4 : Gaszaehler: HandleSendQueue sends request type update to URL http://10.0.0.21/counter, No Data, No Header, timeout 2
2018.01.05 16:00:05 4 : http://10.0.0.21/counter: HTTP response code 200
2018.01.05 16:00:05 4 : Gaszaehler: Read callback: request type was update retry 0, Header: HTTP/1.1 200 OK Content-Type: text/plain Content-Length: 8 Connection: close Access-Control-Allow-Origin: *, Body: 7482.900
2018.01.05 16:00:05 4 : Gaszaehler: CheckAuth decided no authentication required
2018.01.05 16:00:05 4 : Gaszaehler: ExtractReading for reading01-1 sets counter to HTTP/1.1 200 OK
2018.01.05 16:00:05 4 : Gaszaehler: Read response to update matched Reading(s) counter


Vielen Dank schon mal im voraus.

Viele Grüße,

Michi

majorshark

Hallo,

meine Lösung für dieses Problem habe ich mal auf meinem Blog zusammengefasst.
Ich benutze ESPEasy. Da kommen die Werte dann direkt als Reading im Device an.
http://majorshark.de/index.php/1-gaszaehler-mit-espeasy-und-fhem

Grüße aus Dewitz

VM auf Synology DS718+ mit FHEM 5.9 auf Debian 9.5/32-Bit (stretch)
Nächster Leipziger Stammtisch:

thgorjup

FHEM auf Ubuntu 18.04LTS, 2x nanoCUL, JeeLink, nanoPIR, MQTT, ESP-Easy, HUE.
Sensoren+Aktoren: HM, IT, Lacrosse, Multitrade-PIR, VU+, Somfy

Ivolein

Auch wenn es etwas unhöflich ist.... aber solche Antworten bringen mir leider nichts!

Ich verwende weder einen Raspberry noch ESPEasy - ich möchte hier mein selbst erstelltes Programm verwenden.
Mit geht es  hier nur um die Verwendung der HTTPMODS-Modul nicht um das Auslesen des Gaszähler.

Gruß,

Michi

majorshark

Da muss man sich ja tatsächlich überlegen, ob man noch eine Antwort gibt ohne dabei Gefahr zu laufen noch eine hinter die Löffel zu bekommen.  ???

Also ich würde das Regex dann so definieren.
Body:[^0-9]+([0-9\.]+)
Grüße aus Dewitz

VM auf Synology DS718+ mit FHEM 5.9 auf Debian 9.5/32-Bit (stretch)
Nächster Leipziger Stammtisch:

Ivolein

Hallo,

mkit dem Regex:
Zitat von: majorshark am 05 Januar 2018, 16:41:18
Body:[^0-9]+([0-9\.]+)

Kommt leider die Meldung: Gaszaehler: Read response to update didn't match any Reading


So schlimm war doch meine Antwort nicht, dass es gleich was hinter die Löffel gibt  ::)
Es kommt nur in einigen Foren vor, dass man immer wieder Antworten ließst, die absolut nichts mit der Frage zu tun haben.
Ich suche "einfach" nur nach einer Lösung mit dem HTTPMOD, da ich hier noch einige weitere Sensoren im Haus verbauen will und ich diese über den selben Weg auslesen will und deshalb die Sache mit dem HTTPMOD verstehen will.

Danke aber für den ersten Versuch.

Grüße,

Michi

majorshark

Hast Du den Reading Namen des Readings in dem der Wert geschrieben werden soll mit
attr <Device> reading01Name <Name>
schon definiert?

Ansonsten kannst Du ja mal Deine komplette Definition posten.
Grüße aus Dewitz

VM auf Synology DS718+ mit FHEM 5.9 auf Debian 9.5/32-Bit (stretch)
Nächster Leipziger Stammtisch:

Ivolein

Hier mein komplettes Define:

define Gaszaehler HTTPMOD http://10.0.0.21/counter 60
attr Gaszaehler userattr reading01Name reading01Regex
attr Gaszaehler reading01Name counter
attr Gaszaehler reading01Regex Body:[^0-9]+([0-9\.]+)
attr Gaszaehler room Gaszähler
attr Gaszaehler showError 1
attr Gaszaehler showMatched 1
attr Gaszaehler verbose 4


Den Name hab ich eigenlich schon definiert.

Ivolein

#8
Hier noch mal ein weiterer Log-Auszug:

2018.01.05 17:46:06 4: Gaszaehler: GetUpdate called (update)
2018.01.05 17:46:06 4: Gaszaehler: update timer modified: will call GetUpdate in 60.0 seconds at 2018-01-05 17:47:06
2018.01.05 17:46:06 4: Gaszaehler: AddToQueue adds update, initial queue len: 0
2018.01.05 17:46:06 4: Gaszaehler: HandleSendQueue sends request type update to URL http://10.0.0.21/counter, No Data, No Header,
timeout 2
2018.01.05 17:46:06 4: http://10.0.0.21/counter: HTTP response code 200
2018.01.05 17:46:06 4: Gaszaehler: Read callback: request type was update retry 0,
Header: HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 8
Connection: close
Access-Control-Allow-Origin: *,
Body: 7483.560


Mit dem Regex .*Connection: (.*) bekomme ich als Reading "close"

Mit dem Regex .*Content-Length: (.*) bekomme ich als Reading "8"

Nur mit Regex .*Body: (.*) bekomm ich keine Werte sondern die Meldung "Read response to update didn't match any Reading"

Meine Frage ist, wie ich an des "Body"-Element komme

Gruß,

Michi

Ivolein

So... damit das hier auch für die Zukunft einen Sinn hat, kommt hier die Lösung.

Das "Body" ist kein Text den man suchen kann, sonder nur als Hinweis, dass jetzt der Inhalt kommt.
Mit ([0-9]{3,}+[.]+[0-9]*) klappt es.