Neue Version von HTTPMOD mit neuen Features zum Testen

Begonnen von StefanStrobel, 05 Dezember 2015, 08:31:32

Vorheriges Thema - Nächstes Thema

blueberry63

Hallo Stefan,

auch bei mir funktioniert es jetzt und zwar wenn ich "bodyEncode=utf8" und "bodyDecode=none" (oder weglasse) setze.

Setze ich "bodyEncode=utf8" und "bodyDecode=utf8", wird das "ß" nicht richtig dargestellt, aber ich bekomme wenigstens die Daten geliefert.

Vielen Dank für die schnelle Umsetzung!

Gruß
Blueberry63

FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

Gisbert

Hallo Stefan,

ich möchte gerne Börsenindizes auslesen.
Ich hab das in der Vergangenheit immer wieder versucht, es lief dann eine zeitlang, bis sich wieder etwas an der aufgerufenen Seite geändert hat.

Ich wollte jetzt  einen neuen Versuch starten und die Daten von https://www.onvista.de/index auslesen.
Dazu habe ich folgendes definiert:
defmod myIndex HTTPMOD https://www.onvista.de/index 600
attr myIndex reading01Name DAX
attr myIndex reading01XPath-Strict /html/body/div[1]/div[2]/div/section/div[4]/div/div/div[1]/div/div[2]/div[1]/div[1]/data

Den Inhalt des Attribut reading01XPath-Strict habe ich aus der Seite kopiert, mit dem Addon xPath im Firefox.
Dannach gab es diese Meldung im logfile (nur die beiden ersten Zeilen, es geht dann ellenlang weiter):
2022.12.20 09:30:48.814 3: myIndex: error in find for XPathStrictNodeset:
not well-formed (invalid token) at line 1, column 47144, byte 47202:

Ein Reading wurde nicht erstellt.

Mein Ziel ist den Indexwert und die prozentuale Änderung verschiedener Börsenindices auszulesen.
Falls etwas Funktionierendes bei dieser oder einer anderen Seite bereits existiert, was ich nur zu kopieren brauche, dann nehme ich das sehr gerne.

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

fireball

Hi,

kann man bei HTTPMOD auch zwei Werte für einen Set übergeben?!
Ich möchte gern einen Wert in der URL ersetzen und in den gesendeten Daten:

set03Data {"action" : $val}
set03Hint 0,1,2
set03Name Taster
set03URL  %Taster_URL%
replacement03Mode reading
replacement03Regex  %Taster_URL%
replacement03Value Taster_URL


Die Werte für action in set03Data kann ich ersetzen bzw übergeben.
Die URL sieht so aus und wird vorher gesetzt und dann genutzt: http://192.168.178.28/ocf/wlss97/shutter/1

Ich würde aber gern einfach zwei Werte an das Set senden und den Bereich "wlss97" ersetzen.
Weiß nicht ob das geht?!

VG
René

blueberry63

ZitatEs gibt ein neues Attribut bodyEncode

Ich habe heute ein Update in FHEM gemacht. Kann es sein, dass "bodyEncode" noch nicht "released" wurde?

Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

StefanStrobel

Hallo,

die neue Version mit bodyEncode ist jetzt eingecheckt.

Gruss
   Stefan

OdfFhem

@StefanStrobel

