26/01/2018, 16:01
Ciao,
ho implementato il codice che segue ricopiandolo dalla rete per creare dei pulsanti in telegram ed alla pressione eseguire un determinato comando. Il codice viene eseguito per N tempo così come i comandi, ad un certo punto senza un motivo apparente il tutto si blocca e cioè il dispositivo funziona ed è raggiungibile dalla rete, il processo risulta attivo ma il programma non funziona.
Questo succede su 3 RB diversi di cui 2 W0 ed un Pi3 e con programmi diversi che hanno in comune solo la creazione e la gestione dei pulsanti, qualche idea ?
Grazie
[ code ]
import subprocess
from telepot.loop import MessageLoop
from telepot.namedtuple import InlineKeyboardMarkup, InlineKeyboardButton
from signal import pause
bot = telepot.Bot('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')
chat_id = 'xxxxxxxxxx'
def on_chat_message(msg):
content_type, chat_type, chat_id = telepot.glance(msg)
keyboard = InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text='STATO', callback_data='stato'),
InlineKeyboardButton(text='FOTO', callback_data='foto')],
[InlineKeyboardButton(text='SONORO', callback_data='sonoro'),
InlineKeyboardButton(text='SILENZIOSO', callback_data='silenzioso')],
[InlineKeyboardButton(text='ALLARME', callback_data='allarme')],
[InlineKeyboardButton(text='ATTIVO', callback_data='attivo'),
InlineKeyboardButton(text='STANDBY', callback_data='standby')],
[InlineKeyboardButton(text='RIAVVIA', callback_data='riavvia'),
])
bot.sendMessage(chat_id, 'Comandi disponibili', reply_markup=keyboard)
def on_callback_query(msg):
query_id, chat_id, query_data = telepot.glance(msg, flavor='callback_query')
global flag
global prog
if query_data == 'stato':
if flag == 1 and prog == 1:
bot.sendMessage(chat_id,"Attivo con Sirena")
elif flag == 0 and prog == 1:
bot.sendMessage(chat_id,"Attivo senza Sirena")
else:
bot.sendMessage(chat_id,"Standby")
elif query_data == 'foto':
telefoto()
elif query_data == 'allarme':
rele13.on() # attiva la sirena per 5 minuti
time.sleep(300)
rele13.off()
elif query_data == 'attivo':
prog = 1
bot.sendMessage(chat_id,"Rivelatore attivo!")
elif query_data == 'standby':
prog = 0
bot.sendMessage(chat_id,"Rivelatore in standby")
elif query_data == 'riavvia':
bot.sendMessage(chat_id,"Riavvio...")
bashCommand = 'sudo reboot'
subprocess.check_output(bashCommand, shell=True)
elif query_data == 'sonoro':
flag = 1
bot.sendMessage(chat_id,"Sirena attiva")
MessageLoop(bot, {'chat': on_chat_message, 'callback_query': on_callback_query}).run_as_thread();
while 1:
time.sleep(1)
[ /code]
PS: sono state eliminate alcune righe di codice per comodità, lo script non ha errori e va avanti tranquillamente anche per giorni, poi si blocca
ho implementato il codice che segue ricopiandolo dalla rete per creare dei pulsanti in telegram ed alla pressione eseguire un determinato comando. Il codice viene eseguito per N tempo così come i comandi, ad un certo punto senza un motivo apparente il tutto si blocca e cioè il dispositivo funziona ed è raggiungibile dalla rete, il processo risulta attivo ma il programma non funziona.
Questo succede su 3 RB diversi di cui 2 W0 ed un Pi3 e con programmi diversi che hanno in comune solo la creazione e la gestione dei pulsanti, qualche idea ?
Grazie
[ code ]
import subprocess
from telepot.loop import MessageLoop
from telepot.namedtuple import InlineKeyboardMarkup, InlineKeyboardButton
from signal import pause
bot = telepot.Bot('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')
chat_id = 'xxxxxxxxxx'
def on_chat_message(msg):
content_type, chat_type, chat_id = telepot.glance(msg)
keyboard = InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text='STATO', callback_data='stato'),
InlineKeyboardButton(text='FOTO', callback_data='foto')],
[InlineKeyboardButton(text='SONORO', callback_data='sonoro'),
InlineKeyboardButton(text='SILENZIOSO', callback_data='silenzioso')],
[InlineKeyboardButton(text='ALLARME', callback_data='allarme')],
[InlineKeyboardButton(text='ATTIVO', callback_data='attivo'),
InlineKeyboardButton(text='STANDBY', callback_data='standby')],
[InlineKeyboardButton(text='RIAVVIA', callback_data='riavvia'),
])
bot.sendMessage(chat_id, 'Comandi disponibili', reply_markup=keyboard)
def on_callback_query(msg):
query_id, chat_id, query_data = telepot.glance(msg, flavor='callback_query')
global flag
global prog
if query_data == 'stato':
if flag == 1 and prog == 1:
bot.sendMessage(chat_id,"Attivo con Sirena")
elif flag == 0 and prog == 1:
bot.sendMessage(chat_id,"Attivo senza Sirena")
else:
bot.sendMessage(chat_id,"Standby")
elif query_data == 'foto':
telefoto()
elif query_data == 'allarme':
rele13.on() # attiva la sirena per 5 minuti
time.sleep(300)
rele13.off()
elif query_data == 'attivo':
prog = 1
bot.sendMessage(chat_id,"Rivelatore attivo!")
elif query_data == 'standby':
prog = 0
bot.sendMessage(chat_id,"Rivelatore in standby")
elif query_data == 'riavvia':
bot.sendMessage(chat_id,"Riavvio...")
bashCommand = 'sudo reboot'
subprocess.check_output(bashCommand, shell=True)
elif query_data == 'sonoro':
flag = 1
bot.sendMessage(chat_id,"Sirena attiva")
MessageLoop(bot, {'chat': on_chat_message, 'callback_query': on_callback_query}).run_as_thread();
while 1:
time.sleep(1)
[ /code]
PS: sono state eliminate alcune righe di codice per comodità, lo script non ha errori e va avanti tranquillamente anche per giorni, poi si blocca