Controle de VentiladorEm varias situações é necessário sincronizarmos o relógio de vários equipamentos, tanto aqueles que compõem a infraestrutura de uma rede quanto estações de trabalho e servidores. Contudo, para que isso funcione corretamente é imperativa uma boa conexão desses dispositivos com a internet. Isso nem sempre é desejado por razões de segurança, uma vez que, dependendo da arquitetura particular da rede, é interessante que alguns dispositivos não tenham comunicação com a internet. Em outras palavras, muitas vezes se deseja que alguns equipamentos se comuniquem via a rede local sem acessar a rede externa. Portanto, seria interessante ter na rede local um servidor de horário, um servidor NTP (Network Time Protocol), completamente independente e que só tenha trânsito na rede local. Uma opção para isso é que ele obtenha seus dados de data e hora não a partir de um módulo RTC, (Real Time Clock), mas sim de um GPS (Global Positioning System).

Tal ideia é razoavelmente popular na web, com vários tutoriais sobre o assunto. Aqui, apresento um relato de minha experiência ao implementar um servidor desse tipo.

O servidor em questão foi implementado usando um Raspberry Pi Zero-W, montado em uma caixinha metálica, uma fonte de +5 V com capacidade de corrente adequada, um cartão micro-SD de 16 GBytes, e um receptor GPS modelo GN800L, com comunicação USB. Isso é ilustrado abaixo, onde são mostrados os componentes instalados na parte traseira de uma escrivaninha. 

Após a instalação do sistema operacional (Raspberry Pi OS lite), e tendo em mente as características da placa Raspberry Pi empregada, é altamente recomendável desabilitarmos qualquer interface gráfica. Além disso, é necessário habilitarmos a interface Wi-Fi, configurar adequadamente o acesso à rede local usando um IP fixo, habilitar o serviço SSH para ser utilizado na manutenção remota do servidor, registrar uma senha forte para administração, fixar o nome do servidor, fornecer a localização geográfica, zona temporal, tipo de teclado e a norma de configuração dos canais de comunicação sem fio (Wi-Fi e Bluetooth). Tudo isso pode ser feito usando o aplicativo raspi-config, sendo este acessível via o comando:

pi@meupi> sudo raspi-config

Após estes passos, passamos a operar o Raspberry Pi exclusivamente através de uma conexão SSH via Wi-Fi, sem conectar o receptor GPS, e com uma conexão com a internet ativa. Primeiramente, vamos instalar os pacotes relacionados com o receptor GPS, digitando:

pi@meupi> sudo apt-get install gpsd gpsd-clients python-gps

e com o receptor GPS ainda desconectado do Raspberry Pi, digita-se o comando:

pi@meupi> sudo lsusb

Como resposta, deve ser obtido algo do gênero:

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

que informa a presença do bus/hub USB. Cabe observar que se tivermos outros dispositivos USB conectados, por exemplo, um teclado sem fio ou um pendrive, eles também apareceram nessa listagem. Conectando-se o receptor GPS em uma das portas USB e repetindo o procedimento, obtém-se:

pi@meupi> sudo lsusb

Bus 001 Device 002: ID 1546:01a8 U-Blox AG [u-blox 8]

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

onde a primeira linha mostra explicitamente a presença e identificação de um “novo” dispositivo USB conectado em uma das portas do Raspberry Pi. Caso isso não ocorrer, então houve algum problema de conexão. Isso terá que ser obrigatoriamente corrigido antes de prosseguir, pois indica que o receptor GPS não está efetivamente conectado/identificado.

Após essa etapa, é recomendado editar o arquivo gpsd no diretório /etc/default incluindo algumas configurações relevantes, tal como mostrado na listagem abaixo:

Arquivo: /etc/default/gpsd

# Default settings for the gpsd init script and the hotplug wrapper.

# Start the gpsd daemon automatically at boot time

 

START_DAEMON="true"

 

# Use USB hotplugging to add new USB devices automatically to the daemon

 

USBAUTO="true"

 

# Devices gpsd should collect to at boot time.

# They need to be read/writeable, either by user gpsd or the group dialout.

 

DEVICES="/dev/ttyACM0"

 

# Other options you want to pass to gpsd

 

#GPSD_OPTIONS="-n -D 1"

GPSD_OPTIONS="-n"

 

ENABLE="yes"

 

GPS_BAUD=9600

Em seguida, devemos iniciar a conexão com o receptor digitando:

pi@meupi> sudo gpsd /dev/ACM0 -n -F  /var/run/gpsd.sock

