Novedad: el cortafuegos de IA supervisa cada módulo y explica cada incidente con palabras sencillas. Vea cómo funciona

Bloques de transformación de datos

Referencia de Change, Calculate, Scale, Template, JSON, CSV, XML, Hex, Base64 y Bytes: los bloques que reestructuran, calculan y decodifican los datos de los mensajes.

Los bloques de transformación modifican el mensaje y lo envían. Sirven para renombrar claves, calcular valores, construir textos y decodificar datos brutos de dispositivos antes de Save telemetry. Cada uno tiene una salida out y una salida error. Ninguno de ellos mantiene estado.

Change

Asigna, edita, elimina o mueve propiedades del mensaje y de las variables de flujo o globales, en pasos realizados de arriba abajo.

SettingMeaningValues
opsLos pasoshasta 16 filas

Cada paso:

opHaceFields
setEscribe un valor; los padres que falten se creanpath, value (cualquier tipo de valor)
changeReemplaza cada aparición de from por to en el texto; los valores que no son texto no se modificanpath, from, to, regex (un patrón de como máximo 64 caracteres)
deleteElimina la propiedad o variablepath
moveCopia en la ruta indicada en to y después elimina el original. El editor todavía no muestra el campo to, así que use set y delete en su lugar.path, to
copy keysCopia cada clave de primer nivel del objeto en path cuyo nombre completo coincida con Keys matching en To objectpath, Keys matching, To object
delete keysElimina cada clave de primer nivel cuyo nombre completo coincidapath, Keys matching

Las rutas son rutas msg., flow. o global. (flow.persist:x para el almacén persistente). Los campos del motor (_…), msg.msgType y msg.originator no se pueden escribir. Errores: invalid_value con invalid_path, read_only, invalid_key, limit (almacén de variables lleno) o bad pattern; los pasos anteriores al que falla ya se han aplicado.

Ejemplo: renombrar una clave del dispositivo antes de guardar: paso 1 set msg.payload.temperature en la ruta msg.payload.tmp; paso 2 delete msg.payload.tmp.

Calculate

Calcula una expresión y escribe el resultado.

SettingMeaningDefaultValues
exprLa expresiónobligatoriohasta 512 caracteres
targetAdónde va el resultadomsg.payloaduna ruta msg., flow. o global.

7 / 2 es 3.5; + une textos cuando cualquiera de los dos lados es texto; la aritmética con null o con cualquier texto (incluso "21.5") falla con type: convierta con number(). Errores: invalid_value, type, div_zero, steps, limit. Consulte Condition blocks para las funciones.

Ejemplos: round(msg.payload.temperature * 1.8 + 32, 1); 10 * log10(msg.payload.ratio); clamp(msg.payload.level, 0, 100).

Scale

Asigna linealmente un número de un rango a otro, en el mismo campo.

SettingMeaningDefaultValues
propertyEl númeromsg.payloaduna ruta
in_min, in_maxEl rango de entrada0, 4095números, no iguales
out_min, out_maxEl rango de salida0, 100números
modeFuera del rango de salidaclampclamp (limitar), wrap (dar la vuelta), free (dejar)
roundDecimalesninguno0 a 10

Fórmula: out_min + (value − in_min) × (out_max − out_min) / (in_max − in_min). El texto numérico y true/false (1/0) cuentan como números. Error invalid_value («not a number», o un rango de entrada vacío).

Template

Construye un texto, o un valor JSON, a partir de marcadores {{ expression }}.

SettingMeaningDefaultValues
templateEl texto{{ msg.payload }}hasta 4,096 caracteres
targetAdónde va el resultadomsg.payloaduna ruta msg., flow. o global.
formattext, o json (el resultado se analiza como JSON)texttext, json

null se convierte en vacío; los objetos y las matrices se escriben como JSON. Para la salida JSON, ponga usted mismo los marcadores de texto entre comillas: {"temp": {{ msg.payload }}, "unit": "{{ flow.unit }}"}. El resultado tiene como máximo 64 KB de texto.

JSON

Convierte texto JSON en un valor, o un valor en texto JSON, en el mismo campo.

