-
Notifications
You must be signed in to change notification settings - Fork 31
Expand file tree
/
Copy pathopenapi.yaml
More file actions
301 lines (294 loc) · 8.99 KB
/
openapi.yaml
File metadata and controls
301 lines (294 loc) · 8.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
openapi: 3.0.0
info:
title: BACnet MQTT Gateway API
version: 1.6.0
description: API for managing and interacting with the BACnet MQTT Gateway, including runtime health for production deployments.
servers:
- url: http://localhost:{port}
description: Local development server
variables:
port:
default: '8082'
description: Server port
components:
schemas:
DeviceScanRequest:
type: object
properties:
deviceId:
type: string
description: The BACnet device ID (as configured in devices/*.json or discovered).
example: "114"
address:
type: string
description: The IP address of the BACnet device.
example: "192.168.1.101"
DeviceConfigPolling:
type: object
properties:
class:
type: string
description: Polling class used by the bounded scheduler.
enum: [fast, normal, slow]
example: fast
intervalMs:
type: integer
description: Explicit polling interval in milliseconds.
example: 5000
freshnessMs:
type: integer
description: Maximum age in milliseconds before downstream systems should treat the value as stale.
example: 15000
schedule:
type: string
description: Optional cron-style schedule expression for polling.
example: "*/15 * * * * *"
DeviceConfigObject:
type: object
properties:
objectId:
type: object
properties:
type:
type: integer
description: BACnet object type number.
example: 2
instance:
type: integer
description: BACnet object instance number.
example: 202
DeviceConfiguration:
type: object
properties:
device:
$ref: '#/components/schemas/DeviceScanRequest'
polling:
$ref: '#/components/schemas/DeviceConfigPolling'
objects:
type: array
items:
$ref: '#/components/schemas/DeviceConfigObject'
BacnetObjectResponse:
type: object
properties:
objectId:
type: object
properties:
type:
type: integer
instance:
type: integer
name:
type: string
nullable: true
description:
type: string
nullable: true
WritePropertyRequest:
type: object
required:
- deviceId
- objectType
- objectInstance
- propertyId
- value
properties:
deviceId:
type: string
description: The configured deviceId (key from deviceConfigs map).
example: "114"
objectType:
type: integer
description: BACnet object type.
objectInstance:
type: integer
description: BACnet object instance.
propertyId:
type: integer
description: BACnet property ID to write.
value:
type: object
description: The value to write. Can be string, number, boolean.
priority:
type: integer
format: int32
minimum: 1
maximum: 16
nullable: true
description: BACnet write priority (1-16).
bacnetApplicationTag:
type: integer
format: int32
nullable: true
description: BACnet Application Tag (from bacnet.enum.ApplicationTags) to specify value type.
ErrorResponse:
type: object
properties:
status:
type: string
example: error
message:
type: string
SuccessResponse:
type: object
properties:
status:
type: string
example: success
message:
type: string
response:
type: object
paths:
/api/bacnet/scan:
put:
summary: Scan for BACnet devices
description: Initiates a BACnet 'Who-Is' broadcast to discover devices on the network. The server listens for responses for a fixed duration (e.g., 5 seconds).
responses:
'200':
description: An array of discovered BACnet devices.
content:
application/json:
schema:
type: array
items:
type: object
properties:
address:
type: string
deviceId:
type: integer
'500':
description: Internal server error.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/api/bacnet/{deviceId}/objects:
put:
summary: Scan a specific BACnet device for its objects
parameters:
- name: deviceId
in: path
required: true
description: The ID of the BACnet device to scan (must match a configured deviceId or one from discovery).
schema:
type: string
requestBody:
description: Device information, typically its IP address and BACnet deviceId.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DeviceScanRequest'
responses:
'200':
description: An array of BACnet objects found on the device.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/BacnetObjectResponse'
'400':
description: Bad request (e.g., invalid deviceId format).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Device not found or not responding.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/api/bacnet/{deviceId}/config:
put:
summary: Configure polling for a specific BACnet device
parameters:
- name: deviceId
in: path
required: true
description: The ID of the BACnet device to configure.
schema:
type: string
requestBody:
description: Full device configuration including device info, polling schedule, and objects to poll.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DeviceConfiguration'
responses:
'200':
description: Configuration saved and polling started/updated. Returns an empty object.
content:
application/json:
schema:
type: object
'400':
description: Bad request (e.g., invalid configuration format).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/api/bacnet/runtime:
get:
summary: List runtime BACnet device state
description: Returns persisted runtime device health, circuit breaker state, and last successful poll metadata.
responses:
'200':
description: Runtime state entries for configured devices.
content:
application/json:
schema:
type: array
items:
type: object
/api/bacnet/write:
put:
summary: Write to a BACnet object property
requestBody:
description: Details of the BACnet write operation.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WritePropertyRequest'
responses:
'200':
description: Write operation successful.
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
'400':
description: Bad request (e.g., missing fields, invalid data types).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Device configuration not found for the given deviceId.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: BACnet write operation failed or internal server error.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'