O prjeto consite de um protótipo de caixa de supermercado inteligente usando RFID. O objetivo é melhorar a experiência do cliente, reduzir os tempos de espera e otimizar as operações do supermercado. O sistema deve ser implementado usando uma arquitetura de Nuvem IoT centralizada, contêineres Docker, API REST e Raspberry Pi. Além da interação com clientes através dos caixas, devem estar presentes também funções adiministrativas para gerenciamentos dos caixas, das compras e de estoque.
Ubuntu:
sudo apt install build-essential gdb cmake
Compilando:
git clone https://github.com/DanielSRS/smarket
cd smarket
mkdir build
cd build
cmake ..
cmake --build .
Executando servidor:
cd smarket/build
./src/Apps/Api/Api
Executando leitor:
cd smarket/build
./src/Apps/SensorManager/SensorManager
Executando Testes:
cd smarket/build
ctest
Altere o arquivo src/libs/CMakeLists.txt
- add_subdirectory(MercuryApi)
+
Altere o arquivo src/util/ReadTags/CMakeLists.txt
- target_link_libraries(ReadTags Cstrings Map ReadRFIDTags)
+ target_link_libraries(ReadTags Cstrings Map)
Altere o arquivo src/util/ReadTags/ReadTags.c
Map* readTagsWithArgs(char *tmr, char *antena, Map * result) {
char *args[4];
args[0] = "readRFID";
args[1] = tmr;
args[2] = "--ant";
args[3] = antena;
- readRFIDTags(4, args, result);
+ mockedRead(4, args, result);
return result;
}
Faz a leitura das tags RFID
(sem corpo na requisição)
formato de resposta:
{
"success": "true",
"data": {
"0": "rfidValue0",
"1": "rfidValue1",
"2": "rfidValue2",
"3": "rfidValue3",
"4": "rfidValue4",
"length": "5"
},
"message": "Tags read with success"
}
Lista todos os caixas
(sem corpo na requisição)
formato de resposta:
{
"sucess": "true",
"data": {
"Cashiers": {
"length": "1",
"0": {
"CaixaID": "CAIXA01",
"Nome": "Caixa 01",
"Descricao": "Caixa da Maria"
}
}
},
"message": "Lista de caixas retornado com sucesso"
}
Cria novo caixa
corpo da requisição:
{
"CaixaID": "CAIXA01",
"Nome": "Caixa 01",
"Descricao": "Caixa da Maria"
}
formato de resposta:
{
"sucess": "true",
"data": {
"Cashiers": {
"length": "1",
"0": {
"CaixaID": "CAIXA01",
"Nome": "Caixa 01",
"Descricao": "Caixa da Maria"
}
}
},
"message": "Lista de caixas retornado com sucesso"
}
Lista as compras feitas no caixa
corpo da requisição:
{
"CaixaID": "CAIXA01"
}
formato de resposta:
{
"sucess": "true",
"data": {
"Purchases": {
"0": {
"CompraID": "0",
"CaixaID": "CAIXA01",
"DataHoraInicio": 1694713313.000000,
"DataHoraFim": 0.000000,
"TotalCompra": -1.000000
},
"length": "1"
}
},
"message": "Lista de todas as compras retornadas com sucesso"
}
Lista todas as compras
(não tem corpo na requisição)
formato de resposta:
{
"sucess": "true",
"data": {
"Purchases": {
"length": "1",
"0": {
"CompraID": "0",
"CaixaID": "CAIXA01",
"DataHoraInicio": 1694717366.000000,
"DataHoraFim": 0.000000,
"TotalCompra": -1.000000
}
}
},
"message": "Lista de todas as compras retornadas com sucesso"
}
Lista todos os produtos
(não tem corpo na requisição)
formato de resposta:
{
"sucess": "true",
"data": {
"Produtos": {
"length": "0",
"0": {
"ProdutoID": "produto1",
"NomeProduto": "NomeProduto",
"Descricao": "Descricao",
"Preco": 72.790000,
"QuantidadeEmEstoque": 5.000000
}
}
},
"message": "Produtos retornadas com sucesso"
}
Cria novo produto
corpo da requisição
{
"ProdutoID": "produto1",
"NomeProduto": "NomeProduto",
"Descricao": "Descricao",
"Preco": "72.79",
"QuantidadeEmEstoque": "5"
}
formato de resposta:
{
"sucess": "true",
"data": {
"product": {
"ProdutoID": "produto1",
"NomeProduto": "NomeProduto",
"Descricao": "Descricao",
"Preco": 72.790000,
"QuantidadeEmEstoque": 5.000000
}
},
"message": "Produto criado com sucesso"
}
Inicia uma nova compra
corpo da requisição
{
"CaixaID": "CAIXA01"
}
formato de resposta:
{
"sucess": "true",
"data": {
"purchase": {
"CompraID": "0",
"CaixaID": "CAIXA01",
"DataHoraInicio": 1694717366.000000,
"DataHoraFim": 0.000000,
"TotalCompra": -1.000000
}
},
"message": "Compra iniciada com sucesso"
}
Adiciona produtos a uma compra
corpo da requisição
{
"CompraID": "0",
"itens": {
"length": "2",
"0": "produto1",
"1": "produto3"
}
}
formato de resposta:
{
"sucess": "true",
"data": {
"itens": {
"0": {
"ItemCompraID": "0produto1",
"CompraID": "0",
"ProdutoID": "produto1",
"Quantidade": 1.000000,
"PrecoUnitario": 72.790000,
"Produto": {
"ProdutoID": "produto1",
"NomeProduto": "NomeProduto",
"Descricao": "Descricao",
"Preco": 72.790000,
"QuantidadeEmEstoque": 5.000000
}
},
"1": {
"ItemCompraID": "0produto3",
"CompraID": "0",
"ProdutoID": "produto3",
"Quantidade": 1.000000,
"PrecoUnitario": 92.790000,
"Produto": {
"ProdutoID": "produto3",
"NomeProduto": "NomeProduto",
"Descricao": "Descricao",
"Preco": 92.790000,
"QuantidadeEmEstoque": 5.000000
}
}
},
"valorTotal": 165.580000
},
"message": "Compra atualizada com sucesso"
}
Conhecimento nescessario:
- C (linguagem de programação)
- opaque pointers
- alocação de memória
- estruturas de dados.
- Arvore
- Lista encadeada
- tabela hash
- matrizes
- sockets (comunicação em rede)
- Protocolos de rede
- Protocolo TCP/IP
- Protocolo http
- Aplicaçãoes muitprocessos
- comando fork no linux
- make (pra fazer o build do projeto)
- cmake (configuração de bulld do projeto)