2013-10-25 37 views
1

你好,我已經設置了這個firebase,它連接到一個根據firebase數據庫講文本的樹莓派。我有每5秒運行一次的功能,我想檢查是否有新消息。我將每條消息的時間存儲在數據庫中,我現在的方式是檢查新消息和舊消息的時間是否相同。Python如何檢查數據庫值是否相同

我的兩個問題是:

是否有檢查郵件的時間,看看消息是新的更好的辦法?

我怎樣才能解決這個代碼,所以我沒有得到一個UnboundLocalError: local variable 'the_time' referenced before assignment"錯誤

這裏是我的代碼

import time 
import subprocess 
from firebase import firebase 
firebase = firebase.FirebaseApplication('----', None) 

message = firebase.get('/message', None) 
name = firebase.get('/name', None) 
the_time = firebase.get('the_time',None) 
speak_message = message+" from "+ name 

def showmessage(): 
     message=firebase.get('/message',None) 
     name=firebase.get('/name',None) 
     current_time = firebase.get('/the_time',None) 
     speak_message=message+' from '+name 

     #this is to set the audio jack on raspi 
     subprocess.call(['amixer','cset','numid=3','1']) 

     if current_time == the_time: 
       #message is NOT new 
       print 'message is NOT new' 

     elif current_time != the_time: 
       #message IS new 
       #Shell script to run text-to-speech 
       subprocess.call(['/home/pi/./speech.sh',speak_message]) 
       the_time = current_time 


     time.sleep(5) 
while True: 
     showmessage() 
+0

你能寫數據庫嗎?或只讀該腳本? –

+0

@WissamYoussef我通過網頁向它寫信,但只能從腳本中讀取。 – user2758113

+0

好吧,別擔心,然後:)。我會建議你在DB中添加另一個布爾變量。 NEW(T/F)。這樣你可以通過NEW = True獲取,然後在speak_message之前重置爲false。如果你在5秒內得到超過1的話,你將不會錯過新消息。如果你對基礎架構有更多的控制權,那麼也要檢查一些消息代理。讓我想想你的約束內的東西,我會給出答案而不是評論。 –

回答

1

你的腳本應該工作得很好,除了一小,這部分微小的失誤:

elif current_time != the_time: 
    #message IS new 
    #Shell script to run text-to-speech 
    subprocess.call(['/home/pi/./speech.sh',speak_message]) 
    the_time = current_time 

您正在分配到the_time,這是一個全局變量。在你的showmessage函數中,你沒有聲明它,對嗎?

要解決這個問題,您必須聲明the_time是一個全局變量。

def showmessage(): 
    global the_time 
    #all other stuff 

這就是你需要改變:) 希望這有助於!

相關問題