Difference between revisions of "Add-On Services"

From meteobridge
Jump to: navigation, search
 
(49 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
__NOTOC__
 
__NOTOC__
Meteobridge provides some additional services, which might be interesting, when you also want to use received data with your own postprocessing IT. Live data can be derived in two ways. Meteobridge client can be asked by a HTTP request to return data (pull mode) or can send data as HTTP-GET requests with user-defined URL parameters to a user-defined Internet address (push mode).  
+
<!--T:1-->
 +
Web server of Meteobridge client, which presents web interface for adminstration to you, can also deliver weather data. There are three URLs defined that can be polled to get most recent sensor data in a standard XML or plain text format or in user-defined format. Although we don't recommend this for security reasons, you can make that URLs accessible from the Internet by configuring your router appropriately. However, when you want to bring sensor data to one of your own servers in the Internet we recommend to make use of Meteobridge's [[Push Services]], which will not need you to open up your firewall.
 +
Remark: In order to reach these HTTP services you need to handle basic authentification by adding "<username>:<password>@" in front of the URL.
  
==Pull Mode==
+
===Live Data as XML=== <!--T:12-->
Web server of Meteobridge client, which presents web interface for adminstration to you, can also deliver weather data. There are two URLs defined that can be polled to get most recent sensor data in XML or plain text. Although we don't recommend this for security reasons, you can make that URLs accessible from the Internet by configuring your router appropriately. However, when you want to bring sensor data to one of your own servers in the Internet we recommend to make use of Meteobridge's push mode, which will not need you to open up your firewall.
+
By sending the meteobridge a HTTP request like "http://ip-of-meteobridge/cgi-bin/livedataxml.cgi" (where "ip-of-meteobridge" must be replaced by the IP itself) meteobridge returns current weather data in XML notation. Each reply starts witch tag <logger> and ends with </logger> with the sensor data as records with sensor specific tags "THB", "TH", "SOIL", "LEAF", "WIND", "RAIN", "UV", "SOLAR". Example below illustrates the XML format:
+
===Live Data as XML===
+
By sending the meteobridge a HTTP request like "http://ip-of-meteobridge/cgi-bin/livedataxml.cgi" (where "ip-of-meteobridge" must be replaced by the IP itself) meteobridge returns current weather data in XML notation. Each reply starts witch tag <logger> and ends with </logger> with the sensor data as records with sensor specific tags "THB", "TH", "WIND", "RAIN", "UV", "SOLAR". Example below illustrates the XML format:
+
  
 +
<!--T:2-->
 
<pre><logger>
 
<pre><logger>
 
   <THB date="20121227224318" id="thb0" temp="26.0" hum="37" dew="10.2"  
 
   <THB date="20121227224318" id="thb0" temp="26.0" hum="37" dew="10.2"  
       press="1008.8" seapress="1010.1" fc="2"/>
+
       press="1008.8" seapress="1010.1" fc="2" lowbat="0" />
   <TH date="20130104141909" id="th0" temp="9.1" hum="95" dew="8.3"/>
+
   <TH date="20130104141909" id="th0" temp="9.1" hum="95" dew="8.3" lowbat="0" />
   <RAIN date="20130104141856" id="rain0" rate="0.0" total="3.0" delta="0.0"/>
+
   <RAIN date="20130104141856" id="rain0" rate="0.0" total="3.0" delta="0.0" lowbat="0" />
   <WIND date="20130104141916" id="wind0" dir="109" gust="0.9" wind="2.2" chill="9.1"/>
+
   <WIND date="20130104141916" id="wind0" dir="109" gust="0.9" wind="2.2" chill="9.1" lowbat="0" />
 
</logger></pre>
 
</logger></pre>
  
 +
<!--T:3-->
 
Each sensor data record has a mandatory "date" and "id" parameter. The other parameters are sensor specific. Meaning of parameters is:
 
Each sensor data record has a mandatory "date" and "id" parameter. The other parameters are sensor specific. Meaning of parameters is:
 
* '''date''': UTC timestamp of reception of sensor data in format "YYYYMMDDhhmmss"
 
* '''date''': UTC timestamp of reception of sensor data in format "YYYYMMDDhhmmss"
 
* '''id''': Unique ID of sensor, consists of a sensor type description shortcut followed by a number, which is always "0" in Meteobridge, as additional sensors are not supported
 
* '''id''': Unique ID of sensor, consists of a sensor type description shortcut followed by a number, which is always "0" in Meteobridge, as additional sensors are not supported
 
* '''temp''': temperature in degrees Celsius (with one decimal)
 
* '''temp''': temperature in degrees Celsius (with one decimal)
* '''hum''': relative humidity in percent (no decimals)
+
* '''hum''': relative humidity in percent (no decimals) with humidity sensors. With leaf and soil sensors unit is wetness or centibar.
 
* '''dew''': dew point temperature in degrees Celsius (with one decimal)
 
* '''dew''': dew point temperature in degrees Celsius (with one decimal)
 
* '''press''': station pressure (without altitude correction) in hPa (with one decimal)
 
* '''press''': station pressure (without altitude correction) in hPa (with one decimal)
Line 32: Line 33:
 
* '''dir''': wind direction in degrees (0-359, no decimals).
 
* '''dir''': wind direction in degrees (0-359, no decimals).
 
* '''chill''': wind chill temperature in degrees Celsius (with one decimal).
 
* '''chill''': wind chill temperature in degrees Celsius (with one decimal).
 +
* '''lowbat''': indicates if battery status of sensor is low (value 1) or normal (value 0).
 
* more to come...
 
* more to come...
  
===Live Data as Plain Text===
+
===Live Data as Plain Text=== <!--T:4-->
 
By sending the meteobridge a HTTP request like "http://ip-of-meteobridge/cgi-bin/livedata.cgi" (where "ip-of-meteobridge" must be replaced by the IP itself) meteobridge returns current weather data as plain text. Each reply consists of a series of lines, where each line represnets a sensor. Lines do start with a time stamp and a unique sensor id followed by sensor specific parameters. Example below illustrates the format:
 
By sending the meteobridge a HTTP request like "http://ip-of-meteobridge/cgi-bin/livedata.cgi" (where "ip-of-meteobridge" must be replaced by the IP itself) meteobridge returns current weather data as plain text. Each reply consists of a series of lines, where each line represnets a sensor. Lines do start with a time stamp and a unique sensor id followed by sensor specific parameters. Example below illustrates the format:
  
<pre>20130104142614 thb0 26.9 38 11.4 1020.4 1021.7 2
+
<!--T:5-->
20130104142610 rain0 0.0 3.0 0.0
+
<pre>20130104142614 thb0 26.9 38 11.4 1020.4 1021.7 2 0
20130104142636 th0 9.1 95 8.3
+
20130104142610 rain0 0.0 3.0 0.0 0
20130104142652 wind0 160 2.2 1.8 8.0</pre>
+
20130104142636 th0 9.1 95 8.3 0
 +
20130104142652 wind0 160 2.2 1.8 8.0 0</pre>
  
==Push Mode==
+
===Live Data via Socket Connection=== <!--T:6-->
When you select expert mode at the bottom of "Upload Data" tab, you will see an additional entry that allows you to send sensor data to a user-defined server.
+
Methods introduced above do need HTTP authentification like all elements of Meteobridge web interface. A look at the script "livedataxml.cgi" shows that this just reads data from socket 5557, gives it a suitable HTTP header and returns that to the requesting browser:
  
===Twitter Upload===
+
<!--T:7-->
Meteobridge allows you to send weather data snippets to your twitter account. As twitter requires a bit complicated authentication you will have to run through 6 steps.
+
<pre>#!/bin/sh
 +
echo -ne "Content-type: text/xml; charset=UTF-8\n\n"
 +
nc 127.0.0.1 5557 2>/dev/null
 +
</pre>
  
<gallery perrow=1 widths=500 heigths=350>
+
<!--T:8-->
File:twitter0.png|1. Press "Request PIN" button.
+
Therefore, reading data from socket 5557 is equivalent to calling "livedataxml.cgi" and socket 5556 reports same data as delivered by "livedata.cgi".
File:twitter2.png|2. An additional window will pop-up (please make sure your browser's pop-up blocker does not block it!) where twitter asks you to log-in to your twitter account.
+
File:twitter2b.png|3. Please log-in and copy the pin that twitter does present to you.
+
File:twitter4.png|4. Switch back to Meteobridge page and Insert pin into input field next to "Activate PIN" button and press this button.
+
File:twitter3.png|5. Finally, insert message text that Meteobridge should tweet and set upload interval and retry count and press save to make these settings permanent. If Authentification with twitter does fail, you can start process with pressing "Request new PIN" from the start.
+
File:twitter5.png|6. To fill message text with weather data and/or a timestamp, you can make use of Meteobridge variables as explained in "Templates" section below. Example above is a result of this message text: <font face="Courier"><span style="background-color:yellow;">[hh]:[mm]h Outdoor temp: [th0temp-act=F.1:--]°F </span></font face>
+
</gallery>
+
  
===Individual HTTP Upload===
+
===Template-based Individual Data=== <!--T:9-->
Data will be sent as HTTP GET requests with URL parmeters you can define to your liking. Parameters of a URL consist of name-value pairs seperated by '&'. You can define names yourself and can use a certain set of variables provided by Meteobridge to be used as values. Variable names will be automatically replaced by their current values, each time a HTTP request is sent. Please have a look at the example below.
+
Scripts presented before return data in a standard format. As a variant you can also define a template like explained in Template section of this wiki, hand that over to "template.cgi" script and get a filled template in return.
  
 +
<!--T:10-->
 +
URL to call is "http://ip-of-meteobridge/cgi-bin/template.cgi" with mandatory parameter "template=YOUR_TEMPLATE_TEXT" and optional paramater "contenttype=CONTENT_TYPE". Both parameters have to be URL-encoded with special characters represented as "%XX" (where XX is a two digit hex code) and spaces are represented by "+".
  
[[file:http-upload.png]]
+
<!--T:11-->
 +
Example: In oder to get current outdoor temp and humidity this URL<pre>http://ip-of-meteobridge/cgi-bin/template.cgi?template=[DD].[MM].[YY]+[HH]:[mm][APM]%0D[th0temp-act]%BAC%0d[th0hum-act]%25&contenttype=text/plain;charset=iso-8859-1</pre>
 +
returns <pre>01.06.13 04:55PM
 +
23.2ºC
 +
61.0%</pre>
  
 +
==Additional Features of Meteobridge PRO== <!--T:13-->
 +
Meteobridge PRO allows to store templates in the PC network share "/data/templates/". By calling "http://ip-of-meteobridge/cgi-bin/template.cgi?templatefile=mydata.html" the file "mydata.html" from share "/data/templates" is filled with data and returned to the requestor.
  
Upload schedule is defined to every 5 seconds. URL specifies server address, where to deliver data ("http://myserver.com/upload.php" in the example above). "Success Condition" allows to specify a matching string which is compared to to the return message from the server to decide if upload was successful or not.
+
<!--T:14-->
 
+
Example: There is a template file "mydata.html" defined in the templates folder:
Weather data is transported to the server by means of URL parameters. Meteobridge provides a large set of variables that can be used to feed URL parameters with current sensor data. Section [[Templates]] will explain how to use these variables to fill URL parameters with recent sensor data.
+
<pre>[DD].[MM].[YY] [HH]:[mm][APM]
 
+
[th0temp-act]°C
===Individual MYSQL Uploads===
+
[th0hum-act]%</pre>
When you prefre to store your weather station's data in your own MYSQL database, Meteobridge can feed sensor data to it in a very easy way. Just state
+
Request "http://ip-of-meteobridge/cgi-bin/template.cgi?templatefile=mydata.html&contenttype=text/plain;charset=utf-8" returns this:
* '''Host''': server name or IP of server when DNS can' resolv the name
+
<pre>08.01.16 11:00AM
* '''Port''': port number where to reach MYSQL database on your server
+
3.5°C
* '''Database''': name of database to feed
+
94.0%</pre>
* '''User''': name of database user to use for data upload
+
* '''Password''': passwrod for user name.
+
* '''Query''': payload that should be sent to the database. Query usually contains a MSQL insert statement followed by a table name and a list of column names and values. The query ist subject to template replacement, so you can use Meteobridge variables to upload weather data to your database.
+
 
+
[[File:mysql.png]]
+
 
+
Example above stores actual outdoor temperature to field "temp" of table "upload" of database "test". Field "wind" is also filled with relative outdoor humidity and current non averaged wind speed in km/h. When temprature or wind data is not there a value of -9999 is stored.
+
 
+
Details of using variables in templates is explained in [[Templates]] section.
+

Latest revision as of 11:53, 3 April 2024

Web server of Meteobridge client, which presents web interface for adminstration to you, can also deliver weather data. There are three URLs defined that can be polled to get most recent sensor data in a standard XML or plain text format or in user-defined format. Although we don't recommend this for security reasons, you can make that URLs accessible from the Internet by configuring your router appropriately. However, when you want to bring sensor data to one of your own servers in the Internet we recommend to make use of Meteobridge's Push Services, which will not need you to open up your firewall. Remark: In order to reach these HTTP services you need to handle basic authentification by adding "<username>:<password>@" in front of the URL.

Live Data as XML

By sending the meteobridge a HTTP request like "http://ip-of-meteobridge/cgi-bin/livedataxml.cgi" (where "ip-of-meteobridge" must be replaced by the IP itself) meteobridge returns current weather data in XML notation. Each reply starts witch tag <logger> and ends with </logger> with the sensor data as records with sensor specific tags "THB", "TH", "SOIL", "LEAF", "WIND", "RAIN", "UV", "SOLAR". Example below illustrates the XML format:

<logger>
  <THB date="20121227224318" id="thb0" temp="26.0" hum="37" dew="10.2" 
       press="1008.8" seapress="1010.1" fc="2" lowbat="0" />
  <TH date="20130104141909" id="th0" temp="9.1" hum="95" dew="8.3" lowbat="0" />
  <RAIN date="20130104141856" id="rain0" rate="0.0" total="3.0" delta="0.0" lowbat="0" />
  <WIND date="20130104141916" id="wind0" dir="109" gust="0.9" wind="2.2" chill="9.1" lowbat="0" />
</logger>

Each sensor data record has a mandatory "date" and "id" parameter. The other parameters are sensor specific. Meaning of parameters is:

  • date: UTC timestamp of reception of sensor data in format "YYYYMMDDhhmmss"
  • id: Unique ID of sensor, consists of a sensor type description shortcut followed by a number, which is always "0" in Meteobridge, as additional sensors are not supported
  • temp: temperature in degrees Celsius (with one decimal)
  • hum: relative humidity in percent (no decimals) with humidity sensors. With leaf and soil sensors unit is wetness or centibar.
  • dew: dew point temperature in degrees Celsius (with one decimal)
  • press: station pressure (without altitude correction) in hPa (with one decimal)
  • seapress: normalized pressure with altitude correction (also called sea level pressure) in hPa (with one decimal)
  • fc: stations forecast code, if provided. As this has low evidence and also largely varies between stations, meteobridge does not recommend to make use of this data.
  • rate: measured rain rate in mm per hour (with one decimal).
  • total: current value of rain bucket counter, converted to mm (with one decimal).
  • delta: additional rain fall in mm since previous readout of this data (with one decimal).
  • wind: current average wind speed im m/s (with one decimal).
  • gust: curent not avergaed wind speed in m/s (with one decimal).
  • dir: wind direction in degrees (0-359, no decimals).
  • chill: wind chill temperature in degrees Celsius (with one decimal).
  • lowbat: indicates if battery status of sensor is low (value 1) or normal (value 0).
  • more to come...

Live Data as Plain Text

By sending the meteobridge a HTTP request like "http://ip-of-meteobridge/cgi-bin/livedata.cgi" (where "ip-of-meteobridge" must be replaced by the IP itself) meteobridge returns current weather data as plain text. Each reply consists of a series of lines, where each line represnets a sensor. Lines do start with a time stamp and a unique sensor id followed by sensor specific parameters. Example below illustrates the format:

20130104142614 thb0 26.9 38 11.4 1020.4 1021.7 2 0
20130104142610 rain0 0.0 3.0 0.0 0
20130104142636 th0 9.1 95 8.3 0
20130104142652 wind0 160 2.2 1.8 8.0 0

Live Data via Socket Connection

Methods introduced above do need HTTP authentification like all elements of Meteobridge web interface. A look at the script "livedataxml.cgi" shows that this just reads data from socket 5557, gives it a suitable HTTP header and returns that to the requesting browser:

#!/bin/sh
echo -ne "Content-type: text/xml; charset=UTF-8\n\n"
nc 127.0.0.1 5557 2>/dev/null

Therefore, reading data from socket 5557 is equivalent to calling "livedataxml.cgi" and socket 5556 reports same data as delivered by "livedata.cgi".

Template-based Individual Data

Scripts presented before return data in a standard format. As a variant you can also define a template like explained in Template section of this wiki, hand that over to "template.cgi" script and get a filled template in return.

URL to call is "http://ip-of-meteobridge/cgi-bin/template.cgi" with mandatory parameter "template=YOUR_TEMPLATE_TEXT" and optional paramater "contenttype=CONTENT_TYPE". Both parameters have to be URL-encoded with special characters represented as "%XX" (where XX is a two digit hex code) and spaces are represented by "+".

Example: In oder to get current outdoor temp and humidity this URL
http://ip-of-meteobridge/cgi-bin/template.cgi?template=[DD].[MM].[YY]+[HH]:[mm][APM]%0D[th0temp-act]%BAC%0d[th0hum-act]%25&contenttype=text/plain;charset=iso-8859-1
returns
01.06.13 04:55PM
23.2ºC
61.0%

Additional Features of Meteobridge PRO

Meteobridge PRO allows to store templates in the PC network share "/data/templates/". By calling "http://ip-of-meteobridge/cgi-bin/template.cgi?templatefile=mydata.html" the file "mydata.html" from share "/data/templates" is filled with data and returned to the requestor.

Example: There is a template file "mydata.html" defined in the templates folder:

[DD].[MM].[YY] [HH]:[mm][APM]
[th0temp-act]°C
[th0hum-act]%

Request "http://ip-of-meteobridge/cgi-bin/template.cgi?templatefile=mydata.html&contenttype=text/plain;charset=utf-8" returns this:

08.01.16 11:00AM
3.5°C
94.0%