NameError: имя 'message' не определено - PullRequest
0 голосов
/ 29 ноября 2018

У меня нет опыта работы с python ... но мне нужно использовать его для интеграции (raspberry + mqtt + wiringpi) + home_assistance, я хотел бы создать простое действие, клиент mqtt слушает, и в то время как получает правильныйинформация в соответствующей теме, он изменит настройку wiringpi ... что частично работает ... проблема возникла, когда я пытаюсь создать зависимость от информации.

import paho.mqtt.client as mqtt #import the client1
import wiringpi
import time

wiringpi.wiringPiSetup()

############
def wiadomosc(client, userdata, message):
    global external_value1, added_value2
    print("message received " ,str(message.payload.decode("utf-8")))
    print("message topic=",message.topic)
    print("message qos=",message.qos)
    print("message retain flag=",message.retain)
external_value1 = str(message.payload.decode("utf-8"))
wiringpi.pinMode(29, 0)
########################################
broker_address="192.168.0.211"
print("creating new instance")
client = mqtt.Client("P1") #create new instance
client.on_message=wiadomosc #attach function to callback
print("connecting to broker")
client.connect(broker_address) #connect to broker
client.loop_start() #start the loop
print("Subscribing to topic","home/kitchen/output/lights/set")
client.subscribe("home/kitchen/output/lights/set")
time.sleep(40000) # wait
client.loop_stop() #stop the loop

Я получаю

NameError: name 'message' is not defined

Я знаю, что сообщение будет отображаться, когда оно будет получено от mqtt ... Я пытался создать пустое значение, но оно не сработало должным образом, приведенный выше код упрощен, я удалил все слова "если", иоставил только ту часть, которая вызывает проблему

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Вы абсолютно правы - Спасибо!Ответ, который вы опубликовали, правильный, и он направляет меня к основам Python

0 голосов
/ 29 ноября 2018

Ваша проблема с отступом, message не в вашей функции.Вы передаете message в качестве параметра функции wiadomosc(), но сразу после замедления этой функции инициализация external_value1 с message.payload, который не был определен ранее.

def wiadomosc(client, userdata, message):
    global external_value1, added_value2
    print("message received " ,str(message.payload.decode("utf-8")))
    print("message topic=",message.topic)
    print("message qos=",message.qos)
    print("message retain flag=",message.retain)
    external_value1 = str(message.payload.decode("utf-8"))
wiringpi.pinMode(29, 0)
...