Monitor de Temperatura

Este é um roteiro de referência para instalação e configuração de um monitor de temperatura usando o sensor DS18B20 e uma placa Orange Pi PC. Para outros sensores e principalmente outras placas, tais como Raspberry Pi, há diversas diferenças que precisam ser levadas em consideração.

Para Raspberry Pi pode até ser mais fácil, inclusive, porque a documentação e experiência de outros usuários documentadas na internet é vasta e abundante. Para Orange Pi PC foi necessário juntar informações de diversos lugares diferentes e adaptar para o caso específico.

Há diversas versões de Orange Pi, tais como ZERO, Lite, PC etc. Este roteiro se refere especificamente ao modelo “PC“: Orange Pi PC.

Instalação do Linux no Orange Pi PC (OpiPC)

  1. Faça o download da versão do Armbian para OpiPC: https://www.armbian.com/orange-pi-pc/
  2. Utilizando o BalenaEtcher (ou Rufus), grave a imagem baixada num micro SDCard, com pelo menos 8GB de espaço.
  3. Dê boot na placa com o cartão inserido, e efetue a instalação normalmente, configurando a senha para o usuário root e também para um usuário simples.

Atualização de software e ajustes

Terminada a instalação, reboot a placa, entre via console ou ssh, e efetue os seguintes procedimentos:

Atualize os pacotes:

$ apt update
$ apt upgrade

Acerte o timezone para a sua região. Aqui um exemplo para São Paulo:

$ cd /etc
$ rm localtime
$ ln -s /usr/share/zoneinfo/America/Sao_Paulo localtime

Configuração do sensor

Edite o arquivo /etc/modules-load.d/modules e certifique-se de que todas as entradas começando com “w1″* estão comentadas. Comente também xradio_wlan (wifi) para não causar interferência.

No final o arquivo deve ficar desta forma:

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
#w1-sunxi
#w1-gpio
#w1-therm
#sunxi-cir
#xradio_wlan
g_serial

Edite o arquivo /boot/armbianEnv.txt, e acrescente as linhas

  • ovelays
  • param_w1_pin
  • param_w1_pin_int_pullup

para que fique desta forma:

verbosity=1
bootlogo=false
console=both
disp_mode=1920x1080p60
overlay_prefix=sun8i-h3
overlays=w1-gpio
param_w1_pin=PA10
param_w1_pin_int_pullup=1
rootdev=UUID=88adacec-2194-4cfc-abc4-67cd6ef7fdf4
rootfstype=ext4
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u

Se as últimas linhas (rootdev, usbstoragequirks) não estiverem exatamente iguais, não tem problema; cada instalação terá valores diferentes. O importante são as linhas destacadas em negrito estarem de acordo.

Edite o arquivo /etc/default/cpufrequtils e deixe-o desta forma:

ENABLE=true
MIN_SPEED=480000
MAX_SPEED=1200000
GOVERNOR=interactive

Desligue o sistema com poweroff, aguarde o término do processo, remova a placa da energia elétrica e proceda com a instalação física do sensor.

Instalação física do sensor

O sensor possui três fios nas cores AMARELO, VERMELHO e PRETO que precisam ser conectados exatamente desta forma para que funcionem!

Na placa Orange Pi PC, esta é a identificação e posição dos pinos:

Atente para o fato de que os 3 fios coloridos (AMARELO, VERMELHO e PRETO) serão conectados no resistor de 4.7KΩ, e de lá é que sairão os fios (de outras cores…) que efetivamente se conectarão à placa Orange Pi PC.

Seguir a sequência que está sendo usada no resistor para que a conexão fique correta. Um erro e a placa pode ser queimada ao ser ligada.

Dica: depois de conectar os fios coloridos nos terminais DAT, VCC e GND, siga os correspondentes até a placa, de acordo.

Testando a instalação do sensor

Após a instalação física do sensor, ligue a placa e entre no sistema, via console ou ssh.

Para verificar se o sensor foi reconhecido corretamente, execute o comando cat no arquivo /sys/devices/w1_bus_master1/w1_master_slave_count:

$ cat /sys/devices/w1_bus_master1/w1_master_slave_count
1

O número “1″ na saída indica que um sensor foi reconhecido. Sucesso!

Caso obtenha outro número ou um erro de arquivo inexistente, significa que qualquer um dos passos anteriores pode ter sido feito errado.

Verifique item por item, inclusive a conexão física do sensor à placa.

Caso tenha obtido o número 1, continue.

Para cada conjunto de placa/sensor, um número de dispositivo será criado. Verifique qual foi o seu caso, listando os arquivos do diretório /sys/bus/w1/devices. No caso desta instalação específica:

$ ls -l /sys/bus/w1/devices/
total 0
lrwxrwxrwx 1 root root 0 Oct  8 13:17 28-012033d3d669 -> ../../../devices/w1_bus_master1/28-012033d3d669
lrwxrwxrwx 1 root root 0 Oct  8 17:53 w1_bus_master1 -> ../../../devices/w1_bus_master1

O nome do dispositivo nesta instalação foi 28-012033d3d669. Então, de acordo com a identificação do seu dispositivo, obtenha a temperatura desta forma (troque o identificador pelo o que você obteve), executando o comando cat sobre o arquivo /sys/bus/w1/devices/28-XXX…/w1_slave:

$ cat /sys/bus/w1/devices/28-012033d3d669/w1_slave
aa 01 4b 46 7f ff 0c 10 63 : crc=63 YES
aa 01 4b 46 7f ff 0c 10 63 t=26625
  • A primeira linha terminando com “crc=XX YES”, indica que a leitura foi feita com sucesso.
  • A segunda linha terminando com “t=”, indica a temperatura. Divida por 1000 e obtenha o valor. Neste exemplo acima a temperatura ambiente no momento em que o comando foi executado estava 26,625 Celsius.

Instalando & configurando o SNMP

Instale os pacotes para habilitar o SNMP:

$ apt install snmpd snmp-mibs-downloader

Edite o arquivo /etc/default/snmpd e habilite as opções, acrescentando o módulo “extend”. No final o arquivo deve ficar assim:

# This file controls the behaviour of /etc/init.d/snmpd
# but not of the corresponding systemd service file.
# If needed, create an override file in
# /etc/systemd/system/snmpd.service.d/local.conf
# see man 5 systemd.unit and man 5 systemd.service

# Don't load any MIBs by default.
# You might comment this lines once you have the MIBs downloaded.
# export MIBS=

# snmpd options (use syslog priority warning, close stdin/out/err).
SNMPDOPTS='-LSwd -Lf /dev/null -u Debian-snmp -g Debian-snmp -I extend -smux,mteTrigger,mteTriggerConf -p /run/snmpd.pid'

Faça o download dos arquivos para o SNMP do site da NorwegianCreations e copie os exemplos:

$ cd /opt/
$ sudo git clone -b 1-0-release <https://github.com/NorwegianCreations/snmpmoni.git>
$ cd snmpmoni/
$ sudo cp config/snmpd.conf.example /etc/snmp/snmpd.conf

Em seguida edite o arquivo /etc/snmp/snmpd.conf, e configure pelo menos a entrada “rocommunity” na seção ACCESS CONTROL, e deixe apenas uma entrada extend (porque só existe 1 sensor neste caso) habiltado para uso.

De modo geral o arquivo deve ficar assim:

###############################################################################
#
#       Norwegian Creations
#       SNMP Moni
#       snmp.conf
#       Revision 1.0
#
#   An example configuration file for configuring the Net-SNMP agent ('snmpd')
#   See the 'snmpd.conf(5)' man page for details
#
###############################################################################
#  AGENT BEHAVIOUR
#  Listen for connections on all interfaces (IPv4 only)
agentAddress udp:161

#  Listen for connections on all interfaces (both IPv4 *and* IPv6)
#agentAddress udp:161,udp6:[::1]:161

###############################################################################
#
#  SNMPv3 AUTHENTICATION
#
#  Note that these particular settings don't actually belong here.
#  They should be copied to the file /var/lib/snmp/snmpd.conf
#     and the passwords changed, before being uncommented in that file *only*.
#  Then restart the agent

#  createUser authOnlyUser  MD5 "remember to change this password"
#  createUser authPrivUser  SHA "remember to change this one too"  DES
#  createUser internalUser  MD5 "this is only ever used internally, but still change the password"

#  If you also change the usernames (which might be sensible),
#  then remember to update the other occurances in this example config file to match.

###############################################################################
#
#  ACCESS CONTROL
#
             #  Full access from an example network
             #     Adjust this network address to match your local
             #     settings, change the community string,

#rocommunity public  10.0.0.33      #Allow only one computer
#rocommunity public  10.0.0.0/24    #Allow all in a network subnet
rocommunity public  10.99.99.0/24 #Rede interna de monitoração

                       #  Full read-only access for SNMPv3
#rouser   authOnlyUser
                       #  Full write access for encrypted requests
                       #     Remember to activate the 'createUser' lines above
#rwuser   authPrivUser   priv
###############################################################################
#
#  SYSTEM INFORMATION
#

#  Note that setting these values here, results in the corresponding MIB objects being 'read-only'
#  See snmpd.conf(5) for more details
sysLocation    Sao Paulo, Brazil
sysContact     E-mail <email@dominio.com.br> # Altere de acordo
sysServices    72

###############################################################################
#
#  EXTENDING THE AGENT
#
extend .1.3.6.1.4.1.50083.100.4.1.1.1.7.1 therm /bin/bash /opt/snmpmoni/bin/ds18b20.sh -g iso.3.6.1.4.1.50083.100.4.1.1.1.7.1
#extend .1.3.6.1.4.1.50083.100.4.1.1.1.7.2 therm /bin/bash /opt/snmpmoni/bin/ds18b20.sh -g iso.3.6.1.4.1.50083.100.4.1.1.1.7.2
#extend .1.3.6.1.4.1.50083.100.4.1.1.1.7.3 therm /bin/bash /opt/snmpmoni/bin/ds18b20.sh -g iso.3.6.1.4.1.50083.100.4.1.1.1.7.3
#extend .1.3.6.1.4.1.50083.100.4.1.1.1.7.4 therm /bin/bash /opt/snmpmoni/bin/ds18b20.sh -g iso.3.6.1.4.1.50083.100.4.1.1.1.7.4
#extend .1.3.6.1.4.1.50083.100.4.1.1.1.7.5 therm /bin/bash /opt/snmpmoni/bin/ds18b20.sh -g iso.3.6.1.4.1.50083.100.4.1.1.1.7.5
#extend .1.3.6.1.4.1.50083.100.4.1.1.1.7.6 therm /bin/bash /opt/snmpmoni/bin/ds18b20.sh -g iso.3.6.1.4.1.50083.100.4.1.1.1.7.6
#extend .1.3.6.1.4.1.50083.100.4.1.1.1.7.7 therm /bin/bash /opt/snmpmoni/bin/ds18b20.sh -g iso.3.6.1.4.1.50083.100.4.1.1.1.7.7
#extend .1.3.6.1.4.1.50083.100.4.1.1.1.7.8 therm /bin/bash /opt/snmpmoni/bin/ds18b20.sh -g iso.3.6.1.4.1.50083.100.4.1.1.1.7.8

10.99.99.0/24 é a rede ao qual o IP da placa foi configurado. Altere de acordo.

Agora vá até o diretório /opt/snmpmoni/mapping, e deixe apenas o arquivo habilitado na linha extend do arquivo /etc/snmp/snmpd.conf com o ID do sensor que foi obtido.

No caso específico usado neste manual, o arquivo /opt/snmpmoni/mapping/iso.3.6.1.4.1.50083.100.4.1.1.1.7.1 teria que ter o conteúdo 28-012033d3d669:

$ cd /opt/snmpmoni/mapping
$ ls -l
total 4
-rw-r--r-- 1 root root 16 Oct  8 18:25 iso.3.6.1.4.1.50083.100.4.1.1.1.7.1

$ cat iso.3.6.1.4.1.50083.100.4.1.1.1.7.1
28-012033d3d669

O nome do arquivo iso.3.6.1.4.1.50083.100.4.1.1.1.7.1 será o mesmo. O que vai variar é o conteúdo, que precisa estar de acordo com o ID do sensor que foi obtido anteriormente.

O conteúdo pode ser salvo desta forma (exemplo):

$ echo 28-012033d3d669 > **/opt/snmpmoni/mapping/iso.3.6.1.4.1.50083.100.4.1.1.1.7.1**

Feito isso, agora é só reiniciar o serviço snmpd para que as configurações sejam carregadas:

$ service snmpd restart

Testando a leitura

A partir de um outro sistema com recursos de monitoração (Zabbix, Nagios etc) e com permissão para fazer queries (rocommunity…), execute:

$ snmpwalk -v 1 -c public <IP> iso.3.6.1.4.1.50083.100.4.1.1.1.7.1

trocando <IP> pelo IP configurado na Orange Pi PC.

A saida, se estiver tudo certo, deve ser algo assim (exemplo):

$ snmpwalk -v 1 -c public 192.168.0.69 iso.3.6.1.4.1.50083.100.4.1.1.1.7.1
SNMPv2-SMI::enterprises.50083.100.4.1.1.1.7.1.1.0 = INTEGER: 1
SNMPv2-SMI::enterprises.50083.100.4.1.1.1.7.1.2.1.2.5.116.104.101.114.109 = STRING: "/bin/bash"
SNMPv2-SMI::enterprises.50083.100.4.1.1.1.7.1.2.1.3.5.116.104.101.114.109 = STRING: "/opt/snmpmoni/bin/ds18b20.sh -g iso.3.6.1.4.1.50083.100.4.1.1.1.7.1"
SNMPv2-SMI::enterprises.50083.100.4.1.1.1.7.1.2.1.4.5.116.104.101.114.109 = ""
SNMPv2-SMI::enterprises.50083.100.4.1.1.1.7.1.2.1.5.5.116.104.101.114.109 = INTEGER: 5
SNMPv2-SMI::enterprises.50083.100.4.1.1.1.7.1.2.1.6.5.116.104.101.114.109 = INTEGER: 1
SNMPv2-SMI::enterprises.50083.100.4.1.1.1.7.1.2.1.7.5.116.104.101.114.109 = INTEGER: 1
SNMPv2-SMI::enterprises.50083.100.4.1.1.1.7.1.2.1.20.5.116.104.101.114.109 = INTEGER: 4
SNMPv2-SMI::enterprises.50083.100.4.1.1.1.7.1.2.1.21.5.116.104.101.114.109 = INTEGER: 1
SNMPv2-SMI::enterprises.50083.100.4.1.1.1.7.1.3.1.1.5.116.104.101.114.109 = STRING: "27.062"
SNMPv2-SMI::enterprises.50083.100.4.1.1.1.7.1.3.1.2.5.116.104.101.114.109 = STRING: "27.062"
SNMPv2-SMI::enterprises.50083.100.4.1.1.1.7.1.3.1.3.5.116.104.101.114.109 = INTEGER: 1
SNMPv2-SMI::enterprises.50083.100.4.1.1.1.7.1.3.1.4.5.116.104.101.114.109 = INTEGER: 0
SNMPv2-SMI::enterprises.50083.100.4.1.1.1.7.1.4.1.2.5.116.104.101.114.109.1 = STRING: "27.062"

Ou seja: 27,062 graus Celsius.

Bônus: instalação do Zabbix Agent

Instale o agente do Zabbix através do pacote:

$ apt install zabbix-agent

Em seguida edite o arquivo /etc/zabbix/zabbix_agentd.conf e altere as seções “Passive checks related/Option: server” e “Active checks related/Option: ServerActive” destacadas de acordo com as configurações do Zabbix Server.

Neste exemplo o Zabbix Server tem o endereço/rede 10.99.99.17/24. Altere de acordo com seu ambiente:

(...)
##### Passive checks related

### Option: Server
#       List of comma delimited IP addresses, optionally in CIDR notation, or DNS names of Zabbix servers and Zabbix proxies.
#       Incoming connections will be accepted only from the hosts listed here.
#       If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' are treated equally
#       and '::/0' will allow any IPv4 or IPv6 address.
#       '0.0.0.0/0' can be used to allow any IPv4 address.
#       Example: Server=127.0.0.1,192.168.1.0/24,::1,2001:db8::/32,zabbix.example.com
#
# Mandatory: yes, if StartAgents is not explicitly set to 0
# Default:
# Server=

Server=10.99.99.17/24

(...)
##### Active checks related

### Option: ServerActive
#       List of comma delimited IP:port (or DNS name:port) pairs of Zabbix servers and Zabbix proxies for active checks.
#       If port is not specified, default port is used.
#       IPv6 addresses must be enclosed in square brackets if port for that host is specified.
#       If port is not specified, square brackets for IPv6 addresses are optional.
#       If this parameter is not specified, active checks are disabled.
#       Example: ServerActive=127.0.0.1:20051,zabbix.domain,[::1]:30051,::1,[12fc::1]
#
# Mandatory: no
# Default:
# ServerActive=

ServerActive=10.99.99.17

Reinicie o serviço do Zabbix Agent e acompanhe o log para verificar se está tudo ok:

$ service restart zabbix-agent restart

$ tail -f /var/log/zabbix-agent/zabbix_agentd.log

Referências

Links para recursos que auxiliaram na configuração deste sensor de temperatura:

O artigo que serviu de inspiração geral:

https://www.norwegiancreations.com/2017/06/do-it-yourself-snmp-temperature-monitoring-system/

Thread no forum da Armbian referente ao uso de sensores baseados em “1-Wire” para Orange Pi PC:

https://forum.armbian.com/topic/1395-orange-pi-pc-1-wire/

Outra thread no mesmo fórum, mais genérica, mas com informações relevantes:

https://forum.armbian.com/topic/8095-orangepi-zero-not-working-with-1-wire/

Link do sensor adquirido na Amazon:

https://www.amazon.com/gp/product/B087JQ6MCP/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1

× WhatsApp