Werte aus Datei mit HTML auslesen

Begonnen von Maxl, 09 August 2023, 19:00:28

Vorheriges Thema - Nächstes Thema

Maxl

Hallo,

ich möchte die Werte meiner Wetterstaion mit HTML auslesen und diese Werte in eine Variable schreiben.
Bin dabei wie hier beschrieben vorgegangen https://it-beratung-koch.de/kb/openhab-wetterstation-eurochron-efws2900-einbinden/
Der Aufruf im zum Apache Server auf dem RASPI mit dem Browser funktioniert, wie kommt nun der Rückgabewert in eine FHEM Variable?

http://192.168.1.23/wetter/Index.php?read=1&value=monthlyrainin&convert
Danke
FHEM auf Raspberry mit HM, HMC und AVR Netios.

ergerd

FHEM auf RasPi 4, ZigBee, 1Wire2WLAN, DS2423, Buderus KM200, Button+, LaCrosseGateway, PCA301, ConBee III, LuftdatenInfo, OneWireGW, Div. ESPs u. Shellys

Maxl

#2
Hallo,

das habe ich mir bereits angeschaut, komme aber nicht ganz klar wie ich die Parameter "xxx"
http://192.168.1.23/wetter/Index.php?read=1&value= "xxxx" &convert verändern könnte um alles auf einmal abzurufen.

Hätte es in diese Richtung probiert, bekomme aber nur Fehler

define MyWetter HTTPMOD http://192.168.1.23/wetter 7000
attr MyWetter userattr reading01JSON reading01Name reading02JSON reading02Name reading03JSON reading03Nam\
e reading04JSON reading04Name reading05JSON reading05Name requestHeader02 sid1Data sid1Header01 sid1Id\
JSON sid1IgnoreRedirects:0,1 sid1URL
ttr MyWetter reading01JSON rainin
attr MyWetter reading01Name RAININ
attr MyWetter reading02JSON dailyrainin
attr MyWetter reading02Name DAILYRAIN
attr MyWetter reading03JSON sonne_einstrahlung
attr MyWetter reading03Name SONNE_EINSTRAHLUNG
attr MyWetter reading04JSON ...

Wie funktioniert dann der Aufruf des php-Skripts noch /Index.php?read=1&value= "xxxx" &convert [code/]
FHEM auf Raspberry mit HM, HMC und AVR Netios.

ergerd

Hallo Maxl,
ich kenne deine Wettergeschichte nicht, ich lese nur einen Dieselpreis aus:
defmod Ottersberg_Diesel HTTPMOD https://ich-tanke.de/tankstelle/475db87090299af8f78aefe1d0938a96/ 1800
attr Ottersberg_Diesel DbLogExclude LAST_REQUEST,MATCHED_READINGS,UNMATCHED_READINGS,state
attr Ottersberg_Diesel disable 0
attr Ottersberg_Diesel enableControlSet 1
attr Ottersberg_Diesel group Treibstoff
attr Ottersberg_Diesel model clever_tanken_single_station
attr Ottersberg_Diesel reading01Name Diesel
attr Ottersberg_Diesel reading01Regex <div class=\"preis\"><span class=\"zahl\">(\d.\d{2})<sup>9</sup>
attr Ottersberg_Diesel readingOExpr $val =~ s/<[\d\D]+>//;;;;$val =~ s/,/\./g;;;;$val;;;;
attr Ottersberg_Diesel room hidden
attr Ottersberg_Diesel showBody 0
attr Ottersberg_Diesel stateFormat Diesel €
attr Ottersberg_Diesel timeout 10

Vielleicht hilft es ja.
LG
ergerd
FHEM auf RasPi 4, ZigBee, 1Wire2WLAN, DS2423, Buderus KM200, Button+, LaCrosseGateway, PCA301, ConBee III, LuftdatenInfo, OneWireGW, Div. ESPs u. Shellys

Maxl

#4
Hallo,

hätte es so versucht, leider finde ich aber kein Reading mit dem Wert.

