Ich würde gerne aus der AccuWeather seite die MinuteCast auslesen. Also wann der nächste Regen zu erwarten ist.
Im HTTPMOD ist ein Satz hinterlegt. Diesen kann ich mit Regex auslesen.
Problem 1: Wie bekomme ich den nun als State zurückgegeben (StateFormat)?
Regex: <div class="mc-summary"> <p>([a-zA-Z0-9.\s]+)
Funktioniert laut "http://chris.photobooks.com/regex/" (bis auf Fall Problem 2)
Problem 2: Im HTTPMOD steht statt ü -> ü -> kann ich das umwandeln um es mit Regex auszulesen?
(Mit Regex:<div class="mc-summary"> <p>([a-zA-Z0-9.\s]+)wird alles ausgelesen mit Problem2)
Kann mir wirklich niemand helfen?! Oder bin ich nur im falschen Bereich?
Kannst du mal die gesamte DEF posten, dann schau ich mir das heute abend mal an...
Vielen Dank.
Das ist in meiner config:
define AccuWeather2 HTTPMOD http://www.accuweather.com/de/de/berlin/13583/minute-weather-forecast/123359_pc
attr AccuWeather2 group 1 Umwelt
attr AccuWeather2 reading01Regex <div class="mc-summary"> <p>([a-zA-Z0-9.\s]+)
attr AccuWeather2 reading01Name Forecast
attr AccuWeather2 stateFormat {sprintf("%.1s",ReadingsVal($name,"Forecast",0))}
Zitat von: Holzwurmssj am 30 Juli 2016, 12:30:16
Das ist in meiner config:
Ich glaube, ein
list AccuWeather2
(bzw. die Ausgabe von diesem Befehl) hilft hier eher weiter.
Okay nach langem probieren habe ich herausgefunden, dass \s nicht funktioniert für ein Leerzeichen sondern ich einfach ein " " benutzen muss.
Mit folgendem Regex: {<p>([A-Za-z0-9. ]+)} habe ich beim auslesen Erfolg!
Jetzt habe ich das Problem, dass zwar der HTTPMOD aktualisiert wird, jedoch das Reading nicht. Was muss ich dafür hinzufügen?
Hi,
da ich auch nicht der große RegExp-Experte bin - vielleicht geht's einfacher, aber folgendes sollte funktionieren:
<div class="mc-summary">.*\n[^<]*<p>([^<]+)
Damit wird 1.) Der Linebreak, der von Accuweather mitgeliefert wird berücksichtigt und 2.) das Problem mit dem "ü" behoben, da alle Zeichen (ausser dem "<" gelesen werden.
Das stateFormat funktioniert so auch nicht... da habe ich mich jetzt aber nicht näher damit beschäftigt. Ansonsten finde ich das ganze eine Gute Idee und werde das gleich mal für Mannheim in meine FHEM-Übersichtsseite aufnehmen :-)
Grüße,
Oli
Zitat von: Holzwurmssj am 30 Juli 2016, 16:15:03
Okay nach langem probieren habe ich herausgefunden, dass \s nicht funktioniert für ein Leerzeichen sondern ich einfach ein " " benutzen muss.
Mit folgendem Regex: {<p>([A-Za-z0-9. ]+)} habe ich beim auslesen Erfolg!
Bei was hast Du damit Erfolg? Bei FHEM oder in einem RegEx-Tester?
Zitat von: Holzwurmssj am 30 Juli 2016, 16:15:03
Jetzt habe ich das Problem, dass zwar der HTTPMOD aktualisiert wird, jedoch das Reading nicht. Was muss ich dafür hinzufügen?
Ich vermute mal, dass Du im FHEM Log noch regelmäßig eine Meldung von HTTPMOD hast, dass kein Match gefunden wurde. Hast Du das mal überprüft?
Ansonsten gilt immer noch: bitte ein List vom Device.
Peter
nur zur Info, ich habe mir noch eine zweite RegEx gebaut- auch hier wieder: Geht sicher eleganter (und für Tipps bin ich dankbar) aber funktioniert.
<div class="mc-summary">.*\n[^<]*<p>.*?([0-9]{1,3}) Min.
In diesem Reading werden die Minuten bis zum nächsten Regen (oder 120 wenn kein Regen) zurückgeliefert.
Grüße,
Oli
Vielen Dank für die Unterstützung.
Es läuft jetzt so wie ich es mit gewünscht habe. Zusätzlich habe ich es mir in meine TabletUI eingebunden :)
Folgender Code läuft jetzt (ich muss noch schauen ob ich es so oft aktualisieren lasse oder nur zu bestimmten Zeiten, wenn ich es nutze):
define AccuWeather HTTPMOD http://www.accuweather.com/de/de/berlin/13583/minute-weather-forecast/123359_pc 120
attr AccuWeather userattr reading01Name reading01Regex requestData
attr AccuWeather group 1 Umwelt
attr AccuWeather reading01Name MinuteCast
attr AccuWeather reading01Regex <div class="mc-summary">.*\n[^<]*<p>([^<]+)
attr AccuWeather stateFormat MinuteCast
Ich hoffe, das hier noch jemand mitliest:
Der obige Code bringt bei mir keine Daten. Es wird auch kein Header angezeigt
Mit anderen Webseiten funktioniert der HTTPMOD bei mir.
Hat sich da was geändert oder woran könnte das liegen ?
Ja, die Seite hat sich anscheinend geändert. "mc-summary" gibt es nicht mehr auf der Seite.
Ich weiss nicht genau, was Du damals für Daten bekommen hast, aber wenn es die obere Zeile über dem Grafik war, probier mal mit
(?s)summary":"(.*?)"
Bringt leider immer noch nichts.
Was mch wundert:
Ich frage mehrere Seiten mit HTTPMOD ab.
Bei allen werden unter "Internals" Daten bei "httpheader" angezeigt.
Bei AccuWeather ist dieser Eintrag gar nicht vorhanden.
verbose 5 und Log zeigen
Hab mal (mit verbose 5) alles aus dem Log rauskopiert, was mit AccuWeather zu tun hat.
Am Ende steht ein Error. Sagt mir allerdings nichts
2019.10.23 19:44:58 4: WEB_192.168.178.143_51839 GET /fhem?detail=AccuW; BUFLEN:0
2019.10.23 19:44:58 4: WEB: /fhem?detail=AccuW / RL:8161 / text/html; charset=UTF-8 / Content-Encoding: gzip
/ Cache-Control: no-cache, no-store, must-revalidate
2019.10.23 19:44:59 4: WEB_192.168.178.143_51839 GET /fhem?cmd=%7BReadingsVal(%22AccuW%22%2C%22attrTemplate%22%2C%22%22)%7D&XHR=1; BUFLEN:0
2019.10.23 19:44:59 5: Cmd: >{ReadingsVal("AccuW","attrTemplate","")}<
2019.10.23 19:44:59 4: WEB: /fhem?cmd=%7BReadingsVal(%22AccuW%22%2C%22attrTemplate%22%2C%22%22)%7D&XHR=1 / RL:21 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/ Cache-Control: no-cache, no-store, must-revalidate
2019.10.23 19:44:59 4: WEB_192.168.178.143_51835 GET /fhem?cmd=%7BAttrVal(%22AccuW%22%2C%22room%22%2C%22%22)%7D&XHR=1; BUFLEN:0
2019.10.23 19:44:59 5: Cmd: >{AttrVal("AccuW","room","")}<
2019.10.23 19:44:59 4: WEB: /fhem?cmd=%7BAttrVal(%22AccuW%22%2C%22room%22%2C%22%22)%7D&XHR=1 / RL:27 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/ Cache-Control: no-cache, no-store, must-revalidate
2019.10.23 19:45:04 4: WEB_192.168.178.143_51839 GET /fhem?cmd=%7BReadingsVal(%22AccuW%22%2C%22reread%22%2C%22%22)%7D&XHR=1; BUFLEN:0
2019.10.23 19:45:04 5: Cmd: >{ReadingsVal("AccuW","reread","")}<
2019.10.23 19:45:04 4: WEB: /fhem?cmd=%7BReadingsVal(%22AccuW%22%2C%22reread%22%2C%22%22)%7D&XHR=1 / RL:21 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/ Cache-Control: no-cache, no-store, must-revalidate
2019.10.23 19:45:04 4: WEB_192.168.178.143_51835 POST /fhem?cmd=help%20AccuW&XHR=1&fw_id=54282; BUFLEN:0
2019.10.23 19:45:04 5: Cmd: >help AccuW<
2019.10.23 19:45:04 4: WEB: /fhem?cmd=help%20AccuW&XHR=1&fw_id=54282 / RL:16904 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/ Cache-Control: no-cache, no-store, must-revalidate
2019.10.23 19:45:05 4: WEB_192.168.178.143_51839 POST /fhem&detail=AccuW&dev.setAccuW=AccuW&cmd.setAccuW=set&arg.setAccuW=reread&val.setAccuW=; BUFLEN:0
2019.10.23 19:45:05 5: Cmd: >set AccuW reread<
2019.10.23 19:45:05 5: AccuW: set called with reread
2019.10.23 19:45:05 4: AccuW: GetUpdate called (reread)
2019.10.23 19:45:05 4: AccuW: AddToQueue adds update, initial queue len: 0
2019.10.23 19:45:05 5: AccuW: AddToQueue adds type update to URL http://www.accuweather.com/de/de/berlin/13583/minute-weather-forecast/123359, no data, no headers, retry 0
2019.10.23 19:45:05 5: AccuW: HandleSendQueue called, qlen = 1
2019.10.23 19:45:05 4: AccuW: HandleSendQueue sends request type update to URL http://www.accuweather.com/de/de/berlin/13583/minute-weather-forecast/123359, No Data, No Header
timeout 2
2019.10.23 19:45:05 5: HttpUtils url=http://www.accuweather.com/de/de/berlin/13583/minute-weather-forecast/123359
2019.10.23 19:45:05 4: IP: www.accuweather.com -> 104.109.67.107
2019.10.23 19:45:05 5: Starting notify loop for AccuW, 1 event(s), first is reread
2019.10.23 19:45:05 5: End notify loop for AccuW
2019.10.23 19:45:05 5: HttpUtils request header:
GET /de/de/berlin/13583/minute-weather-forecast/123359 HTTP/1.0
Host: www.accuweather.com
User-Agent: fhem
Accept-Encoding: gzip,deflate
2019.10.23 19:45:05 4: WEB_192.168.178.143_51839 GET /fhem?detail=AccuW&fw_id=; BUFLEN:0
2019.10.23 19:45:05 4: WEB: /fhem?detail=AccuW&fw_id= / RL:8218 / text/html; charset=UTF-8 / Content-Encoding: gzip
/ Cache-Control: no-cache, no-store, must-revalidate
2019.10.23 19:45:05 4: WEB_192.168.178.143_51839 GET /fhem?cmd=%7BReadingsVal(%22AccuW%22%2C%22attrTemplate%22%2C%22%22)%7D&XHR=1; BUFLEN:0
2019.10.23 19:45:05 5: Cmd: >{ReadingsVal("AccuW","attrTemplate","")}<
2019.10.23 19:45:05 4: WEB: /fhem?cmd=%7BReadingsVal(%22AccuW%22%2C%22attrTemplate%22%2C%22%22)%7D&XHR=1 / RL:21 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/ Cache-Control: no-cache, no-store, must-revalidate
2019.10.23 19:45:05 4: WEB_192.168.178.143_51835 GET /fhem?cmd=%7BAttrVal(%22AccuW%22%2C%22room%22%2C%22%22)%7D&XHR=1; BUFLEN:0
2019.10.23 19:45:05 5: Cmd: >{AttrVal("AccuW","room","")}<
2019.10.23 19:45:05 4: WEB: /fhem?cmd=%7BAttrVal(%22AccuW%22%2C%22room%22%2C%22%22)%7D&XHR=1 / RL:27 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/ Cache-Control: no-cache, no-store, must-revalidate
2019.10.23 19:45:07 3: AccuW: Read callback: Error: read from http://www.accuweather.com:80 timed out
2019.10.23 19:45:07 4: AccuW: Read callback: request type was update retry 0, body empty
2019.10.23 19:45:07 5: AccuW: ExtractSid called, context reading, num
2019.10.23 19:45:07 4: AccuW: CheckAuth decided no authentication required
Attribut timeout setzen (erstmal 5, und wenn es immer noch nicht geht, 10)
Hab's mit 5 und 10 probiert.
Es werden aber immer noch keine Readings angelegt.
Jetzt nochmal probiert mit "timeout 60" und "showError 1":
LAST_ERROR read from https://www.accuweather.com:443 timed out
Hab selbst probiert. Die Seite ist Sch...
Ein Aufruf der Seite generiert 240 HTTP Requests !!!
Unglaublich viele Trackers und Werbungen.
Selbst mit timeout 60 kriegt man tatsächlich keine Antwort... oder eine leere Antwort.
Ausserdem wird per Javascript viel nachgeladen, so dass quasi die interessante Daten im Header als Parameter einer Funktion kommen, die api.weather.com selbst aufruft!
Ich befürchte, es wird nicht möglich, einen vernünftigen Inhalt zu kriegen.
Ich empfehle die Nutzung von Weather oder PROPLANTA
Hab ich fast schon befürchtet, das es mit AccuWeather nichts wird.
Aber vielen Dank für deine Mühe :)