Форум сайта python.su
Добрый день. в программировании новичек, помидорами прошу не забрасывать.
Собственно telepot
На кнопку бот должен отсылать команду /ring, но не отрабатывает условие.
Когда кнопка зажата GPIO.input(16) возвращает 1, не зажата 0.
Прошу направить на путь истенный. т.к я на 100% уверен что что-то не так делаю.
import time import datetime import telepot import RPi.GPIO as GPIO GPIO.setmode(GPIO.BOARD) GPIO.setup(16,GPIO.IN) def handle(msg): chat_id = msg['chat']['id'] command = msg['text'] print('Got command: %s' % command) if GPIO.input(16) == 1: bot.sendMessage(chat_id, str('/ring)')) time.sleep(3) elif command == '/status': bot.sendMessage(chat_id, str('online')) elif command == '/open': bot.sendMessage(chat_id, str('moving')) elif command == '/time': bot.sendMessage(chat_id, str(datetime.datetime.now())) bot = telepot.Bot('*********') bot.message_loop(handle) print('I am listening ...') while 1: time.sleep(10)
Отредактировано mindwrk (Окт. 11, 2016 12:44:40)
Офлайн
Так запустите бота и посмотрите что у вас вобще происходит при нажатии кнопки например добавив
print(GPIO.input(16))
Офлайн
ZerG
Так запустите бота и посмотрите что у вас вобще происходит при нажатии кнопки например добавив
import RPi.GPIO as GPIO GPIO.setmode(GPIO.BOARD) GPIO.setup(16,GPIO.IN) try: while True: if GPIO.input(16)==0: print "Open" else: print "Closed" finally: GPIO.cleanup()
elif command == '/b': print(GPIO.input(16))
if GPIO.input(16) == 1: bot.sendMessage(chat_id, str('/ring)')) time.sleep(3)
Офлайн
Давайте для начала
if GPIO.input(16) == 1: print('Button ON') # что бы понять что условие вобще сработало # bot.sendMessage(chat_id, str('/ring)')) bot.sendMessage(chat_id, str('ring)')) # может символ '/' нужно экранировать time.sleep(3)
Отредактировано ZerG (Окт. 11, 2016 15:21:10)
Офлайн
ZerGили
if GPIO.input(16) == 1:
print('Button ON') # что бы понять что условие вобще сработало
# bot.sendMessage(chat_id, str('/ring)'))
bot.sendMessage(chat_id, str('ring)')) # может символ ‘/’ нужно экранировать
time.sleep(3)
if GPIO.input(16) == 1: print('Button ON')
if GPIO.input(16) == 0: print('Button OFF')
python door.pyдержа кнопку зажатой и if GPIO.input(16) == 1:
I am listening …
Got command: 5665
Button ON
Got command: длрор
Button ON
Got command: /time
Button ON
Vladimir,
/time
Vladimir,
/time
—-
отпускаю кнопку
—-
Vladimir,
/time
bot,
2016-10-11 15:47:36.907086
Vladimir,
/time
bot,
2016-10-11 15:47:40.981510
Отредактировано mindwrk (Окт. 11, 2016 18:49:53)
Офлайн
ХМ.
ну так если
def handle(msg=None)
Офлайн
тоже самое
Офлайн
Честно говоря не совсем до конца понимаю что у вас именно не срабатывает!
Давайте так:
возьмем ваш код
# -*- coding: utf-8 -*- import time import datetime import telepot import RPi.GPIO as GPIO GPIO.setmode(GPIO.BOARD) GPIO.setup(16, GPIO.IN) def handle(msg): chat_id = msg['chat']['id'] # для теста исключим command = msg['text'] print(chat_id, command) print('Got command: %s' % command) if GPIO.input(16): # тут уберем 1 - возможно результат булево print('Button ON') bot.sendMessage(chat_id, str('/ring)')) print('Message was sent') time.sleep(3) elif command == '/status': print('Status result') bot.sendMessage(chat_id, str('online')) elif command == '/open': bot.sendMessage(chat_id, str('moving')) elif command == '/time': bot.sendMessage(chat_id, str(datetime.datetime.now())) bot = telepot.Bot('*********') bot.message_loop(handle) print('I am listening ...') while 1: time.sleep(10)
Офлайн
тожесамое происходит
срабатывает только если зажав кнопку отправить боту любой текст .
с зажатой кнопкой бот не реагирует на команды.
т.е если кнопка зажата и я даю команду /time то бот не отправляет дату, если кнопку отпустить, то дату отправляет.
Офлайн
Моя твоя не понимать!
Давайте по сути! Вы код скопировали последний? Запустили?
Нажали кнопку от пустили
при етом сообщения в консоли появились
Button ON и Message was sent ?
print(chat_id, command)
Офлайн