Proyecto IoT Edge para ingesta MQTT, normalizacion de payload y decision semantica local antes de subir a Azure IoT Hub.
Si quieres ponerlo en marcha sin perderte, sigue este orden:
- Revisa prerequisitos y prepara secretos locales.
- Ejecuta tests unitarios para validar contrato y reglas.
- Despliega o redepliega el runtime Edge.
- Verifica telemetria y routing en IoT Hub.
- (Opcional) Activa extension cloud analytics y Stream Analytics.
- Azure CLI autenticado (
az login). - Permisos sobre suscripcion, resource group e IoT Hub destino.
- Docker disponible para build de modulos.
- Dispositivo Edge registrado en IoT Hub.
- Secrets locales sincronizados desde plantilla.
./scripts/sync-local-secrets.ps1python -m unittest discover -s tests -v./scripts/redeploy-edge.ps1 -SubscriptionId "<SUBSCRIPTION_ID>" -ResourceGroup "<RESOURCE_GROUP>" -IoTHubName "<IOTHUB_NAME>" -DeviceId "<EDGE_DEVICE_ID>" -AcrName "<ACR_NAME>"- Usa
az iot hub monitor-eventspara validar trafico en endpointevents. - Si no ves eventos y solo hay rutas a endpoints custom, crea una ruta temporal de debug a
events, valida y retirala.
- docs/01_vision-y-alcance.md
- docs/02_arquitectura-y-flujo.md
- docs/03_configuracion-local-y-secrets.md
- docs/04_contrato-de-datos.md
- docs/05_eventos-y-reglas-del-decider.md
- docs/06_despliegue-edge-e-iothub-routing.md
- docs/07_operacion-validacion-y-troubleshooting.md
- docs/08_hardware-y-red-nodemcu.md
- docs/09_historial-de-cambios.md
- docs/10_extension-cloud-analytics.md
- docs/11_powerbi-dashboard-sesion.md
La entrada principal de demo es Ayuntamiento Landing, conectada a Blob para datos reales cuando estan disponibles.
- Abre
docs/blob-config.js. - Configura
enabled: true. - Revisa
baseUrl,container,prefixysasToken(si aplica). - Abre
docs/ayuntamiento-landing.htmlen tu navegador.
Si hay problema de acceso (SAS/CORS/ruta), la pagina entra en modo demo automaticamente para no romper la presentacion.
Vista avanzada estilo sala de operaciones Smart City:
docs/smart-city-ops-center.html- Incluye gemelo urbano simulado con rutas, semaforos, trafico, red electrica, renovables y optimizacion AI de transporte.
- Usa la misma configuracion de
docs/blob-config.js.
Puedes dejarlo listo con un solo script:
./scripts/setup-landing-blob-access.ps1 -SubscriptionId "<SUBSCRIPTION_ID>" -StorageAccountName "<STORAGE_ACCOUNT_NAME>" -ContainerName "iot-historical" -Prefix "aggregates/"El script:
- Configura CORS para lecturas desde navegador.
- Genera SAS de lectura/listado para el contenedor.
- Actualiza
docs/blob-config.jsautomaticamente.
Si la landing sigue en demo, revisa primero:
enabled: trueendocs/blob-config.js.sasTokenno vacio y vigente.- Que existan blobs en
aggregates/.
- bridge/mqtt/main.py: bridge MQTT -> IoT Edge (normalizacion + forward).
- decider/main.py: motor de reglas y eventos semanticos.
- arduinos/ESP_Home.ino: firmware de referencia NodeMCU.
La carpeta .github forma parte oficial del repositorio y se publica de forma intencional.
Su objetivo es que cualquier persona del equipo (o externa) pueda usar el agente de forma consistente y productiva.
- Pide el objetivo de negocio o tecnico en lenguaje natural.
- El agente aplicara instrucciones globales de .github/instructions.
- Si aplica, enruta a una skill de .github/skills.
- Recibe una salida estructurada (arquitectura, backlog, checklist, pasos de ejecucion).
- .github/instructions: reglas base obligatorias para cualquier respuesta.
- .github/agents: especializacion del rol del agente para este dominio.
- .github/skills: playbooks para tareas concretas (arquitectura, pricing, preflight, visualizacion, etc.).
Prompt:
Disena una arquitectura Smart City para movilidad y calidad del aire en 2 distritos, con edge local y backlog por fases.
Artefactos esperados:
- Arquitectura propuesta + flujo de datos.
- Seguridad y operacion.
- Plan por fases con riesgos y KPI.
Prompt:
Valida este despliegue Bicep antes de ejecutar azd provision y dame un preflight-report con riesgos y acciones.
Artefactos esperados:
- Resultado de validaciones de sintaxis/what-if.
- Problemas detectados con severidad.
- Recomendaciones accionables.
Prompt:
Calcula coste mensual estimado para IoT Hub + Event Hubs + ADLS en westeurope para 2 millones de eventos/dia.
Artefactos esperados:
- Tabla de precios por servicio/SKU.
- Supuestos usados.
- Total mensual y opciones de optimizacion.
Prompt:
Analiza mi resource group y generame un diagrama Mermaid con relaciones entre red, compute, datos y seguridad.
Artefactos esperados:
- Inventario de recursos.
- Diagrama Mermaid detallado.
- Observaciones de arquitectura.
- Skill Smart City: .github/skills/azure-smart-city-iot-solution-builder/SKILL.md
- Plantilla de entregables: .github/skills/azure-smart-city-iot-solution-builder/references/smart-city-solution-template.md
- Instruccion IoT Edge: .github/instructions/azure-iot-edge-architecture.instructions.md
- Agente especializado: .github/agents/azure-smart-city-iot-architect.agent.md
python -m unittest discover -s tests -v./scripts/sync-local-secrets.ps1./scripts/redeploy-edge.ps1 -SubscriptionId "<SUBSCRIPTION_ID>" -ResourceGroup "<RESOURCE_GROUP>" -IoTHubName "<IOTHUB_NAME>" -DeviceId "<EDGE_DEVICE_ID>" -AcrName "<ACR_NAME>"./scripts/provision-smartcity-cloud.ps1 -SubscriptionId "<SUBSCRIPTION_ID>" -ResourceGroup "<RG_DATA>" -Location "westeurope" -IoTHubName "<IOTHUB_NAME>" -IoTHubResourceGroup "<RG_IOTHUB>" -EventHubNamespace "<EH_NAMESPACE>" -StorageAccountName "<ADLS_ACCOUNT_NAME>"./scripts/create-stream-analytics.ps1 -SubscriptionId "<SUBSCRIPTION_ID>" -ResourceGroup "<RG_DATA>" -Location "<LOCATION>" -JobName "<ASA_JOB>" -EventHubNamespace "<EH_NAMESPACE>" -EventHubName "telemetry" -StorageAccountName "<ADLS_ACCOUNT_NAME>" -FileSystemName "iot-historical" -QueryFilePath "deployment/stream-analytics/query.sql" -StartJobEl entorno operativo activo es NUC (x86_64) con imagenes linux/amd64.
La referencia a Raspberry Pi se mantiene solo como material educativo/historico, no como objetivo de despliegue actual.
az iot hub monitor-events solo muestra trafico del endpoint built-in events.
Si el hub enruta solo a endpoints custom (storage/event hubs), puede no mostrar eventos aunque el pipeline funcione.
En ese caso, crear una ruta temporal de debug a events, validar y eliminarla.