Skip to Content

Comando DA — Ações Dinâmicas

SDA e QDA tomam um template com sintaxe UC escrito inline — sem ocupar um slot UC — renderizam-no, e:

  • QDA devolve o texto renderizado (ou o roteia com ;@DEST), sem executá-lo
  • SDA além disso executa o comando resultante no equipamento

Disponíveis desde o firmware v1.09.25.


Para que serve?

Caso de usoExemplo
🔍 Consultar sem configurar>QDA $'VBU',4< — ler um dado de runtime montado na hora
Executar e rotear a resposta>SDA $SSSXP0| "011";@TRM< — acionar uma saída e mandar o eco para a serial
📤 Compor um relatório one-shot>QDA $Pos:| QCQ,7,20;@GP< — texto composto direto para o servidor
💨 Ping efêmero>QDA $Alive;@GP!< — sai se o socket estiver aberto, senão é descartado

Sintaxe

>SDA <plantilla-UC>[;@DEST[!]]< >QDA <plantilla-UC>[;@DEST[!]]<
  • O template usa a mesma sintaxe que UC: texto literal, segmentos $ com dados de runtime, e segmentos de comando.
  • O destino é o último ;@ da linha. Sem ;@DEST, a resposta volta transparente pelo canal que perguntou: >QDA QIO< responde >RIO;...< igual a um QIO direto, sem nenhum prefixo.
  • Com ;@DEST a saída é enfileirada como relatório (com fila, ACK e retentativas) e a resposta local é RDAOK.
  • Com ;@DEST! (efêmero) há uma única tentativa imediata, sem fila: se o canal estiver caído, perde-se.

Destinos

TokenMeioAceita !
;@TRM / ;@TR0 / ;@TR1 / ;@TR2Portas seriaissim (sem efeito)
;@GP (alias ;@GPRS)GPRS principalsim
;@WI (alias ;@WIF, ;@WIFI)WiFi principalsim
;@BGP / ;@BWIGPRS / WiFi backupsim
;@BT (alias ;@BTH)Bluetoothsim (sem efeito)
;@LOG / ;@BACK / ;@ALLLog flash / backup inteligente / canal ativonão
;@SM0SMS destino 0 (máx. 139 caracteres, texto plano)não
;@XB0..;@XB7Expansoressim

O token é comparado por inteiro e diferencia maiúsculas: ;@sm0 ou ;@XB9 respondem RDAERR DST, nunca caem em um destino padrão.


Respostas e erros

O eco do render sai como está, sem prefixo. As respostas de status são:

RespostaSignificado
RDAOKAceito. Em SDA significa “comando reconhecido e executado”, não “deu certo”: o resultado do subcomando nem sempre é capturável
RDABUSYO subcomando estava ocupado após 3 tentativas
RDAERR DSTDestino inválido, ;@ pelado, índice fora de faixa, ou ! sobre um destino que não o aceita
RDAERR TPLTemplate vazio
RDAERR RNDO render falhou
RDAERR OUTO render contém >, <, CR ou LF
RDAERR LENLimites: 200 template e reinjeção, 170 enfileirado, 139 SMS, 236 eco
RDAERR CMDComando vetado (ver abaixo)
RDAERR NOCMDO comando renderizado não existe
RDAERR MEMSem memória
RDAERR BUSYOutro SDA/QDA em andamento (não se aninham entre si)

⚠️ SDA/QDA não é uma barreira de segurança

SDA e QDA executam qualquer comando que o canal pelo qual chegaram já podia executar. Não filtram nem pedem permissões extras: um >QDA SRESET< reseta o equipamento igual a um >SRESET< direto, e um template mal escrito pode desligar o modem ou mudar o APN. Teste sempre com QDA (que só monta o texto) antes de passar para SDA, e revise o template como revisaria o comando que ele vai gerar.

A única coisa vetada dentro de SDA/QDA:

ComandoMotivo
QPW, SPWDeixariam a senha em uma resposta roteável a terceiros
SDA, QDARecursão
QTP, STP, G, GUConsumo de stack
ACK, SAKAo serem reinjetados varreriam a tabela de downloads

Exemplos

>QDA QIO< // → >RIO;IGN0;IN1111111;...< (transparente) >QDA $'VBU',4< // → tensão de backup, montada na hora >SDA $SSSXP0| "011";@TRM< // executa e roteia o eco: >RSSXP0011;ID=...< >QDA $Pos:| QCQ,7,20;@GP< // enfileira o texto composto para o servidor >QDA $Alive;@GP!< // efêmero: sai se houver socket, senão se perde

Detalhes finos

  • Caracteres reservados: dentro de segmentos $ são escapados em hex MAIÚSCULO: \3E (>), \3C (<), \3B (;), \7C (|), \0D/\0A (CR/LF). A vírgula vai entre aspas duplas no segmento de comando.
  • Se um comando interno precisar do seu próprio ;@, escrever o ; como \3B: o último ;@ da linha sempre fica com SDA/QDA.
  • Um > no template executa OUTRO comando (o parser ancora no último >): >SDA hola>QID< executa QID.
  • No modo Wialon, enfileirar texto plano para ;@GP/;@WI/;@BGP/;@BWI/;@ALL/;@BACK responde RDAERR DST (a fila só aceita tramas IPS). Usar ! (efêmero, envolvido em #D#) ou compor uma trama que comece com #.
  • Templates para ;@SM0: não usar escapes \XX (o caminho SMS os reinterpreta).
  • A partir de uma regra do motor de eventos (ACC={QDA ...}) a resposta local não é emitida: usar ;@DEST explícito.
  • Dois SDA/QDA simultâneos por canais distintos: o segundo recebe RDAERR BUSY.
  • Não persiste nada em NVS nem gasta slots UC.

Compatibilidade

💾Firmware:v1.09.25
SP-IOT
SM-IOT
ZE-IOT

Ver Também

Última atualização