Comando DA — Acciones Dinámicas
SDA y QDA toman una plantilla con sintaxis UC escrita inline — sin ocupar un slot UC — la renderizan, y:
QDAdevuelve el texto renderizado (o lo rutea con;@DEST), sin ejecutarloSDAademás ejecuta el comando resultante en el equipo
Disponibles desde firmware v1.09.25.
¿Para qué sirve?
| Caso de uso | Ejemplo |
|---|---|
| 🔍 Consultar sin configurar | >QDA $'VBU',4< — leer un dato de runtime armado al vuelo |
| ⚡ Ejecutar y rutear la respuesta | >SDA $SSSXP0| "011";@TRM< — accionar una salida y mandar el eco al serie |
| 📤 Componer un reporte one-shot | >QDA $Pos:| QCQ,7,20;@GP< — texto compuesto directo al server |
| 💨 Ping efímero | >QDA $Alive;@GP!< — sale si el socket está abierto, si no se descarta |
Sintaxis
>SDA <plantilla-UC>[;@DEST[!]]<
>QDA <plantilla-UC>[;@DEST[!]]<- La plantilla usa la misma sintaxis que UC: texto literal, segmentos
$con datos de runtime, y segmentos de comando. - El destino es el último
;@de la línea. Sin;@DEST, la respuesta vuelve transparente por el canal que preguntó:>QDA QIO<responde>RIO;...<igual que unQIOdirecto, sin ningún prefijo. - Con
;@DESTla salida se encola como reporte (con cola, ACK y reintentos) y la respuesta local esRDAOK. - Con
;@DEST!(efímero) hay un solo intento inmediato, sin cola: si el canal está caído, se pierde.
Destinos
| Token | Medio | Admite ! |
|---|---|---|
;@TRM / ;@TR0 / ;@TR1 / ;@TR2 | Puertos serie | sí (sin efecto) |
;@GP (alias ;@GPRS) | GPRS principal | sí |
;@WI (alias ;@WIF, ;@WIFI) | WiFi principal | sí |
;@BGP / ;@BWI | GPRS / WiFi backup | sí |
;@BT (alias ;@BTH) | Bluetooth | sí (sin efecto) |
;@LOG / ;@BACK / ;@ALL | Log flash / backup inteligente / canal activo | no |
;@SM0 | SMS destino 0 (máx. 139 caracteres, texto plano) | no |
;@XB0..;@XB7 | Expansores | sí |
El token se compara completo y es sensible a mayúsculas: ;@sm0 o ;@XB9 responden RDAERR DST, nunca caen en un destino por defecto.
Respuestas y errores
El eco del render sale tal cual, sin prefijo. Las respuestas de estado son:
| Respuesta | Significado |
|---|---|
RDAOK | Aceptado. En SDA significa “comando reconocido y ejecutado”, no “salió bien”: el resultado del subcomando no siempre es capturable |
RDABUSY | El subcomando estaba ocupado tras 3 intentos |
RDAERR DST | Destino inválido, ;@ pelado, índice fuera de rango, o ! sobre un destino que no lo admite |
RDAERR TPL | Plantilla vacía |
RDAERR RND | El render falló |
RDAERR OUT | El render contiene >, <, CR o LF |
RDAERR LEN | Límites: 200 plantilla y reinyección, 170 encolado, 139 SMS, 236 eco |
RDAERR CMD | Comando vetado (ver abajo) |
RDAERR NOCMD | El comando renderizado no existe |
RDAERR MEM | Sin memoria |
RDAERR BUSY | Otro SDA/QDA en curso (no se anidan entre sí) |
⚠️ SDA/QDA no es una barrera de seguridad
SDA y QDA ejecutan cualquier comando que el canal por el que llegaron ya podía ejecutar. No filtran ni piden permisos extra: un >QDA SRESET< resetea el equipo igual que un >SRESET< directo, y una plantilla mal escrita puede apagar el módem o cambiar el APN. Probá siempre con QDA (que solo arma el texto) antes de pasar a SDA, y revisá la plantilla como revisarías el comando que va a generar.
Lo único vetado dentro de SDA/QDA:
| Comando | Motivo |
|---|---|
QPW, SPW | Dejarían el password en una respuesta ruteable a terceros |
SDA, QDA | Recursión |
QTP, STP, G, GU | Consumo de stack |
ACK, SAK | Al reinyectarse barrerían la tabla de descargas |
Ejemplos
>QDA QIO< // → >RIO;IGN0;IN1111111;...< (transparente)
>QDA $'VBU',4< // → tensión de respaldo, armada al vuelo
>SDA $SSSXP0| "011";@TRM< // ejecuta y rutea el eco: >RSSXP0011;ID=...<
>QDA $Pos:| QCQ,7,20;@GP< // encola el texto compuesto al server
>QDA $Alive;@GP!< // efímero: sale si hay socket, si no se pierdeDetalles finos
- Caracteres reservados: dentro de segmentos
$se escapan en hex MAYÚSCULA:\3E(>),\3C(<),\3B(;),\7C(|),\0D/\0A(CR/LF). La coma va entre comillas dobles en el segmento de comando. - Si un comando interno necesita su propio
;@, escribir el;como\3B: el último;@de la línea siempre se lo lleva SDA/QDA. - Un
>en la plantilla ejecuta OTRO comando (el parser ancla en el último>):>SDA hola>QID<ejecutaQID. - En modo Wialon, encolar texto plano a
;@GP/;@WI/;@BGP/;@BWI/;@ALL/;@BACKrespondeRDAERR DST(la cola solo acepta tramas IPS). Usar!(efímero, se envuelve en#D#) o componer una trama que empiece con#. - Plantillas a
;@SM0: no usar escapes\XX(el camino SMS los reinterpreta). - Desde una regla del motor de eventos (
ACC={QDA ...}) la respuesta local no se emite: usar;@DESTexplícito. - Dos SDA/QDA simultáneos por canales distintos: el segundo recibe
RDAERR BUSY. - No persiste nada en NVS ni gasta slots UC.
Compatibilidad
Ver También
- Comando UC - Plantillas de usuario persistentes
- Comando EVAL - Evaluación de expresiones