python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
cp .env.example .env
docker compose up -dSQLite is the fallback when DATABASE_URL is not set.
For PostgreSQL:
export DATABASE_URL="postgres://labtelemetry:labtelemetry_dev@localhost:5432/labtelemetry"
.venv/bin/python labtelemetry/manage.py migrate.venv/bin/python labtelemetry/manage.py runserverOpen:
- Dashboard:
http://127.0.0.1:8000/ - Admin:
http://127.0.0.1:8000/admin/ - Jaeger:
http://127.0.0.1:16686
.venv/bin/python labtelemetry/manage.py simulate_telemetry --once --seed 42 --sensors 6
.venv/bin/python labtelemetry/manage.py simulate_telemetry --seed 42 --iterations 50
.venv/bin/python labtelemetry/manage.py ingest_telemetry --source simulator --onceField sources require an explicit tag-to-point mapping — a positional register or node index is not a sensor primary key, so the command refuses to start without it:
# Modbus: register 0 feeds sensor 1; the PLC publishes 740, the pH is 7.40
.venv/bin/python labtelemetry/manage.py ingest_telemetry --source modbus \
--modbus-host 192.168.0.10 --modbus-register "0:1:0.01"
# OPC-UA: node ns=2;i=101 feeds sensor 1
.venv/bin/python labtelemetry/manage.py ingest_telemetry --source opcua \
--opcua-url opc.tcp://plc.local:4840 --opcua-node "ns=2;i=101:1"- summary cards
- source health
- recent readings
- active alerts
- sensor list
- a time-series chart rendered with Chart.js
Tracing is disabled by default:
OTEL_ENABLED=FalseTo validate traces locally:
export DATABASE_URL="postgres://labtelemetry:labtelemetry_dev@localhost:5432/labtelemetry"
OTEL_ENABLED=True .venv/bin/python labtelemetry/manage.py runserver 127.0.0.1:8000
curl -s http://127.0.0.1:8000/api/summary/
curl -s "http://localhost:16686/api/traces?service=labtelemetry&limit=5".venv/bin/python labtelemetry/manage.py check
.venv/bin/python labtelemetry/manage.py makemigrations --check --dry-run
.venv/bin/python labtelemetry/manage.py test telemetry --verbosity=1For a full parallel-terminal walkthrough, use docs/manual_validacao_ponta_a_ponta.md.