English     Dutch     French     German     Spanish

Wiki source code of Retrieve device telemetry

Last modified by Bart Verheecke on 2024/05/06 09:28

Show last authors
1 = Python example =
2
3 Use the following example to retrieve telemetry timeseries data from devices.
4
5
6 {{code language="python"}}
7 from eniris import ApiDriver
8 from datetime import datetime, timezone
9
10
11 def example():
12 apiUsername = "username" # Your Insights username
13 apiPassword = "password" # Your Insights password
14
15 # Create an API driver
16 driver = ApiDriver(apiUsername, apiPassword)
17
18 # Make a query body
19 startTime = datetime(2023, 10, 11, hour=0, minute=0, second=0, tzinfo=timezone.utc)
20 endTime = datetime(2023, 10, 11, hour=0, minute=2, second=0, tzinfo=timezone.utc)
21
22 # The body of this example is to get data from two devices for the fields 'actualPowerTot_W', 'importedEnergyDeltaTot_Wh', 'exportedEnergyDeltaTot_Wh'
23 # from database "eniris", retention policy "rp_one_m" and measurement "submeteringMetrics"
24 # For the terminology, see https://docs.influxdata.com/influxdb/v1/concepts/key_concepts/
25
26 # For each device you can know which database, retention policy, tags, measurements and fields exist by looking at the nodeInfluxSeries in the metadata object of the device.
27 # The devices you have access to can be retrieved using the https://api.eniris.be/v1/devices GET call. In the smart grid controller you can also look to the debugger tab.
28 # The meaning of the fields is documented at https://wiki.eniris.be/wiki/publicinformation/view/Standards/Metrics%20for%20solar%20%26%20batteries/
29 body = [
30
31 # Device 1:
32 {
33 "select": ['actualPowerTot_W', 'importedEnergyDeltaTot_Wh', 'exportedEnergyDeltaTot_Wh'],
34 "from": {
35 "database": "beauvent",
36 "retentionPolicy": "rp_one_m", # Retention policy. Possible values: rp_one_s, rp_one_m, rp_ten_m, rp_one_h, rp_six_h
37 "measurement": "submeteringMetrics"},
38 "where": {
39 # Get all datapoints between two hours ago and the look ahead time
40 "time": [{ "operator": ">=", "value": startTime.timestamp()*1000 }, { "operator": "<=", "value": endTime.timestamp()*1000 }],
41 "tags": {'nodeId': 'nodeIdOfDevice1'} # Tags; at least nodeId must be present, and possibly more tags
42 },
43 },
44
45 # Device 2:
46 {
47 "select": ['actualPowerTot_W', 'importedEnergyDeltaTot_Wh', 'exportedEnergyDeltaTot_Wh'],
48 "from": {
49 "database": "beauvent",
50 "retentionPolicy": "rp_one_m", # Retention policy. Possible values: rp_one_s, rp_one_m, rp_ten_m, rp_one_h, rp_six_h
51 "measurement": "submeteringMetrics"},
52 "where": {
53 # Get all datapoints between two hours ago and the look ahead time
54 "time": [{ "operator": ">=", "value": startTime.timestamp()*1000 }, { "operator": "<=", "value": endTime.timestamp()*1000 }],
55 "tags": {'nodeId': 'nodeIdOfDevice2'} # Tags; at least nodeId must be present, and possibly more tags
56 },
57 }
58 ]
59
60 try:
61 resp = driver.post('https://api.eniris.be/v1/telemetry/query', json=body)
62 except Exception as e:
63 raise Exception("Got an error while querying Insights: " + str(e))
64
65 return resp.json()
66
67 # An example of how such a response looks:
68 # [
69 # {
70 # "statement_id": 0,
71 # "series": [
72 # {
73 # "name": "submeteringMetrics",
74 # "tags": {
75 # "nodeId": "nodeIdOfDevice1"
76 # },
77 # "columns": [
78 # "time",
79 # "actualPowerTot_W",
80 # "importedEnergyDeltaTot_Wh",
81 # "exportedEnergyDeltaTot_Wh"
82 # ],
83 # "values": [
84 # [
85 # "2023-10-11T00:00:08.261251072Z",
86 # 284,
87 # 10.475263329722221,
88 # 0
89 # ],
90 # [
91 # "2023-10-11T00:01:13.300770048Z",
92 # 280,
93 # 10.097605051388888,
94 # 0
95 # ]
96 # ]
97 # }
98 # ]
99 # },
100 # {
101 # "statement_id": 1,
102 # "series": [
103 # {
104 # "name": "submeteringMetrics",
105 # "tags": {
106 # "nodeId": "nodeIdOfDevice2"
107 # },
108 # "columns": [
109 # "time",
110 # "actualPowerTot_W",
111 # "importedEnergyDeltaTot_Wh",
112 # "exportedEnergyDeltaTot_Wh"
113 # ],
114 # "values": [
115 # [
116 # "2023-10-11T00:00:08.308108032Z",
117 # 284,
118 # 10.178023648333332,
119 # 0
120 # ],
121 # [
122 # "2023-10-11T00:01:13.34544384Z",
123 # 280,
124 # 10.475263329722221,
125 # 0
126 # ]
127 # ]
128 # }
129 # ]
130 # }
131 # ]
132
133
134 example()
135 {{/code}}

Applications

(c) Eniris, 2024