From c0fa89942f1c5406169c9c6589b1fef3644440ff Mon Sep 17 00:00:00 2001 From: fiqare-secmotic Date: Mon, 16 Dec 2019 11:11:52 +0100 Subject: [PATCH 01/12] Documentation Swagger --- lib/bindings/HTTPBindings.js | 105 +++++++++++++++++++++++++++++++++++ package.json | 2 + 2 files changed, 107 insertions(+) diff --git a/lib/bindings/HTTPBindings.js b/lib/bindings/HTTPBindings.js index 89bf31b7..e3a42bd4 100644 --- a/lib/bindings/HTTPBindings.js +++ b/lib/bindings/HTTPBindings.js @@ -42,6 +42,8 @@ var http = require('http'), context = { op: 'IOTAUL.HTTP.Binding' }, + swaggerUi = require('swagger-ui-express'), + swaggerJSDoc = require('swagger-jsdoc'), transport = 'HTTP'; function handleError(error, req, res, next) { @@ -406,11 +408,70 @@ function start(callback) { router: express.Router() }; + var options = { + swaggerDefinition: { + info: { + title: 'IoT Agent UL2 - HTTP', // Title (required) + version: '1.0.0', // Version (required) + description: 'This documentation explains the POST and GET requests to the route /iot/d' // Description (not required) + } + }, + apis: ['./lib/bindings/*'] // Path to the API docs + }; + var swaggerSpec = swaggerJSDoc(options); + + httpBindingServer.app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec)); + config.getLogger().info(context, 'HTTP Binding listening on port [%s]', config.getConfig().http.port); httpBindingServer.app.set('port', config.getConfig().http.port); httpBindingServer.app.set('host', config.getConfig().http.host || '0.0.0.0'); + /** + * @swagger + * + * /iot/d: + * get: + * tags: + * - "iot/d" + * summary: "Report new measures" + * description: "A device can report new measures to the IoT Platform using an HTTP GET request to the /iot/d path" + * consumes: + * - "application/json" + * produces: + * - "application/json" + * parameters: + * - in: "query" + * name: "i" + * description: "Device ID" + * type: string + * required: true + * - in: "query" + * name: "k" + * description: "API Key for the service the device is registered on" + * type: string + * required: true + * - in: "query" + * name: "d" + * description: "Ultralight 2.0 payload. Payloads for GET requests should not contain multiple measure groups" + * type: string + * required: true + * - in: "query" + * name: "t" + * description: "Timestamp of the measure" + * type: timestamp + * required: false + * responses: + * 200: + * description: "The new measure has been registered " + * 404: + * description: 'No device was found with "device_name"' + * DEVICE_GROUP_NOT_FOUND: + * description: "Could not find device group" + * PARSE_ERROR: + * description: 'There was a syntax error in the Ultralight request: Unknown error parsing Ultralight 2.0: "syntax_error"' + */ + httpBindingServer.router.get( config.getConfig().iota.defaultResource || constants.HTTP_MEASURE_PATH, checkMandatoryParams(true), @@ -420,6 +481,50 @@ function start(callback) { returnCommands ); + /** + * @swagger + * + * /iot/d: + * post: + * tags: + * - "iot/d" + * summary: "Registrer a new measure" + * description: "This request add a new measure to the datebase." + * operationId: "addDevices" + * consumes: + * - text/plain + * parameters: + * - in: query + * name: "i" + * description: "Device ID" + * type: string + * required: true + * - in: query + * name: "k" + * description: "API key. Service identification." + * type: string + * required: true + * - in: query + * name: "t" + * description: "Date and time of register" + * type: timestamp + * required: false + * - in: body + * name: "Sensors" + * description: 'Sensors Measurements. The different sensor values ​​are sent in IoT Agent format. For example: "c|1"' + * type: string + * required: true + * responses: + * 200: + * description: "Report new measures to the IoT Platform" + * 404: + * description: 'DEVICE_NOT_FOUND - No device was found with "device_name"' + * DEVICE_GROUP_NOT_FOUND: + * description: "Could not find device group" + * PARSE_ERROR: + * description: 'There was a syntax error in the Ultralight request: Unknown error parsing Ultralight 2.0: "syntax_error"' + */ + httpBindingServer.router.post( config.getConfig().iota.defaultResource || constants.HTTP_MEASURE_PATH, addDefaultHeader, diff --git a/package.json b/package.json index 8a1b52ab..207496f5 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,8 @@ "logops": "2.1.0", "mqtt": "3.0.0", "request": "2.88.0", + "swagger-jsdoc": "^3.4.0", + "swagger-ui-express": "^4.1.2", "underscore": "1.9.1" }, "devDependencies": { From 3e1c1f9e4b67bdc236aa308147970f3c28d137db Mon Sep 17 00:00:00 2001 From: fiqare-secmotic Date: Tue, 17 Dec 2019 12:21:45 +0100 Subject: [PATCH 02/12] Documentation Swagger (improved) --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 207496f5..df6def1c 100644 --- a/package.json +++ b/package.json @@ -42,8 +42,6 @@ "logops": "2.1.0", "mqtt": "3.0.0", "request": "2.88.0", - "swagger-jsdoc": "^3.4.0", - "swagger-ui-express": "^4.1.2", "underscore": "1.9.1" }, "devDependencies": { @@ -64,6 +62,8 @@ "textlint-rule-terminology": "~1.1.30", "textlint-rule-write-good": "~1.6.2", "should": "13.2.3", + "swagger-jsdoc": "~3.4.0", + "swagger-ui-express": "~4.1.2", "timekeeper": "2.1.2", "watch": "~1.0.2" }, From 53b15a6eccc20866ec89dd363d57d95513e620f0 Mon Sep 17 00:00:00 2001 From: fiqare-secmotic Date: Thu, 19 Dec 2019 12:59:06 +0100 Subject: [PATCH 03/12] user manual with swagger --- docs/usermanual.md | 100 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 96 insertions(+), 4 deletions(-) diff --git a/docs/usermanual.md b/docs/usermanual.md index a1771a8f..92c35307 100644 --- a/docs/usermanual.md +++ b/docs/usermanual.md @@ -193,17 +193,18 @@ Some additional remarks regarding polling commands: MQTT is a machine-to-machine (M2M)/IoT connectivity protocol, focused on a lightweight interaction between peers. MQTT is based on publish-subscribe mechanisms over a hierarchical set of topics defined by the user. -This section specifies the topics and messages allowed when using MQTT as the transport protocol for Ultralight 2.0. All -the topics subscribed by the agent (to send measures, to configuration command retrieval or to get result -of a command) are prefixed with the agent procotol: +This section specifies the topics and messages allowed when using MQTT as the transport protocol for Ultralight 2.0. All +the topics subscribed by the agent (to send measures, to configuration command retrieval or to get result of a command) +are prefixed with the agent procotol: ```text /ul// ``` + where `` is the API Key assigned to the service and `` is the ID of the device. All topis published by the agent (to send a comamnd or to send configuration information) to a device are not prefixed -by the protocol, in this case '/ul', just include apikey and deviceid (e.g: `/FF957A98/MydeviceId/cmd` and +by the protocol, in this case '/ul', just include apikey and deviceid (e.g: `/FF957A98/MydeviceId/cmd` and `/FF957A98/MyDeviceId/configuration/values` ). This transport protocol binding is still under development. @@ -544,3 +545,94 @@ To ensure consistent Markdown formatting run the following: # Use git-bash on Windows npm run prettier:text ``` + +### Swagger + +In order to run Swagger, you need to execute the IoT Agent +(https://github.com/telefonicaid/iotagent-ul/blob/master/docs/installationguide.md#usage) and then you can access to: + +``` +:7896/api-docs +``` + +If you want to test the HTTP Protocol, two importants points: + +- you should know that other services are needed (see + https://github.com/telefonicaid/iotagent-ul/blob/master/docs/installationguide.md#installation): + + - Mosquitto + - Mongo + - Rabbitmq + - Orion + +- you need to Provisioning a Device and Provisioning a Service Group (see this tutorial + https://fiware-tutorials.readthedocs.io/en/latest/iot-agent/index.html#connecting-iot-devices) + +For example, you could use this script: + +``` +//additional services +docker pull ansi/mosquitto +docker pull mongo +docker pull rabbitmq +docker pull fiware/orion + +docker run -d --name mosquitto_container -p 1883:1883 -l mosquitto ansi/mosquitto +docker run -d --name mongo_container -p 27017:27017 -l mongodb mongo +docker run -d --name rabbitmq_container -p 5672:5672 -l rabbitmq rabbitmq +docker run -d --name orion_container --link mongo_container:mongo_container -p 1026:1026 fiware/orion -dbhost mongo_container + +//clone repo +git clone https://github.com/fiqare-secmotic/iotagent-ul.git +cd iotagent-ul/ + +//IoT Agent +npm install +bin/iotagent-ul + +// Provisioning a Service Group +curl -X POST \ + http://localhost:4061/iot/services \ + -H 'Content-Type: application/json' \ + -H 'cache-control: no-cache' \ + -H 'fiware-service: openiot' \ + -H 'fiware-servicepath: /' \ + -d '{ + "services": [ + { + "apikey": "4jggokgpepnvsb2uv4s40d59ovh", + "cbroker": "http://localhost:1026", + "entity_type": "Thing", + "resource": "/iot/d" + } + ] +}' + +// Provisioning a Device +curl -X POST \ + http://localhost:4061/iot/devices \ + -H 'Content-Type: application/json' \ + -H 'cache-control: no-cache' \ + -H 'fiware-service: openiot' \ + -H 'fiware-servicepath: /' \ + -d '{ + "devices": [ + { + "device_id": "motion001", + "entity_name": "urn:ngsd-ld:Motion:001", + "entity_type": "Motion", + "protocol": "PDI-IoTA-UltraLight", + "timezone": "Europe/Berlin", + "attributes": [ + { "object_id": "c", "name":"count", "type":"Integer"} + ], + "static_attributes": [ + {"name":"refStore", "type": "Relationship","value": "urn:ngsi-ld:Store:001"} + ] + } + ] +} +' + +//Finally, go to locahost:7896/api-docs +``` From 8f66e1a31efaf583c99a9625d92709ffe5057c25 Mon Sep 17 00:00:00 2001 From: fiqare-secmotic Date: Mon, 23 Dec 2019 09:39:38 +0100 Subject: [PATCH 04/12] user manual improved --- docs/usermanual.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/usermanual.md b/docs/usermanual.md index 92c35307..54fbe473 100644 --- a/docs/usermanual.md +++ b/docs/usermanual.md @@ -203,8 +203,8 @@ are prefixed with the agent procotol: where `` is the API Key assigned to the service and `` is the ID of the device. -All topis published by the agent (to send a comamnd or to send configuration information) to a device are not prefixed -by the protocol, in this case '/ul', just include apikey and deviceid (e.g: `/FF957A98/MydeviceId/cmd` and +All topics published by the agent (to send a comamnd or to send configuration information) to a device are not prefixed +by the protocol, in this case `/ul`, just include apikey and deviceid (e.g: `/FF957A98/MydeviceId/cmd` and `/FF957A98/MyDeviceId/configuration/values` ). This transport protocol binding is still under development. @@ -558,19 +558,19 @@ In order to run Swagger, you need to execute the IoT Agent If you want to test the HTTP Protocol, two importants points: - you should know that other services are needed (see - https://github.com/telefonicaid/iotagent-ul/blob/master/docs/installationguide.md#installation): + [installation](https://github.com/telefonicaid/iotagent-ul/blob/master/docs/installationguide.md#installation)): - Mosquitto - Mongo - Rabbitmq - Orion -- you need to Provisioning a Device and Provisioning a Service Group (see this tutorial - https://fiware-tutorials.readthedocs.io/en/latest/iot-agent/index.html#connecting-iot-devices) +- you need to Provisioning a Device and Provisioning a Service Group (see this + [tutorial](https://fiware-tutorials.readthedocs.io/en/latest/iot-agent/index.html#connecting-iot-devices)) For example, you could use this script: -``` +```bash //additional services docker pull ansi/mosquitto docker pull mongo From 29983d140c7944c0eedb23db1ace00b2e55e724d Mon Sep 17 00:00:00 2001 From: fiqare-secmotic Date: Mon, 23 Dec 2019 10:43:16 +0100 Subject: [PATCH 05/12] user manual (link IoT Agente) improved --- docs/usermanual.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/usermanual.md b/docs/usermanual.md index 54fbe473..91d5df7e 100644 --- a/docs/usermanual.md +++ b/docs/usermanual.md @@ -548,8 +548,9 @@ npm run prettier:text ### Swagger -In order to run Swagger, you need to execute the IoT Agent -(https://github.com/telefonicaid/iotagent-ul/blob/master/docs/installationguide.md#usage) and then you can access to: +In order to run Swagger, you need to execute the +[IoT Agent](https://github.com/telefonicaid/iotagent-ul/blob/master/docs/installationguide.md#usage) and then you can +access to: ``` :7896/api-docs From 2808c0b11be011d26b2a3c9e0077e1c4a22c056c Mon Sep 17 00:00:00 2001 From: fiqare-secmotic Date: Thu, 9 Jan 2020 08:58:11 +0100 Subject: [PATCH 06/12] User Manual updated --- CHANGES_NEXT_RELEASE | 1 + docs/usermanual.md | 87 +------------------------------------------- 2 files changed, 3 insertions(+), 85 deletions(-) diff --git a/CHANGES_NEXT_RELEASE b/CHANGES_NEXT_RELEASE index 019fca48..48ba341b 100644 --- a/CHANGES_NEXT_RELEASE +++ b/CHANGES_NEXT_RELEASE @@ -1,2 +1,3 @@ - Add: check response obj before use it handling http commands - Upgrade NodeJS version from 8.16.1 to 10.17.0 in Dockerfile due to Node 8 End-of-Life +- Add: /api-docs endpoint providing swagger-based documentation of the HTTP protocol \ No newline at end of file diff --git a/docs/usermanual.md b/docs/usermanual.md index 91d5df7e..86327c0e 100644 --- a/docs/usermanual.md +++ b/docs/usermanual.md @@ -548,92 +548,9 @@ npm run prettier:text ### Swagger -In order to run Swagger, you need to execute the -[IoT Agent](https://github.com/telefonicaid/iotagent-ul/blob/master/docs/installationguide.md#usage) and then you can -access to: +In order to run Swagger, you need to execute the IOT Agent (as explained [here](installationguide.md#usage) and then you +can access to: ``` :7896/api-docs ``` - -If you want to test the HTTP Protocol, two importants points: - -- you should know that other services are needed (see - [installation](https://github.com/telefonicaid/iotagent-ul/blob/master/docs/installationguide.md#installation)): - - - Mosquitto - - Mongo - - Rabbitmq - - Orion - -- you need to Provisioning a Device and Provisioning a Service Group (see this - [tutorial](https://fiware-tutorials.readthedocs.io/en/latest/iot-agent/index.html#connecting-iot-devices)) - -For example, you could use this script: - -```bash -//additional services -docker pull ansi/mosquitto -docker pull mongo -docker pull rabbitmq -docker pull fiware/orion - -docker run -d --name mosquitto_container -p 1883:1883 -l mosquitto ansi/mosquitto -docker run -d --name mongo_container -p 27017:27017 -l mongodb mongo -docker run -d --name rabbitmq_container -p 5672:5672 -l rabbitmq rabbitmq -docker run -d --name orion_container --link mongo_container:mongo_container -p 1026:1026 fiware/orion -dbhost mongo_container - -//clone repo -git clone https://github.com/fiqare-secmotic/iotagent-ul.git -cd iotagent-ul/ - -//IoT Agent -npm install -bin/iotagent-ul - -// Provisioning a Service Group -curl -X POST \ - http://localhost:4061/iot/services \ - -H 'Content-Type: application/json' \ - -H 'cache-control: no-cache' \ - -H 'fiware-service: openiot' \ - -H 'fiware-servicepath: /' \ - -d '{ - "services": [ - { - "apikey": "4jggokgpepnvsb2uv4s40d59ovh", - "cbroker": "http://localhost:1026", - "entity_type": "Thing", - "resource": "/iot/d" - } - ] -}' - -// Provisioning a Device -curl -X POST \ - http://localhost:4061/iot/devices \ - -H 'Content-Type: application/json' \ - -H 'cache-control: no-cache' \ - -H 'fiware-service: openiot' \ - -H 'fiware-servicepath: /' \ - -d '{ - "devices": [ - { - "device_id": "motion001", - "entity_name": "urn:ngsd-ld:Motion:001", - "entity_type": "Motion", - "protocol": "PDI-IoTA-UltraLight", - "timezone": "Europe/Berlin", - "attributes": [ - { "object_id": "c", "name":"count", "type":"Integer"} - ], - "static_attributes": [ - {"name":"refStore", "type": "Relationship","value": "urn:ngsi-ld:Store:001"} - ] - } - ] -} -' - -//Finally, go to locahost:7896/api-docs -``` From 2164dc01ef8494fe5ab99c5da6956cd8fa9b9094 Mon Sep 17 00:00:00 2001 From: fiqare-secmotic Date: Mon, 20 Jan 2020 18:49:05 +0100 Subject: [PATCH 07/12] Swagger documentation version changed --- lib/bindings/HTTPBindings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/bindings/HTTPBindings.js b/lib/bindings/HTTPBindings.js index e3a42bd4..323e6f31 100644 --- a/lib/bindings/HTTPBindings.js +++ b/lib/bindings/HTTPBindings.js @@ -412,7 +412,7 @@ function start(callback) { swaggerDefinition: { info: { title: 'IoT Agent UL2 - HTTP', // Title (required) - version: '1.0.0', // Version (required) + version: '2.0.0', // Version (required) description: 'This documentation explains the POST and GET requests to the route /iot/d' // Description (not required) } }, From 43ed8517f0cf88571d9688db7aa47e7c7fb9ed57 Mon Sep 17 00:00:00 2001 From: fiqare-secmotic Date: Tue, 21 Jan 2020 09:45:00 +0100 Subject: [PATCH 08/12] Swagger documentation description modified --- lib/bindings/HTTPBindings.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/bindings/HTTPBindings.js b/lib/bindings/HTTPBindings.js index 323e6f31..e1a2ba06 100644 --- a/lib/bindings/HTTPBindings.js +++ b/lib/bindings/HTTPBindings.js @@ -413,7 +413,9 @@ function start(callback) { info: { title: 'IoT Agent UL2 - HTTP', // Title (required) version: '2.0.0', // Version (required) - description: 'This documentation explains the POST and GET requests to the route /iot/d' // Description (not required) + description: + 'This documentation explains the POST and GET requests to the route ' + + config.getConfig().iota.defaultResource // Description (not required) } }, apis: ['./lib/bindings/*'] // Path to the API docs From 2c34c9ab082a7e0b43255d21f690ffed0157703d Mon Sep 17 00:00:00 2001 From: fiqare-secmotic Date: Tue, 21 Jan 2020 14:22:39 +0100 Subject: [PATCH 09/12] new improvemet for Swagger documentation --- CHANGES_NEXT_RELEASE | 2 +- docs/usermanual.md | 3 +++ lib/bindings/HTTPBindings.js | 20 +++++++++++++------- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/CHANGES_NEXT_RELEASE b/CHANGES_NEXT_RELEASE index 48ba341b..761af686 100644 --- a/CHANGES_NEXT_RELEASE +++ b/CHANGES_NEXT_RELEASE @@ -1,3 +1,3 @@ - Add: check response obj before use it handling http commands - Upgrade NodeJS version from 8.16.1 to 10.17.0 in Dockerfile due to Node 8 End-of-Life -- Add: /api-docs endpoint providing swagger-based documentation of the HTTP protocol \ No newline at end of file +- Add: /api-docs endpoint providing swagger-based documentation of the HTTP southbound interface \ No newline at end of file diff --git a/docs/usermanual.md b/docs/usermanual.md index 86327c0e..0adcbda8 100644 --- a/docs/usermanual.md +++ b/docs/usermanual.md @@ -554,3 +554,6 @@ can access to: ``` :7896/api-docs ``` + +The swagger documentation provided at /api-docs covers the HTTP southbound interface of the agent. The northbound HTTP +interface is not covered. diff --git a/lib/bindings/HTTPBindings.js b/lib/bindings/HTTPBindings.js index e1a2ba06..5309ce26 100644 --- a/lib/bindings/HTTPBindings.js +++ b/lib/bindings/HTTPBindings.js @@ -44,7 +44,8 @@ var http = require('http'), }, swaggerUi = require('swagger-ui-express'), swaggerJSDoc = require('swagger-jsdoc'), - transport = 'HTTP'; + transport = 'HTTP', + packageJSON = require('../../package.json'); function handleError(error, req, res, next) { var code = 500; @@ -412,7 +413,7 @@ function start(callback) { swaggerDefinition: { info: { title: 'IoT Agent UL2 - HTTP', // Title (required) - version: '2.0.0', // Version (required) + version: packageJSON.version, // Version (required) description: 'This documentation explains the POST and GET requests to the route ' + config.getConfig().iota.defaultResource // Description (not required) @@ -437,7 +438,8 @@ function start(callback) { * tags: * - "iot/d" * summary: "Report new measures" - * description: "A device can report new measures to the IoT Platform using an HTTP GET request to the /iot/d path" + * description: "A device can report new measures to the + * IoT Platform using an HTTP GET request to the /iot/d path" * consumes: * - "application/json" * produces: @@ -455,7 +457,8 @@ function start(callback) { * required: true * - in: "query" * name: "d" - * description: "Ultralight 2.0 payload. Payloads for GET requests should not contain multiple measure groups" + * description: "Ultralight 2.0 payload. + * Payloads for GET requests should not contain multiple measure groups" * type: string * required: true * - in: "query" @@ -471,7 +474,8 @@ function start(callback) { * DEVICE_GROUP_NOT_FOUND: * description: "Could not find device group" * PARSE_ERROR: - * description: 'There was a syntax error in the Ultralight request: Unknown error parsing Ultralight 2.0: "syntax_error"' + * description: 'There was a syntax error in the Ultralight request: + * Unknown error parsing Ultralight 2.0: "syntax_error"' */ httpBindingServer.router.get( @@ -513,7 +517,8 @@ function start(callback) { * required: false * - in: body * name: "Sensors" - * description: 'Sensors Measurements. The different sensor values ​​are sent in IoT Agent format. For example: "c|1"' + * description: 'Sensors Measurements. + * The different sensor values ​​are sent in IoT Agent format. For example: "c|1"' * type: string * required: true * responses: @@ -524,7 +529,8 @@ function start(callback) { * DEVICE_GROUP_NOT_FOUND: * description: "Could not find device group" * PARSE_ERROR: - * description: 'There was a syntax error in the Ultralight request: Unknown error parsing Ultralight 2.0: "syntax_error"' + * description: 'There was a syntax error in the + * Ultralight request: Unknown error parsing Ultralight 2.0: "syntax_error"' */ httpBindingServer.router.post( From f6a68eea062e638864e85a0cf25254393a32c400 Mon Sep 17 00:00:00 2001 From: fiqare-secmotic Date: Tue, 21 Jan 2020 14:26:03 +0100 Subject: [PATCH 10/12] change branch to fiqare-secmotic-swagger for travis --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 06c77ef8..3c14451a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,7 +9,7 @@ addons: branches: only: - - master + - fiqare-secmotic-swagger services: - rabbitmq From 68b791f2eb38bcdd639bbb9dca714325a5babccd Mon Sep 17 00:00:00 2001 From: fiqare-secmotic Date: Tue, 21 Jan 2020 14:48:47 +0100 Subject: [PATCH 11/12] updated to previous version --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 3c14451a..06c77ef8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,7 +9,7 @@ addons: branches: only: - - fiqare-secmotic-swagger + - master services: - rabbitmq From 83450903a8c2896246a015ebe22c3f59469d3e7d Mon Sep 17 00:00:00 2001 From: fiqare-secmotic Date: Fri, 24 Jan 2020 16:55:04 +0100 Subject: [PATCH 12/12] term IoT fixed --- docs/usermanual.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usermanual.md b/docs/usermanual.md index 0adcbda8..f30a16c3 100644 --- a/docs/usermanual.md +++ b/docs/usermanual.md @@ -548,7 +548,7 @@ npm run prettier:text ### Swagger -In order to run Swagger, you need to execute the IOT Agent (as explained [here](installationguide.md#usage) and then you +In order to run Swagger, you need to execute the IoT Agent (as explained [here](installationguide.md#usage) and then you can access to: ```