domingo, 10 de novembro de 2019

Recuperar ficheiros apgados num RAID com LVM

Neste caso foi utilizada uma máquinacom 2 discos de 1TBem RAID por mdadm e LVM.


- /dev/sdb e /dev/sdc - Espelhados em RAID 1 com mdadm
- /dev/md0 - Com LVM
- /dev/vg0/swap e /dev/vg0/data


- /dev/vg0/data é montado como /home

Para recuperar ficheiros apagados em /home é necessário iniciar o sistema sem montar /home.

Uma das formas é arrancar um sistema live (por exemplo, USB) e ligar um outro disco para guardar as recuperações.

Ativar RAID
- Confirmar se RAID não está montado:
cat /proc/mdstat

- Ativar RAID
mdadm --assemble --scan





- Confirmar se LVM está ativo
lvscan

- Ativar LVM com
vgchange -ay

- Depois é necessário montar a partição como readonly e com a opção noload para evitar escritas
mount -o ro,noload /dev/vg0/data /mnt/data


- Finalmente é possível utilizar o photorec para procurar e recuperar os ficheiros pretendidos.

Cartão de Cidadão em Linux

 

Atenção: Está disponível uma nova versão mais atualizada aqui.


Após diversas tentativas foi possível colocar o leitor de cartões do cartão de cidadão a funcionar em Debian GNU/Linux - buster 64bits.


1. Descarregar plugin do site: https://autenticacao.gov.pt/fa/ajuda/autenticacaogovpt.aspx

É possível descarregar o plugin para Debian/Ubuntu e fazer a sua instalação manual:
dpkg -i plugin-autenticacao-gov.deb

Um dos problemas estava em arrancar o plugin utilizando o OpenBox... Acedendo ao conteúdo do .deb é possível obter o ficheiro .desktop que contém a informação de arranque:
[Desktop Entry]
Version=1.0
Name=plugin Autenticação.Gov
GenericName=plugin Autenticação.Gov
GenericName[pt]=plugin Autenticação.Gov
Comment=Autenticação com o Cartão de Cidadão
Exec=/usr/bin/java -Dsun.java2d.xrender=false -jar /usr/share/plugin-autenticacao-gov/plugin-autenticacao-gov.jar sj
Icon=plugin-autenticacao-gov
Terminal=false
Type=Application
Categories=Utility


Assim, resta arrancar o plugin:
/usr/bin/java -Dsun.java2d.xrender=false -jar /usr/share/plugin-autenticacao-gov/plugin-autenticacao-gov.jar sj

O ícone aparece na barra de tarefas do tint2 e a opção Diagnosticar Plugin abre uma página indecifrável com uma impossibilidade qualquer relativa ao DNS e a um *.mordomo...

Alguma pesquisa e um comentário no PPLware indica a razão da questão:
«N'uno 7 de Dezembro de 2017 às 13:21
Continuas a depender de uma aplicação que faz o mesmo que as applets java faziam mas usa uma comunicação com o browser incompatível com alguns routers. No meu caso, num ambiente linux ligado a um router com DD-WRT, esta aplicação batia sempre na impossibilidade de resolver nomes para o IP do localhost. O serviço de DNS do DD-WRT não permite tal coisa, logo não funcionava. Contactei o suporte deles e a solução foi mesmo martelar os múltiplos nomes que eles usam com o 127.0.0.1 no ficheiro de hosts…»


Assim, deve editar-se o /etc/hosts para conter:
127.0.0.1 m1.mordomo.gov.pt
127.0.0.1 m2.mordomo.gov.pt
127.0.0.1 m3.mordomo.gov.pt
127.0.0.1 m4.mordomo.gov.pt
127.0.0.1 m5.mordomo.gov.pt
127.0.0.1 m6.mordomo.gov.pt
127.0.0.1 m7.mordomo.gov.pt
127.0.0.1 m8.mordomo.gov.pt
127.0.0.1 m9.mordomo.gov.pt
127.0.0.1 m10.mordomo.gov.pt
127.0.0.1 m11.mordomo.gov.pt
127.0.0.1 m12.mordomo.gov.pt
127.0.0.1 m13.mordomo.gov.pt
127.0.0.1 m14.mordomo.gov.pt
127.0.0.1 m15.mordomo.gov.pt
127.0.0.1 m16.mordomo.gov.pt
127.0.0.1 m17.mordomo.gov.pt
127.0.0.1 m18.mordomo.gov.pt
127.0.0.1 m19.mordomo.gov.pt
127.0.0.1 m20.mordomo.gov.pt


Ao que parece o leitor de cartões anuncia-se como webserver com um domínio *.mordomo.gov.pt e o router não permite essa alteração.

Situação resolvida, é possível utilizar o cartão de cidadão com o leitor para realizar as operações, correu tudo bem com o Opera, resta testar com outros browsers.


terça-feira, 19 de março de 2019

RAID 1 - substituir drive com mdadm

Apesar de o array não ter qualquer problema o SMART do disco indica problemas. A troca do disco é aconselhada.

Verificar o array

Para ver o estado do array:
cat /proc/mdstat

md0 : active raid1 sdb1[0] sdc1[1]
      976629760 blocks super 1.2 [2/2] [UU]
      bitmap: 0/8 pages [0KB], 65536KB chunk

Para ver os detalhes do array:
mdadm --detail /dev/md0
 /dev/md0:
        Version : 1.2
  Creation Time : Sat Jan 21 17:33:16 2017
     Raid Level : raid1
     Array Size : 976629760 (931.39 GiB 1000.07 GB)
  Used Dev Size : 976629760 (931.39 GiB 1000.07 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

  Intent Bitmap : Internal

    Update Time : Tue Mar 19 08:48:42 2019
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : data:0  (local to host hostname)
           UUID : f047a10d:ae9c8424:c469fb59:5f6773bd
         Events : 13799

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1



Verificar erros nos discos

É possível os discos com a ferramenta  smartctl, fazendo o teste curto (cerca de 2 minutos) ou o teste longo (mais demorado):
smartctl -t short /dev/sdb
smartctl -t long /dev/sdb

Assim, apesar de o array indicar que está tudo bem, um dos disco apresenta erros nos testes SMART.
smartctl -a /dev/sdb(...)
=== START OF INFORMATION SECTION ===
Model Family:     Western Digital Green
Device Model:     WDC WD10EARX-00N0YB0
Serial Number:    WD-WMC0T0383723

(...)
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed: read failure       90%     33281         296
# 2  Short offline       Completed: read failure       90%     33281         296
(...)

Substituir disco do array

Para substituir o disco é necessário provocar uma falha no disco:
mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md0

cat /proc/mdstat
md0 : active raid1 sdb1[0](F) sdc1[1]      976629760 blocks super 1.2 [2/1] [_U]
      bitmap: 3/8 pages [12KB], 65536KB chunk


Depois é necessário remover o disco do array:
mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm: hot removed /dev/sdb1 from /dev/md0

Agora é necessário:
  1. desligar a máquina;
  2. retirar o disco em falha (é possível ver o serial number com o smartctl -a para remover o disco correto);
  3. colocar o novo disco;
  4. ligar a máquina.

Como o novo disco está vazio é necessário clonar a tabela de partições do disco bom do array para o novo:


sfdisk -d /dev/sdc | sfdisk /dev/sdb
Checking that no-one is using this disk right now ... OK

Disk /dev/sdb: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

>>> Script header accepted.
>>> Script header accepted.
>>> Script header accepted.
>>> Script header accepted.
>>> Created a new DOS disklabel with disk identifier 0xd6ec1f12.
/dev/sdb1: Created a new partition 1 of type 'Linux raid autodetect' and of size 931.5 GiB.
/dev/sdb2: Done.

New situation:

Device     Boot Start        End    Sectors   Size Id Type
/dev/sdb1        2048 1953523711 1953521664 931.5G fd Linux raid autodetect
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.


Após esta operação pode adicionar-se o novo disco ao array:

mdadm --manage /dev/md0 --add /dev/sdb1
mdadm: added /dev/sdb1

O array inicia o processo de espelho do disco bom para o novo.

Como o processo é demorado, pode ser acompanhado com:
watch cat /proc/mdstat
md0 : active raid1 sdb1[2] sdc1[1]
      976629760 blocks super 1.2 [2/1] [_U]
      [>....................]  recovery =  1.0% (10220864/976629760) finish=122.3min speed=131660K/sec
      bitmap: 7/8 pages [28KB], 65536KB chunk



Referências:


[1] - Replacing a Failed Mirror Disk in a Software RAID Array (mdadm) - https://www.thegeekdiary.com/replacing-a-failed-mirror-disk-in-a-software-raid-array-mdadm/

[2] - mdadm cheat sheet - http://www.ducea.com/2009/03/08/mdadm-cheat-sheet/

quinta-feira, 31 de maio de 2018

Regras iptables - webserver SYN flood

Algumas regras para o iptables proteger um webserver contra alguns ataques. Por exemplo, o ataque SYN flood [0].

Descartar os pacotes SYN que não são recebidos:
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

Descartar pacotes com fragmentos:
iptables -A INPUT -f -j DROP

Descartar pacotes mal criados XMAS:
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

Descartar pacotes nulos:
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

Bloquear um IP externo de aceder ao servidor:
iptables -A INPUT -s IP-ADDRESS -j DROP

Bloquear um IP externo de aceder a uma porta do servidor:
iptables -A INPUT -s IP-ADDRESS -p tcp --destination-port 80 -j DROP


[0] - https://en.wikipedia.org/wiki/SYN_flood

[1] - https://www.cyberciti.biz/tips/linux-iptables-10-how-to-block-common-attack.html

[2] - https://www.cyberciti.biz/faq/how-do-i-block-an-ip-on-my-linux-server/

sábado, 24 de fevereiro de 2018

Rsync em servidor Windows

Tendo um servidor SSH na rede torna-se fácil efetuar cópias eficientes utilizando o rsync.

O problema surge ao tentar fazer o mesmo com uma máquina Windows e automatizar esse processo.

Dmitry Leskov documentou bem este processo em Inglês aqui.

Utilizando a versão gratuita do cwRsync (rsync que corre em windows com a biblioteca cygwin que garante a execução de comandos UNIX/Linux em Windows).


Para apagar ficheiros com mais de x dias em Windows encontra-se aqui:

forfiles -p "C:\what\ever" -s -m *.* -d <number of days> -c "cmd /c del @path"


quarta-feira, 26 de julho de 2017

owncloud upgrade para ubuntu 16.04

O setup inicial era este:
- ubuntu 14.04.5 LTS
- owncloud 8.1.9.2

Após o upgrade para ubuntu 16.04 pretendia também atualizar o owncloud. Contudo no repositório a última versão era a 9... E não é possível fazer upgrades de vários major.

Assim, é necessário ir fazendo o upgrade entre as diversas versão major:
https://owncloud.org/changelog/#latest8.0

Neste caso
- 8.1.9.2 » 8.1.11
- 8.1.11 » 8.2.11
- 8.2.11 » 9.0.10
- 9.0.10 » 9.1.6

Fazer backup da instalação anterior
cd /var/www
mv owncloud owncloud_8.1.9

Obter última versão e extrair
tar xjvf owncloud-8.1.11.tar.bz2

Copiar configuração da versão anterior (neste caso não é necessária a pasta data porque na configuração está definida noutro local e não dentro da pasta owncloud)
cp owncloud_8.1.9.2/config/config.php owncloud/config/config.php

chown www-data:www-data -R owncloud

Executar o upgrade
cd /var/www/owncloud
sudo -u www-data ./occ upgrade

Repetir os passos para cada uma das versões.

Configurar repositórios

wget -nv https://download.owncloud.org/download/repositories/stable/Ubuntu_16.04/Release.key -O Release.key
apt-key add - < Release.key
Run the following shell commands as root to add the repository and install from there.

sh -c "echo 'deb http://download.owncloud.org/download/repositories/stable/Ubuntu_16.04/ /' > /etc/apt/sources.list.d/owncloud.list"
apt-get update
apt-get upgrade


PlexMediaServer e minidlna no ubuntu 16.04

Plex Media server

Ao fazer o upgrade do ubuntu 14.04.5 LTS para o 16.04 o plexmediaserver não funcionava e não era instalado a partir do repositório oficial.

Havia um bug no instalador plexmediaserver_1.7.5.4035-313f93718_amd64.deb e entretanto foi lançada uma versão que ainda não está nos repositórios, a 4036.

Assim, é necessário remover a versão instalada, descarregar manualmente a nova e instalar:
apt-get remove plexmediaserver

wget "https://doc-04-7o-docs.googleusercontent.com/docs/securesc/ha0ro937gcuc7l7deffksulhg5h7mbp1/726psu5fkd99d3vha2cvlf3t71h6elik/1501056000000/17568712713587208033/*/0B57qR6p2QjXpVWtZYjVUcVI1WjQ?e=download" -O plexmediaserver_1.7.5.4036-fef9bbe02_amd64.deb

dpkg -i plexmediaserver_1.7.5.4036-fef9bbe02_amd64.deb

Mais informações aqui:
https://forums.plex.tv/discussion/277748/cant-install-plex-1-7-5-on-ubuntu-16-04

minidlna

Também o minidlna ficou com problemas após a atualização.
A solução passou por remover o pacote e voltar a instalar mantendo a configuração (/etc/minidlna.conf)

apt-get remove minidlna

apt-get install minidlna

sábado, 10 de junho de 2017

Recuperação do arranque após instalação do Windows

Após a instalação do Microsoft Windows o grub, utilizado para o arranque do Linux, é substituído pelo bootloader do Windows.
De seguida apresentam-se os passos para voltar a colocar o grub como bootloader principal do computador.

Arranque com um LiveCD ou pen do Linux Mint (ou outro).

Acedendo à consola deve confirmar-se quais as partições, deve colocar-se a letra do disco pretendido, normalmente será 'a' ou seja, /dev/sda:

sudo fdisk -l /dev/sdX
Device     Boot Start      End  Sectors  Size Id Type
/dev/sda1  *     2048 62500863 62498816 29.8G 83 Linux
...

Deve ter-se atenção e procurar a partição linux, normalmente identificada com o código 83 (etx3, etx4 ou afins)

De seguida deve montar-se a partição para ser utilizada (neste caso seria /dev/sda1):

sudo mount /dev/sdXY /mnt

Após estar montada é possível restaurar o grub através da sua instalação no disco (neste caso /dev/sda):

sudo grub-install --root-directory=/mnt/ /dev/sdX

Esta operação deve concluir com sucesso e após isto é possível reiniciar o computador.
Ao arrancar o grub deverá ser carregado e deverá estar igual ao que estava antes da instalação do Windows.

Deve arrancar-se então com o Linux instalado e no final atualizar o grub para procurar outros sistemas operativos:

sudo update-grub

O sistema operativo Windows deverá ser reconhecido e pode reiniciar-se o computador para confirmar que já é possível escolher o Linux e o Windows.

domingo, 28 de maio de 2017

Instalação de um servidor OpenHAB

A interação com a IoT (Internet das Coisas) pode ser feita de diversas formas. O projeto OpenHAB permite tornar esta tarefa mais fácil e intuitiva de ser efetuada.

Atualmente na versão 2, o OpenHAB tem um conjunto de configurações que permitem aceder e configurar os diversos dispositivos de forma gráfica e fácil.

Neste guia será feita apenas a instação e configuração inicial do OpenHAB2.

0 - Pré-Requisitos

Neste caso será utilizado um servidor ubuntu 16.04 LTS designado de openhab.

As informações relativas à instalação do OpenHAB opem ser encontradas aqui:
http://docs.openhab.org/installation/index.html

É necessário garantir o suporte para JAVA, como não o java não vem instalado, é possível instalar:
apt install openjdk-8-jre-headless

É indicado que, por questões de compatibilidade, deve utilizar-se a versão 8 e pelo menos a revisão 101. É possível verificar se é o caso com:
java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-8u131-b11-0ubuntu1.16.04.2-b11)
OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)

1 - Instalação do OpenHAB2

Há várias formas de instalação do OpenHAB, neste caso será utilizada a versão estável oficial. Assim, é necessário adicionar a chave apt do servidor:
wget -qO - 'https://bintray.com/user/downloadSubjectPublicKey?username=openhab' | apt-key add -
apt-get install apt-transport-https

Adicionar o repositório:
echo 'deb https://dl.bintray.com/openhab/apt-repo2 stable main' | tee /etc/apt/sources.list.d/openhab2.list

Atualizar a cache apt:
apt-get update

Instalar o OpenHAB2 e addons (este último é opcional):
apt install openhab2 openhab2-addons

Verificar se o serviço está a correr:
systemctl status openhab2.service
* openhab2.service - openHAB 2 - empowering the smart home
   Loaded: loaded (/usr/lib/systemd/system/openhab2.service; enabled; vendor preset: enabled)
   Active: active (running) [...]

Arrancar o serviço:
systemctl start openhab2.service

Parar o serviço:
systemctl stop openhab2.service

Instalar o serviço para arranque automático com o sistema:
systemctl daemon-reload
systemctl enable openhab2.service

É possível verificar que o serviço já se encontra disponível abrindo através do browser:

2 - Cópias de Segurança

Na documentação de instalação é sugerido o seguinte procedimento para realizar cópias de segurança dos ficheiros de configuração e do utilizador relativos ao serviço openhab2.

Parar o serviço
systemctl stop openhab2.service

Criar o backup
TIMESTAMP=`date +%Y%m%d_%H%M%S`;
mkdir  ~/openhab2-backup-$TIMESTAMP
cp -arv /etc/openhab2 ~/openhab2-backup-$TIMESTAMP/conf
cp -arv /var/lib/openhab2 ~/openhab2-backup-$TIMESTAMP/userdata

Voltar a iniciar o serviço
systemctl start openhab2.service

3 - Configuração Inicial

Ao aceder pela primeira vez ao servidor OpenHAB através do browser ele permite a escolha do pacote de configurações a instalar:
Standard - Configura o PaperUI, Basic UI e HABPanel.
Simples - Configura apenas ferramentas para interação gráfica simples.
Expert - Instala todas as configuarações incluindo opções da versão 1.x

Neste caso foi escolhido o Expert pois permite aceder a todas as opções, incluindo as mais avançadas.

Referências

[1] - https://www.openhab.org - Página do projeot OpenHAB2
[2] - http://docs.openhab.org/installation/index.html - Informações gerais sobre o processo de Instalação
[3] - http://docs.openhab.org/installation/linux.html - Informação detalhada sobre o processo de instalação em Linux
[4] - http://docs.openhab.org/configuration/index.html - Informações sobre a configuração do OpenHAB2

sexta-feira, 26 de maio de 2017

Utilizar o NodeMCU - ESP8266

A board ESP8266 / NodeMCU permite ter um microcontrolador (como se fosse um arduino) com acesso direto à rede wireless 802.11 b/g/n por um preço muito atrativo (por cerca de 2,5€). [1] e [6]



Torna-se assim fácil criar projetos para a famosa IoT Internet of Things ou Internet das Coisas que podem registar informações (temperaturas, luminosidade, humidade, etc) ou efetuar operações (acionar iluminação, motores, bombas, etc), as opções estão limitadas apenas à imaginação e/ou capacidade técnica de cada um.

0 - Pré-requisitos

O óbvio será apenas um NodeMCU, cabo microUSB e computador.

Depois de algumas pesquisas sobre como se pode programar o NodeMCU, encontrei esta solução que me parece muito interessante e é a que mais me agrada.

Até aqui quando utilizava arduinos programava o código no Atom [2] e utilizava o Arduino IDE para fazer o upload do código para os Nano ou Uno.
Ao procurar formas de programar o NodeMCU encontrei algumas soluções que utilizam o arduino IDE [7] mas tropecei no PlataformIO [5] que permite dotar o Atom das ferramentas de compilar, upload, monitor de série, terminal, etc que funcionam de forma similar ao ambiente do arduino IDE. Simplesmente fantástico!

O PlatformIO permite também acrescentar os comandos de shell que permitem instalar e desinstalar bibliotecas e funcionalidades do PlatformIO.

Assim, para se começar a programar será necessário:

  1. Instalar Atom [2]
  2. Instalar PlatformIO [3]
  3. Instalar Shell Commands [4]


1 - Colocar o NodeMCU a piscar

Neste domínio o projeto mais simples é o pisca-pisca.

Criar um novo projeto para NodeMCU (a lista é longa...) e indicar a pasta onde vai ficar guardado o projeto.

Criar o ficheiro main.cpp na pasta src com:

#include <Arduino.h>
// Esta função é executada apenas uma vez quando a placa é ligada
void setup() {
  pinMode(D0, OUTPUT); // Inicializar D0 como output
  Serial.begin(9600);  // Inicializar a interface série
}

// Esta função está sempre a executar em loop
void loop() {
  digitalWrite(D0, LOW);  // Ligar o led da placa (sim, com LOW)
  Serial.println("On");
  delay(1000);            // Esperar 1000ms=1 segundo
  digitalWrite(D0, HIGH); // Desligar o led da placa
  Serial.println("Off");
  delay(1000);            // Esperar 1000ms=1 segundo
}

De seguida deve utilizar-se o botão de Compilar para confirmar se está tudo correto e a compilação funciona sem problemas.

Depois deve ligar-se o NodeMCU por USB ao computador e utilizar o comando de Upload para enviar o projeto compilado anteriormente para a placa. Enquanto é programada a placa pisca rapidamente um led no módulo ESP-12 e, se tudo correr bem, passados alguns segundos o led do NodeMCU perto da porta miniUSB começa a piscar de segundo a segundo.

Ao abrir o Serial Monitor é possível observar que quando D0 está LOW o led acende e quando está HIGH o led apaga.

2 - Instalar suporte para outros componentes

Como referido anteriormente o PlatformIO permite adicionar diversas funcionalidades através de alguns comandos simples.

Abrindo o Terminal do PlatformIO é possível procurar bibliotecas (libraries), por exemplo, sobre o sensor DHT11:
platformio lib search dht11

Aparece depois uma lista que indica as bibliotecas que possuem DHT11 e é possível depois instalar uma ou várias dessas bibliotecas através da opção install seguida do número do pacote, por exemplo:
platformio lib install 849 

Neste caso vai ser instalada a biblioteca SimpleDHT por Winlin [8].

Instalar suporte para o sensor DS18B20
platformio lib install 54 

Neste caso, para além da biblioteca DallasTemperature desenvolvida por Guil Barros, Miles Burton, Rob Tillaart, Tim Newsome [9], será também instalada a biblioteca OneWire que permite a comunicação I2C utilizada pelo DS18B20.

Para desinstalar utiliza-se a opção uninstall seguida do número da biblioteca instalada.
platformio lib uninstall 123


Referências

[1] - http://nodemcu.com/index_en.html - Informações e documentação sobre o NodeMCU

[2] - https://atom.io - Informações e instruções de instalação do IDE Atom

[3] - http://platformio.org - Insformações e documentação sobre o PlatformIO

[4] - http://docs.platformio.org/en/latest/installation.html - Instalar shell commands do PlatformIO

[5] - https://www.losant.com/blog/getting-started-with-platformio-esp8266-nodemcu - Programar o NodeMCU através do PlatformIO

[6] - https://www.htlinux.com/esp8266-nodemcu/ - Informações gerais sobre o NodeMCU

[7] - https://oneguyoneblog.com/2017/01/17/esp8266-nodemcu-arduino-ide-linux/ - Programar o NodeMCU através do arduino IDE.

[8] - http://platformio.org/lib/show/849/SimpleDHT - Biblioteca do PlatformIO para o DHT11

[9] - http://platformio.org/lib/show/54/DallasTemperature - Biblioteca do PlatformIO para o DS18B20