05. IoT & Embedded
Sisteme IoT end-to-end: device-side pe Raspberry Pi cu suport multi-protocol (LoRaWAN, BLE, Zigbee, WiFi/MQTT, Modbus), cloud aggregator multi-tenant, notificări multi-canal pluggable.
5.1 Sistem IoT monitorizare senzori multi-protocol + cloud aggregator multi-tenant
Sector: IoT / Smart monitoring Format livrare: Pi-side service (headless + web local) + cloud companion (FastAPI + React 19) + Telegram Mini App
Provocare
Operator/integrator de senzori wireless (temperatură + umiditate) pentru monitorizare:
- multiple Pi-uri în diverse locații (ferme, depozite, camere serverelor)
- agregare centralizată de date pentru dashboards multi-locație
- alerte realtime pe pragurile depășite (temperatura prea mare, umiditate scăzută)
- canale de notificare flexibile per organizație (Telegram, Email, SMS, Push)
- comenzi remote către Pi (restart sensor, schimbare prag, OTA)
- multi-tenant (un operator poate avea multe organizații-clienti)
Provocare tehnică: integrarea simultană a mai multor protocoluri radio (LoRaWAN, BLE, Zigbee, WiFi/MQTT, Modbus) — fiecare cu un stack low-level diferit care necesită event-driven processing și abstractizare uniformă pentru servicii de business.
Soluție livrată
Componenta Pi-side (Python 3.11+) cu protocol adapters pluggable:
- LoRaWAN: gateway integration cu network server (TTN sau privat) + decodare payload custom
- BLE: scanner asincron prin bleak pentru advertising data (ex. senzori Minew MST01)
- Zigbee: ControllerApplication via zigpy/bellows pentru sensori mesh
- WiFi: broker MQTT (paho-mqtt sau Mosquitto) pentru senzori ESP32
- Modbus/RS-485: pluggable adapter pentru sensori industriali
- aiohttp pentru web dashboard local + serviciu headless
- Clean Architecture completă: core (domain) → services (business) → adapters (infrastructure)
- EventBus typed async pentru decuplare servicii (SensorReadingEvent → SensorService → AlertService → NotificationDispatcher)
- Dependency Injection cu ServiceContainer (wire-up explicit într-un singur loc)
- Pydantic v2 pentru validare end-to-end
- Click CLI pentru comenzi (web, headless, debug)
- SQLite pentru storage local
- NotificationChannel protocol pluggable — orice canal nou (Telegram/Email/SMS/Push/X) se adaugă fără modificări în core
Componenta cloud (HiveCloud — FastAPI modular monolith):
- SQLAlchemy async + asyncpg pentru PostgreSQL
- Alembic pentru migrații
- ARQ + Redis pentru background jobs (sync, alerts, aggregation)
- argon2-cffi pentru hashing parole modern
- pyotp + qrcode pentru 2FA TOTP
- aiosmtplib pentru email transactional
- JWT pentru users + API Keys pentru Pi devices (auth dual-layer)
- Clean Architecture cu strict layering (api/pi_api → auth → services → core → adapters)
Frontend dashboard (React 19 + Vite 7):
- TanStack Query pentru server state
- shadcn/ui (radix-ui) + Tailwind 4 pentru componente
- Recharts pentru grafice senzori (timeseries)
- React Router 7 pentru navigare
- Zustand pentru client state minimal
Telegram Mini App separat (Vite + TypeScript) pentru monitorizare on-the-go.
Stack tehnologic
Pi-side: Python 3.11+, protocol adapters multi-radio (LoRaWAN gateway, bleak pentru BLE, zigpy/bellows pentru Zigbee, paho-mqtt pentru WiFi, Modbus pluggable), aiohttp, Pydantic v2, Click CLI, uv, SQLite, Docker Cloud backend: FastAPI, Python 3.12+, SQLAlchemy async, asyncpg, Alembic, Pydantic v2, Redis + ARQ, argon2-cffi, pyotp + qrcode (2FA), aiosmtplib Cloud frontend: React 19, Vite 7, TanStack Query, shadcn/ui, Tailwind 4, React Router 7, Recharts, Zustand Telegram Mini App: Vite + TypeScript Notificări: Telegram Bot API, Email (SMTP), SMS gateway, Firebase Push (extensibil)
Livrabile cheie
- Sistem IoT end-to-end funcțional pe Pi 5 cu suport simultan multi-protocol (LoRaWAN + BLE + Zigbee + WiFi)
- Cloud aggregator multi-tenant cu dashboard modern React 19
- 2FA TOTP cu QR enrollment
- API keys pentru autentificare device-to-cloud (separate de JWT users)
- Notification channel pluggable (poate adăuga orice canal nou fără modificări în core)
- Telegram Mini App pentru consultare rapidă din mobile
- Documentație de design completă (55 task-uri în 10 faze, TDD steps explicite)
5.2 BLE scanner pentru senzori LoRaWAN cu decodare protocol custom
Sector: IoT / BLE & LoRaWAN Format livrare: Python script + documentație protocol
Provocare
Decodare advertising data BLE de la senzori LoRaWAN proprietari (Minew MST01) pentru:
- temperatură, umiditate, baterie
- scan continuu sau punctual
- timeout configurabil
Soluție livrată
Script Python single-file (scanner.py) cu decodare manuală a payload-ului BLE conform documentației producătorului. Suportă scan continuu, single scan, și scan cu durată configurabilă.
Stack tehnologic
Python 3, bleak (BLE async), parsare manuală binary payload conform spec-ului senzor.
Pattern-uri arhitecturale IoT demonstrate
- Clean Architecture cu strict layering (api → auth → services → core → adapters) pe ambele componente (Pi + cloud)
- EventBus typed async pentru decuplare componente fără cuplaj direct
- NotificationChannel protocol pluggable (open/closed principle aplicat strict)
- Dual-layer auth (JWT pentru users + API Keys pentru devices) — separare clară user vs device
- Dependency Injection explicit (ServiceContainer wire-up într-un singur loc, fără magic)
- 2FA TOTP cu pyotp + qrcode pentru enrollment user-friendly
- Modular monolith cloud (nu microservicii prematur — încă un developer poate înțelege întreg sistemul)
- Companion architecture: Pi-side autonom + cloud aggregator pentru multi-locație
- Telegram Mini App ca al doilea client pentru flexibilitate mobile fără App Store overhead
- Decodare protocol binary pentru hardware proprietar (BLE advertising LoRaWAN)