2013-10-25 3 views
1

Здравствуйте, у меня есть эта установка firebase, которая подключена к малине pi, которая говорит текст в соответствии с базой данных 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

Хорошо, тогда неважно :). Я бы предложил вам добавить еще одну логическую переменную в БД. НОВЫЕ (T/F). таким образом вы можете просто извлечь NEW = True, а затем сбросить его до значения false до того, как вы выполните talk_message. Что лишний, что вы не пропустите новые сообщения, если вы получите более 1 за этот промежуток в 5 секунд. если у вас есть больше контроля над инфраструктурой, вы также проверите брокера сообщений. позвольте мне задуматься о чем-то в ваших сдержанностях, и я дам ответ вместо комментария. –

ответ

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 

Это все, что вам нужно изменить :) Надеюсь, что это помогает!

Смежные вопросы