Anfängerfrage Gaszähler mit HttpMod oder JsonMod abfragen

Begonnen von marboj, 27 November 2023, 08:20:50

Vorheriges Thema - Nächstes Thema

yersinia

Zitat von: marboj am 27 November 2023, 10:07:33da bleibt das Feld httpbody leer...
das ist schlecht

Zitat von: marboj am 27 November 2023, 10:07:33Ich dachte, dass die httpmod-Abfrage für mich als Laien einfacher ist. Verstehe halt nicht, warum es nicht, wie im Blog beschrieben, funktioniert?
Das wissen wir hier auch nicht, da wir deine Situation mit den gelieferten Informationen nicht nachstellen können. Eventuell gibt es noch den ein oder anderen Forist mit einem ähnlichem Setup, welcher Hilfestellung leisten könnte.
Anscheinend ist das gelieferte json für die FHEM Module nicht richtig formatiert. Und der 'normale' Webserver liefert auch nichts an FHEM. Entweder stimmt was mit dem Sensor nicht, deine Device Definition passt nicht zum Sensor oder FHEM ist mit dem derzeitigen Modulstand von JsonMod und HTTPMOD nicht geeignet.

Zitat von: marboj am 27 November 2023, 10:07:33Was ist denn für MQTT zu tun?
Ich würde damit anfangen, FHEM als MQTT2_SERVER aufzusetzen (Starte im Wiki) und dann deinen Sensor an FHEM senden zu lassen (nach https://footprintzero.de/quickstart/#mqtt müsste dies funktionieren).
viele Grüße, yersinia
----
FHEM 6.4 (SVN) on RPi 4B with RasPi OS Bookworm (perl 5.36.0) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

marboj

auf der Unterseite /json werden aber doch Werte dargestellt.

define Gaszaehler2 HTTPMOD http://192.168.0.124/json 300
attr Gaszaehler2 reading01Name gesamt
attr Gaszaehler2 showBody 1
#   BUSY       0
#   DEF        http://192.168.0.124/json 300
#   FUUID      65644acb-f33f-698a-3f88-73bbad1fc82d7d86
#   Interval   300
#   MainURL    http://192.168.0.124/json
#   ModuleVersion 4.1.16 - 4.4.2023
#   NAME       Gaszaehler2
#   NOTIFYDEV  global
#   NR         561
#   NTFY_ORDER 50-Gaszaehler2
#   STATE      ???
#   TYPE       HTTPMOD
#   eventCount 1
#   httpbody   Content-Type: application/json
#{"gesamt": 868402, "aktuell": 1, "heute": 32, "since_last_call": 1, "gestern": 51, "glmw": 0}
#
#   value     
#   HttpUtils:
#     NAME       
#     addr       http://192.168.0.124:80
#     auth       0
#     code       200
#     compress   1
#     conn       
#     data       
#     displayurl http://192.168.0.124/json
#     header     
#     host       192.168.0.124
#     httpheader HTTP/1.0 200 OK
#     httpversion 1.0
#     hu_blocking 0
#     hu_filecount 1
#     hu_port    80
#     hu_portSfx
#     ignoreredirects 1
#     loglevel   4
#     path       /json
#     protocol   http
#     redirects  0
#     timeout    2
#     url        http://192.168.0.124/json
#     sslargs:
#   QUEUE:
#   READINGS:
#   REQUEST:
#     context    reading
#     data       
#     header     
#     ignoreredirects 0
#     num        unknown
#     retryCount 0
#     type       update
#     url        http://192.168.0.124/json
#


Kann ich die in FHEM nicht abfragen?
meine FHEM-Konfiguration: Raspberry Pi4, BT-Dongle, CUL868, CeeBee II

betateilchen

#17
Ich würde einfach eine Funktion in die 99_myUtils schreiben, in der die URL abgefragt und aus dem Ergebnis die erste Zeile gelöscht wird. Den Rest übergibt man dann an json2reading() und schreibt die Werte einfach in einen dummy. Der Aufruf der Funktion kommt in ein at, das alle 5 Minuten läuft. Fertig.

Man muss nicht jeden Pups mit HTTPMOD machen.

define gasdummy dummy

define at_gasdummy at +*00:05:00 {gasjson()}

sub gasjson {
  my $json = GetFileFromUrl("http://192.168.0.124/json")
  $json =~ s/Content.*\n//;
  json2reading("gasdummy",$json);
}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

marboj

Respekt vor all Eurem Wissen, dass bekomme ich aber nicht hin. Versuche halt, die vorhandenen Module zu nutzen und frage, wenn etwas nicht funktioniert.

Schade, dass es, für mich, nicht einfach funktioniert. Ich schreibe auch mal den Verfasser des Blogs an.
meine FHEM-Konfiguration: Raspberry Pi4, BT-Dongle, CUL868, CeeBee II

yersinia

Zitat von: betateilchen am 27 November 2023, 11:06:03Ich würde einfach eine Funktion in die 99_myUtils schreiben, in der die URL abgefragt und aus dem Ergebnis die erste Zeile gelöscht wird. Den Rest übergibt man dann an json2reading() und schreibt die Werte einfach in einen dummy. Der Aufruf der Funktion kommt in ein at, das alle 5 Minuten läuft. Fertig.
Ich wage zu bezweifeln, dass OP dazu in der Lage ist. Zeig Code und er wirds schaffen.

Zitat von: betateilchen am 27 November 2023, 11:06:03Man muss nicht jeden Pups mit HTTPMOD machen.
Spricht ein User, der mAn schon lange die laienhafte (erst-)Anwendersicht verloren hat.

B2T
Zitat von: marboj am 27 November 2023, 10:59:52Kann ich die in FHEM nicht abfragen?
Setze extractAllJSON auf 1, lösche alle anderen Attribute und lade neu. Wenn HTTPMOD dann nichts liefert, dann wird es so nicht funktionieren.
Dann bleibt dir nur noch MQTT, der Vorschlag von betateilchen oder eine andere Lösung.
viele Grüße, yersinia
----
FHEM 6.4 (SVN) on RPi 4B with RasPi OS Bookworm (perl 5.36.0) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

betateilchen

#20
Zitat von: marboj am 27 November 2023, 11:11:19Respekt vor all Eurem Wissen, dass bekomme ich aber nicht hin.

Was für ein Gejammer...

Zitat von: yersinia am 27 November 2023, 11:12:59Zeig Code und er wirds schaffen.

Der 3-zeilige Code und die Definition der beiden benötigten devices steht in meinem vorherigen Beitrag.

Zitat von: marboj am 27 November 2023, 11:11:19Schade, dass es, für mich, nicht einfach funktioniert.

Insgesamt ist das weniger zu tun als ein HTTPMOD device anzulegen und sich mit regexp rumschlagen zu müssen.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: yersinia am 27 November 2023, 10:55:41Ich würde damit anfangen, FHEM als MQTT2_SERVER aufzusetzen (Starte im Wiki) und dann deinen Sensor an FHEM senden zu lassen (nach https://footprintzero.de/quickstart/#mqtt müsste dies funktionieren).

Und Du glaubst allen Ernstes, dass das einfacher ist, als drei Zeilen Code in die 99_myUtils.pm zu kopieren?

Da frage ich mich gerade, wer hier den Blick für die Realität verloren hat. Ich nicht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

yersinia

Zitat von: betateilchen am 27 November 2023, 11:27:33Und Du glaubst allen Ernstes, dass das einfacher ist, als drei Zeilen Code in die 99_myUtils.pm zu kopieren?
Glauben ist für alte Gebäude mit spitzem Dach. Und ja, ich denke drei Zeilen Code in der myUtils inklusive dummy und at ist für einen Anfänger, allein schon von der Entwicklung des Konzepts her, zu schwierig. Die Kopierfertigen Vorlagen diverser Module in unterschiedlicher Dokumentationsqualität sind gefühlt oft ein einfacherer Zugang. Auch wenn es nicht immer die Beste Lösung ist.

Zitat von: betateilchen am 27 November 2023, 11:27:33Da frage ich mich gerade, wer hier den Blick für die Realität verloren hat. Ich nicht.
Wann hast du mit FHEM angefangen und wie lange bist du als mMn erfahrener Entwickler dabei? <--rhetorische Frage; siehe Text davor sowie subjektive Meinung.
viele Grüße, yersinia
----
FHEM 6.4 (SVN) on RPi 4B with RasPi OS Bookworm (perl 5.36.0) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

marboj

Habe nun die 3 Zeilen in 99_myUtils.pm eingefügt und die beiden Devices angelegt.

Das at macht auch alle 5 Minuten etwas, allerdings bleibt der Dummy leer.

Was kann das nun sein? json2reading ist im Standard installiert?
meine FHEM-Konfiguration: Raspberry Pi4, BT-Dongle, CUL868, CeeBee II

betateilchen

#24
In meinem Code fehlte ein ; am Ende von GetFilFromUrl().
Du solltest aber auch ab und zu mal ins Logfile schauen, da müsste eine Fehlermeldung stehen.

Füge mal bitte die Debug Zeile wie unten bei Dir ein.

Mit {gajson} in der FHEM-Befehlszeile kannst Du die Ausführung manuell testen.
Dann ins Log schauen, ob da eine Debug Meldung steht.

sub gasjson {
  my $json = GetFileFromUrl("http://192.168.0.124/json");
  $json =~ s/Content.*\n//;
  Debug $json;
  json2reading("gasdummy",$json);
}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

marboj

Habe das angepasst. Beim Reload des Moduls erscheint folgender Fehler:

syntax error at ./FHEM/99_myUtils.pm line 695, near ")
  $json "
Global symbol "$json" requires explicit package name (did you forget to declare "my $json"?) at ./FHEM/99_myUtils.pm line 695.
Global symbol "$json" requires explicit package name (did you forget to declare "my $json"?) at ./FHEM/99_myUtils.pm line 696.

meine FHEM-Konfiguration: Raspberry Pi4, BT-Dongle, CUL868, CeeBee II

TomLee

Darf man fragen wozu ein zusätzlicher dummy vorgeschlagen wird?
Warum nicht die Readings in das at schreiben lassen und der gasjson-Funktion $SELF übergeben ?
Dann hätte man auch keine statischen Angaben in der Sub.

betateilchen

Poste mal bitte den Teil, den Du jetzt in der 99_myUtils.pm stehen hast.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: TomLee am 27 November 2023, 11:59:41Darf man fragen wozu ein zusätzlicher dummy vorgeschlagen wird?

Darfst Du, ich werde das aber nicht beantworten.
Kannst Du mal bitte aufhören, überall Verwirrung zu stiften? Danke.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

marboj

#29
sub gasjson {
  my $json = GetFileFromUrl("http://192.168.0.124/json");
  $json =~ s/Content.*\n//;
  Debug $json;
  json2reading("gasdummy",$json);
}
meine FHEM-Konfiguration: Raspberry Pi4, BT-Dongle, CUL868, CeeBee II