Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 11, 2016 12:27:14

mindwrk
Зарегистрирован: 2016-10-11
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с реализацией кнопки (raspberry + telepot)

Добрый день. в программировании новичек, помидорами прошу не забрасывать.
Собственно 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)

Офлайн

#2 Окт. 11, 2016 13:55:17

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Помогите с реализацией кнопки (raspberry + telepot)

Так запустите бота и посмотрите что у вас вобще происходит при нажатии кнопки например добавив

 print(GPIO.input(16))



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Окт. 11, 2016 14:53:28

mindwrk
Зарегистрирован: 2016-10-11
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с реализацией кнопки (raspberry + telepot)

ZerG
Так запустите бота и посмотрите что у вас вобще происходит при нажатии кнопки например добавив

в спокойном сотоянии print(GPIO.input(16)) вернет 0. в нажатом 1
если запустить
 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))
то значения по команде боту возвращаются 0 и 1 при зажатой кнопке.

не работает конкретно условие
 if GPIO.input(16) == 1:
        bot.sendMessage(chat_id, str('/ring)'))
        time.sleep(3)

Офлайн

#4 Окт. 11, 2016 15:20:49

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Помогите с реализацией кнопки (raspberry + telepot)

Давайте для начала

 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)

Офлайн

#5 Окт. 11, 2016 18:27:59

mindwrk
Зарегистрирован: 2016-10-11
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с реализацией кнопки (raspberry + telepot)

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')

срабатывает только если зажав кнопку отправить боту любой текст .
т.е не важно будет это что-то из command ==
или рандомный набор символов

также
 if GPIO.input(16) == 0:
        print('Button OFF')
срабатывает с отпущенной кнопкой и отправкой боту сообщения

Срабатывает один раз, т.е не повторяется
я отрпаляю боту сообщение, срабатывает, след раз сработает если отправить еще одно.
python door.py
I am listening …
Got command: 5665
Button ON
Got command: длрор
Button ON
Got command: /time
Button ON
держа кнопку зажатой и if GPIO.input(16) == 1:

если делать выше сказанное с зажатой кнопкой, то бот не реагирует на команды.
т.е если кнопка зажата и я даю команду /time то бот не отправляет дату, если кнопку отпустить, то дату отправляет.

лог канала
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)

Офлайн

#6 Окт. 11, 2016 21:39:53

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Помогите с реализацией кнопки (raspberry + telepot)

ХМ.
ну так если

 def handle(msg=None)
?



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#7 Окт. 12, 2016 04:52:45

mindwrk
Зарегистрирован: 2016-10-11
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с реализацией кнопки (raspberry + telepot)

тоже самое

Офлайн

#8 Окт. 12, 2016 08:27:18

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Помогите с реализацией кнопки (raspberry + telepot)

Честно говоря не совсем до конца понимаю что у вас именно не срабатывает!

Давайте так:
возьмем ваш код

 # -*- 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)

Далее вы нажмете кнопку и скажете что происходит!
Button ON - печатается или нет? Переменные chat_id, command выводяться?



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#9 Окт. 12, 2016 10:46:05

mindwrk
Зарегистрирован: 2016-10-11
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с реализацией кнопки (raspberry + telepot)

тожесамое происходит

срабатывает только если зажав кнопку отправить боту любой текст .

с зажатой кнопкой бот не реагирует на команды.
т.е если кнопка зажата и я даю команду /time то бот не отправляет дату, если кнопку отпустить, то дату отправляет.

Офлайн

#10 Окт. 12, 2016 11:01:28

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Помогите с реализацией кнопки (raspberry + telepot)

Моя твоя не понимать!
Давайте по сути! Вы код скопировали последний? Запустили?
Нажали кнопку от пустили
при етом сообщения в консоли появились
Button ON и Message was sent ?

 print(chat_id, command)
отработала? данные вывела? если да то какие?



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version