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:
QDAdevolve o texto renderizado (ou o roteia com;@DEST), sem executá-loSDAalém disso executa o comando resultante no equipamento
Disponíveis desde o firmware v1.09.25.
Para que serve?
| Caso de uso | Exemplo |
|---|---|
| 🔍 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 umQIOdireto, sem nenhum prefixo. - Com
;@DESTa 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
| Token | Meio | Aceita ! |
|---|---|---|
;@TRM / ;@TR0 / ;@TR1 / ;@TR2 | Portas seriais | sim (sem efeito) |
;@GP (alias ;@GPRS) | GPRS principal | sim |
;@WI (alias ;@WIF, ;@WIFI) | WiFi principal | sim |
;@BGP / ;@BWI | GPRS / WiFi backup | sim |
;@BT (alias ;@BTH) | Bluetooth | sim (sem efeito) |
;@LOG / ;@BACK / ;@ALL | Log flash / backup inteligente / canal ativo | não |
;@SM0 | SMS destino 0 (máx. 139 caracteres, texto plano) | não |
;@XB0..;@XB7 | Expansores | sim |
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:
| Resposta | Significado |
|---|---|
RDAOK | Aceito. Em SDA significa “comando reconhecido e executado”, não “deu certo”: o resultado do subcomando nem sempre é capturável |
RDABUSY | O subcomando estava ocupado após 3 tentativas |
RDAERR DST | Destino inválido, ;@ pelado, índice fora de faixa, ou ! sobre um destino que não o aceita |
RDAERR TPL | Template vazio |
RDAERR RND | O render falhou |
RDAERR OUT | O render contém >, <, CR ou LF |
RDAERR LEN | Limites: 200 template e reinjeção, 170 enfileirado, 139 SMS, 236 eco |
RDAERR CMD | Comando vetado (ver abaixo) |
RDAERR NOCMD | O comando renderizado não existe |
RDAERR MEM | Sem memória |
RDAERR BUSY | Outro 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:
| Comando | Motivo |
|---|---|
QPW, SPW | Deixariam a senha em uma resposta roteável a terceiros |
SDA, QDA | Recursão |
QTP, STP, G, GU | Consumo de stack |
ACK, SAK | Ao 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 perdeDetalhes 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<executaQID. - No modo Wialon, enfileirar texto plano para
;@GP/;@WI/;@BGP/;@BWI/;@ALL/;@BACKrespondeRDAERR 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;@DESTexplí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
Ver Também
- Comando UC - Templates de usuário persistentes
- Comando EVAL - Avaliação de expressões