diff --git a/README.md b/README.md index ccdc840..221a9d4 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,7 @@ -# asyncapi +# AsyncAPI Definition +Specification of MQ based API in the Birbnetes system. + +Check summary here: https://asyncapi.kmlabz.com/ + +Reading of rendered summary does not replace careful reading of the full API definition. \ No newline at end of file diff --git a/birbnetes.yml b/birbnetes.yml index 1ab65af..14bc569 100644 --- a/birbnetes.yml +++ b/birbnetes.yml @@ -1,54 +1,196 @@ asyncapi: 2.0.0 info: title: Birbnetes API - version: '1.0.0' + version: '2.0.0' description: | Async messages sent between major components of the Birbnetes system. + contact: + name: KMLabz Team + url: https://xwiki.kmlabz.com + email: birbnetes@kmlabz.com + license: + name: Apache 2.0 + url: http://www.apache.org/licenses/LICENSE-2.0.html servers: - production: + kubernetes: url: birb-rabbitmq:{port} protocol: amqp + protocolVersion: "0.9.1" description: RabbitMQ + security: + - user_pass: [] variables: port: description: Available in the birbnetes namespace of Kubernetes. default: '5672' + edge: + url: activemq.kmlabz.com:{port} + protocol: secure-mqtt + protocolVersion: "3.x" + bindings: + mqtt: + clientId: iot + cleanSession: true + lastWill: + topic: /last-wills + qos: 2 + message: Guest gone offline. + retain: false + keepAlive: 60 + bindingVersion: 0.1.0 + description: Apache ActiveMQ Artemis + variables: + port: + description: Only usable over mqtt-nio+ssl for better security. + default: '61616' defaultContentType: application/json channels: - wave: + kubernetes/wave: + bindings: + amqp: + queue: + name: please-declare + durable: true + autoDelete: false + vhost: / + exchange: + name: wave + type: fanout + durable: true + autoDelete: false + vhost: / + bindingVersion: 0.1.0 description: IDs of recieved sound files. subscribe: - summary: Used to trigger processing of recieved waveforms. + summary: Trigger classification + description: Used to trigger processing of recieved waveforms. operationId: receiveMeasurement message: $ref: '#/components/messages/wave' - output: + publish: + summary: Trigger classification + description: Trigger processing of a waveform. + operationId: triggerProcessing + message: + $ref: '#/components/messages/wave' + kubernetes/output: + bindings: + amqp: + ack: false + queue: + name: please-declare + durable: true + autoDelete: false + vhost: / + exchange: + name: output + type: fanout + durable: true + autoDelete: false + vhost: / + bindingVersion: 0.1.0 description: Confidence of AI subscribe: - summary: Probaility attached to a particular sample. + summary: AI Output + description: Probaility attached to a particular sample. operationId: receiveProbability message: $ref: '#/components/messages/output' + publish: + summary: AI Output + description: Probaility attached to a particular sample. + operationId: sendprobability + message: + $ref: '#/components/messages/output' + edge/sensor: + bindings: + mqt: + qos: 1 + retain: true + bindingVersion: 0.1.0 + description: Sensor measurement + subscribe: + summary: Recieve sensor data + description: Measurement of a sensor on a particular device. + operationId: recieveSensorData + message: + $ref: '#/components/messages/sensor' + publish: + summary: Send sensor data + description: Measurement of a sensor. + operationId: sendSensorData + message: + $ref: '#/components/messages/sensor' + edge/control: + bindings: + mqt: + qos: 2 + retain: true + bindingVersion: 0.1.0 + description: Command messages sent by the cloud + subscribe: + summary: Recieve control messages + description: Shutdown and powerof messages sent by cloud + operationId: recieveCommand + message: + $ref: '#/components/messages/controlmessage' + publish: + summary: Send control messages + description: Send shutdown and poweron commands to a device or sensor. + operationId: sendCommand + message: + $ref: '#/components/messages/controlmessage' components: + securitySchemes: + user_pass: + type: userPassword + description: Defined by helm chart. + messages: wave: name: wave title: Recieve ID summary: Unique ID used to identify a particular sample in the system. contentType: application/json + bindings: + amqp: + bindingVersion: 0.1.0 payload: $ref: "#/components/schemas/wavePayload" output: name: output - title: Recieve ID - summary: Unique ID used to identify a particular sample in the system. + title: AI Output + summary: Confidence of AI attached to unique ID of sample. contentType: application/json + bindings: + amqp: + bindingVersion: 0.1.0 payload: $ref: "#/components/schemas/probabilityPayload" + sensor: + name: sensorsample + title: Sample measurement data + summary: Measurement made by a sensor on a device. + contentType: application/json + bindings: + mqtt: + bindingVersion: 0.1.0 + payload: + $ref: "#/components/schemas/samplePayload" + controlmessage: + name: controlmessage + title: Control message + summary: Control message used to shut down and bring online devices + contentType: application/json + bindings: + mqtt: + bindingVersion: 0.1.0 + payload: + $ref: "#/components/schemas/controlPayload" schemas: wavePayload: @@ -68,3 +210,31 @@ components: minimum: 0 maximum: 1 summary: Probability of detection + samplePayload: + type: object + properties: + deviceID: + type: string + format: uuid + summary: Unique ID used to identify a particular device in the system. + sensorID: + type: string + format: uuid + summary: Unique ID used to identify a particular sensor on a device. + measurement: + type: string + summary: Measurement data + controlPayload: + type: object + properties: + deviceID: + type: string + format: uuid + summary: Unique ID used to identify a particular device in the system. + sensorID: + type: string + format: uuid + summary: Unique ID used to identify a particular sensor on a device. + command: + type: string + enom: ["online", "offline"] \ No newline at end of file