Neue Version von HTTPMOD mit neuen Features zum Testen

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

Vorheriges Thema - Nächstes Thema

amenomade

not(contains')) ist nicht immer das performanteste, aber Du hast ja was mit "contains", was es schon deutlicher macht vorher.

Ich würde so machen:
//span[.='DAX ®']/../../span[@class="price"]
Selbsterklärend, oder? ;)

Ob das wirklich viel  performanter ist, kann ich nicht beurteilen. Sollte zumindest.

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Gisbert

Zitat von: amenomade am 22 Dezember 2020, 18:05:21
Ich würde so machen:
//span[.='DAX ®']/../../span[@class="price"]
Selbsterklärend, oder? ;)

Selbsterklärend, ich spüre da eine leichte Ironie. Den Anfang und das Ende kann ich akzeptieren, aber warum .= vor dem Such-String (hoffentlich ist das letztere nicht schon falsch). Und dann /../../ das ist ja sowas von selbsterklärend. Ich persönlich finde die @ und $ Symbole, oder auch ein paar ;; bzw. auch gerne genommen {}, interessant  ;) ;D

Ich hätte aber noch eine ernsthafte Frage. Kann man für einen Teil der Abfrage eine andere URL nehmen, statt derjenigen in der Definition, und wenn ja, wie? Ich sehe nämlich, dass der Nasdaq nicht auf der Hauptseite, sondern auf einer anderen Seite bereitgestellt wird.

Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

amenomade

//span[.='DAX ®'] => span Tag, der genau 'DAX ®' enthält. Der Punkt referenziert den jetzigen Tag (ein bisschen wie bei directories in Linux: . ist der wo man steht, .. ist der parent directory.

ZitatKann man für einen Teil der Abfrage eine andere URL nehmen, statt derjenigen in der Definition, und wenn ja, wie?
Ja, man definiert ein zusätzliches get Befehl mit getXXURL, getXXName, getXXXPath und lässt man es mit getXXPoll gleichzeitig abfragen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Gisbert

Zitat von: amenomade am 23 Dezember 2020, 00:13:20
... man definiert ein zusätzliches get Befehl mit getXXURL, getXXName, getXXXPath und lässt man es mit getXXPoll gleichzeitig abfragen.

Hallo amenomade,
cool, hab's erfolgreich umgesetzt, nochmals vielen Dank.

Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

StefanStrobel

Hallo,

Anbei eine neue Version zum Testen.
Es gibt zwei neue Attribute:

errorLogLevel und errorLogLevelRegex.
Die ändern das LogLevel, mit dem Fehlermeldungen von HttpUtils in HTTPMOD geloggt werden.
Wenn z.B. nur errorLogLevel auf 4 gesetzt wird, dann kommen alle Fehler von HttpUtils auf Level 4.
Wenn dazu noch "timeout" bei errorLogLevelRegex angegeben wird, dann kommen nur Fehlermeldungen, die timeout Enthalten, mit Level 4, der Rest bleibt bei Level 3.

Gruß
   Stefan

ares

Ich benötige den Pfad für die weitere Auswertung im Modul:
my $path = InternalVal($DevName, 'path', '');
switch ($path) {...}


Kann es sein, dass "path" mit dem Update aus den Internals entfernt wurde?
Falls ja, gibt's eine Alternative?

amenomade

Du hast den Path noch in $defs{httpmod_name}{HttpUtils}{path}

Du kannst auch mit InternalVal ("httpmod_name", "HttpUtils", "") das Hash holen, und dann das "path" Element davon nutzen
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

StefanStrobel

Hallo ares,

ja, die sind beim letzten größeren Update verschoben worden.
Siehe #957 https://forum.fhem.de/index.php/topic,45176.945.html
Das frühere internal path müsste aber noch als $hash->{HttpUtils}{path} erreichbar sein.

Gruß
    Stefan

ares

#1028
Hallo amenomade, hallo Stefan,

danke euch beiden erstmal für die parallele Antwort. Die Lösung über Hash und dem passenden Element path muss ich aber erst nachlesen. Ich habe lange nichts in fhem geändert oder erweitert und bin derzeit froh, wenn ich die Probleme noch eingrenzen kann.

