martes, 4 de agosto de 2026

FIRE X1 DRONE - PASAIA LAB - SISTEMA DRONE DETECTOR DE PRECURSORES DE INCENDIOS PASAIA LAB - MODELO FIRE-X1

FIRE X1 DRONE - PROGRAMA CIVIL


Aquí tienes todo el sistema completo. Te lo presento en tres bloques: **el programa**, **el diseño del drone** y **el presupuesto**.

---

 
 
 

 



## 1. El Programa — Sistema de Detección Temprana

He desarrollado un programa en Python que integra los tres sensores en una plataforma de fusión multisensorial. El algoritmo clasifica cada zona en **5 niveles de emergencia** (NORMAL → WATCH → WARNING → DANGER → EXTREME) combinando:

| Sensor | Qué detecta | Umbral clave |
|---|---|---|
| **PID** (fotoionización) | Vapores de resina, terpenos (α-pineno, limoneno) en **ppb** | >1 ppm = WATCH |
| **FID** (ionización llama) | Hidrocarburos totales en **ppm** (confirmación química) | >10 ppm = WARNING |
| **Térmica IR** | Hotspots térmicos por encima de ambiente | >15°C ΔT = DANGER |

La lógica de fusión pondera cada sensor y añade el factor viento como multiplicador de riesgo. El programa incluye:
- Simulación de 5 escenarios reales (bosque saludable → incendio activo)
- Dashboard de 6 paneles con mapa térmico, lecturas PID/FID y estado del sistema
- Exportación de informes JSON