SettingMeaningDefaultValues
modeauto (analiza el texto, deja pasar el resto), parse, stringifyauto
propertyLa propiedadmsg.payloaduna ruta

Errores: invalid_value «not JSON: …» o «not a string».

CSV

Convierte texto CSV en registros, o registros en texto CSV, en el mismo campo.

SettingMeaningDefaultValues
modeauto, decode, encodeauto
propertyLa propiedadmsg.payloaduna ruta
sepSeparador de camposcomacoma, punto y coma, tabulador, barra vertical
headerDecode: la primera línea tiene los nombres. Encode: escribe una línea de cabeceraoffon, off
columnsNombres de columna, separados por comasvacíohasta 256 caracteres
numbersDecode: los campos con forma de número se convierten en númerosoffon, off
outputDecode: un mensaje con todos los registros (array) o uno por registro (rows)arrayarray, rows

El entrecomillado sigue RFC 4180. Error queue_full si hay más de 10,000 líneas o registros.

XML

Convierte texto XML en un objeto, o un objeto en texto XML.

SettingMeaningDefault
Modeparse, build o auto
PropertyDónde se hace la conversiónmsg.payload
Prefijo de atributoPrefijo de las claves de atributo@
Text keyClave del texto junto a los elementos hijos#text
Arrays / array elementsQué elementos son siempre matrices
NumbersEl texto numérico se convierte en númerosoff
SelectConserva solo una ruta de elementos, p. ej. soap:Envelope/soap:Body/*/m:Price
Root, DeclarationAl construir: el nombre del elemento raíz, la línea <?xml …?>
Max bytesEntrada más grande64 KiB (1 a 256 KiB)

Se rechaza un documento con <!DOCTYPE. Como máximo 10,000 elementos, 64 atributos por elemento, 128 caracteres por nombre. Errores: parse_error, dtd_refused, too_large, too_deep, bad_name, no_root.

Hex y Base64

Codifica una propiedad como hex (dos dígitos en minúscula por byte) o texto base64, o la decodifica.

SettingMeaningDefaultValues
modeSentidoautoauto, encode, decode
propertyLa propiedadmsg.payloaduna ruta msg., flow. o global.

En auto, el texto que parece hex (o base64) se decodifica y el resto se codifica; las palabras cortas como test o los dígitos como 2024 también son base64 o hex válidos, así que elija encode o decode cuando conozca el sentido. La decodificación hex ignora espacios y dos puntos.

Bytes

Lee números con nombre de datos binarios, o construye datos binarios a partir de números.

SettingMeaningDefaultValues
modeLeer o construirdecodedecode, encode
fieldsUna fila por campovacíohasta 16 filas

Cada campo:

FieldMeaningDefaultValues
nameClave en el resultadoobligatoriouna letra o _ al principio, hasta 32 caracteres
offsetPrimer byte, desde 000 a 4,095
typeTamaño y tipou16u8, i8, u16, i16, u32, i32, f32
leLittle endianoff (big endian)on, off
bitsUn rango de bits start:lengthcampo completop. ej. 0:1, 4:3
scaleDecode: × scale; encode: ÷ scale1un número

Decode lee texto hex (se ignoran espacios y dos puntos) o un array de valores de byte en msg.payload y escribe { name: value }. Encode escribe texto hex. Error invalid_value cuando los datos no son hex o un campo queda más allá de su final.

Ejemplo: una carga útil bruta 00d7ff9c con temp (offset 0, i16, scale 0.1) y pressure (offset 2, i16) da { "temp": 21.5, "pressure": -100 }.

Decodificación de datos brutos de dispositivos

Un dispositivo que envía datos binarios llega con la única clave raw (base64 para binarios). Un decodificador típico en el flujo raíz, antes de Save telemetry:

Switch (msg.payload.raw nempty) → Change: set msg.payload to the path msg.payload.raw
  → Base64 (decode) → Hex (encode) → Bytes (decode fields) → Save telemetry

Compruebe el resultado con Test antes de desplegarlo. Para los dispositivos LoRaWAN, use codecs en su lugar; consulte Codecs overview. Para todo lo que los bloques no puedan expresar, use The script block.