Vielleicht kann einer von euch beiden mir ungetestet spontan folgende Code-Zeile anpassen, damit meine Frau ihre Heizung wieder stalken kann? <lieb guck>
my $path = InternalVal('ISGweb', 'path', '');

Viele Grüße
Manfred

Edit meint... falls es hilft, irgendwie hatte ich das Modul wie folgt aufgerufen und dort abhängig vom Pfad die Verarbeitung umgesetzt:

attr ISGweb reading00Name ISGwebUtils
attr ISGweb reading00OExpr ISGwebUtils_OExpr($val);;
attr ISGweb reading00Regex (?s)(?:"sub_nav"|"werte")(.+)"footer"

amenomade

Zitat von: ares am 04 Januar 2021, 17:17:59
Vielleicht kann einer von euch beiden mir ungetestet spontan folgende Code-Zeile anpassen, damit meine Frau ihre Heizung wieder stalken kann? <lieb guck>
my $path = InternalVal('ISGweb', 'path', '');

my $path = $defs{ISGweb}{HttpUtils}{path};
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

ares

Hallo amenomade,

funktioniert wunderbar.

Herzlichen Dank!
Manfred

StefanStrobel

Hallo,

seit in der neuen Version von HTTPMOD das bodyDecode-Feature mit 'auto' als Default funktioniert (vorher war es aufgrund eines Bugs eine inaktiv), hat es nur Probleme bereitet und scheinbar nichts gebracht.
Ursprünglich hatte ich das aufgrund der Diskussion um Memory-Leaks bei einigen Perl-Versionen implementiert und dachte dass es eine gute Idee wäre, wenn es schon einen encoding-Header gibt, diesen dann auch zu nutzen um den Body zu dekodieren.
(siehe auch https://forum.fhem.de/index.php/topic,84372.690.html)

Ich denke dass es sinnvoller ist das bleiben zu lassen, da doch einige Leute danach bei der Verarbeitung von JSON-Daten  Fehler bekommen, wenn die daten ursprünglich als utf8 geliefert werden und von bodyDecode dann dekodiert werden.

Anbei eine neue Version, bei der bodyDecode per default wieder auf 'none' steht. Ein Teil des Features steckt in Utils, die nach lib/FHEM/HTTPMOD gehört.

Wie seht Ihr das? Ich tendiere dazu, das so einzuchecken...

Gruss
   Stefan


StefanStrobel

Und hier gleich noch ein neues Feature:

attr MeinHTTPMOD setXXFollowGet GetName

sorgt dafür, dass nach einem set automatisch ein get ausgeführt wird, um bei Bedarf die Readings zu aktualisieren.
Der Wert nach dem Attribut muss dazu dem Namen eines definierten get entsprechen.

Gruss
   Stefan

Pumba9876

musst Fhem neu aufsetzen und nun bekomme ich meine Module die HTTpMod laufen nicht mehr ans rennenCan't locate FHEM/HTTPMOD/Utils.pm in @INC (you may need to install the FHEM::HTTPMOD::Utils module) (@INC contains: . /etc/perl /usr/local/lib/arm-linux-gnueabihf/perl/5.28.1 /usr/local/share/perl/5.28.1 /usr/lib/arm-linux-gnueabihf/perl5/5.28 /usr/share/perl5 /usr/lib/arm-linux-gnueabihf/perl/5.28 /usr/share/perl/5.28 /usr/local/lib/site_perl /usr/lib/arm-linux-gnueabihf/perl-base ./FHEM ./FHEM/lib) at ./FHEM/98_HTTPMOD.pm line 69.
BEGIN failed--compilation aborted at ./FHEM/98_HTTPMOD.pm line 69.
das kommt dann als fehler meldung wenn ichreload 98_HTTPMOD.pm
eingebe wenn ich das Modul anlegen will , kann das Modul nicht laden .
was mache ich falsch.
kann mir irgend wer helfen
Danke
1x FB7590 1x RPI3B 4xShelly 2.5 2x Shelly1Philips Hue ,Teufel Soundbar ,Ones, foscam Kamera

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus