
Plataforma leve de gerenciamento de dispositivos OpenWRT para redes pequenas. Configuração centralizada, monitoramento e gerenciamento WiFi para 2 a 20 dispositivos com implantação simples e compatibilidade com OpenWISP.
*Aviso: esta é uma versão inicial; leia as notas de versão de TODAS as versões até agora*
# <img src="https://raw.githubusercontent.com/rubenbe/opensoho/HEAD/logo.svg" alt="OpenSOHO logo" width="40" /> OpenSOHO
Obrigado por considerar apoiar o projeto!
<a href="https://www.buymeacoffee.com/rubenbe" target="_blank"><img src="https://assets.kitploit.com/production/public/readmes/9350/485b634752d0d832ed936de61544bf16e5e54dc05146ccca080333c15097d455.png" alt="Buy Me A Coffee" height="41" width="174"></a>
[Documentação](https://opensoho.github.io/docs)
O OpenSOHO foi criado para gerenciar um pequeno número de dispositivos de rede baseados em OpenWRT. Daí o nome SOHO, de Small Office Home Office (SOHO) Networks.
* De 2 a 20 dispositivos (não há limite rígido)
* Sem multi-tenancy
* Compatível com openwisp-config e openwisp-monitoring.
* Fácil de implantar
É inspirado no OpenWISP, mas tem como objetivo redes pequenas demais para serem mantidas com o OpenWISP.
Como o OpenWisp mencionou:
> No entanto, o OpenWISP pode não ser a melhor opção para redes muito pequenas (menos de 20 dispositivos), organizações sem experiência em TI ou empresas que buscam alternativas de código aberto apenas para economizar custos.
<p align="center">
<a href="https://raw.githubusercontent.com/opensoho/assets/074a4c5c353fcbb295e2da84fb3490869c6c4de0/devices.png" target="_blank">
<img src="https://assets.kitploit.com/production/public/readmes/9350/5d363839ee3d28ed044c4de8249f4944be3e18ef8cb2e13d7b1c1a6a487fa1ce.png" width="80%" />
</a>
</p>
As seguintes versões são testadas
* OpenWRT 24.10.x DSA (suporte legado)
* OpenWRT 25.12.x DSA
# Primeiros passos com o OpenSOHO
## Visão geral
Configurar o OpenSOHO requer alguns passos simples, cada um detalhado nas seções abaixo:
* Instale o OpenSOHO no seu servidor.
* Instale os pacotes OpenWisp nos seus dispositivos OpenWRT.
* Configure o OpenWisp em cada um dos seus dispositivos OpenWRT para se conectar ao OpenSOHO.
* Comece a configurar no OpenSOHO!
## Instalar o OpenSOHO
* Baixe a versão mais recente do OpenSOHO (ou use um contêiner Docker)
[Releases](https://github.com/rubenbe/opensoho/releases)
[Configuração com Docker, Podman ou Kubernetes](https://opensoho.github.io/docs/containers/)
* Inicie o OpenSOHO
Primeiro, escolha um segredo compartilhado que permita aos dispositivos OpenWRT (usando openwisp-config) se registrarem no OpenSOHO.
Escolha uma string aleatória longa para segurança ideal.
Ela deve corresponder ao que você configurar no LuCI nos próximos passos.
```sh
OPENSOHO_SHARED_SECRET=randompassphrase ./opensoho serve --http 0.0.0.0:8090
```
Agora, o OpenSOHO exibe uma URL na linha de comando que permite criar a conta de administrador.
Basta abrir a URL no seu navegador.
Como alternativa, crie a conta de administrador via linha de comando:
```sh
./opensoho superuser upsert EMAIL PASS
```
## Configurando (adotando) os dispositivos OpenWRT
### Instalar os pacotes do OpenWISP
```sh
opkg install openwisp-config openwisp-monitoring luci-app-openwisp # OpenWRT 24.10
apk add openwisp-config openwisp-monitoring luci-app-openwisp # OpenWRT 25.12+
```
Se você quiser usar o direcionamento de clientes 802.11v, o wpad-mbedtls completo é necessário.
No OpenWRT 24.10
```sh
opkg remove wpad-basic-mbedtls && \
opkg install wpad-mbedtls && \
service wpad restart
```
No OpenWRT 25.12+
```sh
apk del wpad-basic-mbedtls && \
apk add wpad-mbedtls && \
service wpad restart
```
Depois que o wpad-mbedtls estiver instalado, tente `service restart wpad` primeiro, caso contrário, pode ser necessário reiniciar para alternar para o novo binário wpad. Se não o fizer, poderá obter um erro como `daemon.notice netifd: radio1 (28210): WARNING (wireless_add_process): executable path /usr/sbin/wpad does not match process 1842 path (/usr/sbin/wpad (deleted))`.
(Observe que o direcionamento de clientes 802.11v ainda está em desenvolvimento)
### Configurar o OpenWISP no LuCI:
* Defina apenas o `Server URL` e o `Shared secret`.
* *NÃO* acrescente uma barra ao `Server URL`. Exemplo de URL: `http://192.168.1.1:8090`
* O segredo compartilhado é o valor que você escolheu anteriormente (`OPENSOHO_SHARED_SECRET`).
* Opcionalmente, reduza o `Update Interval` para 30 segundos para atualizações mais rápidas. (O OpenSOHO faz isso por você se não o fizer)
* O OpenSOHO também ativa o monitoramento e reduz o intervalo de monitoramento para 15 segundos para atualizações mais rápidas do estado da rede.
É altamente recomendável ativar o monitoramento, pois o OpenSOHO deduz muitas das configurações atuais do OpenWRT e as preenche para facilitar a configuração.
## Configurar o OpenSOHO
* Aguarde até que o(s) dispositivo(s) OpenWrt se autorregistem usando o segredo compartilhado.
* Defina o sinalizador `Enabled` do dispositivo como verdadeiro.
* Defina o `numradios` com o valor correto. Por exemplo, para um dispositivo 2.4 + 5GHz, esse valor seria 2.
* Configure um ponto de acesso Wifi (SSID+KEY). Este procedimento permite que o OpenSOHO detecte corretamente a configuração de rádio no momento do registro do dispositivo.
* Anexe o ponto de acesso Wifi configurado a um dispositivo para que ele seja configurado.
* Atualmente, cada rede será configurada automaticamente em todos os rádios (configurados usando `numradios`).
* Opcionalmente, os leds também podem ser ligados ou desligados (apenas configuração estática por enquanto).
* A configuração de frequências de rádio agora é suportada. O OpenSOHO lê a configuração atual do rádio uma vez e a disponibiliza na configuração dos rádios. Pode levar um ou dois minutos antes que a configuração do rádio apareça (as etapas de configuração e monitoramento precisam de algum tempo para serem concluídas).
## Painel
O OpenSOHO vem com um painel básico. Ele é acessível pelo botão na barra lateral mais à esquerda, logo abaixo do logotipo do OpenSOHO.
<p align="center">
<a href="https://raw.githubusercontent.com/opensoho/assets/636c6966e5bb33f6ef1fc0a7b0188307ad6865b6/dashboard.png" target="_blank">
<img src="https://assets.kitploit.com/production/public/readmes/9350/3b8f95d6bd1a3860d0aac83aa3e54eccb115aef24273ab9ba6d5d9a7591304e1.png" width="70%" />
</a>
</p>
Observe que isto não se destina a substituir ferramentas de gráficos mais avançadas; é e continuará a ser mantido básico de propósito.
## Configurar
O OpenSoho agora pode ser acessado via http://ipaddress:8090/_/
Existem várias coleções de configuração:
### Clientes
Estes são os clientes conectados ao Wifi. Esta tabela é somente leitura, exceto pelo alias.
Ela pode ser usada para dar aos dispositivos um nome legível por humanos. Isso só funciona corretamente quando o cliente não randomiza seu endereço mac.
#### Clientes conectados
Contém a lista de clientes que estão atualmente conectados ao seu wifi. Para mostrar o endereço IP do dispositivo, o OpenSOHO precisa de acesso às suas concessões DHCP. Para isso, você precisa ter o daemon de monitoramento do openwisp em execução no dispositivo que contém o servidor DHCP. Dispositivos com IP estático não obterão um IP. Esta é uma limitação conhecida na versão 0.12.0.
### Dispositivos
Estes são os dispositivos conectados.
* Use enable/disable para desativar as atualizações de configuração. Isso é útil para evitar atualizar todos os dispositivos de uma vez. O monitoramento permanece ativo.
* O status de saúde é um campo somente leitura. `healthy` significa que o dispositivo se comunicou no último minuto. Se não o fez, o status de saúde torna-se `unhealthy` e pode haver algo errado com o dispositivo ou sua conexão.
* Leds permite escolher configurações de led
* Numradios permite definir o número de rádios no dispositivo. Isso não é enviado inicialmente pelo OpenWisp, portanto precisa ser definido pelo usuário.
* Wifis permite selecionar SSIDs a serem aplicados neste dispositivo.
### Reservas DHCP
Crie uma reserva com um hostname, endereço MAC, endereço IPv4 e um ou
mais servidores DHCP. O OpenSOHO adiciona a mesma seção nomeada `config host` a
`/etc/config/dhcp` em cada servidor selecionado. Limpe a seleção de servidor DHCP para
desativar a reserva sem excluí-la. Nomes, endereços MAC e endereços IP
são únicos em toda a lista de reservas.
### Leds
* Configuração básica de LED (mais um POC neste momento)
### Radios
* Permite definir a frequência de cada rádio.
* A banda não deve ser modificada, pois isso permite ao OpenSOHO verificar a configuração de frequência. Isso é necessário devido a limitações do PocketBase.
### Wifi
* Permite configurar vários SSIDs. A seleção de modos de criptografia está atualmente limitada. WEP ou Open não são suportados por design.
## Monitoramento
### Monitoramento de dispositivos
Verifique se a integridade do dispositivo está `healthy`.
### Clientes conectados
Esta visualização mostra todos os clientes wifi que ainda estão conectados nos últimos 30 segundos.
### Integração com o Home Assistant
O monitoramento do OpenSOHO pode ser integrado ao Home Assistant. [(Mais informações)](https://opensoho.github.io/docs/home-assistant/)
Esta API REST foi projetada para uso com o Home Assistant, mas também pode ser integrada a outras ferramentas.
## Solução de problemas
### Registrar novamente um dispositivo
Quando a alteração do `Server URL` do OpenWISP no LuCI parece não registrar corretamente no novo controlador.
Para corrigir isso:
```sh
uci delete openwisp.http.uuid
uci delete openwisp.http.key
/etc/init.d/openwisp-config restart
```
### O primeiro SSID não é ativado
Parece haver um problema no OpenWRT em que o primeiro SSID configurado em um dispositivo Wi-Fi não é ativado automaticamente.
Solução alternativa: clique no botão de ativação no LuCI.
# Desenvolvedores
* Instale as dependências
```sh
go mod tidy
```
* Iniciar o OpenSOHO
O segredo compartilhado é usado pelo openwisp-config para se registrar. Escolha uma string longa e aleatória para segurança ideal.
Executando os testes unitários:
```sh
go test -cover -v -coverprofile=coverage.out
go tool cover -html=coverage.out
```
## Escopo
### Recursos
Alguns recursos do OpenWISP são (atualmente) considerados fora do escopo do OpenSOHO
* Atualizações de firmware: o OpenWRT não precisa de atualizações frequentes; use o recurso Attended sysupgrade em cada dispositivo manualmente.
* Multi-tenancy
* Templates: o OpenWISP possui um mecanismo de templates poderoso e versátil, que é substituído por um subconjunto mais opinativo de recursos para proporcionar uma experiência de configuração mais simples.
### Desenvolvimento
O objetivo é aproveitar o pocketbase ao máximo. Pequenas modificações podem ser feitas, já que o back-end do pocketbase atualmente não possui um sistema de plug-ins. Mas não é o objetivo criar um fork do pocketbase, para que a mesclagem de alterações upstream permaneça simples.
### Lançamento
```sh
GITHUB_TOKEN=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa goreleaser release
```