Bislang in Zeile #510

        elsif ($aName =~ /((get|set)[0-9]*)?[Rr]eplacement([0-9]*)Value/) {

mit dem neuen Stand in Zeile #513

        elsif ($aName =~ /((get|set)[0-9]*)?[Rr]eplacement([0-9]*)Value/) {


Die davon abhängige Zeile #515 (im neuem Stand)

            if (AttrVal($name, "replacement${2}Mode", "text") eq "expression") {

verursacht wohl den in https://forum.fhem.de/index.php/topic,131104.msg1256255.html#msg1256255 geschilderten Fall.

Vermutlich würde die Verwendung von $3 statt $2 in der abhängigen Zeile schon reichen ...

StefanStrobel


Rampler

@Stefan,
bezugnehmend auf #1220 vom OdfFhem habe ich die neue 98_HTTPMOD.pm getestet.

Ich habe jetzt auch noch die Zeile 514

von:   
Log3 $name, 5, "$name: validating attr $name $aName $aVal, check for replacement${2}Mode";

nach:
Log3 $name, 5, "$name: validating attr $name $aName $aVal, check for replacement${3}Mode";

geändert. Jetzt passt alles .., zumindest gibts keine Fehlermeldungen mehr.

Gruß Klaus

3 HMUART (2 via ESP8266), 1 DUOFERN, 9 ESP8266, RPI2 (Bullseye), ZWAVE, HM-Classic, und hoch zufrieden ...
Danke an alle, die was dazu beigetragen haben !!

betateilchen

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

fremitus

#1224
Hallo zusammen,

ich bräuchte mal Hilfe...meine Suche hier im Forum brachte leider immer nur Teilergebnisse, wobei ich definitiv nicht der Erste bin, der danach fragt.

Ich möchte über Tankerkönig die aktuellen Preise abfragen, was auch tadellos funktioniert. Das ganze soll dynamisch erfolgen, sprich im Bulli. Meine installation funktioniert schon für die Blitzer und Wetter Module.

Die GPS Daten liegen als Readings vor (ueber ein Customreading), ich kann diese somit direkt einlesen. Trotz mehrfachen Lesens der commandref zu httpmod komme ich nicht weiter. Ich habe folgendes definiert:
https://creativecommons.tankerkoenig.de/json/list.php?lat=$val&lng=$val&rad=4&sort=price&type=diesel&apikey=xxxxx

Die beiden &val möchte ich über set01Data [gps:koordinaten]=$val& füllen...hier mal der Wert für Latitude. Wobei [gps:koordinaten] die gps Daten liefert.

Wie von mir befürchtet geht die Abfrage ohne die Werte raus.

HandleSendQueue sends update with timeout 2 to https://creativecommons.tankerkoenig.de/json/list.php?lat=&lng=&rad=4&sort=price&type=diesel&apikey=xxxxxxxx, No Data, No Header

Kann ich einfach ein Customreading an dieser Stelle benutzen?

Gruss Peer

OdfFhem

@fremitus

Angenommen, der apikey ist echt, würde ich diesen anonymisieren ...

fremitus

ja Mist ... beim zweiten copy habe das übersehen .... danke!

fremitus

wie immer, wenn man schreibt...habe es gefunden und gefixed, da war ich ja erstmal völlig falsch unterwegs.....

Mit replacement klappt es wunderbar:

defmod tanke HTTPMOD https://creativecommons.tankerkoenig.de/json/list.php?lat=%vala%&lng=%valo%&rad=4&sort=price&type=diesel&apikey=xxxxxxx 900
attr tanke extractAllJSON 1
attr tanke replacement01Mode reading
attr tanke replacement01Regex %vala%
attr tanke replacement01Value gps:gpslat
attr tanke replacement02Mode reading
attr tanke replacement02Regex %valo%
attr tanke replacement02Value gps:gpslon


Gruss Peer

DigiNecro

Bei mir stürzt bei einer Abfrage immer ganz FHEM ab. Liegt dies an meiner Konfiguration oder woanders?

Es tritt nur auf, wenn ich dies setze:
get01JSON text


define WitzAPIDE HTTPMOD https://witzapi.de/api/joke/?language=de 0
attr WitzAPIDE extractAllJSON 1
attr WitzAPIDE get01JSON text
attr WitzAPIDE get01Name Zufallswitz
attr WitzAPIDE getDecode UTF-8
attr WitzAPIDE getHeader1 Content-Type: application/json
attr WitzAPIDE getHeader2 Accept: */*
attr WitzAPIDE room Sprachsteuerung,hidden
attr WitzAPIDE showBody 1
attr WitzAPIDE stateFormat 01_text
#   DEF        https://witzapi.de/api/joke/?language=de 0
#   FUUID      63d060ba-f33f-70c1-a063-92d4966aaaa1d61a
#   Interval   0
#   MainURL    https://witzapi.de/api/joke/?language=de
#   ModuleVersion 4.1.15 - 17.12.2022
#   NAME       WitzAPIDE
#   NOTIFYDEV  global
#   NR         1127
#   NTFY_ORDER 50-WitzAPIDE
#   STATE      Ich habe beim Metzger angerufen, aber da ging kein Schwein dran.
#   TYPE       HTTPMOD
#   READINGS:
#     2023-02-04 13:50:17   01_language     de
#     2023-02-04 13:50:17   01_text         Ich habe beim Metzger angerufen, aber da ging kein Schwein dran.
#
setstate WitzAPIDE Ich habe beim Metzger angerufen, aber da ging kein Schwein dran.
setstate WitzAPIDE 2023-02-04 13:50:17 01_language de
setstate WitzAPIDE 2023-02-04 13:50:17 01_text Ich habe beim Metzger angerufen, aber da ging kein Schwein dran.


Aus dem Log (Verbose 5):

2023.02.04 14:05:07 5: WitzAPIDE: get called with Zufallswitz
2023.02.04 14:05:07 5: WitzAPIDE: get found option Zufallswitz in attribute get01Name
2023.02.04 14:05:07 4: WitzAPIDE: get will now request Zufallswitz, no optional value
2023.02.04 14:05:07 5: WitzAPIDE: AddToQueue adds type get01 to URL https://witzapi.de/api/joke/?language=de, no data, header Content-Type: application/json
Accept: */*, retry 0, initial queue len: 0
2023.02.04 14:05:07 5: WitzAPIDE: HandleSendQueue called from AddToSendQueue, qlen = 1
2023.02.04 14:05:07 4: WitzAPIDE: HandleSendQueue sends get01 with timeout 2 to https://witzapi.de/api/joke/?language=de, No Data,
header: Content-Type: application/json
Accept: */*
2023.02.04 14:05:07 5: WitzAPIDE: ReadCallback called from __ANON__
2023.02.04 14:05:07 4: WitzAPIDE: Read callback: request type was get01 retry 0,
header: HTTP/1.1 200 OK
Server: nginx
Date: Sat, 04 Feb 2023 13:05:07 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 137
Connection: close
X-Powered-By: Express
Cache-Control: public, max-age=0
Access-Control-Allow-Origin: *
ETag: W/"89-T5muCITTt+Fx9QLg27D7tqJG7T0"
Strict-Transport-Security: max-age=15768000, body length 137
2023.02.04 14:05:07 5: WitzAPIDE: Read callback: body
[{"text":"Neben mir wohnt eine indische Familie. Mir ist gerade erst aufgefallen, dass ihr WLAN ,,Indernet" heißt.","language":"de"}]
2023.02.04 14:05:07 4: WitzAPIDE: BodyDecode is not decoding the response body (charset utf-8, bodyDecode defaults to none)
2023.02.04 14:05:07 4: WitzAPIDE: extracted JSON values to internal
2023.02.04 14:05:07 5: WitzAPIDE: GetCookies is looking for Cookies
2023.02.04 14:05:07 5: WitzAPIDE: ExtractSid called, context get, num 01
2023.02.04 14:05:07 4: WitzAPIDE: checking for redirects, code=200, ignore=0
2023.02.04 14:05:07 4: WitzAPIDE: no redirects to handle
2023.02.04 14:05:07 5: WitzAPIDE: Read callback sets LAST_REQUEST to get01
2023.02.04 14:05:07 5: WitzAPIDE: CheckAuth decided no authentication required
2023.02.04 14:05:07 5: WitzAPIDE: ExtractReading Zufallswitz with json text ...
2023.02.04 14:05:07 5: WitzAPIDE: ExtractReading Zufallswitz with json text did not match a key directly - trying regex match to create a list
2023.02.04 14:05:07 5: WitzAPIDE: ExtractReading Zufallswitz with json /^text/ got keylist
2023.02.04 14:05:07 5: WitzAPIDE: ExtractReading Zufallswitz did not match
Wide character at ./FHEM/98_HTTPMOD.pm line 1501.

ch.eick

#1229
Zitat von: DigiNecro am 04 Februar 2023, 14:10:42
Bei mir stürzt bei einer Abfrage immer ganz FHEM ab. Liegt dies an meiner Konfiguration oder woanders?

Es tritt nur auf, wenn ich dies setze:
get01JSON text

2023.02.04 14:05:07 5: WitzAPIDE: Read callback: body
[{"text":"Neben mir wohnt eine indische Familie. Mir ist gerade erst aufgefallen, dass ihr WLAN ,,Indernet" heißt.","language":"de"}]

Moin,
eventuell liegt es an der JSON Antwort, da sind innerhalb des Textes noch zusätzliche "" vorhanden. Somit könnte das Textfeld nicht richtig erkannt werden.

VG  Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick