#python #csv #mqtt #iot
#python #csv #mqtt #iot
Вопрос:
У меня есть csv-файл, и мне нужно отправить этот файл в виде сообщения MQTT, но мне нужно, чтобы он отправлялся только одной строкой с перерывом в несколько секунд, а затем следующей строкой и снова перерывом в несколько секунд. Это что-то вроде моделирования датчика, но с данными в файле csv. Я пытался решить это несколькими различными способами, но ничего не получалось. Я пишу на Python. Спасибо вам, ребята, за любую помощь. Код здесь — моя последняя попытка, и после запуска функции MQTT_publish() я получаю сообщения с перерывом в 5 секунд, но в каждом сообщении содержится целый файл, а не только одна строка. Я действительно не знаю, что с этим делать.
def MQTT_publish(broker, file, topic):
client = mqtt.Client()
print("Connecting to broker", broker)
client.connect(broker)
client.loop_start()
print("Publishing...")
client.loop_start()
with open(file, 'r') as read_obj:
data = reader(read_obj)
for row in data:
client.publish(f"{topic}", str(row))
time.sleep(5)
client.loop_stop()
def on_message(client, userdata, message):
print(str(message.payload.decode("utf-8")))
def MQTT_subscribe(broker, topic):
client = mqtt.Client()
print("Connecting to broker", broker)
client.connect(broker)
print(f"Subscribing {topic}")
client.subscribe(f"{topic}")
client.on_message = on_message
client.loop_forever()
broker = "mqtt.eclipse.org"
Комментарии:
1. Не могли бы вы предоставить образец своего кода, чтобы показать, что вы пробовали и что используете в настоящее время?
2. Я добавил свой код в вопрос. Это последняя попытка, которую я сделал.
3. Откуда
broker
берется и какую ошибку вы получаете?4. Может быть, ваша
time.sleep(10)
инструкция должна быть в цикле по строкам?5. @Frodon Я запустил time.sleep(10) в цикл, и, к сожалению, это ничего не изменило:(
Ответ №1:
Разве вы не должны использовать readlines()??
myfile = open(file, 'r')
Lines = myfile.readline()
for line in Lines:
client.publish(f"{topic}", str(line.strip()))
time.sleep(5)
Предполагается, что данные в файле представлены в формате ASCII с переводом строки.
Комментарии:
1. Он по-прежнему отправляет весь файл в виде сообщения: (
2. @py1527 Тогда в вашем файле нет перевода строки или он отформатирован таким образом, что функция readline() не может определить, где заканчивается одна строка и начинается другая. Как завершаются строки? Какую демаркацию вы хотите использовать для разделения ваших сообщений?