Por Bruno Santos da Comunidade Linux Pplware
O Raspberry Pi é um dos mini PCs mais populares e potentes, que tem servido de base a muitos projectos interessantes (pode consultar os projectos na página do projecto aqui). Este mini equipamento, do tamanho de um cartão de crédito é capaz de reproduzir vídeo com qualidade Blu-ray e renderizar gráficos 3D, entre outras tarefas.
No seguimento dos nosso artigos sobre o Raspberry Pi, , e depois de ensinarmos a ter um Sistema de notificação do twitter com LED recorrendo ao PI, hoje vamos ensinar como o PI pode postar a temperatura no Facebook.
Neste pequeno tutorial vamos aprender como e onde ler a temperatura do RaspberryPI e publicar no vosso mural do facebook .
Obter a temperatura no PI
Para começar, arranquem com o vosso RaspberryPI e em seguida acedem à consola e escrevam o seguinte comando
cat /sys/class/thermal/thermal_zone0/temp
Como resultado, no momento em que escrevemos o comando, obtivemos o calor 53533. Esta é a temperatura do RaspberryPI, em milésimas de celcius. Para converter para celcius, basta dividir por 1000, ou seja, a temperatura interna que o raspberryPI estava no momento é 53.533graus.
O SoC do raspberryPI tem um sensor incorporado, que pode ser lido de duas formas:
- Usando as ferramentas em /opt/vc (Raspbian – Não sei se outras distribuições também têm estas ferramentas).
- Com a técnica que usámos em cima
Usando as ferramentas em /opt/vc:
/opt/vc/bin/vcgencmd measure_temp
O bom de usar o utilitário vcgencmd é que nos devolve a temperatura em celcius. Se quiserem explorar mais o utilitário vcgencmd, basta executar /opt/vc/vcgencmd com o argumento commands e ele devolve todos os comandos disponíveis
Para colocar a temperatura no nosso mural, temos que nos tornar programadores do facebook. Para isso basta ir a http://developers.facebook.com . Têm que se registar como developers. Para isso, basta que, façam login com o vosso utilizador nessa página. Assim que tenham efetuado login, basta ir a APPS, no menu
Assim que pressionarem , irá aparecer uma nova janela
Para o nosso pequeno tutorial, basta preencher o nome da aplicação: RaspberryPI termometer e continuar – preencher a captcha de segurança. Depois disto, vão ter a um ecrã com um resumo da aplicação. Para que a aplicação possa publicar no nosso mural, temos que criar o token de acesso e dar as permissões necessárias. Para criar o token de acesso, ir a “Tools” que se encontra na barra de ferramentas no topo:
Depois, no menu do lado esquerdo, escolher a opção Access Token tool.
Uma vez na página dos tokens, é necessário gerar o “user access token” – Pressionar em “need to grant permissions”.
O token é gerado
e já devem ter o token de acesso do utilizador à aplicação.
Guardem este valor, pois vamos precisar dele mais tarde. Agora é necessário fornecer as permissões corretas à aplicação. Para isso, ir novamente a opção de “tools” na barra de ferramentas e escolher a opção “Graph API Explorer”.
Uma vez aí, pressionar escolher a nossa aplicação e posteriormente escolher a opção “Get Access Token”.
Para a nossa aplicação, tudo o que precisamos é a opção de “publish_actions”. Depois, de pressionarem “Get Access Token”, será necessário escolher quem irá ver os nossos posts no mural.
Deixem “Amigos” para que eles também saibam a temperatura do nosso Raspberrypi – Se preferirem que seja apenas visto por vocês, escolham “only me” ! Podem também tornar os posts publico ou pressionar “custom” e personalizar melhor.
A partir deste momento, já temos o nosso token e a aplicação já tem as permissões necessárias para escrever no nosso mural.
Facebook API
Para usarmos o Python para escrever no nosso mural, precisamos de uma API. Para isso, iremos usar as bibliotecas pythonforfacebook . Esta biblioteca usa a API do Facebook GRAPH, que é a forma mais correta de implementar a autenticação do Facebook. Podem ler mais na documentação oficial.
Numa consola no Raspberrypi, descarregar a API: git clone https://github.com/pythonforfacebook/facebook-sdk.git
Vamos efetuar a instalação manualmente, pois se a tentarmos fazer automaticamente, ele vai dar erro. Para instalar a biblioteca facebook.py:
- cd facebook-sdk
- sudo cp facebook.py /usr/lib/python2.7/ (ou seja a versão de python que tenham no PI)
Instalar a biblioteca colorama sudo apt-get install python-colorama Com o vosso editor preferido, vamos começar a criar o codigo para ler a temperatura e colocar no nosso mural.
vi facebookTemperature.py
#Importar bibliotecas necessarias
# facebook
import facebook
# time
import time
# Output em cores
from colorama import init
init()
from colorama import Fore, Back, Style
# Criar o token para a nossa aplicacao
token = 'CAAFo................................QZDZD'
# Definir a temperatura maxima que desejamos que a partir daqui seja colocado no nosso mural
maxTemp = 56.0
# Definimos uma string vazia - iremos usar para evitar escrever a mesma mensagem
# Facebook da erro (prevenir SPAM) se tentamos escrever a mesma mensagem
# Como esta: facebook.GraphAPIError: (#506) Duplicate status message
oldStatus = ''
# Iniciar autenticacao
graph = facebook.GraphAPI(token)
profile = graph.get_object("me")
while True:
# Ler a temperatura
tfile = open ("/sys/class/thermal/thermal_zone0/temp") # abrir o ficheiro
tempdata = tfile.read() # ler para a variavel tempdata
tfile.close() # fechar o ficheiro
temp = float(tempdata) # converter o resultado para float
#temperatura vem em milesimas - calcular os graus celcius
temp = temp / 1000
# Verificar se a temperatura esta acima do definido
if (temp >= maxTemp):
# criar uma variavel com a mensagem a colocar no facebook
tempstr = str('A temperatura do RaspberryPI : %.1fC' % temp)
if (oldStatus == tempstr):
print (Style.BRIGHT + 'Mensagem nao escrita no mural para prevenir SPAM')
print (Fore.RESET)
else:
# Colocar no nosso mural do facebook
graph.put_object("me","feed",message=tempstr)
# Colocar string na variavel oldStatus
oldStatus = tempstr
# Escrever na linha de comandos
tempstrCMD = str('A temperatura do RaspberryPI : ' + Fore.RED + '%.1fc' % temp)
print (tempstrCMD)
else:
# Tambem necessario informar - em linha de comandos - se esta tudo ok
print ('A temperatura do RaspberryPI : ' + Fore.GREEN + '%.1fc ' % temp)
# reset das definicoes do colorama
print(Fore.RESET + Back.RESET + Style.RESET_ALL)
# Voltamos a fazer esta verificacao a cada 60 segundos
time.sleep(60)
Assim que tiverem o código escrito, basta executarem:
python facebookTemperature.py
E verem o resultado. Consoante o valor que definiram na máxima temperatura, o output pode ser a verde (abaixo da temperatura máxima) ou vermelho se ultrapassar (e neste caso colocado no facebook)
- A temperatura do RaspberryPI : 55.1c
Caso a temperatura ultrapasse o valor (neste caso 56.0):
- A temperatura do RaspberryPI : 56.2c e a mensagem no Facebook
E se a temperatura não variar no próximo minuto, esta é a mensagem que vai aparecer na consola: Mensagem não escrita no mural para prevenir SPAM
- A temperatura do RaspberryPI : 56.2c
Desta forma, conseguem escrever no mural do facebook usando um PI e um RaspBerryPI. A partir daqui, basta um pouco de imaginação. Com o tutorial anterior (Twitter e Raspberrypi) podem usar o GPIO para ligar e controlar outras coisas – Em vez de usar o sensor interno do SoC, podem ligar um sensor de temperatura externo e ler a temperatura com ele.