在python和heroku网页中使用MQTT发布和订阅消息

时间:2017-05-21 15:49:54

标签: python mysql heroku mqtt

我有两个问题。 我在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文件。

有人能帮助我吗? 非常感谢你!

1 个答案:

答案 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循环来处理结果的基本原则。