|
|
en:local:remoteapi1504:codesamples:reports [20/05/2014 11:49] |
en:local:remoteapi1504:codesamples:reports [20/05/2014 11:49] (current) |
| {{indexmenu_n>8}} |
| ====== Reports ====== |
| |
| There are some peculiarities in working with reports. All commands from the chapter [[../apiref/report/report]] except [[../apiref/report/update_report|report/update_report]] can be performed only if the session contains some results of report execution. A session can contain only one report at the same time. That's why before executing a new report, you need to clear results of the previous one by the command [[../apiref/report/cleanup_result|report/cleanup_result]]. |
| |
| //:!: Attention!// To launch this example at Wialon Kit, change **<nowiki>https://hst-api.wialon.com</nowiki>** for **<nowiki>https://kit-api.wialon.com</nowiki>** in all requests and use user name and password of your account to login to the system or name and password of demo user //**kitdemo kitdemo**//. |
| |
| ===== Report execution ===== |
| As an example let's execute a report based on the template "_Trips,fuel (1)". We'll choose "Bavarian Tractor" as a unit and set time interval from 01.01.2013 00:00 to 20.01.2013 23:59. To do this, use the request [[../apiref/report/exec_report|exec_report]]: |
| |
| <code> |
| https://hst-api.wialon.com/wialon/ajax.html?svc=report/exec_report& |
| params={ |
| "reportResourceId":163266, |
| "reportTemplateId":10, |
| "reportObjectId":34868, |
| "reportObjectSecId":0, |
| "interval":{ |
| "from":1357938000, |
| "to":1358715599, |
| "flags":0 |
| } |
| }&sid=<your_sid> |
| </code> |
| Response: |
| <code javascript> |
| { |
| "reportResult": { |
| "msgsRendered": 1, |
| "stats": [ |
| ["Move time", "7:09:23"], |
| ["Trips count", "120"], |
| ["Stops count", "0"], |
| ["Parking time", "19 days 16:34:20"], |
| ["Parkings count", "121"] |
| ], |
| "tables": [{ |
| "name": "unit_trips", |
| "label": "Trips without stops", |
| "flags": 4497, |
| "rows": 16, |
| "level": 2, |
| "columns": 16, |
| "header": ["№", "Date", "Beginning", "Initial location", "End", "Final location", "Driver", "Duration", "Engine hours", "Mileage", "Mileage (adjusted)", "Avg speed", "Max speed", "Trips count", "Initial fuel level", "Final fuel level"], |
| "total": ["", "", "2013-01-01 17:36:58", "", "2013-01-20 18:26:50", "", "", "7:09:23", "0:00:00", "0.00 km", "0.00 km", "0 km\/h", "118 km\/h", "120", "0 lt", "0 lt"] |
| }, { |
| "name": "unit_stays", |
| "label": "Parkings", |
| "flags": 272, |
| "rows": 74, |
| "level": 0, |
| "columns": 5, |
| "header": ["Beginning", "End", "Duration", "Location", "Count"], |
| "total": ["2013-01-01 00:07:56", "2013-01-20 23:51:39", "19 days 13:50:40", "", "74"] |
| }], |
| "attachments": [{ |
| "name": "Speed and mileage chart", |
| "type": "chart", |
| "datasets": ["Speed, km\/h", "Absolute mileage", "Mileage in trips"] |
| }] |
| }, |
| "reportLayer": { |
| "name": "report unit_msgs", |
| "bounds": [53.8326976, 27.2796096, 53.9644416, 27.6123168], |
| "units": [{ |
| "id": 34868, |
| "msgs": { |
| "count": 6585, |
| "first": { |
| "time": 1356984476, |
| "lat": 53.9077377319, |
| "lon": 27.5011463165 |
| }, |
| "last": { |
| "time": 1358711499, |
| "lat": 53.839679718, |
| "lon": 27.5609111786 |
| } |
| }, |
| "mileage": 770003.067396, |
| "max_speed": 118 |
| }] |
| }, |
| "layerCount": 2 |
| } |
| </code> |
| Conclusions that can be drawn out of the response: |
| * report contains a table with statistics ("stats" section); |
| * report contains 2 tables - "unit_trips" (Trips) and "unit_stays" (Parkings); |
| * table with trips is two-level (see "level" field), has 16 columns (see "columns" and "header" fields) and the Total row (see "total"); |
| * report contains a chart (see "attachments" section); |
| * report contains a layer with messages (because "msgsRendered" is 1); |
| * 6585 messages were used to build this layer. |
| |
| ===== Get tables data ===== |
| |
| There are two ways to get values from report tables: |
| - Using the request [[../apiref/report/get_result_rows|report/get_result_rows]]. It is suitable for most reports. However, it returns only rows of the top level. If you have a multilevel report, you need to make an additional request to get the rows of lower levels -- [[../apiref/report/get_result_subrows|report/get_result_subrows]]. |
| - Using the request [[../apiref/report/select_result_rows|report/select_result_rows]]. It returns JSON that contains rows of all levels. |
| |
| **Method 1:** |
| |
| Let's get the first row of the table "Trips without stops", which has index 0 in "tables" array. |
| <code> |
| https://hst-api.wialon.com/wialon/ajax.html?svc=report/get_result_rows& |
| params={ |
| "tableIndex":0, |
| "indexFrom":0, |
| "indexTo":0 |
| }&sid=<your_sid> |
| </code> |
| Response: |
| <code javascript> |
| [{ |
| "n": 0, |
| "i1": 108, |
| "i2": 214, |
| "t1": 1357047418, |
| "t2": 1357056357, |
| "d": 3, |
| "c": ["1", "2013-01-01", { |
| "t": "17:36:58", |
| "y": 53.9097984, |
| "x": 27.4998528 |
| }, { |
| "t": "Beruta st., Minsk", |
| "y": 53.9097984, |
| "x": 27.4998528 |
| }, { |
| "t": "20:05:57", |
| "y": 53.8847872, |
| "x": 27.5675072 |
| }, { |
| "t": "Mayakovskogo st., Minsk", |
| "y": 53.8847872, |
| "x": 27.5675072 |
| }, "", "0:11:15", "0:00:00", "0.00 km", "0.00 km", "0 km\/h", { |
| "t": "72 km\/h", |
| "y": 53.9070656, |
| "x": 27.5216608 |
| }, "3", "0 lt", "0 lt"] |
| }] |
| </code> |
| |
| Number 3 in the parameter //d// tells us that the current row contains 3 subrows. To get them, make the request: |
| <code> |
| https://hst-api.wialon.com/wialon/ajax.html?svc=report/get_result_subrows& |
| params={ |
| "tableIndex":0, |
| "rowIndex":0 |
| }&sid=<your_sid> |
| </code> |
| Response: |
| <code javascript> |
| [{ |
| "n": 0, |
| "i1": 108, |
| "i2": 118, |
| "t1": 1357047418, |
| "t2": 1357047581, |
| "d": 0, |
| "c": ["1.1", "", { |
| "t": "17:36:58", |
| "y": 53.9097984, |
| "x": 27.4998528 |
| }, { |
| "t": "Beruta st., Minsk", |
| "y": 53.9097984, |
| "x": 27.4998528 |
| }, { |
| "t": "17:39:41", |
| "y": 53.9152448, |
| "x": 27.4865568 |
| }, { |
| "t": "Matusevicha st., Minsk", |
| "y": 53.9152448, |
| "x": 27.4865568 |
| }, "", "0:02:43", "0:00:00", "0.00 km", "0.00 km", "0 km\/h", { |
| "t": "34 km\/h", |
| "y": 53.910112, |
| "x": 27.495648 |
| }, "1", "0 lt", "0 lt"] |
| }, { |
| "n": 1, |
| "i1": 151, |
| "i2": 169, |
| "t1": 1357053985, |
| "t2": 1357054222, |
| "d": 0, |
| "c": ["1.2", "", { |
| "t": "19:26:25", |
| "y": 53.9205888, |
| "x": 27.492064 |
| }, { |
| "t": "Danily Serdicha st., 68, Minsk", |
| "y": 53.9205888, |
| "x": 27.492064 |
| }, { |
| "t": "19:30:22", |
| "y": 53.9094592, |
| "x": 27.4950912 |
| }, { |
| "t": "Pritytskogo st., Ratomka", |
| "y": 53.9094592, |
| "x": 27.4950912 |
| }, "", "0:03:57", "0:00:00", "0.00 km", "0.00 km", "0 km\/h", { |
| "t": "41 km\/h", |
| "y": 53.9177472, |
| "x": 27.4873152 |
| }, "1", "0 lt", "0 lt"] |
| }, { |
| "n": 2, |
| "i1": 200, |
| "i2": 214, |
| "t1": 1357056082, |
| "t2": 1357056357, |
| "d": 0, |
| "c": ["1.3", "", { |
| "t": "20:01:22", |
| "y": 53.8974912, |
| "x": 27.5369984 |
| }, { |
| "t": "Klary Tsetkin st., Minsk", |
| "y": 53.8974912, |
| "x": 27.5369984 |
| }, { |
| "t": "20:05:57", |
| "y": 53.8847872, |
| "x": 27.5675072 |
| }, { |
| "t": "Mayakovskogo st., Minsk", |
| "y": 53.8847872, |
| "x": 27.5675072 |
| }, "", "0:04:35", "0:00:00", "0.00 km", "0.00 km", "0 km\/h", { |
| "t": "62 km\/h", |
| "y": 53.8868928, |
| "x": 27.5656 |
| }, "1", "0 lt", "0 lt"] |
| }] |
| </code> |
| |
| **Method 2:** |
| |
| After report execution, we know that maximal nesting level of the table "Trips without stops" is 2. Now we will make a request which will return the first row with its subrows which nesting level is 2 or less: |
| |
| <code> |
| https://hst-api.wialon.com/wialon/ajax.html?svc=report/select_result_rows& |
| params={ |
| "tableIndex":0, |
| "config":{ |
| "type":"range", |
| "data":{ |
| "from":0, |
| "to":0, |
| "level":2 |
| } |
| } |
| }&sid=<your_sid> |
| </code> |
| Response: |
| <code javascript> |
| [{ |
| "n": 0, |
| "i1": 108, |
| "i2": 214, |
| "t1": 1357047418, |
| "t2": 1357056357, |
| "d": 3, |
| "c": ["1", "2013-01-01", { |
| "t": "17:36:58", |
| "y": 53.9097984, |
| "x": 27.4998528 |
| }, { |
| "t": "Beruta st., Minsk", |
| "y": 53.9097984, |
| "x": 27.4998528 |
| }, { |
| "t": "20:05:57", |
| "y": 53.8847872, |
| "x": 27.5675072 |
| }, { |
| "t": "Mayakovskogo st., Minsk", |
| "y": 53.8847872, |
| "x": 27.5675072 |
| }, "", "0:11:15", "0:00:00", "0.00 km", "0.00 km", "0 km\/h", { |
| "t": "72 km\/h", |
| "y": 53.9070656, |
| "x": 27.5216608 |
| }, "3", "0 lt", "0 lt"], |
| "r": [{ |
| "n": 0, |
| "i1": 108, |
| "i2": 118, |
| "t1": 1357047418, |
| "t2": 1357047581, |
| "d": 0, |
| "c": ["1.1", "", { |
| "t": "17:36:58", |
| "y": 53.9097984, |
| "x": 27.4998528 |
| }, { |
| "t": "Beruta st., Minsk", |
| "y": 53.9097984, |
| "x": 27.4998528 |
| }, { |
| "t": "17:39:41", |
| "y": 53.9152448, |
| "x": 27.4865568 |
| }, { |
| "t": "Matusevicha st., Minsk", |
| "y": 53.9152448, |
| "x": 27.4865568 |
| }, "", "0:02:43", "0:00:00", "0.00 km", "0.00 km", "0 km\/h", { |
| "t": "34 km\/h", |
| "y": 53.910112, |
| "x": 27.495648 |
| }, "1", "0 lt", "0 lt"] |
| }, { |
| "n": 1, |
| "i1": 151, |
| "i2": 169, |
| "t1": 1357053985, |
| "t2": 1357054222, |
| "d": 0, |
| "c": ["1.2", "", { |
| "t": "19:26:25", |
| "y": 53.9205888, |
| "x": 27.492064 |
| }, { |
| "t": "Danily Serdicha st., 68, Minsk", |
| "y": 53.9205888, |
| "x": 27.492064 |
| }, { |
| "t": "19:30:22", |
| "y": 53.9094592, |
| "x": 27.4950912 |
| }, { |
| "t": "Pritytskogo st., Ratomka", |
| "y": 53.9094592, |
| "x": 27.4950912 |
| }, "", "0:03:57", "0:00:00", "0.00 km", "0.00 km", "0 km\/h", { |
| "t": "41 km\/h", |
| "y": 53.9177472, |
| "x": 27.4873152 |
| }, "1", "0 lt", "0 lt"] |
| }, { |
| "n": 2, |
| "i1": 200, |
| "i2": 214, |
| "t1": 1357056082, |
| "t2": 1357056357, |
| "d": 0, |
| "c": ["1.3", "", { |
| "t": "20:01:22", |
| "y": 53.8974912, |
| "x": 27.5369984 |
| }, { |
| "t": "Klary Tsetkin st., Minsk", |
| "y": 53.8974912, |
| "x": 27.5369984 |
| }, { |
| "t": "20:05:57", |
| "y": 53.8847872, |
| "x": 27.5675072 |
| }, { |
| "t": "Mayakovskogo st., Minsk", |
| "y": 53.8847872, |
| "x": 27.5675072 |
| }, "", "0:04:35", "0:00:00", "0.00 km", "0.00 km", "0 km\/h", { |
| "t": "62 km\/h", |
| "y": 53.8868928, |
| "x": 27.5656 |
| }, "1", "0 lt", "0 lt"] |
| }] |
| }] |
| </code> |
| |
| ===== Getting graphic data ===== |
| |
| As was told before, a layer with trips and parkings was generated for the report. We can get the image of this layer (combined with map) using the request [[../apiref/report/get_result_map|get_result_map]]: |
| <code> |
| https://hst-api.wialon.com/wialon/ajax.html?svc=report/get_result_map& |
| params={ |
| "width":600, |
| "height":600 |
| }&sid=<your_sid> |
| </code> |
| |
| Response: |
| {{ /remote_ex/map.png?nolink }} |
| |
| Also there is "Speed and mileage chart" in the report. You can get its image using the request [[../apiref/report/get_result_chart|get_result_chart]]. To place a chart name above the chart, set the flag 0×01, and to place a legend under the chart, set the flag 0x200. |
| <code> |
| https://hst-api.wialon.com/wialon/ajax.html?svc=report/get_result_chart& |
| params={ |
| "attachmentIndex":0, |
| "action":0, |
| "width":600, |
| "height":300, |
| "autoScaleY":0, |
| "pixelFrom":0, |
| "pixelTo":300, |
| "flags":513 |
| }&sid=<your_sid> |
| </code> |
| |
| Response: |
| {{ /remote_ex/chart_en.png?nolink }} |