define test2 HTTPMOD none 0
attr test2 get01Name Radiation
attr test2 getData {"get" :["934.4008.value"]}
attr test2 getHeader1 Content-Type: application/json
attr test2 getHeader2 Accept: */*
attr test2 getURL http://192.168.1.23/wetter/Index.php?read=1&value=solarradiation&convert
#   BUSY       0
#   DEF        none 0
#   FUUID      64d47960-f33f-7117-970b-f50c9617fe756843
#   Interval   0
#   MainURL   
#   ModuleVersion 4.1.15 - 17.12.2022
#   NAME       test2
#   NOTIFYDEV  global
#   NR         78
#   NTFY_ORDER 50-test2
#   STATE      ???
#   TYPE       HTTPMOD
#   value     
#   HttpUtils:
#     NAME       
#     addr       http://192.168.1.23:80
#     auth       0
#     buf       
#     code       200
#     compress   1
#     conn       
#     data       {"get" :["934.4008.value"]}
#     displayurl http://192.168.1.23/wetter/Index.php?read=1&value=solarradiation&convert
#     header     Content-Type: application/json
#Accept: */*
#     host       192.168.1.23
#     httpheader HTTP/1.1 200 OK
#Date: Thu, 10 Aug 2023 06:20:45 GMT
#Server: Apache/2.4.56 (Raspbian)
#Content-Length: 5
#Connection: close
#Content-Type: text/html; charset=UTF-8
#     httpversion 1.0
#     hu_blocking 0
#     hu_filecount 1
#     hu_port    80
#     hu_portSfx
#     ignoreredirects 1
#     loglevel   4
#     path       /wetter/Index.php?read=1&value=solarradiation&convert
#     protocol   http
#     redirects  0
#     timeout    2
#     url        http://192.168.1.23/wetter/Index.php?read=1&value=solarradiation&convert
#     sslargs:
#   QUEUE:
#   READINGS:
#   REQUEST:
#     context    get
#     data       {"get" :["934.4008.value"]}
#     header     Content-Type: application/json
#Accept: */*
#     ignoreredirects 0
#     num        01
#     retryCount 0
#     type       get01
#     url        http://192.168.1.23/wetter/Index.php?read=1&value=solarradiation&convert
#     value     
#

FHEM auf Raspberry mit HM, HMC und AVR Netios.

Otto123

