FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: saschab am 20 Januar 2017, 08:15:13

Titel: Benötige Hilfe bei HTTPMOD
Beitrag von: saschab am 20 Januar 2017, 08:15:13
Hallo Zusammen,
bin seit zwei Wochen dabei meine Raspberry als Fhem-Server einzurichten, und zu erweitern.

Jetzt habe ich Problem bei den HTTPMOD, ich würde gerne die Temperaturen und Luftfeuchtigkeit von der Webseite die vom ESP8266Wifi mit DHT22 betrieben wird auslesen.

In HTTPMPD wird die Webseite wie folgt auslesen:
buf HTTP/1.1 200 OK Content-Type: text/html Connection: close <!DOCTYPE HTML> <html> <head></head><body>Temperature 20.78 *C Humidity 49.60 % </body></html>

Leider habe ich es nicht nachvollziehen können wie die Funktion konfiguriert wird, so wie es zurzeit aus:
attr TestArduino reading01Name_Humidity humidityTemp
attr TestArduino reading01Regex_Humidity Humidity' ([\d\.]+)
attr TestArduino reading02Name_Temperature celsiusTemp
attr TestArduino reading02Regex_Temperature Temperature' ([\d\.]+)
attr TestArduino stateFormat T: Temperature H: Humidity
attr TestArduino userattr reading01Name_Humidity reading01Regex_Humidity reading02Name_Temperature reading02Regex_Temperature


Was mach ich falsch?

Gruß Sascha
Titel: Antw:Benötige Hilfe bei HTTPMOD
Beitrag von: bt am 20 Januar 2017, 22:43:35
Hallo Sascha,

mir scheint deine Regex sind nicht korrekt.
Auf regex101.com  (http://regex101.com) kannst Du sowas testen.

Humidity' ([\d\.]+)

führt nicht zu einem Treffer. Erst wenn man das Hochkomma nach Humidity wegnimmt, werden die Zahlen gefunden.
Probiere es mal so:

Humidity ([\d\.]+)

vg, bt
Titel: Antw:Benötige Hilfe bei HTTPMOD
Beitrag von: saschab am 21 Januar 2017, 21:03:55
Danke bt, es hat mir schon ein Stück weiter gebracht.

Leider bekomme ich jetzt im Log folgende melden:


2017.01.21 20:55:16 4: esp8266: GetUpdate called (update)
2017.01.21 20:55:16 4: esp8266: update timer modified: will call GetUpdate in 60.0 seconds at 2017-01-21 20:56:16
2017.01.21 20:55:16 4: esp8266: AddToQueue adds update, initial queue len: 0
2017.01.21 20:55:16 5: esp8266: AddToQueue adds type update to URL http://Arduino01:80/, no data, no headers, retry 0
2017.01.21 20:55:16 5: esp8266: HandleSendQueue called, qlen = 1
2017.01.21 20:55:16 4: esp8266: HandleSendQueue sends request type update to URL http://Arduino01:80/, No Data, No Header,
timeout 10
2017.01.21 20:55:16 4: HttpUtils url=http://Arduino01:80/
2017.01.21 20:55:17 5: esp8266: UpdateHintList called
2017.01.21 20:55:17 5: esp8266: UpdateHintList: setlist =
2017.01.21 20:55:17 5: esp8266: UpdateHintList: getlist =
2017.01.21 20:55:17 4: http://Arduino01:80/: HTTP response code 200
2017.01.21 20:55:17 4: HttpUtils http://Arduino01:80/: Got data, length: 105
2017.01.21 20:55:17 4: esp8266: Read callback: request type was update retry 0,
Header: HTTP/1.1 200 OK
Content-Type: text/html
Connection: close,
Body: <!DOCTYPE HTML>
<html>
<head></head><body>Temperature
21.27
*C Humidity
51.40
%
</body></html>
no error
2017.01.21 20:55:17 5: esp8266: ExtractSid called, context reading, num
2017.01.21 20:55:17 4: esp8266: CheckAuth decided no authentication required
2017.01.21 20:55:17 5: esp8266: UpdateReadingList created list of reading.* nums to parse during getUpdate as _humidity _temperature
2017.01.21 20:55:17 5: esp8266: Read starts parsing response to update with defined readings: _humidity,_temperature
2017.01.21 20:55:17 5: esp8266: ExtractReading humidity with regex /Humidity ([\d\.]+)/...
2017.01.21 20:55:17 5: esp8266: ExtractReading humidity did not match
2017.01.21 20:55:17 5: esp8266: ExtractReading temperature with regex /Temperature ([\d\.]+)/...
2017.01.21 20:55:17 5: esp8266: ExtractReading temperature did not match
2017.01.21 20:55:17 3: esp8266: Read response to update didn't match any Reading
2017.01.21 20:55:17 5: esp8266: HandleSendQueue called, qlen = 0


zu den Thema "Read response to update didn't match any Reading" finde ich leider nicht passendes.

Hat jemand noch nee Idee?

Gruß Sascha
Titel: Antw:Benötige Hilfe bei HTTPMOD
Beitrag von: bt am 05 Februar 2017, 23:47:52
So sollte es klappen. Vergiss nicht die IP deines esp unten einzutragen


define TestArduino HTTPMOD http://DEINE_ESP_IP_ADRESSE_HIER_EINTRAGEN 30
attr TestArduino userattr reading1Name reading1Regex reading2Name reading2Regex
attr TestArduino reading1Name temperature
attr TestArduino reading1Regex Temperature ([\d\.]+)
attr TestArduino reading2Name humidity
attr TestArduino reading2Regex Humidity ([\d\.]+)
attr TestArduino stateFormat {sprintf("Temperatur %.1f &deg;;C, Humidity %.1f %%", ReadingsVal($name,"temperature",0), ReadingsVal($name,"humidity",0))}


[EDIT] Die Maskierung beim "%" das nach dem Humidity angezeigt werden soll hat gefehlt. fhem hat das zwar auch so korrekt angezeigt, aber in der log Datei wurde immer ein Hinweis eingetragen, dass bei sprintf irgendetwas nicht stimmt. Also daher jetzt "%%".