Este estudo foi feito usando WSL2 e Docker rodando em Windows 11
-
Crie o diretório do projeto
mkdir estudo-iot cd estudo-iot
-
Crie o arquivo
docker-compose
nano docker-compose.yml
-
Faça alterações se julgar necessário
version: '3.0' services: mytb: restart: always image: "thingsboard/tb-postgres" ports: - "8080:9090" - "1883:1883" - "7070:7070" - "5683-5688:5683-5688/udp" environment: TB_QUEUE_TYPE: in-memory volumes: - ./.mytb-data:/data - ./.mytb-logs:/var/log/thingsboard mkdir -p ./.mytb-data && chown -R 799:799 ./.mytb-data mkdir -p ./.mytb-logs && chown -R 799:799 ./.mytb-logs
-
Coloque os containers no "ar"
Execute os comandos abaixo e aguarde até que os serviços estejam rodando, pode demorar alguns minutos para serem inicializados
docker compose up -d docker compose logs -f mytb
-
acesse a aplicação
Com os containers devidamente utilize seu navegador para acessar
http://localhost:8080
acesse usando as credenciais:- System Administrator: sysadmin@thingsboard.org / sysadmin
- Tenant Administrator: tenant@thingsboard.org / tenant
- Customer User: customer@thingsboard.org / customer
-
crie um ambiente virtual
python -m venv .venv .venv/Scripts/activate
-
instale as dependências
python -m pip install -U pip pip install -r requirements.txt
-
crie o arquivo
dispositivo.py
nano dispositivo.py
""" Este script simula um dispositivo IoT enviando requisições HTTP POST para aplicação ThingsBoard """ # Imports import json import random import time from os import environ import httpx from dotenv import load_dotenv load_dotenv() # Funções def temperature(): return round(random.uniform(23.7, 32.4), 2) def humidity(): return round(random.uniform(50.7, 100.4), 2) def send_message(): temperatura = temperature() umidade = humidity() body = {'temperatura': temperatura, 'umidade': umidade} response = httpx.post(data=json.dumps(body), headers=headers, url=url) print(f'\nTemperatura: {temperatura}°C') print(f'Umidade: {umidade}%') print(f'Status Code: {response.status_code}', response.text) # Variáveis ACCESS_TOKEN = environ.get('ACCESS_TOKEN') BASE_URL = environ.get('BASE_URL') url = f'{BASE_URL}/api/v1/{ACCESS_TOKEN}/telemetry' print(url) headers = {'ContentType': 'application/json'} if __name__ == '__main__': while True: send_message() time.sleep(5)
-
Crie o arquivo .env na pasta raiz do projeto
nano .env
-
Altere o valor do ACCESS_TOKEN de acordo com a configuração do dispositivo criado em
http://localhost:8080/entities/devices
ACCESS_TOKEN=abc123 BASE_URL=http://localhost:8080
python dispositivo.py