Sicher ist die Gesamtheit mit HTTPMOD interessant, aber um die erste Frage zu beantworten, eine einfache Möglichkeit für einen Wert:
setreading Dummy1 monthlyrain {(qx(wget -qO - http://192.168.1.23/wetter/Index.php?read=1&value=monthlyrainin&convert))}
Für einen Sack voll Werte ist das nicht die sinnvolle Lösung, zumal jeder Aufruf blockiert!

Es ist auch die Frage ob die Daten sinnvoller als in einzelnen konvertierten Werten zurück geliefert werden können, z.B. alles in einem json. Damit könnte man auch relativ leicht umgehen.

Die Google Suche spuckt auch noch das hier aus: https://forum.fhem.de/index.php?topic=87769.0
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

betateilchen

Wenn doch die Daten eh in json vorliegen, worauf das hier

#     data       {"get" :["934.4008.value"]}
#     displayurl http://192.168.1.23/wetter/Index.php?read=1&value=solarradiation&convert
#     header     Content-Type: application/json

Hindeutet, würde ich einfach JsonMod anstatt HTTPMOD verwenden, die readinglist auf complete() setzen und schauen, was dann ankommt.

Das sind zwei Zeilen (ein define und ein attr), das ist doch nicht so kompliziert
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Maxl

Hallo,

hatte wieder etwas Zeit, als was soll ich dann "Dummy1" definieren die Zeile setreading Dummy1 monthlyrain {(qx(wget -qO - http://192.168.1.23/wetter/Index.php?read=1&value=monthlyrainin&convert))} verlangt danach. Mit define Dummy1 HTTPMOD http://192.168.1.23/wetter 60 wird die obere Zeile nicht in das config File mit übernommen.

FHEM auf Raspberry mit HM, HMC und AVR Netios.

betateilchen

setreading Zeilen gehören auch nie nie niemals ins config file.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Maxl

#9
Hallo,

dann verstehe ich nicht was mir OTTO123 damit sagen will
setreading Dummy1 monthlyrain {(qx(wget -qO - http://192.168.1.23/wetter/Index.php?read=1&value=monthlyrainin&convert))}
Wie bekomme ich dann den Rückgabewert in eine Variable, wie folgt funktioniert nicht?

define WETTERSTATION HTTPMOD http://192.168.1.23/wetter/Index.php?read=1&value=solarradiation&convert 20
attr WETTERSTATION reading1Format %.1f
attr WETTERSTATION reading1Expr $val * 1
attr WETTERSTATION reading1Name solarradiation
#   BUSY       0
#   DEF        http://192.168.1.23/wetter/Index.php?read=1&value=solarradiation&convert 20
#   FUUID      64ece460-f33f-7117-8f7a-6c3082fa34ce0e58
#   Interval   20
#   MainURL    http://192.168.1.23/wetter/Index.php?read=1&value=solarradiation&convert
#   ModuleVersion 4.1.15 - 17.12.2022
#   NAME       WETTERSTATION
#   NOTIFYDEV  global
#   NR         64
#   NTFY_ORDER 50-WETTERSTATION
#   STATE      ???
#   TYPE       HTTPMOD
#   value     
#   HttpUtils:
#     NAME       
#     addr       http://192.168.1.23:80
#     auth       0
#     buf       
#     code       200
#     compress   1
#     conn       
#     data       
#     displayurl http://192.168.1.23/wetter/Index.php?read=1&value=solarradiation&convert
#     header     
#     host       192.168.1.23
#     httpheader HTTP/1.1 200 OK
#Date: Mon, 28 Aug 2023 18:21:25 GMT
#Server: Apache/2.4.56 (Raspbian)
#Content-Length: 4
#Connection: close
#Content-Type: text/html; charset=UTF-8
#     httpversion 1.0
#     hu_blocking 0
#     hu_filecount 1
#     hu_port    80
#     hu_portSfx
#     ignoreredirects 1
#     loglevel   4
#     path       /wetter/Index.php?read=1&value=solarradiation&convert
#     protocol   http
#     redirects  0
#     timeout    2
#     url        http://192.168.1.23/wetter/Index.php?read=1&value=solarradiation&convert
#     sslargs:
#   QUEUE:
#   READINGS:
#   REQUEST:
#     context    reading
#     data       
#     header     
#     ignoreredirects 0
#     num        unknown
#     retryCount 0
#     type       update
#     url        http://192.168.1.23/wetter/Index.php?read=1&value=solarradiation&convert

wo finde ich eigentlich den Rückgabewert im LogFile

Host: 192.168.1.61:8083

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/116.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8

Accept-Language: de,en-US;q=0.7,en;q=0.3

Accept-Encoding: gzip, deflate

Connection: keep-alive

Upgrade-Insecure-Requests: 1
2023.08.28 19:56:18.853 4: WEB_192.168.1.61_54616 GET /fhem/FileLog_logWrapper?dev=Logfile&type=text&file=fhem-2023-08.log; BUFLEN:0
2023.08.28 19:56:20.160 5: GET /fhem/FileLog_logWrapper?XHR=1&inform=type%3Dstatus%3Bfilter%3D%3Bsince%3D1693245377.85591%3Bfmt%3DJSON&fw_id=75×tamp=1693245380125 HTTP/1.1

Host: 192.168.1.61:8083

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/116.0

Accept: */*

Accept-Language: de,en-US;q=0.7,en;q=0.3

Accept-Encoding: gzip, deflate

Connection: keep-alive

Referer: http://192.168.1.61:8083/fhem/FileLog_logWrapper?dev=Logfile&type=text&file=fhem-2023-08.log
2023.08.28 19:56:20.161 4: WEB_192.168.1.61_54616 GET /fhem/FileLog_logWrapper?XHR=1&inform=type%3Dstatus%3Bfilter%3D%3Bsince%3D1693245377.85591%3Bfmt%3DJSON&fw_id=75×tamp=1693245380125; BUFLEN:0
2023.08.28 19:56:20.825 4: WETTERSTATION: GetUpdate called (update)
2023.08.28 19:56:20.825 4: WETTERSTATION: UpdateTimer called from GetUpdate with cmd next sets timer to call update function in 20.0 sec at 19:56:40.825, interval 20
2023.08.28 19:56:20.825 5: WETTERSTATION: AddToQueue adds type update to URL http://192.168.1.23/wetter/Index.php?read=1&value=solarradiation&convert, no data, no headers, retry 0, initial queue len: 0
2023.08.28 19:56:20.826 5: WETTERSTATION: HandleSendQueue called from AddToSendQueue, qlen = 1
2023.08.28 19:56:20.826 4: WETTERSTATION: HandleSendQueue sends update with timeout 2 to http://192.168.1.23/wetter/Index.php?read=1&value=solarradiation&convert, No Data, No Header
2023.08.28 19:56:20.827 5: HttpUtils url=http://192.168.1.23/wetter/Index.php?read=1&value=solarradiation&convert NonBlocking via http
2023.08.28 19:56:20.827 4: IP: 192.168.1.23 -> 192.168.1.23
2023.08.28 19:56:20.829 5: HttpUtils request header:
GET /wetter/Index.php?read=1&value=solarradiation&convert HTTP/1.0

Host: 192.168.1.23

User-Agent: fhem

Accept-Encoding: gzip,deflate


2023.08.28 19:56:20.836 4: http://192.168.1.23/wetter/Index.php?read=1&value=solarradiation&convert: HTTP response code 200
2023.08.28 19:56:20.836 5: HttpUtils http://192.168.1.23/wetter/Index.php?read=1&value=solarradiation&convert: Got data, length: 4
2023.08.28 19:56:20.836 5: HttpUtils response header:
HTTP/1.1 200 OK

Date: Mon, 28 Aug 2023 17:56:35 GMT

Server: Apache/2.4.56 (Raspbian)

Content-Length: 4

Connection: close
FHEM auf Raspberry mit HM, HMC und AVR Netios.

Otto123

Zitat von: Maxl am 09 August 2023, 19:00:28ich möchte die Werte meiner Wetterstaion mit HTML auslesen und diese Werte in eine Variable schreiben.
z.B: alle 27 min einen Wert in einen Dummy schreiben.
define Dummy2 dummy
define a4 at +*00:27:00 setreading Dummy2 monthlyrain {(qx(wget -qO - http://192.168.1.23/wetter/Index.php?read=1&value=monthlyrainin&convert))}
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

betateilchen

Und warum immer wieder über den Umweg eines Systemaufrufs anstatt mit FHEM Bordmitteln aus den HTTPutils?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Maxl

Hallo,

die Perl Kenntnisse sind halt aktuell noch sehr begrenzt :-(
Irgendetwas tut sich, aber der Reading Wert wird mir nicht angezeigt, ich hätte es mit STATEFORMAT oder NOTIFY versucht, aber es tut sich nichts am Wert.

define Dummy2 dummy
attr Dummy2 stateFormat V: monthlyrain mm
define a4 at +*00:00:20 setreading Dummy2 monthlyrain {(qx(wget -qO - http://192.168.1.23/wetter/Index.php?read=1&value=monthlyrainin&convert))}
define notify_monthlyrain notify Dummy2:monthlyrain.* set Dummy2 $EVTPART1

FHEM auf Raspberry mit HM, HMC und AVR Netios.

betateilchen

#13
Das notify ist doch eigentlich Unfug.
Wo willst Du denn den Wert nun haben?
In einem bestimmten reading ("monthlyrain") oder im reading "state"

define dummy2 dummy

define a4 at +*00:00:20 {fhem("setreading dummy2 monthlyrain ".GetFileFromURL("http://192.168.1.23/wetter/Index.php?read=1&value=monthlyrainin&convert"))}

Damit sollte zumindest das reading "monthlyrain" befüllt werden.

attr dummy2 stateFormat V: monthlyrain mm
sorgt dann dafür, dass der Wert auch in der Übersicht (im internal STATE) auftaucht.

Wobei ich die Abfrage eines Montaswertes alle 20 Sekunden für ziemlich sinnfrei halte.
Aber das ist ein anderes Thema.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Maxl

Hallo,

hoffe richtig abgeändert, zumindest steht der Wert endlich in der Variable, danke.

define Dummy2 dummy
attr Dummy2 stateFormat V: monthlyrain mm
define a4 at +*00:00:20 {fhem("setreading Dummy2 monthlyrain ".GetFileFromURL("http://192.168.1.23/wetter/Index.php?read=1&value=monthlyrainin&convert"))}

Aber was ist der Unterschied von dem DEFINE von Otto123, warum funktioniert dies nicht?

Zitatdefine a4 at +*00:00:20 setreading Dummy2 monthlyrain {(qx(wget -qO - http://192.168.1.23/wetter/Index.php?read=1&value=monthlyrainin&convert))}
FHEM auf Raspberry mit HM, HMC und AVR Netios.