Vamos por o Raspberry PI a postar a temperatura no Facebook

24 Comentários

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.

fb_11

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

pi_01

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

pi_02

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

pi_04

Facebook

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

fb_01

Assim que pressionarem , irá aparecer uma nova janela

fb_02

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:

fb_03

Depois, no menu do lado esquerdo, escolher a opção Access Token tool.

fb_04

Uma vez na página dos tokens, é necessário gerar o “user access token” – Pressionar em “need to grant permissions”.

fb_05

O token é gerado

fb_06

e já devem ter o token de acesso do utilizador à aplicação.

fb_07

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”.

fb_08

Uma vez aí, pressionar escolher a nossa aplicação e posteriormente escolher a opção “Get Access Token”.

fb_09

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.

fb_10

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

Partilhar:
Tags:

Comentários

24

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de joao s
    joao s

    me gusta 😉

  2. Avatar de João Cunha
    João Cunha

    Obrigado. Estes posts são excelentes para quem quer começar a programar algumas coisitas.
    Parabéns! É continuar!! =P

    1. Avatar de Pedro Pinto

      Tem de ser, é nisto que somos diferentes 🙂

  3. Avatar de LM
    LM

    Excelente artigo!
    Alguem sabe se é possível fazer stream de vídeo para a internet com um raspberry pi?

  4. Avatar de João Nascimento

    Alguém me sabe dizer se existe algum adaptar para ligar o raspberry pi a um monitor VGA?

      1. Avatar de Pedro Pinto

        manda mail que eu peço desconto 🙂

      2. Avatar de André Filipe
        André Filipe

        comprei um à uns tempos numa loja tuga em Coimbra por 7€ e faz bem o seu serviço

    1. Avatar de Paulo
      Paulo

      Facil…
      Qualquer adaptador HDMI to VGA serve 😀

  5. Avatar de PMR

    Excelente tutorial, muitos parabéns

  6. Avatar de Pedregulho
    Pedregulho

    Devias escrever: graus Celsius.

  7. Avatar de Tiago
    Tiago

    Offtopic:

    Podiam fazer uma pequena análise: http://europe.oppostyle.com/,
    oppo find 5 😉

  8. Avatar de Jorge
    Jorge

    É 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” ?

    1. Avatar de Bruno Santos
      Bruno Santos

      Ola Jorge.

      O tutorial usa o comando “cat /sys/class/thermal/thermal_zone0/temp” e não o /opt/vc !

      1. Avatar de Jorge
        Jorge

        Pois já vi, obrigd. Bruno!

        while True:
        # Ler a temperatura
        tfile = open (“/sys/class/thermal/thermal_zone0/temp”) # abrir o ficheiro

  9. Avatar de António
    António

    Parabéns muito bom artigo. Tenho mesmo de aprender Python.

  10. Avatar de Claudio Oliveira
    Claudio Oliveira

    Com isto, dá-em vontade de comprar um Raspberry PI

    1. Avatar de César Silva
      César Silva

      Ainda é um investimentozito… também estou a ponderar!

      1. Avatar de Claudio Oliveira
        Claudio Oliveira

        Um usado, para brincar.

  11. Avatar de Henrique Ferreira
    Henrique Ferreira

    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!

  12. Avatar de DD
    DD

    E no Twitter, é possível fazer a mesma coisa?

  13. Avatar de Geovani Carvalho
    Geovani Carvalho

    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.

  14. Avatar de Diogo Saraiva
    Diogo Saraiva

    pi@raspberrypi ~/facebook-sdk $ sudo cp facebook.py /usr/lib/python2.7
    cp: impossivel analisar ?facebook.py?: No such file or directory

    Porque?

  15. Avatar de Samuro Souza
    Samuro Souza

    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.