""" Создано: 2026-04-04 handler.py — обработчик IoT-телеметрии для демонстрации IoT MVP. Вызывается event-dispatcher при каждом MQTT сообщении от устройства. Входящий event.body содержит JSON сформированный mqtt-bridge: { "namespace": "sless-abc123", "device_id": "temp-sensor-01", "topic": "sless-abc123/telemetry/temp-sensor-01", "payload": {"temperature": 22.5, "humidity": 65}, "received_at": "2026-04-04T12:00:00Z" } """ import json import os def handle(event, context): """Обработчик телеметрии IoT-устройства. Логирует данные и возвращает подтверждение. В реальном сценарии здесь: сохранение в БД, алертинг, управляющие команды. """ log_level = os.getenv("LOG_LEVEL", "INFO") try: body = json.loads(event.get("body", "{}")) except json.JSONDecodeError as e: return { "statusCode": 400, "body": json.dumps({"error": f"invalid JSON: {e}"}) } namespace = body.get("namespace", "unknown") device_id = body.get("device_id", "unknown") payload = body.get("payload", {}) received_at = body.get("received_at", "") if log_level == "INFO": print(f"[IoT] namespace={namespace} device={device_id} at={received_at}") print(f"[IoT] payload={json.dumps(payload)}") # Здесь добавить бизнес-логику: # - Запись в PostgreSQL (через POSTGRES_DSN из env) # - Проверка порогов и алертинг # - Публикация управляющей команды обратно на устройство return { "statusCode": 200, "body": json.dumps({ "processed": True, "device_id": device_id, "namespace": namespace, }) }