所以,我正在尝试在Google Cloud IoT的这个特定主题中发布:项目/ my_project /主题/ sm1。我正在使用paho-mqtt与python客户端。
代码:
进口帕霍。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.=“我的项目”cloud_region.=“美国 - 中央1”Registry_ID.=“sm1”设备编号=“sm1”Connflag.=错误的deferror_str.(rc.):“”“将paho错误转换为人类可读的字符串。”“”返回“发生了一些错误。{}:{}”。格式(rc.那MQTT.。error_string.(rc.))defon_disconnect.(unused_client.那unused_userdata.那rc.):“”“Paho回调,当设备断开连接时。”“”打印(“on_disconnect”那error_str.(rc.))defon_connect.(客户那用户数据那旗帜那response_code.):全球的connflag connflag.=真的打印(“与状态连接:{0}”。格式(response_code.))defon_publish.(客户那用户数据那中):打印(“用户数据:{0} - 中期:{1}”。格式(用户数据那中))#client.disconnect()如果__名称__==.“__主要的__”:客户=MQTT.。客户(“项目/ {} / locations / {} /注册表/ {} / devices / {}”。格式(project_id.那cloud_region.那Registry_ID.那设备编号))客户。USERNME_PW_ET.(用户名='没用过'那密码=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.打印(“连接到Google IoT Broker ......”的)客户。连接(mqtt_url.那mqtt_port.那活着=60.的)客户。Loop_start.()尽管真的:睡觉(0.5的)打印Connflag.如果Connflag.==.真的:打印(“出版...”的)ap_measurement.=随机的。制服(25.0那150.0的)#payload =“sm1 / sm1-payload - {}”格式(ap_measurement)res.=客户。发布(mqtt_topic.那ap_measurement.那QoS.=1的)如果不是res.。is_published.():打印(“数据未发布!!”的)别的:打印(“ActivePower发布:%.2f”%ap_measurement.的)别的:打印(“等待连接......”的)
错误信息:
无效的MQTT发布主题:项目/ my_project /主题/ sm1
输出:
连接到Google IoT Broker ...
连接状态:0 - msg:接受连接。
真的
出版...
数据未发布!!
('on_disconnect','发生一些错误。1:内存不足。')
欢迎任何帮助,并会受到赞赏。
这很简单。您有错误的主题名称。
您的客户ID必须是:
“项目/ {} / locations / {} /注册表/ {} / devices / {}”。格式(project_id,cloud_region,registry_id,device_id)
然后你的主题必须是:
/设备/ {} / / config / devices / {} /状态/设备/ {} /事件/设备/ {} /事件/某些/其他/主题