Aparência
Status dos inversores e estados comuns
O mesmo número pode significar coisas diferentes: no Solis, 3 indica operação; no SAJ, 3 indica falha. Homogeneizar os status significa traduzir esses códigos para uma linguagem comum, preservando o que cada equipamento informou.
Esta referência reúne os 50 códigos Solis e 3 códigos SAJ presentes no catálogo do projeto. Também inclui a referência candidata do Ingeteam, cuja integração prevista será via Arduino publicando no MQTT; ele ainda não está integrado ao sistema. As tabelas não garantem que todos ocorram em cada firmware. A coluna estado comum proposto orienta a implementação local de catálogo, views e painéis, já testada com dados fictícios. A implantação real depende de migration e associação revisada dos perfis; não houve mudança de produção nem ativação de alertas. Quatro entradas Solis têm uma divergência documental indicada abaixo.
Por que conservar o original?
O código original e o estado comum respondem a perguntas diferentes:
| Informação | Exemplo Solis | Para que serve |
|---|---|---|
Código original, status_raw | 4146, equivalente a 0x1032 | Conferir exatamente o que o equipamento enviou |
| Estado comum proposto | fault — falha/proteção | Comparar equipamentos de diferentes modelos |
| Descrição do diagnóstico | Proteção por temperatura elevada | Explicar o motivo específico, quando disponível |
Se guardássemos apenas “falha”, perderíamos a diferença entre temperatura, ausência de rede e outras proteções. Na interface, o estado comum pode ser o destaque, com o código original nos detalhes. A escolha de como armazenar a tradução permanece aberta.
Modelos e alcance da referência
| Modelo ou fabricante | Situação no projeto | Alcance desta página |
|---|---|---|
| Solis-1P10K-4G | Adapter solis-solarman; tipo solis-inverter | Catálogo baseado na coluna All 4G do mapa, com ressalvas por código |
| SAJ R6-30K-T4-32-LV | Adapter saj-r6-modbus-tcp; tipo saj-inverter | Três estados do registrador 0x6013; origem candidata, não oficial |
| Ingeteam INGECON SUN 5TL M | Integração próxima via Arduino → MQTT, ainda não implantada | Modelo informado pelo responsável; perfil candidato 1Play TLM (ABE1000), firmware e campos publicados por confirmar |
| ABB | Equipamentos legados removidos do campus | Fora do escopo da integração atual |
O catálogo é selecionado pelo modelo e tipo explícitos, nunca apenas pela marca ou pelo número recebido. Firmware e revisão do mapa também precisam ser considerados na admissão de novos equipamentos. Não se deve aplicar a tabela Solis 4G a toda a marca, nem a tabela SAJ R6 a inversores híbridos.
Tabela de homogeneização
Os nomes entre crases são identificadores propostos para o software. Não são novos códigos Modbus.
| Estado comum proposto | Solis-1P10K-4G | SAJ R6-30K-T4-32-LV | Ingeteam 5TL M: candidato para Status Unit 1 |
|---|---|---|---|
waiting — aguardando | 0 | 1 | 1, após confirmar o perfil |
starting — iniciando | 1 e 2 | Não distinguido pelo campo atual | Não distinguido por Status Unit 1 |
operating — em operação | 3 | 2 — conectado à rede | 2, após confirmar o perfil; não exclui alarmes separados |
warning — aviso | Cinco códigos explícitos | Não distinguido pelo campo atual | Depende de campo de avisos e mapa de bits validado |
fault — falha/proteção | Códigos explícitos, exceto os quatro em revisão | 3 — causa não disponível | Depende dos alarmes/motivo de parada; não inferir pelo valor 0 |
unknown — não interpretado | Código/perfil inválido, incerto ou em revisão | Código/perfil inválido ou incerto | Perfil não confirmado; valor 0 sem contexto suficiente; código não mapeado |
O catálogo executável atual chama a categoria de operação de generating. Esta proposta usa operating porque estar conectado ou em operação não comprova potência positiva. A API antiga do Grafana preserva esse nome por compatibilidade. A nova API compartilhada, implementada offline em packages/inverter-status, já usa operating, com revisão explícita.
unknown descreve uma limitação da interpretação; não é um estado físico informado pelo inversor. “Sem leitura” e “leitura antiga” também precisam aparecer separadamente: não significam falha, espera ou recuperação. Uma leitura válida antiga não comprova o estado atual.
Solis-1P10K-4G
O adapter publica o valor do registrador 3044 do mapa, sem substituir o código. A leitura atual usa função 0x04, bloco iniciado em 2999, com 50 registradores; a conversão de endereçamento já está no adapter. Esta documentação não propõe novas leituras.
Espera, partida e operação
| Decimal | Hexadecimal | Significado no catálogo atual | Estado comum proposto |
|---|---|---|---|
| 0 | 0x0000 | Aguardando | waiting |
| 1 | 0x0001 | OpenRun — partida | starting |
| 2 | 0x0002 | SoftRun — partida suave | starting |
| 3 | 0x0003 | Gerando | operating |
Avisos
| Decimal | Hexadecimal | Significado no catálogo atual | Estado comum proposto |
|---|---|---|---|
| 61456 | 0xF010 | Aviso de surto na rede | warning |
| 61457 | 0xF011 | Aviso de ventilador interno | warning |
| 61459 | 0xF013 | Aviso do DPS AC | warning |
| 61460 | 0xF014 | Aviso do DPS DC | warning |
| 61461 | 0xF015 | Aviso de ventilador externo | warning |
O mapa distingue o aviso de ventilador externo em 0xF015. O catálogo chama 0xF011 de “ventilador interno”; a referência original diz apenas “FAN fault (Warning)”. Não concluir a localização física da peça só por essa tradução.
Falhas e proteções
| Decimal | Hexadecimal | Significado no catálogo atual | Estado comum proposto |
|---|---|---|---|
| 4112 | 0x1010 | Sobretensão na rede | fault |
| 4113 | 0x1011 | Subtensão na rede | fault |
| 4114 | 0x1012 | Sobrefrequência da rede | fault |
| 4115 | 0x1013 | Subfrequência da rede | fault |
| 4116 | 0x1014 | Corrente reversa na rede | fault |
| 4117 | 0x1015 | Ausência de rede | fault |
| 4118 | 0x1016 | Desequilíbrio da rede | fault |
| 4119 | 0x1017 | Oscilação de frequência da rede | fault |
| 4120 | 0x1018 | Sobrecorrente na rede | fault |
| 4121 | 0x1019 | Falha de acompanhamento da corrente da rede | fault |
| 4128 | 0x1020 | Sobretensão DC | fault |
| 4129 | 0x1021 | Sobretensão do barramento DC | fault |
| 4130 | 0x1022 | Desequilíbrio do barramento | fault |
| 4131 | 0x1023 | Subtensão do barramento | fault |
| 4132 | 0x1024 | Segundo desequilíbrio do barramento | fault |
| 4133 | 0x1025 | Sobrecorrente DC no canal A | fault |
| 4134 | 0x1026 | Sobrecorrente DC no canal B | fault |
| 4135 | 0x1027 | Interferência DC | fault |
| 4136 | 0x1028 | Inversão DC | fault |
| 4137 | 0x1029 | Aterramento do ponto médio PV | fault |
| 4144 | 0x1030 | Proteção por interferência da rede | fault |
| 4145 | 0x1031 | Falha de inicialização DSP | fault |
| 4146 | 0x1032 | Proteção por temperatura elevada | fault |
| 4147 | 0x1033 | Falha de isolamento PV | fault |
| 4148 | 0x1034 | Proteção por corrente de fuga | fault |
| 4149 | 0x1035 | Falha na verificação de relé | fault |
| 4150 | 0x1036 | Proteção DSP secundário | fault |
| 4151 | 0x1037 | Proteção por injeção DC | fault |
| 4152 | 0x1038 | Falha de alimentação de 12 V | fault |
| 4153 | 0x1039 | Proteção na verificação de fuga | fault |
| 4154 | 0x103A | Proteção por temperatura baixa | fault |
| 4160 | 0x1040 | Falha na verificação AFCI | fault |
| 4161 | 0x1041 | Falha de arco AFCI | fault |
| 4162 | 0x1042 | Falha SRAM DSP † | unknown |
| 4163 | 0x1043 | Falha flash DSP † | unknown |
| 4164 | 0x1044 | Falha de ponteiro PC DSP † | unknown |
| 4165 | 0x1045 | Falha de registrador crítico DSP † | unknown |
| 4166 | 0x1046 | Interferência da rede 02 | fault |
| 4167 | 0x1047 | Erro na amostragem da corrente da rede | fault |
| 4168 | 0x1048 | Sobrecorrente IGBT | fault |
| 8209 | 0x2011 | Fail Safe | fault |
† Divergência em revisão: as linhas 0x1042, 0x1043, 0x1044 e 0x1045 aparecem riscadas na página 39 do PDF arquivado. O catálogo executável atual ainda retorna fault e confiança documented para elas. A proposta conservadora acima é unknown, com motivo “definição em revisão”, até confirmar a aplicabilidade ao modelo/firmware. O risco não é descartado: um código assim exige investigação de qualidade/interpretação, sem afirmar um diagnóstico físico confirmado. A nova API offline aplica essa política; o wrapper antigo do Grafana preserva a classificação anterior por compatibilidade.
O mapa não explica o motivo do risco nas quatro linhas; não se pode concluir que sejam códigos impossíveis ou definitivamente removidos. As demais entradas são referências documentais, não uma comprovação de ocorrência de cada falha nos equipamentos do campus.
Cuidados com a interpretação
- Decimal e hexadecimal:
4146 = 0x1032. O número decimal1032é outro valor e permanece não mapeado. - Família correta:
0x1004aparece para 1P 2G, mas não tem definição na coluna All 4G usada aqui. - Lista explícita: números entre dois códigos conhecidos não herdam automaticamente o mesmo significado.
- Proteção térmica: o código de proteção e a medição
internal_temp_csão informações distintas. Esta tabela não define um limite de temperatura para alertas.
SAJ R6-30K-T4-32-LV
O adapter lê o estado em summary[19], correspondente a 0x6013, dentro do bloco 0x6000 de 22 registradores, usando a função de leitura 0x03.
| Decimal | Hexadecimal | Significado no catálogo atual | Estado comum proposto |
|---|---|---|---|
| 1 | 0x0001 | Aguardando | waiting |
| 2 | 0x0002 | Conectado à rede | operating |
| 3 | 0x0003 | Falha do inversor — causa não disponível | fault |
A referência é uma cópia candidata de protocolo, edição 7.2, de 18/11/2022, seção 4.2.3, página PDF 23. Espera e conexão têm observações registradas no projeto; o significado de falha ainda não foi comprovado por um evento de campo no firmware instalado. Não provocamos falhas para validar a tabela.
Estado não é código de erro
O manual do usuário lista erros específicos: por exemplo, erro 3 de temperatura elevada. Essa numeração pertence ao diagnóstico, não ao estado operacional 0x6013. Portanto, status_raw = 3 deve ser descrito como falha genérica, sem atribuir temperatura como causa. Referência: manual oficial SAJ, capítulo 7.
O adapter atual não publica o diagnóstico FaultMSG. Ter apenas três estados catalogados não significa que o SAJ tenha apenas três erros possíveis. Outros campos ou famílias, como a tabela de inversores híbridos associada a 0x4004, não devem ser usados para interpretar esta leitura.
Ingeteam: integração via Arduino e MQTT
A integração prevista é Ingeteam → Arduino → MQTT → persistência → consultas e alertas. O responsável informou em 04/11/2026 o modelo INGECON SUN 5TL M e o acesso ao equipamento. Ainda não há validação da publicação/persistência neste sistema. Firmware e campos disponibilizados pelo Arduino permanecem por confirmar.
A referência candidata para esse modelo é a seção 1Play TLM (ABE1000) do mapa local, páginas 12–16. O manual de produto indexado pelo fabricante associa a abreviação 5TL M à família 1Play TL M; a compatibilidade da revisão de comunicação com o equipamento ainda precisa ser confirmada. Modelo nominal não equivale a validação de cada registrador.
O mapa arquivado, Ingeteam-Register-Map.pdf, revisão AAA0030IMB02_Q, identifica vários produtos. O fato de existir um registrador no PDF não comprova que ele exista ou esteja acessível no equipamento instalado. Os endereços a seguir são referências documentais, não uma lista de varredura ou uma autorização de leitura.
Campo principal: Status Unit 1
| Família no mapa | Start Address, base zero | Referência Modicon | Página PDF |
|---|---|---|---|
| 1Play TLM, ABE1000 — candidato para o 5TL M informado | 26 | 30027 | 14 |
| 1Play HF / 3Play ABI1000 e ABI1004 — outras famílias | 26 | 30027 | 8 e 19 |
| 3Play 100TL/160TL, ABS1004 | 20 | 30021 | 25 |
| IS 350TL-M12, ACB1005 | 20 | 30021 | 33 |
Power B, ABK1000, mapa válido a partir do firmware indicado como _T | 82 | 30083 | 39 e 41 |
As demais famílias são referências comparativas do documento; não representam o modelo informado para esta integração. O número 30027 é a referência Modicon de Start Address 26; não se deve usar os endereços 20 ou 82 de outras famílias para o 5TL M por analogia.
| Valor decimal | Significado de Status Unit 1 no mapa | Correspondência candidata |
|---|---|---|
0 | Não pronto para conectar | unknown como resumo conservador; mostrar a descrição original, pois a causa não está neste campo |
1 | Aguardando conexão | waiting, quando perfil e leitura estiverem confirmados |
2 | Conectado à rede | operating, quando perfil e leitura estiverem confirmados; alarmes permanecem separados |
| Outros | Não definidos nessa enumeração | unknown, preservando o valor recebido |
“Não pronto para conectar” pode exigir informações adicionais. Não equivale automaticamente a falha, noite, desligamento voluntário ou espera normal. Mesmo o valor 2 não demonstra ausência de avisos/falhas em outros campos. Até associar o modelo ao perfil correto, todos os valores permanecem sem interpretação confirmada no sistema.
Alarmes, avisos e parada são informações separadas
| Campo no perfil candidato 1Play TLM | Start Address | Referência Modicon | Página PDF |
|---|---|---|---|
| Alarmes instantâneos, quatro palavras de bits | 18–21 | 30019–30022 | 13 |
| Avisos, palavra de bits | 22 | 30023 | 13 |
| Estado de conexão resumido, Status Unit 1 | 26 | 30027 | 14 |
| Motivo da redução de potência ativa | 47 | 30048 | 15 |
| Evento instantâneo de parada | 52 | 30053 | 16 |
Endereços são Start Address, base zero, e não se aplicam indistintamente a outras famílias. Fonte: seção 5, páginas PDF 12–16. A existência das palavras de alarme não fornece, por si só, o significado de cada bit; essa decodificação depende do mapa aplicável ao modelo/firmware. Não classificar toda palavra diferente de zero como uma falha específica nem reduzir bits a um único código. Se publicados, os valores brutos dessas palavras devem ser preservados individualmente.
O motivo de redução no endereço 47 tem estes valores descritos: 0/1 sem redução; 2/3/4 temperatura; 5 comunicação; 6 controle por frequência; 7 controle por tensão; 8 prioridade reativa/limite de corrente; 9 configuração; 10 rampa de conexão; 11 autoconsumo; 12 reservado pelo fabricante. É uma informação de limitação de potência, não a mesma enumeração de Status Unit 1 nem uma falha térmica automaticamente confirmada. Sua homogeneização e eventual alerta dependem de leitura e contexto validados.
Estados adicionais da família Power B
A família Power B não é a indicada para o 5TL M informado. Esta comparação permanece para evitar reutilizar um dicionário errado ao ampliar o sistema.
A página PDF 42 descreve dois campos diferentes, que não podem compartilhar o mesmo dicionário:
| Campo | Valores explicitamente descritos no mapa |
|---|---|
General state, endereço 88 | 0 INITIAL; 1 OPENING_DC_SWITCH; 2 CLOSING_DC_SWITCH; 3 AC_CONNECTING; 5 CONNECTED; 6 DISCONNECTING |
Grid connection state, endereço 89 | 0 DISCONNECTING; 1 DISCONNECTED; 2 CONNECT_TEST; 3 BUS_PRECHARGING; 4 GRID_GENERATING; 5 GRID_GENERATING_WAITING; 6 GRID_CONNECTING; 7 GRID_CONNECTED; 8 STANDBY; 9 STANDBY_WAITING; 10 GRID_SYNCH_DROOP |
Esses campos ficam como referência de outra família, sem aplicação ao 5TL M nesta integração. Não completar lacunas de enumeração nem aplicar a lista do endereço 89 ao 88. Esta referência corrige a apresentação combinada e parcial que existia no resumo de hardware.
O que combinar com o produtor Arduino
O Arduino pode usar o contrato MQTT já existente: publicar números brutos em metrics, com identidade estável por inversor, e não apenas por placa Arduino. O tipo ingeteam-inverter é uma proposta a acordar. O perfil de status deve ser cadastrado no lado central, com modelo, firmware e significado de cada campo; a tradução comum não precisa ser duplicada no firmware.
Se status_raw for adotado, deve representar um campo definido, por exemplo Status Unit 1. Alarmes, avisos e parada precisam de chaves próprias acordadas. Não colocar um texto normalizado no lugar do bruto, nem acrescentar model ou profile à raiz do payload atual: ela é estrita.
O timestamp precisa representar a leitura. Reenviar cache antigo com horário novo faria o sistema enxergar dados antigos como atuais. No primeiro piloto, publicar somente leituras novas; histórico e recuperação de cache exigem um desenho específico. Confirmar QoS, retenção MQTT, relógio, identidade e permissões do publicador antes da integração real.
Não é necessário criar um adapter Node.js nem uma fonte de polling em inverter_sources somente para receber esse fluxo. O subscriber aceita tipos genéricos válidos no contrato; isso não inclui automaticamente o Ingeteam nos dashboards ou nos alertas, que também precisarão revisar sua seleção de equipamentos.
Relação com os alertas
Um estado padronizado facilita criar regras comuns, mas não é, sozinho, uma ordem de notificação.
| Resultado | Orientação para regras futuras |
|---|---|
| Aguardando ou iniciando | Sem alerta isolado; demora anormal exige contexto e critério próprio |
| Em operação | Não comprova potência esperada; desempenho precisa de outras grandezas |
| Aviso | Candidato a acompanhamento/manutenção, com diagnóstico, persistência e destinatário definidos |
| Falha/proteção documentada | Candidata a alerta com leitura recente, confiança e tempo de confirmação |
| Falha genérica SAJ | Candidata a alerta de falha genérica; validação e calibração ainda necessárias |
| Ingeteam com conexão, alarmes e avisos separados | Avaliar perfil e campos em conjunto; conexão não elimina um alarme e um campo não recebido não equivale a zero |
| Não interpretado | Investigar cobertura do mapa/qualidade dos dados; não assumir saúde nem falha física |
| Ausência ou atraso de leitura | Tratar como disponibilidade da telemetria, separadamente |
A gravidade da notificação depende da causa e do contexto. Falha por ausência de rede e falha de isolamento podem compartilhar fault e exigir respostas diferentes. O Grafana permanece responsável pela avaliação e pelo envio; o tradutor não escolhe destinatários.
Como outros inversores entram no padrão?
A sequência proposta permite crescer sem criar um conjunto de status para cada unidade.
| Situação | Processo |
|---|---|
| Mais uma unidade de modelo já suportado | Confirmar modelo, firmware e compatibilidade; associar explicitamente ao perfil existente; validar coleta e leitura |
| Outro modelo da mesma marca | Conferir seu mapa e registrador; reutilizar perfil somente com compatibilidade demonstrada, ou criar perfil próprio |
| Outra marca ou protocolo | Integrar o adapter quando necessário; publicadores MQTT externos, como o Arduino/Ingeteam, seguem o contrato sem exigir adapter Node.js |
| Firmware ou mapa mudou | Registrar a mudança e o período de validade; revisar o perfil sem reinterpretar silenciosamente todo o passado |
| Um significado não cabe no padrão | Preservar o bruto e marcar a interpretação como pendente; revisar o vocabulário antes de forçar uma equivalência |
Um perfil é a ficha de interpretação: identifica modelos/firmwares compatíveis, campo de origem, códigos, significados, evidência e versão. Muitas unidades podem compartilhar o mesmo perfil; unidades diferentes não precisam de cópias do dicionário.
Antes de admitir um perfil: documentar fontes e limites, testar códigos conhecidos e desconhecidos com dados fictícios, validar leituras controladas quando autorizadas e revisar como o resultado será exibido. Todas as operações Modbus permanecem somente de leitura.
Alguns modelos podem fornecer conexão, avisos e várias falhas simultaneamente em campos separados. O padrão comum será um resumo; diagnósticos e sinais originais não devem ser descartados para caber em uma única palavra. Não se infere “operando” de ausência de alarmes.
Fontes e limites
- Catálogo do projeto:
grafana/lib/inverter-status.mjs; 50 entradas Solis e 3 SAJ na revisão local1aa3fe0. As tabelas completas acima preservam a lista e explicitam as quatro divergências. - Implementação compartilhada offline:
packages/inverter-status/catalog.jsonesrc/index.ts. O catálogo central é consumido também pelo wrapper Grafana; a API nova segue os estados comuns e as ressalvas acima, incluindo o perfil candidato Ingeteam. Catálogo SQL e views foram preparados, e os painéis de status foram adaptados e conferidos em laboratório. A coleta continua preservando os códigos originais; novos alertas não foram ativados. - Solis:
docs/hardware/manuais/Solis-Register-Map.pdf, apêndice 2, páginas PDF 38–39, conferidas visualmente em 04/11/2026; coluna All 4G. Não se usa a coluna 1P 2G. - SAJ: cópia candidata do protocolo, hospedada por terceiros; origem do catálogo existente, sem certificação de compatibilidade.
- SAJ: manual oficial do usuário, capítulo 7, ligado na seção de diagnóstico, confirma que a lista de erros específicos é distinta do estado de operação.
- Implementação:
SolisAdapter.ts,SajR6Adapter.ts,mapper.ts, contrato MQTT e schema Prisma. Nenhum equipamento ou serviço de produção foi consultado para esta revisão documental. - Ingeteam:
docs/hardware/manuais/Ingeteam-Register-Map.pdf, revisão AAA0030IMB02_Q, data impressa 03/05/24, seções 4–9; páginas 13–14, 25, 33, 41 e 42 conferidas visualmente em 04/11/2026. Compatibilidade com o equipamento do campus ainda não demonstrada. - Identificação nominal Ingeteam: modelo fornecido pelo responsável e manual de produto 1Play TL M indexado pelo fabricante. O endereço de download redirecionou ao portal na revisão; não foi obtida nova cópia integral.
Leia também como as duas marcas fornecem dados comuns e a referência de grandezas e registradores.
Revisão: 04/11/2026. Fontes: catálogo e adapters do projeto, mapas Solis/Ingeteam, referências SAJ e testes PostgreSQL/Grafana indicados acima. Implementação local validada; não representa implantação no campus.