Vamos por o Raspberry PI a postar a temperatura no Facebook
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.
Referencias
Este artigo tem mais de um ano
me gusta 😉
Obrigado. Estes posts são excelentes para quem quer começar a programar algumas coisitas.
Parabéns! É continuar!! =P
Tem de ser, é nisto que somos diferentes 🙂
Excelente artigo!
Alguem sabe se é possível fazer stream de vídeo para a internet com um raspberry pi?
Alguém me sabe dizer se existe algum adaptar para ligar o raspberry pi a um monitor VGA?
http://www.inmotion.pt/store/hdmi-to-vga-adapter-for-raspberry-pi
Consegue-se arranjar muito mais barato no ebay. Mas existe
manda mail que eu peço desconto 🙂
comprei um à uns tempos numa loja tuga em Coimbra por 7€ e faz bem o seu serviço
Facil…
Qualquer adaptador HDMI to VGA serve 😀
Excelente tutorial, muitos parabéns
Devias escrever: graus Celsius.
Offtopic:
Podiam fazer uma pequena análise: http://europe.oppostyle.com/,
oppo find 5 😉
É possivel fazer com o openelec instalado?
Com o comando “cat /sys/class/thermal/thermal_zone0/temp” tenho resposta com o outro comando não.
Como faço para usar este comando em vez do “/opt/vc” ?
Ola Jorge.
O tutorial usa o comando “cat /sys/class/thermal/thermal_zone0/temp” e não o /opt/vc !
Pois já vi, obrigd. Bruno!
while True:
# Ler a temperatura
tfile = open (“/sys/class/thermal/thermal_zone0/temp”) # abrir o ficheiro
Parabéns muito bom artigo. Tenho mesmo de aprender Python.
Com isto, dá-em vontade de comprar um Raspberry PI
Ainda é um investimentozito… também estou a ponderar!
Um usado, para brincar.
Fiz o tutorial e consegui por a postar a temperatura no meu moral do facebook… Mas tenho um problema:
– só funciona no maximo 2 horas
após isso dá o seguinte erro:
Traceback (most recent call last):
File “facebookTemperature.py”, line 30, in
profile = graph.get_object(“me”)
File “/root/facebook-sdk/facebook.py”, line 99, in get_object
return self.request(id, args)
File “/root/facebook-sdk/facebook.py”, line 298, in request
raise GraphAPIError(response)
facebook.GraphAPIError: Error validating access token: Session has expired at unix time 1373317200. The current unix time is 1373320772.
pesquisei um pouco sobre o erro e encontrei isto:
https://developers.facebook.com/blog/post/2011/05/13/how-to–handle-expired-access-tokens/
mas não sei onde inserir o código!
Alguém me pode ajudar a por isto a funcionar sempre?
obrigado!
E no Twitter, é possível fazer a mesma coisa?
Esta aparecendo o seguinte erro:
File “facebookTemperature.py”, line 26
graph = facebook.GraphAPI(1830_MEU_TOKEM_3ukc-jPUhNnKVkE4)
^
SyntaxError: invalid syntax
Alguém pode me ajudar?
Grato.
pi@raspberrypi ~/facebook-sdk $ sudo cp facebook.py /usr/lib/python2.7
cp: impossivel analisar ?facebook.py?: No such file or directory
Porque?
Olá a todos.
estou com um problema ao executar o comando
sudo cp facebook.py /usr/lib/python2.7/
acabo por receber a mensagem de erro:
cp: missing destination file operand after `facebook.py/usr/lib/python2.7/’
Try `cp –help’ for more information.
Alguém poderia me ajudar a resolver isto?
Obrigado.