|
|
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) |
Zeile 1: |
Zeile 1: |
| == Introduction ==
| | moved to Kategorie Other Components |
| | |
| This module provides a generic way to retrieve information from devices with an HTTP Interface and store them in Readings.
| |
| It queries a given URL with Headers and data defined by attributes.
| |
| From the HTTP Response it extracts Readings named in attributes using Regexes also defined by attributes.
| |
| | |
| == Prerequisits ==
| |
| This Module uses the non blocking HTTP function HttpUtils_NonblockingGet provided by FHEM's HttpUtils in a new Version published in December 2013.
| |
| If not already installed in your environment, please update FHEM or install it manually using appropriate commands from your environment.
| |
| | |
| == Define ==
| |
| <pre>
| |
| define <name> HTTPMOD <URL> <Interval>
| |
| </pre>
| |
| The module connects to the given URL every Interval seconds, sends optional headers and data and then parses the response<br/>
| |
| | |
| Example:
| |
| <pre>
| |
| define PM HTTPMOD http://MyPoolManager/cgi-bin/webgui.fcgi 60
| |
| </pre>
| |
| | |
| == Configuration of HTTP Devices ==
| |
| Specify optional headers as <code>attr requestHeader1</code> to <code>attr requestHeaderX</code>, optional POST data as <code>attr requestData</code> and then pairs of <code>attr readingNameX</code> and <code>attr readingRegexX</code> to define which readings you want to extract from the HTTP response and how to extract them.
| |
| | |
| === Example for a PoolManager 5: ===
| |
| The PoolManager Web GUI can be queried with HTTP POST Requests like this one:
| |
| | |
| <pre>
| |
| POST /cgi-bin/webgui.fcgi HTTP/1.1
| |
| Host: 192.168.70.90
| |
| Accept: */*
| |
| Content-Type: application/json;charset=UTF-8
| |
| Content-Length: 60
| |
| | |
| {"get" :["34.4001.value" ,"34.4008.value" ,"34.4033.value"]}
| |
| </pre>
| |
| | |
| The resulting HTTP Response would look like this:
| |
| | |
| <pre>
| |
| HTTP/1.1 200 OK
| |
| Content-type: application/json; charset=UTF-8
| |
| Expires: 0
| |
| Cache-Control: no-cache
| |
| Date: Sun, 12 Jan 2014 12:23:11 GMT
| |
| Server: lighttpd/1.4.26
| |
| Content-Length: 179
| |
| | |
| {
| |
| "data": {
| |
| "34.4001.value": "7.00",
| |
| "34.4008.value": "0.52",
| |
| "34.4033.value": "24.8"
| |
| },
| |
| "status": {
| |
| "code": 0
| |
| },
| |
| "event": {
| |
| "type": 1,
| |
| "data": "48.30000.0"
| |
| }
| |
| }
| |
| </pre>
| |
| | |
| To configure HTTPMOD for a PoolManager one would first define a PoolManager Device with e.g. the name PM, the URL and an Interval of 60 seconds.
| |
| | |
| Then the Data to be sent in the request needs to be defined because in this example the Device expects a POST Request so the query is not contained in the URL but in the Request Data.
| |
| | |
| Also as seen above the device expects special HTTP Headers in the request so these headers also need to be defined as <code>attr PM requestHeader1</code> and <code>attr PM requestHeader2</code>
| |
| | |
| Then the names of the Readings to be extracted would be set with attributes
| |
| | |
| Then for each Reading value to be extracted a regular expression needs to be set that will match the value in question within ().
| |
| | |
| Example:
| |
| <pre>
| |
| define PM HTTPMOD http://MyPoolManager/cgi-bin/webgui.fcgi 60
| |
| attr PM requestData {"get" :["34.4001.value" ,"34.4008.value" ,"34.4033.value", "14.16601.value", "14.16602.value"]}
| |
| | |
| attr PM requestHeader1 Content-Type: application/json
| |
| attr PM requestHeader2 Accept: */*
| |
| | |
| attr PM readingsName1 PH
| |
| attr PM readingsName2 CL
| |
| attr PM readingsName3 TEMP
| |
| | |
| attr PM readingsRegex1 34.4001.value":[ \t]+"([\d\.]+)"
| |
| attr PM readingsRegex2 34.4008.value":[ \t]+"([\d\.]+)"
| |
| attr PM readingsRegex3 34.4033.value":[ \t]+"([\d\.]+)"
| |
| | |
| attr PM stateFormat {sprintf("%.1f Grad, PH %.1f, %.1f mg/l Chlor", ReadingsVal($name,"TEMP",0), ReadingsVal($name,"PH",0), ReadingsVal($name,"CL",0))}
| |
| </pre>
| |
| | |
| == Set-Commands ==
| |
| none
| |
| == Get-Commands ==
| |
| none
| |
| | |
| == Attributes ==
| |
| * do_not_notify
| |
| * readingFnAttributes
| |
| * requestHeader.*
| |
| ** Define an additional HTTP Header to set in the HTTP request
| |
| * requestData
| |
| ** POST Data to be sent in the request. If not defined, it will be a GET request as defined in HttpUtils used by this module
| |
| * readingsName.*
| |
| ** the name of a reading to extract with the corresponding readingRegex
| |
| * readingsRegex.*
| |
| ** defines the regex to be used for extracting the reading. The value to extract should be in a sub expression e.g. ([\d\.]+) in the above example
| |
| | |
| == notes ==
| |
| If you don't know which URLs, headers or POST data your web GUI uses, you might try a local proxy like BurpSuite [http://portswigger.net/burp/>BurpSuite] to track requests and responses
| |