我有两个问题。 我在python中使用MQTT来接收来自heroku网页的消息。 我的heroku网页上有两个文本框(value1和value2)。我将带有MQTT的值发送到python脚本。
此代码有效: 如果value1大于10,则led开启,或者如果value2大于10,则led开启。
def on_message(client, userdata, msg):
if(msg.topic=="/send/value1/to/led"):
if ( int(msg.payload) > 10):
GPIO.output(led, GPIO.HIGH)
if(msg.topic=="/send/value2/to/led"):
if ( int(msg.payload) > 10):
GPIO.output(led, GPIO.HIGH)
我的第一个问题。 我想要这个:如果value1和value2的总和大于10,那么led是打开的。 此代码无效。
**def on_message(client, userdata, msg):**
if(msg.topic=="/send/value1/to/led"):
value1 = int(msg.payload)
if(msg.topic=="/send/value2/to/led"):
value2 = int(msg.payload)
if ((value1 + value2) > 10):
GPIO.output(led, GPIO.HIGH)
有人可以帮助我吗?
我的第二个问题。
我有另一个heroku网页,我尝试接收消息。
我输入了这个:import mysql.connector as mc
在我的heroku网页上,我收到此错误:没有名为mysql.connector的模块。我还使用了requirements.txt文件。
有人能帮助我吗? 非常感谢你!
答案 0 :(得分:0)
这个问题有点难以回答,因为你问了两个不同的问题,所以我只会解决第一个问题,并鼓励你将第二个问题分开。
查看您的代码我认为问题与您嵌套语句的方式有关。我认为问题是on_message回调每次调用时都会收到一条消息,因此永远无法满足第二个条件。但鉴于我不确定你的空白是否准确,目前还不清楚。
但是,我会避免使用if语句开始,只需使用库中的message_callback_add函数(我假设你在这里使用Paho客户端)调用两个单独的函数然后传递变量他们使用全球。然后使用while循环处理这两个变量。以下是文档:https://pypi.python.org/pypi/paho-mqtt/1.1#callbacks。这将为您提供一种更加清晰的方法,应该很容易实现。
以下是一些示例代码:
import paho.mqtt.client as mqtt
import time
def on_connect(client, userdata, flags, rc):
client.subscribe('led/#')
def value_one(client, userdata, message):
global value1
value1 = int(message.payload)
def value_two(client, userdata, message):
global value2
value2 = int(message.payload)
MQTT_BROKER = []
client = mqtt.Client(client_id='whatever')
client.on_connect = on_connect
client.message_callback_add('led/value_one', value_one)
client.message_callback_add('led/value_two', value_two)
client.connect(MQTT_BROKER)
client.loop_start()
while True:
if value1 + value2 > 10:
#Do Something
pass
time.sleep(30)
我是从内存中做到的,因此可能存在错误,但它说明了使用基于主题的回调,全局变量和while循环来处理结果的基本原则。