exxersoftware/exxer-cloud-edge

By exxersoftware

Updated 14 days ago

Gateway Edge para coleta, armazenamento e sincronização segura de telemetria IoT com o Exxer Cloud

Image
Message queues
API management
Internet of things
0

5.4K

exxersoftware/exxer-cloud-edge repository overview

Exxer Cloud Edge

Buffer local durável e sincronização de telemetria com o Exxer Cloud. O Edge roda dentro da rede da planta, recebe os dados dos equipamentos (por HTTP ou MQTT), armazena tudo com segurança em disco e sincroniza com a nuvem assim que há conexão. Se a internet cair, nada se perde: os dados são reenviados automaticamente.

O broker MQTT já vem embutido — a aplicação roda em um único container, sem depender de um Mosquitto externo.

Início rápido

docker run -d --name exxer-edge -p 9595:9595 -p 1883:1883 -v edge_data:/var/lib/exxer-edge --restart unless-stopped exxersoftware/exxer-cloud-edge:latest

Depois acesse http://localhost:9595 (ou http://<IP-DO-SERVIDOR>:9595). Nenhum arquivo de configuração é necessário: as credenciais internas são geradas automaticamente no primeiro início.

Primeiro acesso

  1. Abra a interface e crie o usuário administrador local.
  2. Cadastre o dispositivo com o token obtido no Exxer Cloud. Ao salvar, o Edge gera o token de ingestão (mostrado uma única vez — copie e guarde).
  3. Faça o teste de conexão.

Enviar telemetria

MQTT (recomendado para IoT/Node-RED) — publique em qualquer tópico na porta 1883, QoS 1, com o campo token na mensagem:

{ "token": "SEU_TOKEN_DE_INGESTAO", "data": { "temperature": 24.7 } }

Qual endereço usar como broker (depende de onde o cliente MQTT roda):

  • Mesma máquina, sem Docker: localhost;
  • Node-RED em Docker no mesmo host do Edge: host.docker.internal (no Linux, suba o container com --add-host=host.docker.internal:host-gateway);
  • Outro dispositivo/máquina na rede: o IP do servidor do Edge (ex.: 192.168.0.10).

Em todos os casos, porta 1883.

HTTP — envie um POST com o token no cabeçalho:

curl -X POST http://<IP-DO-SERVIDOR>:9595/api/v1/ingest \
  -H "Authorization: Bearer SEU_TOKEN_DE_INGESTAO" \
  -H "Content-Type: application/json" \
  -d '{ "data": { "temperature": 24.7 } }'
Exemplo pronto para Node-RED

Fluxo mínimo de publicação MQTT: um inject dispara a cada 5 s, uma function monta a leitura (com timestamp e location) e um mqtt out publica no Edge. No Node-RED, use Menu → Import, cole o JSON abaixo e ajuste dois pontos:

  • Broker (nó Exxer Edge): troque IP-DO-EDGE pelo IP do servidor do Edge (ou host.docker.internal, se o Node-RED roda em Docker no mesmo host), porta 1883.
  • Token (nó function): troque SEU_TOKEN_DE_INGESTAO pelo token de ingestão do dispositivo.
[
  { "id": "exxer-demo-tab", "type": "tab", "label": "Exxer Edge — MQTT", "disabled": false, "info": "" },
  { "id": "exxer-inject", "type": "inject", "z": "exxer-demo-tab", "name": "a cada 5s", "props": [{ "p": "payload" }], "repeat": "5", "crontab": "", "once": true, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 150, "y": 120, "wires": [["exxer-fn"]] },
  { "id": "exxer-fn", "type": "function", "z": "exxer-demo-tab", "name": "monta leitura", "func": "msg.payload = JSON.stringify({\n    timestamp: new Date().toISOString(),\n    type: \"telemetry\",\n    token: \"SEU_TOKEN_DE_INGESTAO\",\n    data: {\n        temperature: Math.round(Math.random() * 100),\n        humidity: Math.round(Math.random() * 100),\n        pressure: Math.round(Math.random() * 50),\n        battery: Math.round(Math.random() * 100)\n    },\n    location: {\n        lat: -23.5489,\n        lng: -48.6388\n    }\n});\nreturn msg;", "outputs": 1, "timeout": 0, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 350, "y": 120, "wires": [["exxer-mqtt-out"]] },
  { "id": "exxer-mqtt-out", "type": "mqtt out", "z": "exxer-demo-tab", "name": "publica no Edge", "topic": "telemetria", "qos": "1", "retain": "false", "respTopic": "", "contentType": "", "userProps": "", "correl": "", "expiry": "", "broker": "exxer-broker", "x": 580, "y": 120, "wires": [] },
  { "id": "exxer-broker", "type": "mqtt-broker", "name": "Exxer Edge", "broker": "IP-DO-EDGE", "port": "1883", "clientid": "", "autoConnect": true, "usetls": false, "protocolVersion": 4, "keepalive": 60, "cleansession": true }
]

O Edge assina todos os tópicos, então qualquer tópico funciona — o dispositivo é identificado pelo campo token da mensagem, não pelo tópico.

Portas

PortaUso
9595Interface web e API HTTP.
1883Broker MQTT embutido (padrão MQTT).

Dados e persistência

Todos os dados e as credenciais ficam no volume edge_data (/var/lib/exxer-edge). Não remova esse volume — é a memória do Edge e contém a chave que decifra os tokens. Faça backup periódico:

docker exec exxer-edge npm run backup

Variáveis de ambiente (opcionais)

O Edge funciona sem nenhuma configuração. Para casos específicos:

VariávelPadrãoDescrição
EDGE_DEFAULT_MODEbatch_v1Modo de sincronização (batch_v1 recomendado).
EDGE_MQTT_BROKER_ENABLEDtrueDefina false para usar um broker MQTT externo.
EDGE_MQTT_URLmqtt://127.0.0.1:1883Broker usado quando o embutido está desativado.
EDGE_LOG_LEVELinfoNível de log.

Arquiteturas e tags

  • Arquiteturas: linux/amd64 e linux/arm64 (compatível com Raspberry Pi).
  • Tags: latest e a versão fixa (ex.: 1.0.0).

Segurança

O broker MQTT aceita conexões anônimas para facilitar a integração, mas o Edge descarta mensagens sem token de ingestão válido. Restrinja as portas 1883 e 9595 à rede local no firewall.

Mais informações

Exxer — https://exxer.com/

Tag summary

Content type

Image

Digest

sha256:c1a91901a

Size

83 MB

Last updated

14 days ago

docker pull exxersoftware/exxer-cloud-edge