Cabe observar que o receptor GPS foi identificado como ttyACM0. Se isso não for verdadeiro, deve-se checar o nome assumido para o dispositivo e fazer as devidas substituições. Prosseguindo, é recomendável reiniciar o sistema, usando:

pi@meupi> sudo reboot

e após isso, devemos testar o funcionamento do GPS usando o comando:

pi@meupi> cgps -s

Esse aplicativo deverá fornecer um resultado do tipo:

mostrando a localização atual, data, hora, satélites encontrados, etc. Trata-se de uma tela interativa que fica constantemente sendo atualizada, onde para sair devemos teclar a letra “q”. Uma vez obtido esse resultado, estamos seguros que o receptor foi adequadamente identificado e está operando corretamente.

A próxima etapa consiste na instalação do pacote que constitui o servidor NTP propriamente dito. Para isso, foi escolhido o Chronyd, sendo baixado e instalado via o comando:

pi@meupi> sudo apt-get install chrony

devendo-se fazer alguns ajustes no arquivo de configuração chrony.conf disponível no diretório /etc/chrony, em acordo com a listagem abaixo:

Arquivo: /etc/chrony/chrony.conf

# Welcome to the chrony configuration file. See chrony.conf(5) for more

# information about usuable directives.

# pool 2.debian.pool.ntp.org iburst

 

# This directive specify the location of the file containing ID/key pairs for

# NTP authentication.

keyfile /etc/chrony/chrony.keys

 

# This directive specify the file into which chronyd will store the rate

# information.

driftfile /var/lib/chrony/chrony.drift

 

# Uncomment the following line to turn logging on.

#log tracking measurements statistics

 

# Log files location.

logdir /var/log/chrony

 

# Stop bad estimates upsetting machine clock.

maxupdateskew 100.0

 

# This directive enables kernel synchronisation (every 11 minutes) of the

# real-time clock. Note that it can’t be used along with the 'rtcfile' directive.

rtcsync

 

# Step the system clock instead of slewing it if the adjustment is larger than

# one second, but only in the first three clock updates.

makestep 1 3

 

refclock SHM 0 offset 0.5 delay 0.2 refid NMEA

 

allow all

 

Prosseguindo, é recomendável reiniciar o sistema, usando:

pi@meupi> sudo reboot

Nesse ponto dos acontecimentos, o servidor NTP baseado em sinal GPS já deverá estar acessível. Para testar seu funcionamento podemos usar o aplicativo NTP-Check, para Windows, disponível em https://www.ntp-time-server.com/ntp-software/ntp-check.html ou então aqui. Este aplicativo deve ser executado em um outro computador que esteja conectado na mesma rede. Ele não necessita de instalação, podendo ser executado a partir de qualquer diretório. Para efetuar o teste basta fornecer o IP do Raspberry Pi em questão e clicar em “Test”. Um resultado típico é mostrado a seguir.

Além de outros diagnósticos relevantes, é muito importante que as datas fornecidas nas linhas indicadas pelas setas em vermelho sejam idênticas, e que os correspondentes horários sejam ao menos muito próximos (diferenças na casa dos segundos). Caso houver divergências nesses resultados, deveremos resolver os problemas de sincronização de data e horário. Em alguns casos os comandos timedatectl e timesyncd poderão dar uma pista sobre o problema.

Em uma temperatura ambiente na faixa de 23 °C a 25 °C, a temperatura de operação do Raspberry Pi irá girar em torno de 48 °C até 52 °C. Como se trata de um servidor que não enfrenta grande demanda de processamento nem de transferência de dados, podemos otimizar tal temperatura e baixa-la para a faixa de 40 °C até 44 °C reduzindo o clock do processador. Tipicamente esse clock é de 1 GHz. Contudo, para um servidor NTP, não há problemas notáveis se for baixado para 700 MHz. Isso pode ser feito instalando o utilitário cpufrequtils, via o comando:

pi@meupi> sudo apt-get install cpufrequtils

Para verificar a frequência de funcionamento da CPU use:

pi@meupi> cpufreq-info

Para reduzir o clock e baixar a temperatura de operação use:

pi@meupi> sudo cpufreq-set -g powersave

Pronto! Tudo deverá estar em ordem. Contudo, por razões de segurança, e dependendo da sua infraestrutura de rede, não se esqueça de impossibilitar a conexão deste servidor com a internet.

NOTA: O presente projeto possui finalidades didáticas sem pretensões comerciais. Fico isento de qualquer responsabilidade pelo uso, montagem, aplicação ou reprodução desse projeto, integramente ou em partes. Em especial, não me responsabilizo por qualquer dano que pode ser por ele provocado. Para questões adicionais, sugestões e comentários favor entrar em contato via o email: Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.