python - 将上行链路消息从 python 脚本发布到 TTN(物联网)模拟节点
问题描述
出于测试目的,我正在尝试从我的普通计算机上的 python 脚本将 MQTT 消息(上行链路)发布到 TTN(事物网络)。这应该模拟来自节点的上行链路。
根据我在stackoverflow和博客上找到的示例,我编写了以下代码:
#!/usr/bin/env python3
import paho.mqtt.client as paho
#settings
app_id = "<Application ID from the TTN console>"
access_key = "ttn-account-v2.etcetcetcetcetc.."
broker="eu.thethings.network"
port=1883
def on_publish(client,userdata,result):
print("data published \n")
print(client,userdata,result)
pass
def on_log(mqttc, obj, level, string):
print(string)
#setup
client = paho.Client()
client.username_pw_set(app_id,access_key)
#callbacks
client.on_publish = on_publish
client.on_log = on_log
#establish connection
client.connect(broker,port)
client.loop_start()
#publish
ret= client.publish("applicationID/bulb1","on",qos=1)
ret.wait_for_publish()
运行时输出
Received CONNACK (0, 0)
Received PUBACK (Mid: 1)
data published
但是,当我检查我的应用程序的 TTN 页面时,我看不到数据。
任何人有任何建议为什么这不起作用?
解决方案
我不知道两个月后您是否仍然遇到此问题,但是我刚刚遇到了类似的问题并找到了答案。
首先,您想使用“ttn”python 库而不是 MQTT paho 库,因为它使连接更容易。您可以在以下链接中找到它:
https://www.thethingsnetwork.org/docs/applications/python/api-reference.html#mqttclient
如果您按照他们的指南进行操作,您首先也会遇到与此处相同的问题,因为他们没有解释如何正确发送下行链路消息并且没有提供示例。
为了在使用 ttn 库时向下发送消息,您需要执行以下操作:
client.send("device_id", base64.encodebytes(bytes("DATA YOU WANT TO SEND", 'utf-8')).decode(), port=1, sched="replace")
推荐阅读
- java - 头在java链接列表中被删除
- google-apps-script - 谷歌脚本没有屏蔽谷歌文档
- java - 带有like和in的Spring Boot JPA @Query
- sql - SQL Puzzle - Increase the value by one when two columns change value
- php - Why did PHP Datetime sub function stop working on PHP 7.1?
- ios - 是否可以在导航栏中使大标题可点击(iOS)
- python-3.x - 基于骰子的掷骰子游戏
- swift - 使用 Alamofire 不断检查 Internet 连接
- matlab - MATLAB中这个特定的随机函数是什么意思
- java - Jackson serialiser on Spring boot is stringifying my Strings