autowire-dsl
v0.3.5
Published
DSL para descrever e gerar diagramas elétricos automotivos em SVG
Downloads
1,541
Maintainers
Readme
AUTOWIRE DSL ⚡🚗
Uma linguagem textual para descrever e gerar diagramas elétricos automotivos
AUTOWIRE é uma DSL (Domain-Specific Language) open-source criada para descrever circuitos elétricos automotivos com conectores, pinos, fios, relés, fusíveis e emendas, e gerar diagramas técnicos profissionais no padrão de manuais automotivos.
🎯 Motivação
Ferramentas open-source atuais são ótimas para eletrônica de placas, mas falham ao representar chicotes automotivos:
- conectores com pinagem (B01, A14…)
- fios com cor e bitola
- fusíveis e relés automotivos (30 / 85 / 86 / 87)
- fontes +30 / +15 / GND
- emendas (splices)
- diagramas voltados a diagnóstico, não simulação
As soluções que fazem isso bem (EPLAN, AutoCAD Electrical) são proprietárias, caras e não automatizáveis em escala.
AUTOWIRE nasce para preencher esse vazio.
✨ O que é o AUTOWIRE
- 📄 Linguagem textual própria (fácil de escrever e gerar por IA)
- 🧠 Modelo semântico automotivo (não genérico)
- 🔍 Validação estrutural e elétrica
- 🎨 Renderização padronizada estilo manual técnico
- 📤 Exporta para SVG / PDF / PNG
- ⚙️ Pensado para geração em massa
🧩 Conceitos principais
| Conceito | Descrição |
| ---------- | ----------------------------------------- |
| node | Qualquer componente elétrico |
| conn | Conector com pinagem |
| net | Uma rede elétrica (fio/circuito) |
| endpoint | Um ponto elétrico (pino, terminal, porta) |
| splice | Emenda/junção |
| wire | Propriedades do fio |
📐 Exemplo completo
@version 1.0
@system "ABS"
@vehicle "VW Gol 2012"
node abs_ecu : module "UC do ABS"
conn B pins { B01 B02 B03 B04 B05 B06 B07 B09 B11 B12 B13 B14 B15 }
node rly_abs : relay "Relé do ABS" {
conn COIL pins { 85 86 }
conn CONTACTS pins { 30 87 }
conn GND pins { 86 }
}
node f10 : fuse "F10A" rating 10A
node ign_15 : power "+15"
node gnd_01 : ground "GND"
net IGN_TO_ECU:
ign_15 -> f10.in -> f10.out -> abs_ecu.B.B01
wire color azul_claro gauge 0.75 circuit IGN15
net ECU_GND:
abs_ecu.B.B14 -> gnd_01
wire color marrom gauge 1.0 circuit GND➡️ Isso gera automaticamente um diagrama elétrico funcional automotivo com:
- conector B em coluna
- fios identificados
- fusível em série
- layout legível para diagnóstico
🧠 Sintaxe da linguagem
Definição de node
node <id> : <kind> "<label>"Tipos (kind) suportados:
module | relay | fuse | motor | lamp | sensor | switch
power | ground | splice | dlc | genericConectores
conn B pins { B01 B02 B03 }Quando o mesmo numero de pino precisa aparecer mais de uma vez no mesmo conector, use pino@alias.
O texto antes de @ e o que aparece no SVG; o alias depois de @ e o identificador usado nas ligacoes.
node abs : module "Modulo de Controle do ABS" {
conn T right pins { 05@sem_esp_05 33@sem_esp_33 32@sem_esp_32 05@com_esp_05 37@com_esp_37 32@com_esp_32 }
}
net SENSOR_SEM_ESP: {
abs.T.sem_esp_05 -> sensor_vacuo.A.01
wire color preto circuit SENSOR_SEM_ESP
}
net SENSOR_COM_ESP: {
abs.T.com_esp_05 -> sensor_vacuo_esp.A.01
wire color preto circuit SENSOR_COM_ESP
}Fusíveis internos em componente
Use fuse dentro do bloco de um node (ex.: caixa de fusíveis/módulo):
node fb1 : module "Fuse Box 1" {
conn X pins { 02 36A 36 02A }
fuse S163 rating 110A
fuse SA36 rating 36A
fuse SA02 rating 05A
}Cada fusível interno expõe terminais fixos IN e OUT:
net SUPPLY: {
p30 -> fb1.S163.IN
wire color vermelho circuit SUPPLY
}
net OUTPUT: {
fb1.S163.OUT -> fb1.X.02
wire color vermelho/preto circuit OUTPUT
}Quando os dois endpoints pertencem ao mesmo node, a ligacao e desenhada dentro do proprio componente. Isso permite representar barramentos e derivacoes internas de caixas de fusiveis:
node pdc : module "PDC Externa" {
conn A right pins { 36A 36 02A 22A }
fuse SA36 rating 36A
fuse SA02 rating 05A
fuse SA22 rating 05A
}
net PDC_INTERNAL_FEED: {
pdc.A.36A -> { pdc.SA36.IN, pdc.SA02.IN, pdc.SA22.IN }
wire color cinza circuit PDC_INTERNAL_FEED
}
net PDC_SA36_OUT: {
pdc.SA36.OUT -> pdc.A.36
wire color cinza circuit PDC_SA36_OUT
}Definição de net
net <ID>:
<endpoint> -> <endpoint> -> <endpoint>
wire color <cor> gauge <mm²> [circuit <nome>]Endpoints
| Tipo | Exemplo |
| --------------- | --------------- |
| Node simples | gnd_01 |
| Conector + pino | abs_ecu.B.B06 |
| Terminal | rly_abs.86 |
| Porta | f10.in |
🎨 Layout padrão (manual técnico)
O AUTOWIRE usa layout determinístico, inspirado em manuais automotivos:
- ⚡ Potência / relés / fusíveis → esquerda
- 🧠 ECUs → centro
- 💡 Sensores / atuadores → direita
- ⏚ Grounds / +30 / +15 → rails
- 🔗 Fios roteados em “L” (Manhattan)
- 📌 Conectores como colunas de pinos
O objetivo é diagnóstico rápido, não estética artística.
🔍 Validação elétrica
Além da sintaxe, o AUTOWIRE valida:
- IDs duplicados
- referência a nodes inexistentes
- pinos que não existem no conector
- terminais inválidos em relés
- nets sem endpoints suficientes
- fusíveis sem rating
- uso incorreto de splice
⚙️ Pipeline técnico
.autowire
↓
Parser (AST)
↓
Validador estrutural
↓
Validador semântico
↓
Normalizador
↓
Renderer (SVG / PDF)🛠️ Stack (referência)
- Parser: Peggy (PEG grammar)
- AST & Validator: TypeScript
- Renderer v1: Graphviz (SVG)
- Renderer v2: SVG custom
- Export PDF: SVG → PDF
🚀 Roadmap
v0.1 — MVP
- DSL textual
- Parser + validator
- SVG via Graphviz
v0.2
- SVG custom (layout manual)
- Biblioteca de símbolos
- Splices avançados
v0.3
- Cross-reference (circuit IDs)
- Localização PT/EN/ES
- Render “diagnóstico” vs “compacto”
v1.0
- Estável
- Versionamento de DSL
- Geração em massa confiável
🧪 Casos de uso
- 📘 Manuais técnicos automotivos
- 🔧 Oficinas mecânicas
- 🏭 Engenharia de chicotes
- 🤖 Geração automática por IA
- 📚 Educação técnica
📜 Filosofia do projeto
- Automotivo first
- Legibilidade acima de estética
- Texto → Diagrama
- Escalável por design
- Open e extensível
Script
Como buildar o projeto
Install via npm
Prerequisite: Node.js 18 or newer.
CLI
npm install autowire-dsl
npx autowire ./examples/fixtures/npm-consumption-minimal.aw > out.svgOptional size:
npx autowire ./examples/fixtures/npm-consumption-minimal.aw --width 1200 --height 900 > out.svgAPI (ESM)
import fs from 'node:fs';
import { renderAwToSvg } from 'autowire-dsl';
const awText = fs.readFileSync('./examples/fixtures/npm-consumption-minimal.aw', 'utf8');
const svg = await renderAwToSvg(awText, { width: 1200, height: 900 });
fs.writeFileSync('out.svg', svg);Package smoke
npm run package:smokenpm run build:parserRodando o projeto
npm run -s render -- examples/abs.aw > out.svgMCP (LLM Automation)
O projeto inclui servidor MCP local em stdio para fluxo LLM:
autowire_create_modelautowire_add_nodeautowire_add_connectorautowire_add_internal_fuseautowire_add_connectionautowire_add_split_connectionautowire_generate_awautowire_validate_awautowire_render_aw
Scripts:
npm run mcp:start
npm run mcp:api
npm run mcp:smoke
npm run mcp:smoke:validationTransporte HTTP (API MCP):
- Endpoint MCP:
POST /mcp - Healthcheck:
GET /health - Porta padrão:
3000(configure comPORT)
Formato de payload (resumo):
{
"schema_version": "1.0",
"content": "@version 1.0\n..."
}Erros retornam diagnósticos estruturados com códigos como:
AW_INVALID_INPUTAW_SYNTAX_ERRORAW_SEMANTIC_ERRORAW_INVALID_INTERNAL_FUSEAW_RENDER_ERROR
Exemplo de fluxo incremental via ferramentas:
autowire_create_modelautowire_add_node(module/relay/switch/lamp/fuse/etc.)autowire_add_connectorautowire_add_internal_fuse(quando aplicável)autowire_add_connectione/ouautowire_add_split_connectionautowire_generate_awautowire_validate_awautowire_render_aw
🤝 Contribuindo
Contribuições são bem-vindas, especialmente:
- novos tipos de node
- validações elétricas
- melhorias de layout
- exemplos reais de diagramas
📄 Licença
MIT License © AUTOWIRE Contributors
