因此,我试图在谷歌云物联网的这个特定主题中发表:projects/my_project/topics/sm1。我在Python客户端中使用paho-mqtt。
代码:
进口泛美卫生组织.mqtt.客户端作为mqtt进口ssl,随机,jwt_maker从时间进口睡眠root_ca=”。/ . . / roots.pem 'public_crt=”。/ . . / my_cert.pem 'private_key=”。/ . . / my_pr.pem 'mqtt_url=“mqtt.googleapis.com”mqtt_port=8883mqtt_topic=“/项目/ my_project /主题/ sm1”project_id=“my_project”cloud_region=“us-central1”registry_id=“sm1”device_id=“sm1”connflag=假deferror_str(钢筋混凝土):"""将Paho错误转换为人类可读的字符串。"""返回“一些错误发生。{}:{}”.格式(钢筋混凝土,mqtt.error_string(钢筋混凝土))defon_disconnect(unused_client,unused_userdata,钢筋混凝土):"""当设备断开时的Paho回调。"""打印(“on_disconnect”,error_str(钢筋混凝土))defon_connect(客户端,用户数据,旗帜,response_code):全球connflag connflag=真正的打印(“连接状态:{0}”.格式(response_code))defon_publish(客户端,用户数据,中期):打印(“用户数据:{0}——mid:{1}”.格式(用户数据,中期))# client.disconnect ()如果__name__==“__main__”:客户端=mqtt.客户端(“项目/{}/位置/{}/注册/{}/设备/{}”.格式(project_id,cloud_region,registry_id,device_id))客户端.username_pw_set(用户名=“未使用”,密码=jwt_maker.create_jwt(project_id,private_key,算法=“RS256”))客户端.tls_set(root_ca,certfile=public_crt,密钥文件=private_key,cert_reqs=ssl.CERT_REQUIRED,tls_version=ssl.PROTOCOL_TLSv1_2,密码=没有一个)客户端.on_connect=on_connect客户.on_publish=on_publish客户.on_disconnect=on_disconnect打印(“连接到谷歌物联网代理…”)客户端.连接(mqtt_url,mqtt_port,keepalive=60)客户端.loop_start()而真正的:睡眠(0.5)打印connflag如果connflag==真正的:打印(“出版……”)ap_measurement=随机.统一的(25.0,150.0)#载荷= " sm1 / sm1-payload——{}“.format (ap_measurement)res=客户端.发布(mqtt_topic,ap_measurement,qos=1)如果不res.is_published():打印(“数据没有公布! !”)其他的:打印(“ActivePower发表:% .2f”%ap_measurement)其他的:打印(“等待连接…”)
错误信息:
无效的MQTT发布主题:projects/my_project/topics/sm1
输出:
连接到谷歌物联网代理…
连接状态:0——msg:连接已接受。
真正的
出版…
数据没有公布!
('on_disconnect', '发生错误。1:内存不足。
任何帮助都是欢迎和将感激。
这很简单。您的主题名称不正确。
您的客户端ID必须为:
“项目/{}/位置/{}/注册/{}/设备/{}”。格式(project_id,cloud_region,registry_id,device_id)
你们的主题必须是:
/devices/{}/config /devices/{}/state /devices/{}/events/ devices/{}/events/some/other/topic