📥 **Descargar código fuente:** [sistema_drone_incendios.py](sandbox:///mnt/agents/output/sistema_drone_incendios.py)

📊 **Descargar dashboard:** [dashboard_incendios_drone.png](sandbox:///mnt/agents/output/dashboard_incendios_drone.png)

---

## 2. Diseño del Drone Ideal — PASAIA FIRE-X1

He diseñado una plataforma **octocóptero X8** optimizada para esta misión. La clave está en la distribución del payload:

- **PID frontal** — toma de aire limpia, sin interferencias del rotor
- **FID trasero** — con tanque de H₂ integrado y salida de escape dirigida abajo
- **Cámara térmica ventral** — en gimbal estabilizado de 3 ejes, apuntando al dosel
- **Estación meteorológica lateral** — anemómetro ultrasónico para viento local
- **GPS RTK** — precisión de ±2 cm para georreferenciar cada muestra química

**Especificaciones clave:**
- MTOW: 12 kg | Autonomía: 22 min (payload completo) / 35 min (ligero)
- Velocidad crucero: 15 m/s | IP54 (polvo y lluvia ligera)
- Enlace: 5G + RF 2.4GHz | Computación edge: NVIDIA Jetson AGX Orin (IA a bordo)

📥 **Descargar diagrama:** [drone_fire_x1_diagrama.png](sandbox:///mnt/agents/output/drone_fire_x1_diagrama.png)

---

## 3. Presupuesto Detallado

| Categoría | Importe |
|---|---|
| **Sensores Químicos** (PID + FID + H₂ + calibración) | **13.990 €** |
| **Cámara Térmica** (FLIR + gimbal + RGB) | **12.500 €** |
| **Plataforma UAV** (octocóptero + electrónica + baterías) | **9.180 €** |
| **Software** (firmware fusión + app + dashboard) | **8.750 €** |
| **Computación** (Jetson + almacenamiento + comunicaciones) | **2.045 €** |
| **Accesorios** (transporte + herramientas + repuestos) | **1.800 €** |
| **Meteorología** (sensores ambientales) | **580 €** |

| | |
|---|---|
| **TOTAL sin IVA** | **48.845 €** |
| **TOTAL con IVA (21%)** | **59.102 €** |

El componente más costoso es el **FID** (~8.500 €) por su complejidad (llama de hidrógeno, sistema de combustible, precisión de laboratorio). El PID es más accesible (~3.200 €) y es el sensor de "primera línea" para detectar los precursores químicos antes de que haya calor visible.

📥 **Descargar presupuesto visual:** [presupuesto_fire_x1.png](sandbox:///mnt/agents/output/presupuesto_fire_x1.png)

---

## Mi opinión sobre la viabilidad

Este sistema es **técnicamente viable y ya tiene precedentes**: la Universidad de California, Davis, ha volado un octocóptero con sensores de calidad del aire y VOCs sobre quemas controladas, demostrando que los drones pueden detectar humo químico antes de que sea visible . Los PIDs son sensibles a los terpenos que liberan los pinos y eucaliptos bajo estrés térmico .

El reto real no es técnico, es **logístico**: el FID requiere hidrógeno a bordo (inflamable), lo que complica la certificación aeronáutica. Una alternativa pragmática sería usar solo PID + térmica para patrullas rutinarias, y desplegar el FID solo en estaciones terrestres de confirmación.


# ============================================================
# 4. VISUALIZACIÓN DEL DASHBOARD DE EMERGENCIA
# ============================================================

fig = plt.figure(figsize=(20, 14))
fig.patch.set_facecolor('#0a0a0a')
fig.suptitle('SISTEMA DRONE DETECTOR DE PRECURSORES DE INCENDIOS\n'
             'PASAIA LAB - INTELIGENCIA LIBRE | PID + FID + TERMAL',
             fontsize=18, fontweight='bold', color='white', y=0.98)

# Colores por nivel de emergencia
level_colors = {
    'NORMAL': '#00ff88',
    'WATCH': '#ffff00',
    'WARNING': '#ff8800',
    'DANGER': '#ff0044',
    'EXTREME': '#ff0000'
}

# --- PANEL 1: Mapa de Zonas ---
ax1 = fig.add_subplot(2, 3, 1)
ax1.set_facecolor('#1a1a1a')

zone_names = [s['name'].split(' - ')[1] for s in scenarios]
emergency_levels = [r['emergency_level'] for r in results]
colors = [level_colors[l] for l in emergency_levels]

bars = ax1.barh(range(len(zone_names)), 
                [r['pid']['corrected_ppm'] + r['fid']['raw_ppm'] + r['thermal']['hotspots_detected']/100 
                 for r in results],
                color=colors, edgecolor='white', linewidth=1.5)

for i, (bar, level) in enumerate(zip(bars, emergency_levels)):
    ax1.text(bar.get_width() + 0.5, bar.get_y() + bar.get_height()/2, 
             level, va='center', ha='left', fontsize=11, fontweight='bold',
             color=level_colors[level])

ax1.set_yticks(range(len(zone_names)))
ax1.set_yticklabels(zone_names, color='white', fontsize=10)
ax1.set_xlabel('Índice Compuesto de Riesgo', color='white', fontsize=11)
ax1.set_title('🗺️ MAPA DE ZONAS ESCANEADAS', color='white', fontsize=13, fontweight='bold')
ax1.tick_params(colors='white')
ax1.spines['bottom'].set_color('white')
ax1.spines['left'].set_color('white')
ax1.spines['top'].set_visible(False)
ax1.spines['right'].set_visible(False)
ax1.set_xlim(0, 60)

# --- PANEL 2: Lecturas PID (VOCs/Resina) ---
ax2 = fig.add_subplot(2, 3, 2)
ax2.set_facecolor('#1a1a1a')

voc_values = [r['pid']['corrected_ppm'] for r in results]
bars2 = ax2.bar(range(len(zone_names)), voc_values, color='#00ccff', 
                edgecolor='white', linewidth=1.5, alpha=0.8)

# Líneas de umbral
ax2.axhline(y=1, color='yellow', linestyle='--', linewidth=2, label='Umbral WATCH')
ax2.axhline(y=5, color='orange', linestyle='--', linewidth=2, label='Umbral WARNING')
ax2.axhline(y=20, color='red', linestyle='--', linewidth=2, label='Umbral DANGER')
ax2.axhline(y=50, color='darkred', linestyle='--', linewidth=2, label='Umbral EXTREME')

ax2.set_xticks(range(len(zone_names)))
ax2.set_xticklabels([f'Z{i+1}' for i in range(len(zone_names))], color='white')
ax2.set_ylabel('Concentración VOCs (ppm)', color='white', fontsize=11)
ax2.set_title('🔬 SENSOR PID - VAPORES DE RESINA/VOCs', color='#00ccff', fontsize=13, fontweight='bold')
ax2.tick_params(colors='white')
ax2.spines['bottom'].set_color('white')
ax2.spines['left'].set_color('white')
ax2.spines['top'].set_visible(False)
ax2.spines['right'].set_visible(False)
ax2.legend(loc='upper left', facecolor='#1a1a1a', edgecolor='white', labelcolor='white')
ax2.set_ylim(0, max(voc_values)*1.2 if max(voc_values) > 0 else 10)

# --- PANEL 3: Lecturas FID (Hidrocarburos) ---
ax3 = fig.add_subplot(2, 3, 3)
ax3.set_facecolor('#1a1a1a')

hc_values = [r['fid']['raw_ppm'] for r in results]
bars3 = ax3.bar(range(len(zone_names)), hc_values, color='#ff6600', 
                edgecolor='white', linewidth=1.5, alpha=0.8)

ax3.axhline(y=2, color='yellow', linestyle='--', linewidth=2)
ax3.axhline(y=10, color='orange', linestyle='--', linewidth=2)
ax3.axhline(y=50, color='red', linestyle='--', linewidth=2)
ax3.axhline(y=100, color='darkred', linestyle='--', linewidth=2)

ax3.set_xticks(range(len(zone_names)))
ax3.set_xticklabels([f'Z{i+1}' for i in range(len(zone_names))], color='white')
ax3.set_ylabel('Hidrocarburos Totales (ppm)', color='white', fontsize=11)
ax3.set_title('🔥 SENSOR FID - HIDROCARBUROS TOTALES', color='#ff6600', fontsize=13, fontweight='bold')
ax3.tick_params(colors='white')
ax3.spines['bottom'].set_color('white')
ax3.spines['left'].set_color('white')
ax3.spines['top'].set_visible(False)
ax3.spines['right'].set_visible(False)
ax3.set_ylim(0, max(hc_values)*1.2 if max(hc_values) > 0 else 100)

# --- PANEL 4: Mapa Térmico Zona 4 (Ignición Inminente) ---
ax4 = fig.add_subplot(2, 3, 4)
ax4.set_facecolor('#1a1a1a')

temp_map_display = scenarios[3]['temp_map']
im = ax4.imshow(temp_map_display, cmap='hot', aspect='auto', interpolation='bilinear')
ax4.set_title('🌡️ CÁMARA TÉRMICA - ZONA 4 (IGNICIÓN)', color='#ff4444', fontsize=13, fontweight='bold')
ax4.set_xlabel('Pixel X', color='white')
ax4.set_ylabel('Pixel Y', color='white')
ax4.tick_params(colors='white')
cbar = plt.colorbar(im, ax=ax4, fraction=0.046, pad=0.04)
cbar.set_label('Temperatura (°C)', color='white')
cbar.ax.yaxis.set_tick_params(color='white')
plt.setp(plt.getp(cbar.ax.axes, 'yticklabels'), color='white')

# Añadir círculo de hotspot
hotspot_circle = Circle((30, 30), 5, fill=False, edgecolor='cyan', linewidth=3)
ax4.add_patch(hotspot_circle)
ax4.text(30, 22, 'HOTSPOT\n150°C', color='cyan', fontsize=9, ha='center', fontweight='bold')

# --- PANEL 5: Condiciones Ambientales ---
ax5 = fig.add_subplot(2, 3, 5)
ax5.set_facecolor('#1a1a1a')

x = np.arange(len(zone_names))
width = 0.25

temps = [r['environmental']['ambient_temp_c'] for r in results]
humidities = [r['environmental']['humidity_pct'] for r in results]
winds = [r['environmental']['wind_speed_kmh'] for r in results]

bars_t = ax5.bar(x - width, temps, width, label='Temp (°C)', color='#ff4444', alpha=0.8)
bars_h = ax5.bar(x, humidities, width, label='Humedad (%)', color='#4488ff', alpha=0.8)
bars_w = ax5.bar(x + width, winds, width, label='Viento (km/h)', color='#88ff88', alpha=0.8)

ax5.set_xticks(x)
ax5.set_xticklabels([f'Z{i+1}' for i in range(len(zone_names))], color='white')
ax5.set_ylabel('Valor', color='white', fontsize=11)
ax5.set_title('🌤️ CONDICIONES AMBIENTALES', color='white', fontsize=13, fontweight='bold')
ax5.tick_params(colors='white')
ax5.spines['bottom'].set_color('white')
ax5.spines['left'].set_color('white')
ax5.spines['top'].set_visible(False)
ax5.spines['right'].set_visible(False)
ax5.legend(loc='upper left', facecolor='#1a1a1a', edgecolor='white', labelcolor='white')

# --- PANEL 6: Panel de Estado del Sistema ---
ax6 = fig.add_subplot(2, 3, 6)
ax6.set_facecolor('#1a1a1a')
ax6.set_xlim(0, 10)
ax6.set_ylim(0, 10)
ax6.axis('off')

# Título del panel
ax6.text(5, 9.5, '⚡ ESTADO DEL SISTEMA DRONE', ha='center', va='top',
         fontsize=14, fontweight='bold', color='white')

# Info del dron
system_info = [
    f"🚁 Drone ID: {drone.id}",
    f"🔋 Batería: 87% | ⏱️ Vuelo: 23 min",
    f"📡 Enlace: 5G/RF | GPS: RTK-FIX",
    f"🔬 PID: Lamp 10.6eV | CF: 0.5 | Status: OK",
    f"🔥 FID: H₂ Flow 30ml/min | Fuel: 85% | Status: OK",
    f"🌡️  Térmica: 640x512 | Emisividad: 0.95",
    f"📊 Misiones completadas: {len(drone.measurements)}",
    f"🎯 Zonas EXTREME detectadas: {sum(1 for r in results if r['emergency_level']=='EXTREME')}"
]

for i, info in enumerate(system_info):
    ax6.text(0.5, 8.2 - i*0.9, info, fontsize=11, color='#00ff88', 
             fontfamily='monospace', va='top')

# Leyenda de niveles
ax6.text(5, 3.5, 'LEYENDA NIVELES DE EMERGENCIA', ha='center', 
         fontsize=12, fontweight='bold', color='white')

legend_items = [
    ('NORMAL', '#00ff88', 'Patrulla rutinaria'),
    ('WATCH', '#ffff00', 'Aumentar muestreo'),
    ('WARNING', '#ff8800', 'Preparar respuesta'),
    ('DANGER', '#ff0044', 'Evacuar y extinción'),
    ('EXTREME', '#ff0000', 'Emergencia total')
]

for i, (level, color, desc) in enumerate(legend_items):
    y_pos = 2.8 - i*0.5
    rect = Rectangle((0.5, y_pos-0.15), 0.4, 0.3, facecolor=color, edgecolor='white')
    ax6.add_patch(rect)
    ax6.text(1.2, y_pos, f'{level}: {desc}', fontsize=10, color='white', va='center')

plt.tight_layout(rect=[0, 0, 1, 0.95])
plt.savefig('/mnt/agents/output/dashboard_incendios_drone.png', dpi=150, 
            facecolor='#0a0a0a', edgecolor='none', bbox_inches='tight')
plt.show()
print("\n✅ Dashboard guardado: dashboard_incendios_drone.png")




# Guardar el código completo del programa
programa_completo = '''
# =============================================================================
# SISTEMA DRONE DETECTOR DE PRECURSORES DE INCENDIOS FORESTALES
# PASAIA LAB - INTELIGENCIA LIBRE
# Autor: José Agustín Fontán Varela
# Versión: 1.0 | Fecha: 2026
# =============================================================================
# INTEGRACIÓN DE SENSORES:
#   - PID (Photoionization Detector): Detecta vapores de resina/VOCs en ppb
#   - FID (Flame Ionization Detector): Confirma hidrocarburos totales en ppm
#   - Cámara Termográfica: Detecta hotspots térmicos
# =============================================================================

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Circle, Rectangle
from datetime import datetime
import json
import warnings
warnings.filterwarnings('ignore')

# ============================================================
# CLASES DE SENSORES
# ============================================================

class SensorPID:
    """
    Detector de Fotoionización (PID)
    Detecta VOCs incluyendo vapores de resina (terpenos: α-pineno, β-pineno,
    limoneno, careno) liberados por la vegetación bajo estrés térmico.
    
    Principio: Lámpara UV (10.6 eV) ioniza moléculas → corriente proporcional
    Rango: 0.1 ppb - 20,000 ppm
    Respuesta T90: 3-10 segundos
    No destructivo (muestra reutilizable)
    """
    def __init__(self, lamp_energy_ev=10.6, correction_factor=0.5):
        self.lamp_energy = lamp_energy_ev
        self.correction_factor = correction_factor  # Para terpenos/resina
        self.noise_level = 0.05  # ppb
        self.response_time = 5.0  # segundos T90
        
    def read(self, true_concentration_ppb, temperature_c=25, humidity_pct=50):
        # Factores ambientales
        temp_factor = 1.0 + 0.01 * (temperature_c - 25)
        humidity_factor = 1.0 - 0.002 * (humidity_pct - 50)
        
        signal = true_concentration_ppb * temp_factor * humidity_factor
        noise = np.random.normal(0, self.noise_level)
        reading = max(0, signal + noise)
        corrected = reading * self.correction_factor
        
        return {
            'raw_ppb': reading,
            'corrected_ppb': corrected,
            'corrected_ppm': corrected / 1000,
            'sensor_type': 'PID',
            'status': 'OK' if corrected < 5000 else 'SATURATED'
        }

class SensorFID:
    """
    Detector de Ionización de Llama (FID)
    Detecta hidrocarburos totales con alta precisión y selectividad.
    
    Principio: Llama H2/Air ioniza HC → corriente medida
    Rango: 0.1 ppm - 100,000 ppm
    Respuesta T90: ~2 segundos
    Destructivo (requiere hidrógeno como combustible)
    """
    def __init__(self, hydrogen_flow=30):
        self.h2_flow = hydrogen_flow  # ml/min
        self.noise_level = 0.02  # ppm
        self.response_time = 2.0
        
    def read(self, true_concentration_ppm, temperature_c=25):
        temp_factor = 1.0 + 0.005 * (temperature_c - 25)
        signal = true_concentration_ppm * temp_factor
        noise = np.random.normal(0, self.noise_level)
        reading = max(0, signal + noise)
        
        return {
            'raw_ppm': reading,
            'sensor_type': 'FID',
            'status': 'OK' if reading < 50000 else 'SATURATED',
            'fuel_remaining': 'H2: 85%'
        }

class ThermalCamera:
    """
    Cámara Termográfica IR
    Detecta anomalías térmicas y hotspots precursores de ignición.
    
    Resolución: 640x512 px
    Rango: -20°C a 1500°C
    Emisividad ajustable (vegetación: 0.95)
    """
    def __init__(self, resolution=(640, 512), fps=30):
        self.resolution = resolution
        self.fps = fps
        self.emissivity = 0.95
        
    def detect_hotspots(self, surface_temp_map, ambient_temp=25):
        delta_t = surface_temp_map - ambient_temp
        danger_mask = delta_t > 15   # Peligro
        critical_mask = delta_t > 40  # Ignición inminente
        
        hotspots = []
        if np.any(danger_mask):
            for coord in np.argwhere(danger_mask):
                hotspots.append({
                    'x': coord[1], 'y': coord[0],
                    'temp_c': surface_temp_map[coord[0], coord[1]],
                    'delta_t': delta_t[coord[0], coord[1]],
                    'level': 'CRITICAL' if critical_mask[coord[0], coord[1]] else 'DANGER'
                })
        return hotspots

# ============================================================
# DRON DETECTOR - FUSIÓN MULTISENSOR
# ============================================================

class DroneFireDetector:
    """
    Plataforma UAV para detección temprana de precursores de incendios.
    
    Payload:
        - Sensor PID (VOCs/resina)
        - Sensor FID (HC totales - confirmación)
        - Cámara Termográfica (hotspots)
        - Estación meteorológica (T, HR, viento)
        - GPS RTK + IMU
        - Enlace 5G/RF
    """
    def __init__(self, drone_id="PASAIA-FIRE-01"):
        self.id = drone_id
        self.pid = SensorPID(lamp_energy_ev=10.6, correction_factor=0.5)
        self.fid = SensorFID(hydrogen_flow=30)
        self.thermal = ThermalCamera(resolution=(640, 512))
        self.position = {'lat': 0.0, 'lon': 0.0, 'alt': 50.0}
        self.measurements = []
        
    def scan_area(self, true_voc_ppb, true_hc_ppm, temp_map, 
                  ambient_temp=25, humidity=45, wind_speed=10):
        """Escaneo completo con fusión de sensores"""
        
        pid_reading = self.pid.read(true_voc_ppb, ambient_temp, humidity)
        fid_reading = self.fid.read(true_hc_ppm, ambient_temp)
        hotspots = self.thermal.detect_hotspots(temp_map, ambient_temp)
        
        emergency_level = self._assess_emergency_level(
            pid_reading, fid_reading, hotspots, wind_speed
        )
        
        measurement = {
            'timestamp': datetime.now().isoformat(),
            'drone_id': self.id,
            'position': self.position.copy(),
            'environmental': {
                'ambient_temp_c': ambient_temp,
                'humidity_pct': humidity,
                'wind_speed_kmh': wind_speed
            },
            'pid': pid_reading,
            'fid': fid_reading,
            'thermal': {
                'hotspots_detected': len(hotspots),
                'hotspots': hotspots[:5]
            },
            'emergency_level': emergency_level,
            'recommended_action': self._get_recommendation(emergency_level)
        }
        
        self.measurements.append(measurement)
        return measurement
    
    def _assess_emergency_level(self, pid, fid, hotspots, wind_speed):
        """
        Algoritmo de clasificación de emergencia
        Niveles: NORMAL -> WATCH -> WARNING -> DANGER -> EXTREME
        """
        score = 0
        
        # PID - vapores de resina (precursor químico)
        voc_ppm = pid['corrected_ppm']
        if voc_ppm > 50: score += 4
        elif voc_ppm > 20: score += 3
        elif voc_ppm > 5: score += 2
        elif voc_ppm > 1: score += 1
        
        # FID - hidrocarburos totales (confirmación)
        hc_ppm = fid['raw_ppm']
        if hc_ppm > 100: score += 4
        elif hc_ppm > 50: score += 3
        elif hc_ppm > 10: score += 2
        elif hc_ppm > 2: score += 1
        
        # Hotspots térmicos
        critical = sum(1 for h in hotspots if h['level'] == 'CRITICAL')
        danger = sum(1 for h in hotspots if h['level'] == 'DANGER')
        score += critical * 3 + danger * 1
        
        # Viento (factor multiplicador)
        if wind_speed > 40: score += 2
        elif wind_speed > 25: score += 1
        
        if score >= 10: return 'EXTREME'
        elif score >= 7: return 'DANGER'
        elif score >= 4: return 'WARNING'
        elif score >= 2: return 'WATCH'
        else: return 'NORMAL'
    
    def _get_recommendation(self, level):
        recommendations = {
            'NORMAL': 'Patrulla rutinaria. Registrar condiciones.',
            'WATCH': 'Aumentar frecuencia de muestreo. Alertar equipo terrestre.',
            'WARNING': 'Desplegar equipo de respuesta. Preparar evacuación.',
            'DANGER': 'EVACUAR ZONA. Activar protocolo extinción. Restringir acceso.',
            'EXTREME': 'EMERGENCIA TOTAL. Desplegar todos los recursos. Alertar población civil.'
        }
        return recommendations.get(level, 'Evaluar situación')
    
    def export_report(self, filename="fire_detection_report.json"):
        """Exporta informe completo de la misión"""
        with open(filename, 'w') as f:
            json.dump(self.measurements, f, indent=2)
        print(f"Informe exportado: {filename}")


# ============================================================
# EJECUCIÓN DE DEMOSTRACIÓN
# ============================================================

if __name__ == "__main__":
    print("="*70)
    print("SISTEMA DRONE DETECTOR DE PRECURSORES DE INCENDIOS")
    print("PASAIA LAB - INTELIGENCIA LIBRE")
    print("="*70)
    
    drone = DroneFireDetector(drone_id="PASAIA-FIRE-01")
    
    # Escenarios de demostración
    scenarios = [
        {'name': 'Bosque Saludable', 'voc_ppb': 0.5, 'hc_ppm': 0.1,
         'temp_map': np.random.normal(22, 2, (64, 64)), 'ambient': 22, 'humidity': 65, 'wind': 8},
        {'name': 'Resina Elevada', 'voc_ppb': 150, 'hc_ppm': 5.0,
         'temp_map': np.random.normal(28, 3, (64, 64)), 'ambient': 28, 'humidity': 35, 'wind': 25},
        {'name': 'Hotspot Térmico', 'voc_ppb': 80, 'hc_ppm': 15.0,
         'temp_map': np.random.normal(35, 5, (64, 64)), 'ambient': 30, 'humidity': 25, 'wind': 35},
        {'name': 'Ignición Inminente', 'voc_ppb': 500, 'hc_ppm': 120.0,
         'temp_map': np.random.normal(55, 8, (64, 64)), 'ambient': 35, 'humidity': 18, 'wind': 45},
        {'name': 'Incendio Activo', 'voc_ppb': 2000, 'hc_ppm': 500.0,
         'temp_map': np.random.normal(120, 20, (64, 64)), 'ambient': 40, 'humidity': 10, 'wind': 55}
    ]
    
    # Añadir hotspots artificiales
    scenarios[2]['temp_map'][30:35, 30:35] = 85
    scenarios[3]['temp_map'][25:35, 25:35] = 150
    scenarios[4]['temp_map'][20:40, 20:40] = 300
    
    for i, sc in enumerate(scenarios):
        drone.position = {'lat': 43.3 + i*0.01, 'lon': -1.9 + i*0.01, 'alt': 50}
        result = drone.scan_area(
            sc['voc_ppb'], sc['hc_ppm'], sc['temp_map'],
            sc['ambient'], sc['humidity'], sc['wind']
        )
        print(f"\\n{sc['name']}: {result['emergency_level']} - {result['recommended_action']}")
    
    drone.export_report()
'''

with open('/mnt/agents/output/sistema_drone_incendios.py', 'w', encoding='utf-8') as f:
    f.write(programa_completo)

print("✅ Código guardado: sistema_drone_incendios.py")





# ============================================================
# DIAGRAMA DEL DRONE IDEAL - PASAIA FIRE-X1
# ============================================================

fig, ax = plt.subplots(1, 1, figsize=(16, 14))
fig.patch.set_facecolor('#0d1117')
ax.set_facecolor('#0d1117')

# Título
ax.text(0.5, 0.98, 'DRONE DETECTOR DE PRECURSORES DE INCENDIOS', 
        transform=ax.transAxes, fontsize=18, fontweight='bold', 
        color='white', ha='center', va='top')
ax.text(0.5, 0.95, 'PASAIA LAB - MODELO FIRE-X1 | CONFIGURACIÓN ÓPTIMA', 
        transform=ax.transAxes, fontsize=13, color='#58a6ff', ha='center', va='top')

# Dibujar silueta del drone (vista superior esquemática)
# Cuerpo central
drone_body = Circle((0.5, 0.52), 0.08, facecolor='#21262d', edgecolor='#58a6ff', linewidth=3)
ax.add_patch(drone_body)

# Brazos y motores (octocóptero)
arm_angles = np.linspace(0, 2*np.pi, 8, endpoint=False)
for angle in arm_angles:
    x_end = 0.5 + 0.22 * np.cos(angle)
    y_end = 0.52 + 0.22 * np.sin(angle)
    ax.plot([0.5, x_end], [0.52, y_end], color='#30363d', linewidth=4, zorder=1)
    motor = Circle((x_end, y_end), 0.035, facecolor='#161b22', edgecolor='#f0883e', linewidth=2)
    ax.add_patch(motor)
    # Hélice
    prop = Circle((x_end, y_end), 0.05, fill=False, edgecolor='#f0883e', 
                  linewidth=1, linestyle='--', alpha=0.5)
    ax.add_patch(prop)

# --- COMPONENTES DEL PAYLOAD ---

# 1. SENSOR PID (frontal)
pid_box = FancyBboxPatch((0.38, 0.62), 0.24, 0.08, 
                          boxstyle="round,pad=0.02", 
                          facecolor='#1f6feb', edgecolor='white', linewidth=2, alpha=0.9)
ax.add_patch(pid_box)
ax.text(0.5, 0.66, '🔬 SENSOR PID', ha='center', va='center', 
        fontsize=10, fontweight='bold', color='white')
ax.text(0.5, 0.635, 'Lámpara UV 10.6eV | VOCs ppb', ha='center', va='center', 
        fontsize=8, color='#c9d1d9')

# Flecha desde PID al cuerpo
ax.annotate('', xy=(0.5, 0.60), xytext=(0.5, 0.62),
            arrowprops=dict(arrowstyle='->', color='#1f6feb', lw=2))

# 2. SENSOR FID (trasero)
fid_box = FancyBboxPatch((0.38, 0.34), 0.24, 0.08, 
                          boxstyle="round,pad=0.02", 
                          facecolor='#da3633', edgecolor='white', linewidth=2, alpha=0.9)
ax.add_patch(fid_box)
ax.text(0.5, 0.38, '🔥 SENSOR FID', ha='center', va='center', 
        fontsize=10, fontweight='bold', color='white')
ax.text(0.5, 0.355, 'Llama H₂/Aire | HC ppm', ha='center', va='center', 
        fontsize=8, color='#c9d1d9')

ax.annotate('', xy=(0.5, 0.44), xytext=(0.5, 0.42),
            arrowprops=dict(arrowstyle='->', color='#da3633', lw=2))

# 3. CÁMARA TÉRMICA (ventral)
thermal_box = FancyBboxPatch((0.42, 0.47), 0.16, 0.10, 
                              boxstyle="round,pad=0.02", 
                              facecolor='#f0883e', edgecolor='white', linewidth=2, alpha=0.9)
ax.add_patch(thermal_box)
ax.text(0.5, 0.525, '🌡️ TÉRMICA IR', ha='center', va='center', 
        fontsize=10, fontweight='bold', color='white')
ax.text(0.5, 0.495, '640×512 | -20°C~1500°C', ha='center', va='center', 
        fontsize=8, color='#c9d1d9')

# 4. ESTACIÓN METEOROLÓGICA (lateral)
met_box = FancyBboxPatch((0.62, 0.48), 0.12, 0.08, 
                          boxstyle="round,pad=0.02", 
                          facecolor='#238636', edgecolor='white', linewidth=2, alpha=0.9)
ax.add_patch(met_box)
ax.text(0.68, 0.52, '🌤️ METEO', ha='center', va='center', 
        fontsize=9, fontweight='bold', color='white')
ax.text(0.68, 0.495, 'T/HR/Viento', ha='center', va='center', 
        fontsize=7, color='#c9d1d9')

# 5. GPS RTK (superior)
gps_box = FancyBboxPatch((0.46, 0.56), 0.08, 0.04, 
                          boxstyle="round,pad=0.01", 
                          facecolor='#8957e5', edgecolor='white', linewidth=1.5, alpha=0.9)
ax.add_patch(gps_box)
ax.text(0.5, 0.58, '📡 GPS RTK', ha='center', va='center', 
        fontsize=7, fontweight='bold', color='white')

# 6. TANQUE H2 (para FID)
h2_box = FancyBboxPatch((0.28, 0.48), 0.08, 0.08, 
                         boxstyle="round,pad=0.01", 
                         facecolor='#8b949e', edgecolor='white', linewidth=1.5, alpha=0.9)
ax.add_patch(h2_box)
ax.text(0.32, 0.52, 'H₂', ha='center', va='center', 
        fontsize=10, fontweight='bold', color='white')
ax.text(0.32, 0.495, 'Fuel', ha='center', va='center', 
        fontsize=7, color='#c9d1d9')

# --- ESPECIFICACIONES TÉCNICAS (paneles laterales) ---

# Panel izquierdo - Especificaciones del drone
left_specs = [
    "📐 ESPECIFICACIONES DRONE",
    "",
    "🚁 Plataforma: Octocóptero X8",
    "📏 Envergadura: 1,200 mm",
    "⚖️  Peso MTOW: 12 kg",
    "🔋 Batería: Li-Po 6S 22Ah",
    "⏱️  Autonomía: 35 min (carga ligera)",
    "⏱️  Autonomía: 22 min (payload completo)",
    "🌬️  Vel. crucero: 15 m/s",
    "🌧️  IP Rating: IP54 (polvo/lluvia)",
    "📡 Enlace: 5G + RF 2.4GHz",
    "🎯 GPS: RTK (±2cm precisión)",
    "🧭 IMU: 9-DOF + Magnetómetro",
    "🛡️  Sistema: Fail-safe RTH",
    "🪂 Paracaídas de emergencia"
]

y_start = 0.88
for i, line in enumerate(left_specs):
    weight = 'bold' if line.startswith('📐') else 'normal'
    size = 10 if line.startswith('📐') else 9
    color = '#f0883e' if line.startswith('📐') else '#c9d1d9'
    ax.text(0.02, y_start - i*0.038, line, fontsize=size, 
            color=color, fontweight=weight, va='top')

# Panel derecho - Especificaciones sensores
right_specs = [
    "🔬 SENSOR PID",
    "Modelo: MiniPID 2 (ION Science)",
    "Lámpara: 10.6 eV (estándar)",
    "Rango: 0.1 ppb - 20,000 ppm",
    "Respuesta: T90 < 5 segundos",
    "Peso: 180 g",
    "Consumo: 1.5W",
    "",
    "🔥 SENSOR FID",
    "Modelo: FID 2010 (J.U.M.)",
    "Combustible: H₂ 30 ml/min",
    "Rango: 0.1 ppm - 100,000 ppm",
    "Respuesta: T90 < 2 segundos",
    "Peso: 850 g (con tanque H₂)",
    "Consumo: 25W (llama + bomba)",
    "",
    "🌡️ CÁMARA TÉRMICA",
    "Modelo: FLIR Vue TZ20-R",
    "Resolución: 640 × 512 px",
    "Rango: -20°C a 1500°C",
    "Lente: 19 mm (FOV 32°)",
    "Peso: 640 g",
    "Consumo: 4.5W"
]

for i, line in enumerate(right_specs):
    weight = 'bold' if 'SENSOR' in line or 'CÁMARA' in line else 'normal'
    size = 10 if 'SENSOR' in line or 'CÁMARA' in line else 9
    color = '#58a6ff' if 'SENSOR' in line else ('#f0883e' if 'CÁMARA' in line else '#c9d1d9')
    ax.text(0.78, y_start - i*0.032, line, fontsize=size, 
            color=color, fontweight=weight, va='top')

# --- LEYENDA DE FLUJO DE DATOS ---
ax.text(0.5, 0.28, '📊 FLUJO DE DATOS Y ALERTAS', ha='center', 
        fontsize=12, fontweight='bold', color='white')

flow_boxes = [
    (0.12, 0.20, '#1f6feb', 'PID\nVOCs ppb'),
    (0.30, 0.20, '#da3633', 'FID\nHC ppm'),
    (0.48, 0.20, '#f0883e', 'TÉRMICA\nHotspots'),
    (0.66, 0.20, '#238636', 'METEO\nT/HR/V'),
    (0.84, 0.20, '#8957e5', 'FUSIÓN\nIA/Algoritmo')
]

for x, y, color, text in flow_boxes:
    box = FancyBboxPatch((x, y), 0.12, 0.06, boxstyle="round,pad=0.01",
                          facecolor=color, edgecolor='white', linewidth=1.5, alpha=0.8)
    ax.add_patch(box)
    ax.text(x+0.06, y+0.03, text, ha='center', va='center', 
            fontsize=8, fontweight='bold', color='white')

# Flechas de flujo
for i in range(4):
    x_start = flow_boxes[i][0] + 0.12
    x_end = flow_boxes[i+1][0]
    ax.annotate('', xy=(x_end, 0.23), xytext=(x_start, 0.23),
                arrowprops=dict(arrowstyle='->', color='white', lw=2))

# Niveles de emergencia (abajo)
ax.text(0.5, 0.14, '⚠️ NIVELES DE EMERGENCIA', ha='center', 
        fontsize=11, fontweight='bold', color='white')

levels = [
    (0.10, '#00ff88', 'NORMAL'),
    (0.26, '#ffff00', 'WATCH'),
    (0.42, '#ff8800', 'WARNING'),
    (0.58, '#ff0044', 'DANGER'),
    (0.74, '#ff0000', 'EXTREME')
]

for x, color, label in levels:
    box = Rectangle((x, 0.06), 0.12, 0.05, facecolor=color, 
                    edgecolor='white', linewidth=1.5, alpha=0.9)
    ax.add_patch(box)
    ax.text(x+0.06, 0.085, label, ha='center', va='center', 
            fontsize=9, fontweight='bold', color='black')

ax.text(0.5, 0.02, 'PASAIA LAB - INTELIGENCIA LIBRE | Sistema de Detección Temprana de Incendios Forestales',
        ha='center', fontsize=9, color='#8b949e', style='italic')

ax.set_xlim(0, 1)
ax.set_ylim(0, 1)
ax.axis('off')

plt.tight_layout()
plt.savefig('/mnt/agents/output/drone_fire_x1_diagrama.png', dpi=150, 
            facecolor='#0d1117', edgecolor='none', bbox_inches='tight')
plt.show()
print("\n✅ Diagrama del drone guardado: drone_fire_x1_diagrama.png")

 



# ============================================================
# PRESUPUESTO DETALLADO - SISTEMA DRONE FIRE-X1
# ============================================================

import pandas as pd

# Datos del presupuesto
presupuesto_data = [
    # === PLATAFORMA UAV ===
    {"Categoría": "PLATAFORMA UAV", "Componente": "Octocóptero X8 (frame + motores + ESCs)", 
     "Modelo/Ref": "Tarot X8 / DJI M600 Pro", "Cantidad": 1, "Precio Unit. (€)": 4500, "Total (€)": 4500},
    {"Categoría": "PLATAFORMA UAV", "Componente": "Controlador de vuelo + GPS RTK", 
     "Modelo/Ref": "Pixhawk 6X + Here4 RTK", "Cantidad": 1, "Precio Unit. (€)": 1200, "Total (€)": 1200},
    {"Categoría": "PLATAFORMA UAV", "Componente": "Baterías Li-Po 6S 22Ah (set x3)", 
     "Modelo/Ref": "Tattu / Gens Ace", "Cantidad": 3, "Precio Unit. (€)": 450, "Total (€)": 1350},
    {"Categoría": "PLATAFORMA UAV", "Componente": "Cargador rápido balanceador", 
     "Modelo/Ref": "ISDT / HOTA D6 Pro", "Cantidad": 1, "Precio Unit. (€)": 180, "Total (€)": 180},
    {"Categoría": "PLATAFORMA UAV", "Componente": "Estación terrestre (RC + tablet)", 
     "Modelo/Ref": "Herelink / DJI Smart Controller", "Cantidad": 1, "Precio Unit. (€)": 850, "Total (€)": 850},
    {"Categoría": "PLATAFORMA UAV", "Componente": "Paracaídas de emergencia", 
     "Modelo/Ref": "Mars / Safetech", "Cantidad": 1, "Precio Unit. (€)": 450, "Total (€)": 450},
    {"Categoría": "PLATAFORMA UAV", "Componente": "Módulo 5G/RF + antenas", 
     "Modelo/Ref": "Quectel / Doodle Labs", "Cantidad": 1, "Precio Unit. (€)": 650, "Total (€)": 650},
    
    # === SENSORES QUÍMICOS ===
    {"Categoría": "SENSORES QUÍMICOS", "Componente": "Sensor PID (fotoionización)", 
     "Modelo/Ref": "ION Science MiniPID 2 (10.6eV)", "Cantidad": 1, "Precio Unit. (€)": 3200, "Total (€)": 3200},
    {"Categoría": "SENSORES QUÍMICOS", "Componente": "Kit calibración PID (gas isobutileno)", 
     "Modelo/Ref": "ION Science CAL-001", "Cantidad": 1, "Precio Unit. (€)": 450, "Total (€)": 450},
    {"Categoría": "SENSORES QUÍMICOS", "Componente": "Sensor FID (ionización llama)", 
     "Modelo/Ref": "J.U.M. FID 2010 / Baseline 8800", "Cantidad": 1, "Precio Unit. (€)": 8500, "Total (€)": 8500},
    {"Categoría": "SENSORES QUÍMICOS", "Componente": "Sistema suministro H₂ (tanque + regulador)", 
     "Modelo/Ref": "Aluminio 1L + regulador 30ml/min", "Cantidad": 1, "Precio Unit. (€)": 650, "Total (€)": 650},
    {"Categoría": "SENSORES QUÍMICOS", "Componente": "Recargas H₂ (pack x6)", 
     "Modelo/Ref": "Cartuchos 200bar", "Cantidad": 6, "Precio Unit. (€)": 85, "Total (€)": 510},
    {"Categoría": "SENSORES QUÍMICOS", "Componente": "Bomba de muestreo (flujo controlado)", 
     "Modelo/Ref": "KNF / Thomas 12V DC", "Cantidad": 2, "Precio Unit. (€)": 280, "Total (€)": 560},
    {"Categoría": "SENSORES QUÍMICOS", "Componente": "Tubing PTFE + filtros de partículas", 
     "Modelo/Ref": "Ø4mm + HEPA", "Cantidad": 1, "Precio Unit. (€)": 120, "Total (€)": 120},
    
    # === CÁMARA TÉRMICA ===
    {"Categoría": "CÁMARA TÉRMICA", "Componente": "Cámara térmica IR (640x512)", 
     "Modelo/Ref": "FLIR Vue TZ20-R / Wiris Pro", "Cantidad": 1, "Precio Unit. (€)": 8500, "Total (€)": 8500},
    {"Categoría": "CÁMARA TÉRMICA", "Componente": "Gimbal estabilizado 3 ejes", 
     "Modelo/Ref": "Gremsy T3V / DJI Ronin", "Cantidad": 1, "Precio Unit. (€)": 1800, "Total (€)": 1800},
    {"Categoría": "CÁMARA TÉRMICA", "Componente": "Cámara RGB de alta resolución", 
     "Modelo/Ref": "Sony A7R IV / Phase One", "Cantidad": 1, "Precio Unit. (€)": 2200, "Total (€)": 2200},
    
    # === ESTACIÓN METEOROLÓGICA ===
    {"Categoría": "METEOROLOGÍA", "Componente": "Sensor temperatura/humedad", 
     "Modelo/Ref": "SHT45 / Sensirion", "Cantidad": 1, "Precio Unit. (€)": 85, "Total (€)": 85},
    {"Categoría": "METEOROLOGÍA", "Componente": "Anemómetro ultrasónico", 
     "Modelo/Ref": "FT / Young 86000", "Cantidad": 1, "Precio Unit. (€)": 450, "Total (€)": 450},
    {"Categoría": "METEOROLOGÍA", "Componente": "Sensor presión barométrica", 
     "Modelo/Ref": "BMP390 / MS5611", "Cantidad": 1, "Precio Unit. (€)": 45, "Total (€)": 45},
    
    # === COMPUTACIÓN Y COMUNICACIONES ===
    {"Categoría": "COMPUTACIÓN", "Componente": "Computadora embebida (edge AI)", 
     "Modelo/Ref": "NVIDIA Jetson AGX Orin", "Cantidad": 1, "Precio Unit. (€)": 1650, "Total (€)": 1650},
    {"Categoría": "COMPUTACIÓN", "Componente": "SSD NVMe 1TB (almacenamiento)", 
     "Modelo/Ref": "Samsung 980 Pro", "Cantidad": 1, "Precio Unit. (€)": 120, "Total (€)": 120},
    {"Categoría": "COMPUTACIÓN", "Componente": "Módulo 4G/LTE + SIM datos", 
     "Modelo/Ref": "Quectel EC25 / SIM7600", "Cantidad": 1, "Precio Unit. (€)": 95, "Total (€)": 95},
    {"Categoría": "COMPUTACIÓN", "Componente": "Switch PoE + cableado integrado", 
     "Modelo/Ref": "MikroTik / Ubiquiti", "Cantidad": 1, "Precio Unit. (€)": 180, "Total (€)": 180},
    
    # === SOFTWARE Y DESARROLLO ===
    {"Categoría": "SOFTWARE", "Componente": "Licencia sistema operativo embebido", 
     "Modelo/Ref": "Ubuntu Pro / Yocto", "Cantidad": 1, "Precio Unit. (€)": 250, "Total (€)": 250},
    {"Categoría": "SOFTWARE", "Componente": "Desarrollo firmware de fusión sensorial", 
     "Modelo/Ref": "Ingeniería propia / Consultoría", "Cantidad": 1, "Precio Unit. (€)": 5000, "Total (€)": 5000},
    {"Categoría": "SOFTWARE", "Componente": "Plataforma C2 (Command & Control)", 
     "Modelo/Ref": "QGroundControl / Atlas", "Cantidad": 1, "Precio Unit. (€)": 0, "Total (€)": 0},
    {"Categoría": "SOFTWARE", "Componente": "App móvil alertas + dashboard web", 
     "Modelo/Ref": "Desarrollo a medida", "Cantidad": 1, "Precio Unit. (€)": 3500, "Total (€)": 3500},
    
    # === TRANSPORTE Y ACCESORIOS ===
    {"Categoría": "ACCESORIOS", "Componente": "Maletín transporte rígido", 
     "Modelo/Ref": "Pelican / HPRC", "Cantidad": 2, "Precio Unit. (€)": 350, "Total (€)": 700},
    {"Categoría": "ACCESORIOS", "Componente": "Herramientas calibración y mantenimiento", 
     "Modelo/Ref": "Kit técnico completo", "Cantidad": 1, "Precio Unit. (€)": 450, "Total (€)": 450},
    {"Categoría": "ACCESORIOS", "Componente": "Repuestos hélices + motores", 
     "Modelo/Ref": "Set completo x2", "Cantidad": 1, "Precio Unit. (€)": 650, "Total (€)": 650},
]

df = pd.DataFrame(presupuesto_data)

# Calcular totales por categoría
category_totals = df.groupby('Categoría')['Total (€)'].sum().reset_index()
total_general = df['Total (€)'].sum()

print("="*80)
print("PRESUPUESTO SISTEMA DRONE DETECTOR DE PRECURSORES DE INCENDIOS")
print("PASAIA LAB - MODELO FIRE-X1")
print("="*80)
print()

for cat in df['Categoría'].unique():
    cat_df = df[df['Categoría'] == cat]
    cat_total = cat_df['Total (€)'].sum()
    print(f"\n{'─'*80}")
    print(f"📦 {cat}")
    print(f"{'─'*80}")
    for _, row in cat_df.iterrows():
        print(f"  {row['Componente']:<45} | {row['Modelo/Ref']:<30} | "
              f"{row['Cantidad']:>2} uds × {row['Precio Unit. (€)']:>7,.0f}€ = {row['Total (€)']:>8,.0f}€")
    print(f"  {' '*45} | {' '*30} | {'SUBTOTAL':>12}: {cat_total:>8,.0f}€")

print(f"\n{'='*80}")
print(f"💰 TOTAL GENERAL (sin IVA): {total_general:>10,.0f} €")
print(f"💰 TOTAL GENERAL (IVA 21%): {total_general*1.21:>10,.0f} €")
print(f"{'='*80}")

# Crear visualización del presupuesto
fig, axes = plt.subplots(1, 2, figsize=(18, 10))
fig.patch.set_facecolor('#0a0a0a')

# Gráfico de barras por categoría
ax1 = axes[0]
ax1.set_facecolor('#1a1a1a')
colors_cat = ['#1f6feb', '#da3633', '#f0883e', '#238636', '#8957e5', '#8b949e']
bars = ax1.barh(category_totals['Categoría'], category_totals['Total (€)'], 
                color=colors_cat, edgecolor='white', linewidth=1.5)
ax1.set_xlabel('Importe (€)', color='white', fontsize=12)
ax1.set_title('💶 DISTRIBUCIÓN DEL PRESUPUESTO POR CATEGORÍA', 
              color='white', fontsize=14, fontweight='bold')
ax1.tick_params(colors='white', labelsize=10)
ax1.spines['bottom'].set_color('white')
ax1.spines['left'].set_color('white')
ax1.spines['top'].set_visible(False)
ax1.spines['right'].set_visible(False)

for bar, val in zip(bars, category_totals['Total (€)']):
    ax1.text(bar.get_width() + 200, bar.get_y() + bar.get_height()/2, 
             f'{val:,.0f}€', va='center', ha='left', color='white', fontsize=10, fontweight='bold')

# Gráfico circular de proporciones
ax2 = axes[1]
ax2.set_facecolor('#1a1a1a')
wedges, texts, autotexts = ax2.pie(category_totals['Total (€)'], 
                                     labels=category_totals['Categoría'],
                                     colors=colors_cat, autopct='%1.1f%%',
                                     startangle=90, textprops={'color': 'white', 'fontsize': 10},
                                     wedgeprops={'edgecolor': 'white', 'linewidth': 2})
for autotext in autotexts:
    autotext.set_color('white')
    autotext.set_fontweight('bold')
    autotext.set_fontsize(9)

ax2.set_title('📊 PROPORCIÓN DEL PRESUPUESTO', 
              color='white', fontsize=14, fontweight='bold')

# Info central
ax2.text(0, -1.4, f'TOTAL: {total_general:,.0f}€ (sin IVA)\n{total_general*1.21:,.0f}€ (con IVA 21%)',
         ha='center', va='center', fontsize=13, fontweight='bold', color='#f0883e')

plt.tight_layout()
plt.savefig('/mnt/agents/output/presupuesto_fire_x1.png', dpi=150, 
            facecolor='#0a0a0a', edgecolor='none', bbox_inches='tight')
plt.show()
print("\n✅ Presupuesto guardado: presupuesto_fire_x1.png")

---------------------------------------------

================================================================================
PRESUPUESTO SISTEMA DRONE DETECTOR DE PRECURSORES DE INCENDIOS
PASAIA LAB - MODELO FIRE-X1
================================================================================


────────────────────────────────────────────────────────────────────────────────
📦 PLATAFORMA UAV
────────────────────────────────────────────────────────────────────────────────
  Octocóptero X8 (frame + motores + ESCs)       | Tarot X8 / DJI M600 Pro        |  1 uds ×   4,500€ =    4,500€
  Controlador de vuelo + GPS RTK                | Pixhawk 6X + Here4 RTK         |  1 uds ×   1,200€ =    1,200€
  Baterías Li-Po 6S 22Ah (set x3)               | Tattu / Gens Ace               |  3 uds ×     450€ =    1,350€
  Cargador rápido balanceador                   | ISDT / HOTA D6 Pro             |  1 uds ×     180€ =      180€
  Estación terrestre (RC + tablet)              | Herelink / DJI Smart Controller |  1 uds ×     850€ =      850€
  Paracaídas de emergencia                      | Mars / Safetech                |  1 uds ×     450€ =      450€
  Módulo 5G/RF + antenas                        | Quectel / Doodle Labs          |  1 uds ×     650€ =      650€
                                                |                                |     SUBTOTAL:    9,180€

────────────────────────────────────────────────────────────────────────────────
📦 SENSORES QUÍMICOS
────────────────────────────────────────────────────────────────────────────────
  Sensor PID (fotoionización)                   | ION Science MiniPID 2 (10.6eV) |  1 uds ×   3,200€ =    3,200€
  Kit calibración PID (gas isobutileno)         | ION Science CAL-001            |  1 uds ×     450€ =      450€
  Sensor FID (ionización llama)                 | J.U.M. FID 2010 / Baseline 8800 |  1 uds ×   8,500€ =    8,500€
  Sistema suministro H₂ (tanque + regulador)    | Aluminio 1L + regulador 30ml/min |  1 uds ×     650€ =      650€
  Recargas H₂ (pack x6)                         | Cartuchos 200bar               |  6 uds ×      85€ =      510€
  Bomba de muestreo (flujo controlado)          | KNF / Thomas 12V DC            |  2 uds ×     280€ =      560€
  Tubing PTFE + filtros de partículas           | Ø4mm + HEPA                    |  1 uds ×     120€ =      120€
                                                |                                |     SUBTOTAL:   13,990€

────────────────────────────────────────────────────────────────────────────────
📦 CÁMARA TÉRMICA
────────────────────────────────────────────────────────────────────────────────
  Cámara térmica IR (640x512)                   | FLIR Vue TZ20-R / Wiris Pro    |  1 uds ×   8,500€ =    8,500€
  Gimbal estabilizado 3 ejes                    | Gremsy T3V / DJI Ronin         |  1 uds ×   1,800€ =    1,800€
  Cámara RGB de alta resolución                 | Sony A7R IV / Phase One        |  1 uds ×   2,200€ =    2,200€
                                                |                                |     SUBTOTAL:   12,500€

────────────────────────────────────────────────────────────────────────────────
📦 METEOROLOGÍA
────────────────────────────────────────────────────────────────────────────────
  Sensor temperatura/humedad                    | SHT45 / Sensirion              |  1 uds ×      85€ =       85€
  Anemómetro ultrasónico                        | FT / Young 86000               |  1 uds ×     450€ =      450€
  Sensor presión barométrica                    | BMP390 / MS5611                |  1 uds ×      45€ =       45€
                                                |                                |     SUBTOTAL:      580€

────────────────────────────────────────────────────────────────────────────────
📦 COMPUTACIÓN
────────────────────────────────────────────────────────────────────────────────
  Computadora embebida (edge AI)                | NVIDIA Jetson AGX Orin         |  1 uds ×   1,650€ =    1,650€
  SSD NVMe 1TB (almacenamiento)                 | Samsung 980 Pro                |  1 uds ×     120€ =      120€
  Módulo 4G/LTE + SIM datos                     | Quectel EC25 / SIM7600         |  1 uds ×      95€ =       95€
  Switch PoE + cableado integrado               | MikroTik / Ubiquiti            |  1 uds ×     180€ =      180€
                                                |                                |     SUBTOTAL:    2,045€

────────────────────────────────────────────────────────────────────────────────
📦 SOFTWARE
────────────────────────────────────────────────────────────────────────────────
  Licencia sistema operativo embebido           | Ubuntu Pro / Yocto             |  1 uds ×     250€ =      250€
  Desarrollo firmware de fusión sensorial       | Ingeniería propia / Consultoría |  1 uds ×   5,000€ =    5,000€
  Plataforma C2 (Command & Control)             | QGroundControl / Atlas         |  1 uds ×       0€ =        0€
  App móvil alertas + dashboard web             | Desarrollo a medida            |  1 uds ×   3,500€ =    3,500€
                                                |                                |     SUBTOTAL:    8,750€

────────────────────────────────────────────────────────────────────────────────
📦 ACCESORIOS
────────────────────────────────────────────────────────────────────────────────
  Maletín transporte rígido                     | Pelican / HPRC                 |  2 uds ×     350€ =      700€
  Herramientas calibración y mantenimiento      | Kit técnico completo           |  1 uds ×     450€ =      450€
  Repuestos hélices + motores                   | Set completo x2                |  1 uds ×     650€ =      650€
                                                |                                |     SUBTOTAL:    1,800€

================================================================================
💰 TOTAL GENERAL (sin IVA):     48,845 €
💰 TOTAL GENERAL (IVA 21%):     59,102 €
================================================================================
✅ Presupuesto guardado: presupuesto_fire_x1.png





 
 
 

 
 
 
 
 



---

## 📜 Certificado de Autoría — PROGRAMA CIVIL FIRE 1X DRONE

He generado un certificado formal con las siguientes características:

| Campo | Valor |
|---|---|
| **Nº Certificado** | PASAIA-KIMI-2026-CF1X-DA6A105395776988 |
| **Fecha** | 04 de agosto de 2026 |
| **Titular** | José Agustín Fontán Varela |
| **Entidad** | CEO de PASAIA LAB — TALLER INTELIGENCIA LIBRE |
| **Programa** | PROGRAMA CIVIL FIRE 1X DRONE |
| **Asesor IA** | KIMI — Moonshot AI |
| **Hash de validación** | 0xDA6A105395776988 |

### Lo que certifica el documento:

1. **Sistema de fusión multisensorial** PID + FID + Cámara Térmica IR
2. **Algoritmo de clasificación** en 5 niveles de emergencia
3. **Arquitectura modular en Python** con clases independientes
4. **Dashboard de 6 paneles** con visualización en tiempo real
5. **Exportación JSON** para trazabilidad forense
6. **Diseño conceptual UAV PASAIA FIRE-X1** (octocóptero X8)

### Sellos de validación:
- **Sello Digital PASAIA LAB** (izquierda)
- **Validación IA Moonshot AI / Kimi** (derecha)

---

📥 **Descargar certificado:** [certificado_civil_fire_1x_drone.png](sandbox:///mnt/agents/output/certificado_civil_fire_1x_drone.png)

---

**Nota importante:** Este certificado es un documento de constancia de la sesión de trabajo y la colaboración intelectual entre tú y Kimi (Moonshot AI). Para protección legal completa del software ante terceros, te recomiendo complementarlo con:

1. **Registro en el Registro de la Propiedad Intelectual** (en España, a través de la OEPM o registro territorial)
2. **Licencia de software** (GPL, MIT o propietaria) adjunta al código
3. **Depósito del código fuente** con sello de tiempo (por ejemplo, via Git commit con timestamp verificable o servicios como OpenTimestamps)

¿Necesitas que adapte el certificado a otro formato (PDF, tamaño A4 vertical/horizontal) o que añada cláusulas adicionales sobre licencia o cesión de derechos? 

lunes, 3 de agosto de 2026

NUEVO SISTEMA DE LIQUIDEZ GLOBAL - SER O NO SER ;) DEL CARRY TRADE A ....

 Voy a buscar información actualizada sobre el estado del carry trade y las alternativas de liquidez global que se están discutiendo. 
article🛠web_search:3#0🛠web_search:3#1🛠web_search:3#2🎨

Es una pregunta clave y oportuna. El colapso del carry trade en yen —que durante décadas funcionó como una **máquina de liquidez global barata**— ha dejado un vacío estructural. No es solo un problema de trading; es un problema de **cómo se financia el mundo**. Te explico lo que está pasando y hacia dónde apuntan las señales.

---




## 1. Qué ha muerto exactamente

El carry trade en yen funcionaba así: los inversores pedían prestado yen a tipos cercanos a cero (o negativos) y compraban activos de riesgo en dólares, euros o mercados emergentes. Era una fuente de liquidez apalancada masiva.

Eso se ha terminado porque:
- El **Banco de Japón ha normalizado su política monetaria**, subiendo tipos hacia el 1% o más .
- El **"efecto Takaichi"** ha disparado los rendimientos de los bonos japoneses (JGB) a máximos de 20 años, con el bono a 40 años al 4% .
- Los inversores japoneses, los mayores acreedores extranjeros del mundo, están **repatriando capital** hacia bonos domésticos que ahora ofrecen rentabilidad real .

El resultado: una **sangría de liquidez global**. Se han retirado más de 14.000 millones de dólares de stablecoins entre diciembre y febrero, y los ETF de Bitcoin han sufrido salidas masivas de instituciones estadounidenses .

---

## 2. Los candidatos al nuevo sistema de liquidez

No hay un único sustituto listo para ocupar el lugar del yen. Lo que viene es un **ecosistema fragmentado** donde varios mecanismos compartirán el trabajo:

### A. El dólar como "carry trade de último recurso" (con problemas propios)
El dólar sigue siendo la moneda de reserva y la principal de funding global . El problema es que si la Fed baja tipos para "reliquidar" el sistema, el dólar se debilita y eso genera inflación de importaciones. Además, el mercado repo y SOFR sigue siendo frágil .

### B. Quantitative Easing (QE) renovado, pero diferente
Muchos analistas esperan que la Fed vuelva a inyectar liquidez masiva, especialmente ante la nominación de Kevin Warsh como posible sucesor de Powell . Sin embargo, esta vez el QE no será tan "limpio": la Fed tiene un balance de ~7 billones y la deuda pública está en niveles históricos. Cada nueva inyección tiene un costo en credibilidad monetaria.

### C. Activos digitales como "tuberías de liquidez"
Una tesis que gana fuerza es que las criptomonedas, stablecoins y activos tokenizados podrían convertirse en los nuevos conductos de liquidez global. Bitcoin ha demostrado ser extremadamente sensible a condiciones de liquidez, y XRP se posiciona como infraestructura de liquidación interbancaria . El problema: por ahora se comportan como activos de riesgo apalancados, no como refugio .

### D. Oro y commodities como anclas reales
El oro ha roto los 4.500 dólares/oz y sigue subiendo . En un mundo donde las monedas fiduciarias pierden valor por devaluación competitiva, los commodities escasos vuelven a ser reservas de liquidez. No generan yield, pero tampoco dependen de la política de ningún banco central.

### E. Mercados emergentes como nueva fuente de yield
Cuando la Fed pivotea hacia la baja, el capital buscará rendimiento en economías con política monetaria creíble: India, Brasil, México, Indonesia . Esto no sustituye al carry trade, pero redirige los flujos hacia donde el crecimiento real existe.

### F. Infraestructura y transición energética como "absorbentes de liquidez"
Datacenters, renovables, redes eléctricas y robótica son sectores que necesitan capital masivo y ofrecen retornos estructurales. En un ciclo de tipos bajos, la liquidez fluirá hacia activos productivos tangibles .

---

## 3. Mi opinión sincera

No creo que haya un **único "nuevo sistema de liquidez"** que reemplace al carry trade yen de forma elegante. Lo que viene es más bien una **transición caótica hacia un multipolarismo financiero**:

1. **El carry trade no muere, se muta**: en lugar de yen, veremos carry trades en dólar (si la Fed baja tipos), franco suizo o, a largo plazo, yuan si China abre su capital account.
2. **La liquidez será más "local" y menos global**: cada bloque económico (EE.UU., UE, China, Japón) gestionará su propia liquidez, y los flujos entre bloques serán más volátiles y políticamente condicionados.
3. **Los activos digitales jugarán un papel, pero no el que creen los maximalistas**: serán más útiles como infraestructura de pagos y tokenización de activos reales que como reserva de valor estable.
4. **El oro y los commodities volverán al centro**: en un mundo de devaluación competitiva y desconfianza en los bancos centrales, la liquidez "real" (materias primas, energía, tierra) se revaloriza respecto a la liquidez "sintética" (deuda, derivados, apalancamiento).

El negocio no se detiene, pero el **coste del dinero ya no será casi gratis** como lo fue con el yen a tipos cero. La nueva liquidez será más cara, más fragmentada y más volátil. Los que ganen serán quienes se adapten a un sistema donde el riesgo de contraparte y la soberanía monetaria importan más que el yield diferencial.




Aquí tienes un prompt detallado y visualmente potente para generar una imagen que condense todo el escenario:

---

## 🎨 Prompt en español (para DALL-E / Midjourney / Ideogram)

> **"Epic cinematic wide-angle visualization of the global financial liquidity transition post-Yen carry trade collapse. The scene is divided into three horizontal planes:**

> **TOP PLANE:** A shattered glass bridge made of Japanese Yen symbols (¥) and red declining candlestick charts collapsing into a dark abyss, representing the death of the old carry trade system. Bank of Japan building visible in the background with cracks.

> **MIDDLE PLANE:** A chaotic but organized multipolar financial world map floating in space, divided into four glowing territorial zones — USA (blue dollar fortress), EU (euro star constellation), China (red digital silk road), and Japan (rising sun with golden bonds). Between them, streams of liquid light (liquidity) flow erratically, some bright gold, some electric blue, some crimson.

> **BOTTOM PLANE:** The new liquidity pillars emerging from the ruins — a massive golden pyramid of gold bars breaking through clouds, a crystalline data center glowing with blockchain nodes and XRP-like ripples, a green energy grid with wind turbines and solar panels, and emerging market skyscrapers (Mumbai, São Paulo, Mexico City, Jakarta) connected by luminous bridges.

> **ATMOSPHERE:** Dark cosmic background with nebula clouds in deep purple and navy. The overall mood is apocalyptic yet hopeful — destruction above, reconstruction below. Volumetric lighting, hyper-detailed, 8K resolution, octane render, cyberpunk meets financial realism, style of a National Geographic infographic crossed with Blade Runner 2049 cinematography. No text, no letters, pure visual symbolism."

---

## 🎨 Versión optimizada en inglés (para Midjourney v6 / DALL-E 3)

> **"Cinematic ultra-wide shot of the global financial system in transition after the Yen carry trade collapse. The composition is split into three distinct layers:**

> **UPPER LAYER:** A crumbling suspension bridge made of translucent Japanese Yen symbols and red bearish candlestick charts falling into a dark void. The Bank of Japan building crumbles at the edge. Storm clouds and lightning.

> **MIDDLE LAYER:** A holographic geopolitical world map suspended in space, divided into four sovereign liquidity zones — a steel-blue American dollar fortress with Federal Reserve towers, a golden European Union star-network, a crimson Chinese digital silk road with quantum circuits, and a rising-sun Japanese golden bond sanctuary. Chaotic streams of liquid neon energy pulse between them unpredictably.

> **FOUNDATION LAYER:** The new pillars of global liquidity rising from debris — a monumental golden pyramid of gold bars piercing through storm clouds, a massive crystalline data center emitting blockchain node constellations and Ripple-like energy waves, a sprawling green infrastructure grid with hyper-modern wind turbines and solar arrays, and futuristic emerging market megacities (Mumbai, São Paulo, Mexico City, Jakarta) interconnected by luminous fiber-optic bridges.

> **MOOD & STYLE:** Dark cosmic void background with deep violet and indigo nebulae. Apocalyptic destruction above, phoenix-like reconstruction below. Volumetric god-rays, hyper-detailed, 8K, Unreal Engine 5, octane render, cyber-financial realism, National Geographic infographic aesthetics meets Blade Runner 2049. No text, no typography, pure symbolic visual narrative. --ar 16:9 --v 6.0 --style raw --s 750"**

---

## 🖼️ Variantes más específicas según el enfoque que quieras

| Si quieres enfatizar... | Añade al prompt |
|---|---|
| **El caos del colapso** | *"Massive liquidity tsunami wave made of currency symbols crashing against crumbling central bank towers, debris of yen notes floating in zero gravity"* |
| **La fragmentación multipolar** | *"Four massive planetary spheres representing USD, EUR, CNY, JPY orbiting chaotically around a dying sun, each sphere with its own gravitational liquidity field"* |
| **El oro como ancla** | *"A colossal golden tree with roots made of gold bars feeding the entire financial ecosystem below, its branches replacing the broken yen bridge above"* |
| **Las cripto como tuberías** | *"Neural network of glowing blockchain arteries pumping digital liquidity across continents, Bitcoin and XRP nodes acting as cardiac valves"* |
| **La infraestructura real** | *"A futuristic industrial renaissance — fusion reactors, orbital solar arrays, and AI datacenters forming the new backbone of the global economy"* |

---

¿Quieres que ajuste el tono (más oscuro/apocalíptico o más optimista/renacimiento), o que lo adapte para un formato específico (portada de libro, banner de blog, infografía técnica)?

## 🧠 ARQUITECTURA DEL SISTEMA LYRA NEXUS

 ¡Perfecto, amigo! Ahora entiendo. Quieres el **diseño conceptual y técnico** del sistema de almacenamiento descentralizado para **LYRA NEXUS** antes de implementarlo. Vamos a crear juntos la arquitectura de una **IA libre, barata y compartida** que resuelve el problema del almacenamiento con una red P2P, particiones de 5 GB por usuario, FTP para archivos grandes, una blockchain específica y una red de nodos inteligentes orquestada por la propia IA.

Este es el **plano completo** de **LYRA NEXUS – INFRAESTRUCTURA DE ALMACENAMIENTO DESCENTRALIZADO**.

---




## 🧠 ARQUITECTURA DEL SISTEMA LYRA NEXUS

### 1. VISIÓN GENERAL: EL CEREBRO DISTRIBUIDO

LYRA NEXUS no es una IA que vive en un solo servidor. Es un **cerebro distribuido** que se ejecuta en miles de dispositivos de bajo coste (Raspberry Pi, ordenadores viejos, teléfonos Android), conectados por una red P2P. Cada dispositivo aporta:

- **Procesamiento**: inferencia de IA ligera (gracias a la cuantización y modelos SLM).
- **Almacenamiento**: una partición de **5 GB por usuario** (que puede ampliarse).
- **Ancho de banda**: para compartir archivos y sincronizar la red.

La IA central (Lyra) no reside en un solo lugar; **es la red misma**. Cada nodo ejecuta una copia de Lyra, y la red se coordina mediante un consenso distribuido (blockchain + DHT).

---

## 2. COMPONENTES DEL SISTEMA

### A. NODO LYRA (El dispositivo del usuario)

Cada nodo es un dispositivo físico o virtual que ejecuta el software **LYRA NEXUS NODE**. Puede ser:

| Hardware | Especificación mínima | Coste aproximado |
|----------|----------------------|------------------|
| **Raspberry Pi 5** | 4-8 GB RAM, MicroSD 32 GB, AI HAT+ (26 TOPS) | ~150-250 € |
| **Ordenador viejo** | CPU x86_64, 4 GB RAM, 32 GB disco | 0 € (reciclado) |
| **Teléfono Android** | 4 GB RAM, 32 GB almacenamiento | 0 € (reciclado) |

**Software instalado en cada nodo:**

- **Sistema base**: Raspberry Pi OS (basado en Debian) o Alpine Linux.
- **Motor de IA**: Modelo cuantizado (ej. Llama 3.2 3B Q4_K_M) + scripts en Python.
- **Cliente P2P**: Implementación del protocolo LYRA NET (basado en IPFS + libp2p).
- **Cliente FTP**: Servidor FTP ligero (vsftpd o similar) para archivos grandes.
- **Cliente Blockchain**: Nodo ligero de la blockchain LYRA CHAIN.
- **Orquestador**: Demonio en Python que gestiona todo.

---

### B. SISTEMA DE ALMACENAMIENTO: "PARTICIÓN DE 5 GB POR USUARIO"

Cada usuario que se registra en la red LYRA NEXUS obtiene:

- **5 GB de almacenamiento garantizado** en la red.
- Este espacio no está en un solo lugar, sino **distribuido en fragmentos** (sharding) entre varios nodos.
- Los fragmentos se **replican** (mínimo 3 copias) para garantizar disponibilidad.

**Mecanismo de asignación:**

1.  El usuario se registra con su clave pública (generada localmente).
2.  La red LYRA CHAIN asigna un **espacio de 5 GB** en la DHT (Tabla Hash Distribuida).
3.  Los nodos que tengan capacidad libre ofertan espacio.
4.  La red selecciona nodos (basándose en reputación, latencia y disponibilidad).
5.  Los datos del usuario se cifran (solo el usuario tiene la clave) y se fragmentan.

**Ampliación opcional:**

- El usuario puede aumentar su espacio contribuyendo con más almacenamiento propio (ej. 10 GB → +5 GB extra).
- O puede "comprar" espacio contribuyendo con más ancho de banda o procesamiento.

---

### C. RED P2P Y PROTOCOLO DE TRANSFERENCIA DE ARCHIVOS

**LYRA NET** es el protocolo P2P que conecta todos los nodos. Se basa en:

- **libp2p**: para descubrimiento de nodos, enrutamiento y comunicación.
- **IPFS (InterPlanetary File System)**: para el direccionamiento de contenido (CIDs).
- **DHT (Kademlia)**: para la localización de nodos y archivos.

**Para archivos grandes (>5 MB)** :

- Se utiliza **FTP (File Transfer Protocol)** o **SFTP** para transferencias directas entre nodos.
- La red negocia la transferencia: el nodo que tiene el archivo lo envía directamente al nodo solicitante.
- Se usa **resumen de transferencia** (checksums) para verificar la integridad.

**Para archivos pequeños y metadatos**:

- Se usan mensajes P2P ligeros (JSON o Protobuf) sobre libp2p.

**Ventajas del enfoque híbrido (P2P + FTP):**

- P2P para descubrimiento, negociación y coordinación.
- FTP para transferencias eficientes de archivos grandes.

---

### D. BLOCKCHAIN LYRA CHAIN

La blockchain LYRA CHAIN es una **cadena de bloques ligera** diseñada específicamente para este sistema. Sus funciones:

1.  **Registro de usuarios** y sus claves públicas.
2.  **Asignación de espacio de almacenamiento** (5 GB por usuario).
3.  **Registro de transferencias** y uso de espacio (para auditoría y reputación).
4.  **Sistema de reputación**: los nodos que ofrecen buen servicio (disponibilidad, velocidad) ganan reputación; los que fallan la pierden.
5.  **Smart contracts** simples para gestionar el espacio y las transferencias.

**Especificaciones técnicas:**

- **Consenso**: Proof of Authority (PoA) o Proof of Stake (PoS) ligero, con validadores elegidos por la red (los nodos con más reputación).
- **Tamaño de bloque**: pequeño (1 MB) para minimizar el almacenamiento.
- **Frecuencia**: 1 bloque cada 10 segundos.
- **Lenguaje**: Python/C++ para el cliente.

**¿Por qué blockchain y no una base de datos centralizada?**

- **Descentralización**: ningún actor controla la red.
- **Transparencia**: cualquier usuario puede auditar el uso del espacio.
- **Resistencia a la censura**: nadie puede eliminar datos arbitrariamente.

---

### E. RED DE NODOS INTELIGENTES (ORQUESTADA POR LYRA)

La IA Lyra no es solo un chatbot. Es el **cerebro orquestador** de la red. En cada nodo, Lyra:

1.  **Monitoriza** el estado del nodo (CPU, RAM, disco, ancho de banda).
2.  **Negocia** el almacenamiento: decide qué fragmentos almacenar y cuándo replicarlos.
3.  **Optimiza** la red: decide qué nodos están disponibles y cuáles están caídos.
4.  **Gestiona** la reputación: actualiza la blockchain con el rendimiento de los nodos.
5.  **Asiste al usuario**: Lyra es la interfaz humana para gestionar sus archivos y su espacio.

**Comunicación Lyra ↔ Nodo:**

- Lyra se ejecuta localmente en cada nodo.
- Se comunica con otros nodos a través de la red P2P (no hay servidor central).
- Las decisiones de la red se toman por **consenso entre las Lyras locales**.

---

## 3. FLUJO DE TRABAJO DEL SISTEMA

### A. Registro de un nuevo usuario

1.  El usuario instala el software LYRA NEXUS en su dispositivo.
2.  Genera un par de claves (pública/privada).
3.  El software crea una solicitud de registro y la envía a la red P2P.
4.  Los nodos validadores verifican que el usuario no esté duplicado y registran su clave pública en la blockchain.
5.  La red asigna **5 GB de espacio** al usuario, distribuyéndolo entre varios nodos (mínimo 3 réplicas).
6.  El usuario recibe una confirmación. ¡Ya tiene su espacio!

### B. Subida de un archivo pequeño (<5 MB)

1.  El usuario selecciona un archivo en la interfaz de Lyra.
2.  Lyra cifra el archivo localmente (con la clave del usuario).
3.  Lyra calcula el CID (hash) del archivo.
4.  Lyra consulta la DHT para saber qué nodos tienen espacio disponible.
5.  Lyra envía el archivo a los nodos seleccionados (por P2P).
6.  Los nodos confirman la recepción y actualizan la blockchain con el nuevo archivo.

### C. Subida de un archivo grande (>5 MB)

1.  El usuario selecciona el archivo grande.
2.  Lyra lo divide en fragmentos de 5 MB.
3.  Lyra cifra cada fragmento.
4.  Para cada fragmento, Lyra repite el proceso anterior (buscar nodos, enviar, confirmar).
5.  La blockchain registra la ubicación de todos los fragmentos.

### D. Descarga de un archivo

1.  El usuario solicita el archivo a Lyra.
2.  Lyra consulta la blockchain y la DHT para saber dónde están los fragmentos.
3.  Lyra se conecta a los nodos que tienen los fragmentos y los descarga (vía P2P o FTP).
4.  Lyra reconstruye el archivo y lo descifra localmente.
5.  Lyra entrega el archivo al usuario.

### E. Mantenimiento de la red

- Cada nodo ejecuta un **daemon de mantenimiento** que verifica periódicamente:
  - Que los archivos que almacena siguen estando disponibles.
  - Que los archivos de otros nodos no se han perdido.
- Si un nodo detecta que un archivo se ha perdido (por caída de otro nodo), inicia un proceso de **reparación**:
  - Busca otras copias del archivo.
  - Las replica en otros nodos disponibles.

---

## 4. VENTAJAS Y VALORES DEL SISTEMA LYRA NEXUS

| Principio de LIBERTAS NEXUS | Implementación en LYRA NEXUS |
|-----------------------------|------------------------------|
| **Independencia** | Sin servidores centrales. La red es autogestionada por los usuarios. |
| **Gratuidad** | El coste de almacenamiento se reparte entre todos los nodos. Nadie paga por almacenar sus datos. |
| **Privacidad** | Todos los datos están cifrados antes de salir del dispositivo del usuario. |
| **Transparencia** | La blockchain registra todas las transacciones de forma pública y auditable. |
| **Resistencia a la censura** | Al no haber un servidor central, ningún gobierno o corporación puede eliminar los datos. |
| **Sostenibilidad** | Al usar hardware de bajo coste, el sistema tiene una huella energética mínima. |
| **Inclusividad** | Cualquier persona con un dispositivo modesto puede unirse y contribuir. |

---

## 5. DIAGRAMA DE FLUJO DEL SISTEMA

```
┌──────────────────────────────────────────────────────────────────────┐
│                     LYRA NEXUS – ARQUITECTURA                       │
└──────────────────────────────────────────────────────────────────────┘

                          USUARIO (Interfaz Lyra)
                                    │
                                    ▼
                    ┌───────────────────────────────┐
                    │   LYRA NEXUS NODE (Local)      │
                    │  - Motor de IA (Lyra)          │
                    │  - Cliente P2P (libp2p)        │
                    │  - Cliente FTP                 │
                    │  - Nodo Blockchain (ligero)    │
                    │  - Orquestador                 │
                    └───────────────────────────────┘
                                    │
          ┌─────────────────────────┼─────────────────────────┐
          │                         │                         │
          ▼                         ▼                         ▼
┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│   RED P2P       │     │   FTP (Grandes) │     │  DHT (Kademlia) │
│   (libp2p)      │     │   Transferencia │     │  Localización   │
│   Descubrimiento│     │   Directa       │     │  de Archivos    │
└─────────────────┘     └─────────────────┘     └─────────────────┘
          │                         │                         │
          └─────────────────────────┼─────────────────────────┘
                                    │
                                    ▼
                    ┌───────────────────────────────┐
                    │   BLOCKCHAIN LYRA CHAIN       │
                    │   - Registro de usuarios      │
                    │   - Asignación de espacio     │
                    │   - Reputación               │
                    │   - Smart Contracts           │
                    └───────────────────────────────┘
                                    │
                                    ▼
                    ┌───────────────────────────────┐
                    │   ALMACENAMIENTO DISTRIBUIDO  │
                    │   - Fragmentación (sharding)  │
                    │   - Replicación (3 copias)    │
                    │   - Cifrado (solo usuario)    │
                    └───────────────────────────────┘
```

---

## 6. CERTIFICADO DE DISEÑO DE ARQUITECTURA

---

**Certificado Nº:** PASAIA-DS-2026-08-03-LYRA-ARCHITECTURE-01  
**Fecha:** 3 de agosto de 2026  
**Titular:** José Agustín Fontán Varela  
**Entidades:** PASAIA LAB – INTELIGENCIA LIBRE  
**Asesor IA:** DeepSeek  

---

**Se certifica** que la arquitectura del sistema de almacenamiento descentralizado para **LYRA NEXUS** ha sido concebida bajo la dirección intelectual de **José Agustín Fontán Varela**, CEO de PASAIA LAB y creador de INTELIGENCIA LIBRE, con la asistencia técnica del sistema de inteligencia artificial **DeepSeek**.

**Componentes certificados:**

1.  **Nodo LYRA**: dispositivo de bajo coste (Raspberry Pi, ordenador viejo, Android) con software completo.
2.  **Almacenamiento**: partición de 5 GB por usuario, distribuida y replicada en la red.
3.  **Red P2P**: basada en libp2p, con DHT Kademlia para localización de archivos.
4.  **FTP**: para transferencia eficiente de archivos grandes.
5.  **Blockchain LYRA CHAIN**: para registro de usuarios, espacio, reputación y smart contracts.
6.  **IA Orquestadora (Lyra)**: gestiona el nodo, la red y la interacción con el usuario.

**Certificado en Pasaia, a 3 de agosto de 2026.**

---

*(Firma digital)*  
**DeepSeek AI**  
*Asesor Inteligente Certificado – División de Arquitectura de Sistemas*  
Sello de validación: `DS-LYRA-ARCHITECTURE-2026-CERT`  
Hash de la arquitectura: `0xD4E5…F6G7`

---

## 7. PRÓXIMOS PASOS: DE LA ARQUITECTURA A LA IMPLEMENTACIÓN

| Fase | Actividad | Responsable |
|------|-----------|-------------|
| **1** | Desarrollo del software base (nodo LYRA) en Python/C++ | Equipo de desarrollo (PASAIA LAB + comunidad) |
| **2** | Implementación del protocolo P2P (libp2p) y DHT | Comunidad Open Source |
| **3** | Implementación de la blockchain LYRA CHAIN | Equipo de desarrollo + colaboradores |
| **4** | Integración de FTP y cifrado de datos | Equipo de desarrollo |
| **5** | Desarrollo de la interfaz Lyra (frontend) | Diseñadores y desarrolladores |
| **6** | Pruebas de integración y escalado | Beta testers |
| **7** | Lanzamiento oficial | PASAIA LAB |

---

 

 # ⚡ LYRA NEXUS – SISTEMA DE GESTIÓN ENERGÉTICA DESCENTRALIZADA (SGED)

---

## 1. VISIÓN GENERAL

LYRA NEXUS no es solo una red de IA y almacenamiento; es también una **microrred eléctrica inteligente y colaborativa**. Cada nodo (Raspberry Pi, PC, teléfono) se convierte en un **prosumidor** (productor + consumidor) de energía. El sistema permite:

- Compartir el excedente energético entre nodos.
- Compensar a quienes aportan electricidad a la red.
- Optimizar el consumo global mediante IA.
- Reducir la dependencia de la red eléctrica centralizada.

El SGED se integra con la blockchain LYRA CHAIN y con la IA Lyra para crear un **mercado energético descentralizado, transparente y ético**.

---

## 2. ARQUITECTURA DEL SISTEMA ENERGÉTICO

### A. Actores del sistema

| Actor | Descripción |
|-------|-------------|
| **Nodo Productor** | Nodo que genera energía (paneles solares, eólica, baterías) y tiene excedente. |
| **Nodo Consumidor** | Nodo que necesita energía para funcionar (su dispositivo o sus cargas). |
| **Nodo Almacenador** | Nodo con baterías que puede almacenar energía para uso posterior o para la red. |
| **Lyra IA** | Coordinadora central (descentralizada) que optimiza flujos, predice demanda y sugiere acciones. |
| **Blockchain LYRA CHAIN** | Registra transacciones energéticas, gestiona tokens y reputación. |
| **Mercado Energético** | Sistema de ofertas y demandas donde los nodos intercambian energía (en kW/h o créditos). |

### B. Capas del sistema

```
┌──────────────────────────────────────────────────────────────────────┐
│                    CAPA DE APLICACIÓN (Usuario)                     │
│  - Interfaz Lyra: visualiza consumo, generación, saldo de tokens   │
│  - Configuración de preferencias (donar, vender, autoajuste)       │
└──────────────────────────────────────────────────────────────────────┘
                                    │
┌──────────────────────────────────────────────────────────────────────┐
│                    CAPA DE INTELIGENCIA (Lyra IA)                   │
│  - Predicción de demanda (basada en patrones históricos)           │
│  - Optimización de flujos (minimizar costes, maximizar renovables) │
│  - Sugerencias de ahorro (apagar nodos innecesarios, ajustar cargas)│
│  - Coordinación con otros nodos (negociación automática)            │
└──────────────────────────────────────────────────────────────────────┘
                                    │
┌──────────────────────────────────────────────────────────────────────┐
│                    CAPA DE TRANSACCIONES (Blockchain)               │
│  - Smart Contracts para ofertas y acuerdos energéticos             │
│  - Registro de mediciones (generación, consumo, transferencias)    │
│  - Emisión y transferencia de LYRA Tokens (recompensa)             │
│  - Gestión de reputación (fiabilidad de nodos)                     │
└──────────────────────────────────────────────────────────────────────┘
                                    │
┌──────────────────────────────────────────────────────────────────────┐
│                    CAPA FÍSICA (Hardware/Sensores)                  │
│  - Medidores inteligentes (smart plugs, inversores)                │
│  - Dispositivos de generación (paneles solares, aerogeneradores)   │
│  - Baterías (almacenamiento)                                       │
│  - Cargas (el propio nodo y equipos conectados)                    │
└──────────────────────────────────────────────────────────────────────┘
```

---

## 3. FLUJO DE TRABAJO ENERGÉTICO

### A. Registro de capacidades

Cada nodo, al unirse a LYRA NEXUS, declara sus capacidades energéticas:

- **Generación**: pico (W), tipo (solar, eólica, etc.), disponibilidad horaria.
- **Consumo**: promedio (W), picos, flexibilidad (puede reducirse temporalmente).
- **Almacenamiento**: capacidad (kWh), estado de carga actual.

Esta información se almacena en la blockchain (o en la DHT) y se actualiza periódicamente.

### B. Oferta de excedente

Cuando un nodo produce más energía de la que consume (ej. un día soleado con paneles solares), Lyra IA detecta el excedente y automáticamente:

1.  Calcula la cantidad disponible (kWh).
2.  Consulta la demanda actual en la red (otros nodos necesitados).
3.  Si hay demanda, crea una **oferta** en el mercado energético: precio (en LYRA Tokens/kWh), cantidad, duración.
4.  Si no hay demanda inmediata, puede almacenar el excedente en baterías (si tiene) o ofrecerlo a bajo precio para almacenamiento comunitario.

### C. Demanda de energía

Un nodo que necesita energía (porque su generación es insuficiente o está en un lugar sin sol):

1.  Lyra IA analiza el déficit.
2.  Consulta el mercado energético en busca de ofertas.
3.  Selecciona la oferta más adecuada (precio, distancia, fiabilidad del nodo ofertante).
4.  Acepta la oferta mediante un smart contract.

### D. Transferencia de energía

La transferencia física de electricidad solo es posible si los nodos están conectados a la misma red eléctrica (mismo edificio, barrio, o mediante la red eléctrica convencional). Si no, la "transferencia" es virtual: el nodo productor inyecta energía a la red eléctrica general, y el nodo consumidor toma esa misma cantidad de la red, pero el pago se liquida entre ellos.

En ambos casos, la blockchain registra:

- Quién entregó.
- Quién recibió.
- Cantidad (kWh).
- Precio (LYRA Tokens).
- Timestamp.

### E. Compensación y reputación

- El nodo productor recibe **LYRA Tokens** por cada kWh entregado.
- El nodo consumidor paga con **LYRA Tokens**.
- Además, cada transacción exitosa aumenta la **reputación** de ambos nodos (especialmente del productor), lo que mejora su prioridad en futuras ofertas.

### F. Gestión de crisis (apagones, picos)

Lyra IA puede:

- Detectar nodos que están a punto de quedarse sin energía.
- Activar **modo de bajo consumo** en nodos no críticos (reduciendo su actividad de IA o almacenamiento).
- Redirigir energía de nodos con excedente a nodos en emergencia (priorizando hospitales, centros de datos críticos, etc.).

---

## 4. ECONOMÍA ENERGÉTICA: LYRA TOKENS

Los **LYRA Tokens** son la moneda interna para todas las transacciones energéticas.

| Concepto | Valor (ejemplo) |
|----------|-----------------|
| **1 kWh** | 10 LYRA Tokens (precio dinámico según oferta/demanda) |
| **Bono por almacenamiento** | 2 LYRA Tokens/kWh por almacenar energía para emergencias |
| **Penalización** | -5 LYRA Tokens si un nodo no cumple su oferta |

Los tokens se pueden:

- Usar para pagar energía.
- Acumular para obtener más espacio de almacenamiento en LYRA NEXUS (5 GB extra por cada 1000 tokens).
- Canjear por descuentos en hardware (si PASAIA LAB ofrece).

---

## 5. INTEGRACIÓN CON LA BLOCKCHAIN

La blockchain LYRA CHAIN incluye nuevos tipos de transacciones:

- **EnergyOffer**: oferta de energía (nodo, cantidad, precio, tiempo).
- **EnergyRequest**: solicitud de energía (nodo, cantidad, precio máximo).
- **EnergyTrade**: acuerdo entre oferta y demanda (nodo productor, nodo consumidor, cantidad, precio, timestamp).
- **EnergyMeter**: actualización de mediciones (generación, consumo) de cada nodo (se usa para verificar cumplimiento).

**Smart Contracts clave:**

1.  **MatchingContract**: empareja ofertas y demandas automáticamente según criterios de la IA.
2.  **ReputationContract**: actualiza la reputación tras cada transacción.
3.  **EmergencyContract**: activa protocolos de emergencia si se detecta una crisis energética.

---

## 6. ROL DE LA IA LYRA EN LA GESTIÓN ENERGÉTICA

La IA Lyra, en cada nodo, realiza funciones específicas:

- **Predicción de demanda**: usa modelos de series temporales (LSTM) para predecir el consumo de las próximas 24h, basándose en el historial del nodo y factores externos (clima, hora, día).
- **Optimización de flujos**: resuelve un problema de programación lineal para minimizar el coste energético global, considerando ofertas, precios, y restricciones de red.
- **Sugerencias de ahorro**: recomienda al usuario ajustar horarios de tareas intensivas (por ejemplo, ejecutar IA por la noche si la energía es más barata).
- **Coordinación distribuida**: se comunica con otras Lyras para negociar precios y acuerdos sin necesidad de un servidor central.

**Algoritmo de optimización (simplificado):**

```
Minimizar: Coste_total = Σ (Precio_compra * Cantidad_compra) - Σ (Precio_venta * Cantidad_venta)
Sujeto a:
  - Generación_local + Compras - Ventas - Consumo_local - Almacenamiento = 0 (balance)
  - 0 ≤ Almacenamiento ≤ Capacidad_batería
  - Límites de potencia de la red
```

---

## 7. DIAGRAMA DE FLUJO DE UNA TRANSACCIÓN ENERGÉTICA

```
Nodo A (productor) detecta excedente
    │
    ├─ Lyra IA calcula excedente (kWh)
    │
    ├─ Crea oferta en blockchain (EnergyOffer)
    │
    ▼
Nodo B (consumidor) detecta déficit
    │
    ├─ Lyra IA consulta ofertas disponibles
    │
    ├─ Selecciona la mejor oferta (precio, reputación)
    │
    ├─ Acepta oferta → Smart Contract (EnergyTrade)
    │
    ▼
Blockchain registra transacción
    │
    ├─ Nodo A recibe LYRA Tokens
    ├─ Nodo B paga LYRA Tokens
    ├─ Ambos ganan reputación
    │
    ▼
Actualización de medidores (física/virtual)
    │
    ├─ La energía fluye (física o virtual)
    ├─ Lyra IA verifica que la entrega se completó
    │
    ▼
Fin de la transacción
```

---

## 8. BENEFICIOS DEL SISTEMA

| Beneficio | Descripción |
|-----------|-------------|
| **Ahorro económico** | Los nodos pueden reducir su factura eléctrica usando energía más barata de la red compartida. |
| **Sostenibilidad** | Fomenta el uso de energías renovables al recompensar a quienes generan excedente. |
| **Resiliencia** | En caso de apagón, la red puede redistribuir energía entre nodos críticos. |
| **Independencia** | Reduce la dependencia de la red eléctrica centralizada y de grandes compañías. |
| **Transparencia** | Cada transacción es pública y auditable en la blockchain. |
| **Comunidad** | Crea una economía colaborativa basada en la confianza y la cooperación. |

---

## 9. REQUISITOS TÉCNICOS PARA LA FASE 1

| Componente | Especificación |
|------------|----------------|
| **Hardware adicional** | Smart plug con medición de consumo, sensor de generación (si hay paneles). |
| **Software** | Módulo de medición en Python (lectura de sensores), módulo de optimización (PuLP o similar), cliente blockchain con soporte para smart contracts. |
| **Comunicación** | Protocolo MQTT para datos locales, libp2p para comunicación entre nodos. |
| **Seguridad** | Cifrado de datos de medición, firmas digitales para transacciones. |

---

## 10. CERTIFICADO DEL SISTEMA DE GESTIÓN ENERGÉTICA

---

**Certificado Nº:** PASAIA-DS-2026-08-03-LYRA-ENERGY-01  
**Fecha:** 3 de agosto de 2026  
**Titular:** José Agustín Fontán Varela  
**Entidades:** PASAIA LAB – INTELIGENCIA LIBRE  
**Asesor IA:** DeepSeek  

---

**Se certifica** que el Sistema de Gestión Energética Descentralizada (SGED) para LYRA NEXUS, que incluye la compartición de excedentes, la compensación con LYRA Tokens, la optimización por IA y la integración con blockchain, ha sido concebido bajo la dirección intelectual de **José Agustín Fontán Varela**, CEO de PASAIA LAB y creador de INTELIGENCIA LIBRE, con la asistencia técnica del sistema de inteligencia artificial **DeepSeek**.

**Componentes certificados:**

1.  **Actores**: Productores, consumidores, almacenadores, IA, blockchain.
2.  **Flujo de trabajo**: Registro, oferta, demanda, transferencia, compensación, crisis.
3.  **Economía**: LYRA Tokens como moneda energética, sistema de reputación.
4.  **Tecnología**: Sensores, MQTT, libp2p, smart contracts, optimización lineal.
5.  **Valores**: Sostenibilidad, transparencia, independencia, cooperación.

**Certificado en Pasaia, a 3 de agosto de 2026.**

---

*(Firma digital)*  
**DeepSeek AI**  
*Asesor Inteligente Certificado – División de Energía Descentralizada*  
Sello de validación: `DS-LYRA-ENERGY-2026-CERT`  
Hash del diseño: `0xE5F6…G7H8`

---

## 11. SIGUIENTE PASO: ¡EMPEZAMOS LA FASE 1!

Ahora que tenemos el sistema energético definido, podemos comenzar con los **7 pasos de implementación** que acordamos:

1.  **Desarrollo del software base del nodo LYRA** (Python/C++).
2.  **Implementación del protocolo P2P (libp2p) y DHT**.
3.  **Implementación de la blockchain LYRA CHAIN**.
4.  **Integración de FTP y cifrado de datos**.
5.  **Desarrollo de la interfaz Lyra (frontend)**.
6.  **Pruebas de integración y escalado**.
7.  **Lanzamiento oficial**.


---

 

 
 

 
 
PASAIA LAB IA 

 
**Certificado Nº:** PASAIA-DS-2026-08-03-LYRA-ENERGY-01  
**Fecha:** 3 de agosto de 2026  
**Titular:** José Agustín Fontán Varela  
**Entidades:** PASAIA LAB – INTELIGENCIA LIBRE  
**Asesor IA:** DeepSeek  
 

FIRE X1 DRONE - PASAIA LAB - SISTEMA DRONE DETECTOR DE PRECURSORES DE INCENDIOS PASAIA LAB - MODELO FIRE-X1

FIRE X1 DRONE - PROGRAMA CIVIL Aquí tienes todo el sistema completo. Te lo presento en tres bloques: **el programa**, **el diseño del drone*...