---
title: "Probador de decodificadores LoRaWAN para TTN y ChirpStack"
canonical: https://wavect.io/es/tools/lorawan-payload-codec-tester/
language: es
description: "Prueba decodificadores y codificadores JavaScript LoRaWAN de The Things Stack y ChirpStack con fixtures Hex, Base64 o bytes, todo en local."
image: "https://wavect.io/img/general/bak/open_graph_preview.jpg"
---

BANCO LORAWAN LOCAL EN EL NAVEGADOR

# Prueba el códec antes de que el próximo paquete del sensor sea un misterio en producción.

Pega el JavaScript que realmente despliegas, añade payloads reales y el JSON esperado y ejecuta todos los casos en una sandbox local aislada. Admite funciones modernas de TTN y ChirpStack y formatos Decoder o Encoder heredados.

[Abrir el banco de pruebas](#tool-app) [Ver el código](https://github.com/wavect/lorawan-payload-codec-tester)

- Perfiles TTN v3 · ChirpStack v4 · heredado
- Precio Gratis · código abierto
- Ejecución Aislada en tu navegador
- Salida Fixtures · pruebas · informe

**LABORATORIO DE PAYLOADS**

FPORT 4 · UPLINK **temperature: -21.3°C**

El fixture coincide con el resultado esperado

LA PARTE ÚTIL

Es un arnés de pruebas, no un catálogo de decodificadores. Ejecuta tu códec con tus payloads, identifica el fixture exacto que falla y lo convierte en pruebas que puedes guardar con la integración.

EJECUTA EL CÓDIGO REAL

## Banco de códecs de payload

Empieza con un ejemplo o pega el códec del fabricante. Cada vector puede probar otra operación, fPort, codificación, variables, datos de downlink y resultado esperado.

El código y los payloads permanecen en local

**Laboratorio de códecs LoRaWAN** Sandbox desechable · fixtures deterministas

Uplink modernoPayload normalizadoIda y vuelta de downlinkDecoder heredadoRetorno inválidoCódec bloqueado Cargar ejemplo Ejecutar todos

01

### Código fuente del códec

Perfil de compatibilidadThe Things Stack v3ChirpStack v4Decoder / Encoder heredado

La sandbox solo expone la entrada del formateador. Red, almacenamiento, imports y acceso a la página están bloqueados.

02

### Vectores de prueba

03

### Resultados y exportaciones

Ejecuta un vector o todo el conjunto para ver la salida, los contratos, las lecturas de bytes y las diferencias.

Worker aislado con origen opaco Límite de ejecución de 1 segundo Sin subida ni persistencia

DEL PDF DEL FABRICANTE A LA REGRESIÓN

## Un flujo de códec que sobrevive al piloto

Los mismos fixtures sirven al traducir una especificación, migrar de servidor de red y revisar cambios posteriores de firmware.

1. 01 - **Pega el formateador desplegado** - Usa exactamente el JavaScript del perfil del dispositivo, incluidas funciones auxiliares y tablas.
2. 02 - **Añade paquetes y expectativas reales** - Captura uplinks y downlinks representativos y define el resultado JSON completo que esperas.
3. 03 - **Exporta una prueba duradera** - Guarda los fixtures y el archivo Vitest con la integración para detectar reinterpretaciones silenciosas.

NACIDO DEL TRABAJO DE CAMPO

## Útil cuando la flota tiene más de un dispositivo ideal

Wavect creó decodificadores uplink y codificadores downlink para hardware de varios fabricantes en una plataforma LoRaWAN urbana. Los errores caros eran desacuerdos silenciosos sobre bytes, puertos, firmware y contratos de salida.

### Convenciones de ambos servidores

Prueba firmas actuales de The Things Stack y ChirpStack o funciones Decoder y Encoder antiguas sin crear primero una aplicación.

### Salida esperada, no optimismo visual

Un fixture falla cuando la salida completa difiere del valor declarado.

### Artefactos que salen del navegador

Exporta vectores portátiles, una prueba ejecutable o un informe Markdown para revisión y entrega.

LÍMITES HONESTOS

## Lo que el banco no puede demostrar

- Usa semántica JavaScript del navegador. Los límites del entorno de destino necesitan una prueba final en el servidor de red.
- Solo señala endianness o signo cuando un resultado esperado expone la diferencia.
- Prueba formateadores de payload, no cifrado LoRaWAN, cobertura, join, duty cycle ni planificación de gateways.
- Los fixtures correctos verifican los casos entregados, no todas las variantes de firmware.

## Preguntas sobre el probador de códecs

### ¿Sube el códec o los payloads del sensor?

No. Código y fixtures pasan a un worker desechable dentro de una sandbox de origen opaco. No se envían ni se guardan.

### ¿Prueba The Things Stack y ChirpStack?

Sí. Admite contratos actuales decodeUplink y encodeDownlink y firmas antiguas Decoder y Encoder.

### ¿Puedo probar varias versiones de firmware?

Sí. Crea vectores con nombre para cada firmware y forma de paquete, o exporta archivos distintos si cambia el propio códec.

### ¿Detecta si una temperatura es little-endian?

Solo con un resultado esperado. Varias interpretaciones pueden ser válidas, así que la herramienta no inventa semántica del dispositivo.

GRATIS · CÓDIGO ABIERTO · SIN SUBIDAS

## Convierte el paquete que falló hoy en la prueba que protege mañana.

Ejecuta el códec en local, exporta los fixtures y guarda la evidencia con la integración.

[Volver al banco](#tool-app) [Ver el código](https://github.com/wavect/lorawan-payload-codec-tester)

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "creator": {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        "description": "A machine-readable registry of quantitative and qualitative claims published by Wavect, with review dates, localized page appearances and public third-party citations where available.",
        "inLanguage": "en",
        "isAccessibleForFree": true,
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/es/tools/lorawan-payload-codec-tester/#webpage",
      "@type": "WebPage",
      "dateModified": "2026-08-05",
      "inLanguage": "es",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-08-05",
      "url": "https://wavect.io/es/tools/lorawan-payload-codec-tester/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "SoftwareApplication",
  "applicationCategory": "DeveloperApplication",
  "browserRequirements": "JavaScript, Web Workers e iframes aislados",
  "codeRepository": "https://github.com/wavect/lorawan-payload-codec-tester",
  "description": "Prueba decodificadores y codificadores JavaScript LoRaWAN de The Things Stack y ChirpStack con fixtures Hex, Base64 o bytes, todo en local.",
  "isAccessibleForFree": true,
  "name": "Probador de códecs de payload LoRaWAN",
  "offers": {
    "@type": "Offer",
    "price": "0",
    "priceCurrency": "EUR"
  },
  "operatingSystem": "Cualquier navegador moderno",
  "url": "https://wavect.io/es/tools/lorawan-payload-codec-tester/"
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "item": "https://wavect.io/es/",
      "name": "Inicio",
      "position": 1
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/es/tools/",
      "name": "Pequeñas herramientas para tareas que no deberían seguir molestando.",
      "position": 2
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/es/tools/lorawan-payload-codec-tester/",
      "name": "Probador de códecs de payload LoRaWAN",
      "position": 3
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No. Código y fixtures pasan a un worker desechable dentro de una sandbox de origen opaco. No se envían ni se guardan."
      },
      "name": "¿Sube el códec o los payloads del sensor?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Sí. Admite contratos actuales decodeUplink y encodeDownlink y firmas antiguas Decoder y Encoder."
      },
      "name": "¿Prueba The Things Stack y ChirpStack?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Sí. Crea vectores con nombre para cada firmware y forma de paquete, o exporta archivos distintos si cambia el propio códec."
      },
      "name": "¿Puedo probar varias versiones de firmware?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Solo con un resultado esperado. Varias interpretaciones pueden ser válidas, así que la herramienta no inventa semántica del dispositivo."
      },
      "name": "¿Detecta si una temperatura es little-endian?"
    }
  ],
  "speakable": {
    "@type": "SpeakableSpecification",
    "cssSelector": [
      ".faq-question",
      ".faq-answer"
    ]
  }
}
```
