Wikipedia Artikel auslesen per httpmod?

Begonnen von joginet, 10 März 2018, 11:02:31

Vorheriges Thema - Nächstes Thema

joginet

Hallo Forum,

ich komme mal wieder nicht vom Fleck. Für meine offline-Sprachsteuerung möchte ich mir Wikipedia-Artikel vorlesen lassen.
D.h. FHEM soll bei Anfrage an mein Spracherkennungs-System ein Reading aus einer angeforderten Wikipedia-Setie vorlesen.

Was ich bisher habe, ist ein dummy, dessen state die URL inklusive des Readings aus meiner Spracherkennung erhält.
In diesem Fall habe ich "what is a cat?"  gefragt und er dummy bekommt die URL als state:

{ fhem("set wpurl "."https://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=xml&exintro=&titles=" .(ReadingsVal("myArduino1","UNKNOWNCODE MOVIEvent[201]","..."))) }

So weit so gut. Jetzt habe ich also die URL für wikipedia:

https://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=xml&exintro=&titles=cat

Jetzt brauche ich die Readings aus dieser xml-Datei im FHEM und möchte mir das vorlesen lassen.

Dazu habe ich mit HTTPMOD experimentiert. Ich schaffe es aber nicht, diese URL bei Anforderung dynamisch zu übergeben.

Also z.B. "cat" mit "dog" zu ersetzen.

Ich habe mich an "replacements" versucht., leider erfolglos. In diesem Beispiel aus dem Wiki wird ja z.B. das Passwort dynamisch geändert:

attr mydevice get05Name profile
attr mydevice get05URL http://www.mydevice.local/getprofile?password=%%password%%
attr mydevice replacement02Mode key
attr mydevice replacement02Regex %%password%%
attr mydevice get05Replacement02Value password


Eventuell liege ich falsch, aber ich finde, das sieht meinem Vorhaben sehr ähnlich, denn hier wird ja das passwort an die URL gehängt.
Ich scheitere schon bei "set storeKeyValue", da kommt die Meldung "please define first".

Kann mir jemand helfen?

Gruß, Jochen

Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi

joginet

Ich glaube, ich komme der Sache näher. Ein "enableControlSet 1" erlaubt mir ein
set mydevice storeKeyValue mein_text tiger

dann habe ich testweise mal folgendes gemacht (wie im wiki-Beispiel mit dem Passwort) :

attr mydevice get05Name wiki_abfrage
attr mydevice get05URL https://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=xml&exintro=&titles=%%mein_text%%
attr mydevice replacement02Mode key
attr mydevice replacement02Regex %%mein_text%%
attr mydevice get05Replacement02Value mein_text


mit
get mydevice wiki_abfrage

kommt jetzt der Wikipedia-Text über den Tiger ins Reading.

mit

{ fhem("set mydevice storeKeyValue"." text " .(ReadingsVal("myArduino1","UNKNOWNCODE MOVIEvent[201]","cat"))) }

komme ich auch ohne "Zwischen-dummy" zum Ziel.

DieFrage ist nur - habe ich das richtig gemacht?  Das Ganze funktioniert nur wenn das Attribut "replacement02Mode" auf "key" steht - so wie im Passwort-Beispiel...

Gruß, Jochen


Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi

justme1968

httpmod ist dafür gedacht immer wieder die gleiche seite abzurufen und daraus readings zu extrahieren.

du möchtest aber unterschiedliche seiten abrufen und dann mit der kompletten seite etwas tun. schau dir HttpUtils an: https://wiki.fhem.de/wiki/HttpUtils
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

joginet

#3
ZitatSchau dir HttpUtils an

Mmmh -Ok - das hatte ich tatsächlich auch schon. Allerdings bin ich damit nicht so richtig warm geworden. Es gibt da kein Device, oder?
D.h. ich müsste ein Script basteln, den Inhalt per RegEx zerlegen, usw.
Mit Verlaub - das schaffe ich nicht ohne Hilfe - dazu reichen meine Perl-Dau-Fähigkeiten nicht.

Außerdem - so wie ich das verstanden habe, kann die neue Version von HTTPMOD den dynamischen Seitenaufruf?

https://forum.fhem.de/index.php/topic,45176.0.html

ZitatZu Replacements:

Manchmal möchte man einzelne Teile einer URL, eines Headers oder der Post-Daten dynamisch ersetzen um z.B. das aktuelle Datum darin einzubauen oder weitere Daten an den Server zu senden. Mit den neuen Replacements kann man dafür beliebige Teile dieser Daten durch Text, den Inhalt von Readings oder Internals oder sogar mit Perl-Expressions ersetzen. Die Attribute dafür lauten:

  replacement[0-9]*Regex
  replacement[0-9]*Mode
  replacement[0-9]*Value
  [gs]et[0-9]*Replacement[0-9]*Value

Es funktioniert ja auch -  irgendwie. Ich hatte es so verstanden, dass HTTPMOD sozusagen die "GUI" für HTTPUTILS  ist:) :

ZitatDas Modul HttpUtils(.pm) ist sowohl für Modulentwickler als auch für Endanwender gedacht, um Daten via HTTP auszutauschen. Es stellt dabei eine Reihe von Funktionen zur Verfügung und wird beispielsweise vom Modul HTTPMOD intensiv genutzt.

Ich bräuchte also einen Denkanstoß, wie ich HTTPUTILS einsetze. Oder ich belasse es bei HTTPMOD - bisher tut es ja, was ich möchte.
Ich bin mir nur nicht sicher, ob ich mir da irgendwelche Nachteile mit der Art, wie ich es benutze im mein FHEM hole bzw. ob ich das hübscher gestalten kann.

Gruß, Jochen
Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi

joginet

Hmmm - ich glaube, ich werden diesen Ansatz doch nicht weiter verfolgen. Meine Spracherkennung besteht aus Arduino und MOVI-Shield.
Der MOVI gibt scheinbar nur erkannte Sprache als serielles Signal raus, wenn die einzelnen Worte im Sketch bekannt sind.
Ist der Satz "What is a tiger?" definiert, ist das kein Problem.
Aber "Who is the prime minister of Spain?" führt zu nichts, da versucht der MOVI sich irgendetwas aus seinem im Sketch definierten Wortschatz zusammenzureimen.
Eine "dynamische Ausgabe" von erkannten "RAW"-Wörten ist scheinbar nicht möglich. Sicherlich kann man einen "Grundwortschatz" mir den häufigsten Worten in den Sketch eintragen. Allerdings reicht das nicht für Wikipedia-Anfragen und die komplette Offline-Wikipedia passt leider nicht in den Sketch.  ;D

Also - Ansatz begraben. Allerdings: die dynamische URL-Ausgabe per HTTPMOD scheint zu funktionieren.
Gruß, Jochen 
Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi