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

domingo, 21 de maio de 2017

Scanner de rede com o Raspberry Pi

Instalar software

# apt-get update
# apt-get install sane

Testar funcionamento do scanner no servidor

Abrir shell como utilizador saned
# su saned -s /bin/sh

Mostrar os grupos do utilizador saned
$ groups
saned scanner

$ sane-find-scanner
[...]
found USB scanner (vendor=0x03f0 [HP], product=0xc111 [Deskjet 1510 series]) at libusb:001:004
[...]

$ scanimage -L
device `hpaio:/usb/Deskjet_1510_series?serial=CN39219N8W05YR' is a Hewlett-Packard Deskjet_1510_series all-in-one

NOTA: Caso os dois comandos anteriores não funcionem, teste-os como root ou com sudo. Se funcionarem convém verificar as permissões de:

# ls /dev/bus/usb/001/ -la
total 0
drwxr-xr-x  2 root root    120 Jan  1  1970 .
drwxr-xr-x  3 root root     60 Jan  1  1970 ..
crw-rw-r--  1 root root 189, 0 May 21 20:39 001
crw-rw-r--  1 root root 189, 1 May 21 20:39 002
crw-rw-r--  1 root root 189, 2 May 21 20:39 003
crw-rw-r--+ 1 root lp   189, 3 May 21 20:54 004

Adicionar o utilizador saned ao grupo lp
# adduser saned lp

Configurar servidor

Editar e ativar o daemon RUN=yes
# nano /etc/default/saned
[...]
RUN=yes

Editar  /etc/sane.d/saned.conf e acrescentar rede:
[...]
## Access list
192.168.1.0/24

E descomentar
data_portrange = 10000 - 10100

Arrancar o servidor SANE
# systemctl start saned.socket

Ativar o arranque automático do serviço aquando do arranque da máquina
# systemctl enable saned.socket

Verificar o estado do serviço
# systemctl status saned.socket
● saned.socket - saned incoming socket
   Loaded: loaded (/lib/systemd/system/saned.socket; enabled)
   Active: active (listening) 
   Listen: [::]:6566 (Stream)
 Accepted: 0; Connected: 0

Configurar o cliente

No cliente existem várias soluções. A normal será o xsane ou o simple-scan (que vem instalado por defeito no Linux Mint).

Editar o ficheiro
$ sudo nano /etc/sane.d/net.conf

E acrescentar o IP ou hostname do servidor
[...]
## saned hosts
192.168.1.103
[...]

De seguida resta iniciar a aplicação de digitalização e o scanner de rede deverá ser detetado.
Caso não seja detetado pode ser necessário adicionar o utilizador ao grupo scanner
sudo adduser utilizador scanner

Após isto é necessário terminar sessão e voltar a entrar.

Referências

[] - https://samhobbs.co.uk/2014/07/raspberry-pi-print-scanner-server
[] - https://wiki.debian.org/SaneOverNetwork