Application Services
The Automated Checkout reference implementation utilizes two application services that are used to consume event data from the EdgeX framework.
List of application services
- Controller Board Status – Handles events coming from the controller board device service.
- Vending – The main business logic for the Automated Checkout application. This service handles events directly from the card reader device service and inference engine as well as coordinates data between each of the microservices.
Controller board status application service
Controller board status application service description
The as-controller-board-status
application service checks the status of the controller board for changes in the state of the door, lock, temperature, and humidity, and triggers notifications if the average temperature and humidity are outside the desired ranges.
Controller board status application service APIs
This service exposes a few REST API endpoints that are either intended to be interacted with via EdgeX's core services or directly.
All exposed HTTP responses are of the format:
{
"content": "",
"contentType": "json|string|<any>",
"statusCode": 200,
"error": false
}
This means that you must parse the content
field if the contentType
field is json
.
This section includes documentation on each API endpoint exposed by this service. Depending on how you've chosen to deploy the service, you may use localhost
, as-controller-board-status
or some other hostname. This document assumes localhost
is used.
GET
: /status
The GET
call will return the current controller board status information. This information can be used by other services trying to get metrics from the controller board or by a test suite to validate the controller board behavior.
Simple usage example:
curl -X GET http://localhost:48094/status
Sample response:
{
"content": "{\"lock1_status\": 0,\"lock2_status\": 0,\"door_closed\": false,\"temperature\": 30.1,\"humidity\": 26.2,\"minTemperatureStatus\": true,\"maxTemperatureStatus\": false}",
"contentType": "json",
"statusCode": 200,
"error": false
}
If there is an error marshaling the controller board's state into a JSON response, the error will be an HTTP 500 internal server error in the expected format:
{
"content": "Failed to serialize the controller board's current state.",
"contentType": "string",
"statusCode": 500,
"error": true
}
Vending application service
Vending application service description
The as-vending
application service is the central microservice that contains the business logic to handle the following:
- Coordinates unlocking the cooler upon authentication
- Requests inference snap shots (an inventory delta since the cooler was last closed)
- Updates the inventory and ledger
- Displays transaction data to the LCD
This service also implements "maintenance mode" to manage error handling and recovery due to faulty hardware, temperatures outside the desired ranges, or any other actions that disrupt the normal workflow of the vending machine. The functions that execute this logic can be found in as-vending/functions/output.go
Vending application service APIs
POST
: /boardStatus
The POST
call will inform the application service on the current state of the instrumentation (temperature, door, lock, humidity) on the controller board so that it can handle the business logic associated with those states. The events are typically posted from the controller board status application service. It is important to highlight that the REST API response will not necessarily be a holistic response of all of the actions taken place by the as-vending
service. Please review the service's logs in order to gain a complete view of all changes that occur when interacting with this API endpoint.
Simple usage example:
curl -X POST -d '{"lock1_status": 0,"lock2_status": 0,"door_closed": false,"temperature": 30.1,"humidity": 26.2,"minTemperatureStatus": true,"maxTemperatureStatus": false}' http://localhost:48099/boardStatus
A POST
without any new information in the body will return the result:
Success
Response Status Code 200 OK. Board status was read
If the minTemperatureStatus
or maxTemperatureStatus
values are set to true
, maintenance mode will be set and the HTTP API response may be:
Success
Response Status Code 200 OK. Temperature status received and maintenance mode was set
If the door_closed
property is different than what as-vending
currently believes it is, this response may be returned:
Success
Response Status Code 200 OK. Door closed change event was received
POST
: /resetDoorLock
The POST
call will simply reset the Automated Checkout's internal vendingState
. This API endpoint has no logic to process any input data - it just responds to a simple POST
.
Simple usage example:
curl -X POST http://localhost:48099/resetDoorLock
The response will always be 200 OK
:
reset the door lock
GET
: /maintenanceMode
The GET
call will simply return the boolean state that represents whether or not the vending state is in maintenance mode.
Simple usage example:
curl -X GET http://localhost:48099/maintenanceMode
The response will always be 200 OK
:
{
"content": "{\"maintenanceMode\":false}",
"contentType": "json",
"statusCode": 200,
"error": false
}