{"id":24119000,"url":"https://github.com/dougfsilva/myiot-backend","last_synced_at":"2026-04-07T16:31:35.244Z","repository":{"id":61175359,"uuid":"539985102","full_name":"DougFSilva/MyIOT-backend","owner":"DougFSilva","description":"O projeto é uma plataforma na qual o usuário cria uma conta, se conecta e cadastra dispositivos que poderão enviar dados para um Broker MQTT e receber comandos do tipo analógico e digital. A API então será responsável por receber os dados do Broker e por salvar as informações no banco de dados, e também oferecer uma interface para envio de comandos para os dispositivos. ","archived":false,"fork":false,"pushed_at":"2023-01-13T13:44:33.000Z","size":2160,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-28T21:07:33.992Z","etag":null,"topics":["java","mongodb","mqtt","mvc","spring-boot","spring-security","websocket"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DougFSilva.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-09-22T13:03:30.000Z","updated_at":"2022-09-22T13:31:45.000Z","dependencies_parsed_at":"2023-02-09T15:46:07.384Z","dependency_job_id":null,"html_url":"https://github.com/DougFSilva/MyIOT-backend","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/DougFSilva/MyIOT-backend","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DougFSilva%2FMyIOT-backend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DougFSilva%2FMyIOT-backend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DougFSilva%2FMyIOT-backend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DougFSilva%2FMyIOT-backend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DougFSilva","download_url":"https://codeload.github.com/DougFSilva/MyIOT-backend/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DougFSilva%2FMyIOT-backend/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31520426,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"ssl_error","status_checked_at":"2026-04-07T16:28:06.951Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","mongodb","mqtt","mvc","spring-boot","spring-security","websocket"],"created_at":"2025-01-11T09:38:23.364Z","updated_at":"2026-04-07T16:31:35.219Z","avatar_url":"https://github.com/DougFSilva.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MyIOT-backend\nO projeto é uma plataforma para controle e medição de dispositivios IOT, onde o usuário logado pode cadastrar dispositivos privados do tipo analógico, digital ou dispositivo de medição. Para os dispositivos do tipo analógico ou discreto é possível enviar comandos e receber a atualização do estado ou valor em tempo real via websocket, persistindo-os no banco de dados. Para os dispositivos de medição os valores medidos são persistidos e enviados também via websocket para visualização em tempo real por meio de gráfico e tabela.\n\nNa pasta frontend se encontra uma aplicação de frontend desenvolvida com Angular. Veja a seguir algumas imagens:\n\nExemplo de tela de um dispositivos de medição ![tela de dispositivo de medição](./images/exemplo-tela-medicao.jpg)\n\nExemplo de tela de cadastro de um dispositivo de medição ![tela e cadastro de um dispositivo de medição](./images/exemplo-tela-medicao-cadastro.jpg)\n\nExemplo de tela de um dispositivo discreto ![tela de dispositivo discreto](./images/exemplo-tela-discreto.jpg)\n\nExemplo de tela de um dispositivo analógico ![tela de dispositivo analógico](./images/exemplo-tela-analogico.jpg)\n\nTambém foi criada uma biblioteca em C++ para facilitar a utilização com arduino, ESP8266 ou ESP32. Acesse [Biblioteca para arduino/ESP](https://github.com/DougFSilva/MyIOT-arduino-esp)\n\nRepositório para o código do frontend em Angular. Acesse [MyIOT-frontend](https://github.com/DougFSilva/MyIOT-frontend)\n\n# 🚀 Começando\nEssas instruções permitiram que você instale e utilize a API em sua máquina desejada\n\n## ⚙️ **Configurando e executando**\n\n## 1. Configurar usuário e senha do Mosquitto dynamic security\n\nBaixe a pasta completa do projeto, abra pasta mosquitto e o arquivo Dockerfile. Neste arquivo, configure como desejar as variáveis ADMIN_USERNAME e ADMIN_PASS.\n\n## 2. Configurar as variáveis de ambiente\n\nAgora, abra o arquivo docker-compose.yml na raiz do projeto e configure as seguintes variáveis de ambiente:\n\n- **MONGO_INITDB_ROOT_USERNAME** - Usuário admin do mongo\n- **MONGO_INITDB_ROOT_PASSWORD** - Senha do usuário admin do mongo\n- **MONGODB_USERNAME** - Usuário admin do mongo\n- **MONGODB_PASSWORD** - Senha do usuário admin do mongo\n\n\u003cspan style=\"color:orange\"\u003e**Obs.:** As variáveis MONGO_INITDB_ROOT_USERNAME e MONGODB_USERNAME devem ser iguais, e as variáveis MONGO_INITDB_ROOT_PASSWORD e MONGODB_PASSWORD também devem ser iguais, pois se tratam do mesmo usuário e senha, porém em containers diferentes:\u003c/span\u003e\n- **MONGODB_DATABASE** - Nome do database\n- **USER_MASTER_PASSWORD** - Senha do usuário master do sistema\n- **USER_MASTER_MQTTPASSWORD** - Senha do client gerado no broker mqtt para o usuário master do sistema\n- **MQTT_SYSTEM_PASSWORD** - Senha do client mqtt para que o sistema acesse o broker mosquitto\n- **MQTT_DYNSEC_USERNAME** - Usuário admin do dynamic security do broker mosquitto. Deve ser o mesmo configurado no Dockerfile do passo 1\n- **MQTT_DYNSEC_PASSWORD** - Senha do usuário admin do dynamic security do broker mosquitto. Deve ser a mesma configurada no Dockerfile do passo 1\n- **JWT_SECRET** - String secreta para geração do token JWT\n\n## 3. Executar o Docker Compose\n\nCom o terminal aberto na pasta raiz do projeto execute o Docker Compose. \n```\ndocker compose up\n```\nConcluída toda a instalação a aplicação ficará disponível no endereço e porta configurados do docker-compose.\n\n## 🔧 **Entendendo e utilizando**\n\n## 1. Veja a documentação\n\nCom a API em execução, acesse o endpoint **\"/swagger-ui/index.html\"** e acesse a documentação com todos os endpoits disponíveis e suas descrições.\n\n## 2. Informações gerais\n* Ao criar um usuário, o mesmo só poderá criar dispositivos caso tenha sido aprovado. A aprovação é realizada pelo usuário **Master** criado automaticamente ao iniciar a aplicação, ou por qualquer usuário de perfil **ADMIN**. Por padrão todo usuário criado possui um perfim **SILVER_USER**, e a alteração do perfil para **ADMIN** ou **GOLD_USER** somente pode seer realizada pelo usuário **Master** ou qualquer outro usuário de perfil **ADMIN**. Lembrando que as credenciais do usuário **Master** foram configuradas no item **2. Configurar as variáveis de ambiente**. Automaticamente ao ser criado e aprovado, será gerado uma senha para acesso ao Broker Mosquitto. Para verificar a senha o usuário deve fazer login no sistema e e acessar o endpoint **\"/user\"** com o verbo **GET**\n\n* Cada usuário pode cadastrar uma certa quantidade de dispositivos, dependendo de seu perfil, sendo:\n\n   - **Dispositivo de controle analógico**: **ADMIN**(25), **GOLD_USER**(12), **SILVER_USER**(6)  \n\n   - **Dispositivo de sinal discreto**: **ADMIN**(25), **GOLD_USER**(12), **SILVER_USER**(6)  \n\n   - **Dispositivo de medição**: **ADMIN**(20), **GOLD_USER**(8), **SILVER_USER**(4)  \n\n* Ao cadastrar um dispositivo, será gerado automaticamente uma permissão no Broker Mosquitto para que o usuário acesse o tópico do dispositivo. Somente o usuário tem acesso a esse tópico. Os tópicos seguem o seguinte padrão:\n    \n    - **iot/*\u003c.tipo de dispositivo.\u003e*/*\u003c.id do dispositivo.\u003e*** - Permite publicar e se inscrever, porém não persiste no banco de dados\n\n    - **iot/*\u003c.tipo de dispositivo.\u003e*/*\u003c.id do dispositivo.\u003e*/ persist** - Permite publicar e se inscrever e persiste no banco de dados\n\n    Onde o **tipo do dispositivo** pode ser:\n    \n    - **AnalogOutputDevice** - Para dispositivo de comando analógico\n    - **DiscreteDevice** - Para dispositivos de sinais discretos\n    - **MeasuringDevice** - Para dispositivos de medição\n\n\n    E o **id do dispositivo** é número de identificação do dispositivo, que pode ser obtido nos endpoints **/analog-output-device/all**, **/discrete-device/all** e **/measuring-device/all**\n\n    Exemplo de tópico para um dispositivo de sinal discreto, com id 112d54s6aa8s95s48s:\n\n    **iot/DiscreteDevice/112d54s6aa8s95s48s** \n\n     **iot/DiscreteDevice/112d54s6aa8s95s48s/persist**\n\n* Para acessar a aplicação via websocket é preciso fazer uma conexão SocketJs no endpoint **\"/myiot-websocket/?token=*\u003c.token JWT.\u003e*\"**, onde \u003c.token JWT.\u003e é o token JWT recebido ao autenticar. Então se inscrever no tópico referente ao dispositivo a ser acessado, da seguinte forma:\n\n    **/user/queue/message/*\u003c.Id do dispositivo.\u003e***\n\n\n## 🛠️Construído com\n\n* Spring boot\n* Spring Security\n* Json web token JWT\n* MongoDb\n* Websocket\n* Docker\n* Docker compose\n* Eclipse Mosquitto\n* OpenAPI\n---\n## ✒️ Autor\n* Douglas Ferreira da Silva\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdougfsilva%2Fmyiot-backend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdougfsilva%2Fmyiot-backend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdougfsilva%2Fmyiot-backend/lists"}