因此,我正在尝试在Google Cloud IoT的此特定主题中发布:Projects/My_project/topics/sm1。我正在与Python客户端一起使用Paho-MQTT。
代码:
进口paho。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=“/projects/my_project/topics/sm1”Project_ID=“我的项目”cloud_region=“ us-Central1”Registry_id=“ SM1”设备ID=“ SM1”Connflag=错误的防守error_str((RC):“”“将paho错误转换为人类可读字符串。”“”返回“发生了一些错误。{}:{}”。格式((RC,,,,mqtt。error_string((RC))防守on_disconnect((Unused_client,,,,UNUSUS_USERDATA,,,,RC):“”“设备断开连接时的paho回调。”“”打印((“ on_disconnect”,,,,error_str((RC))防守on_connect((客户,,,,用户数据,,,,标志,,,,response_code):全球的Connflag Connflag=真的打印((“与状态连接:{0}”。格式((response_code))防守on_publish((客户,,,,用户数据,,,,中):打印((“用户数据:{0} - MID:{1}”。格式((用户数据,,,,中))#client.disconnect()如果__姓名__==“__主要的__”:客户=mqtt。客户((“ projects/{}/locations/{}/registries/{}/decections/{}”。格式((Project_ID,,,,cloud_region,,,,Registry_id,,,,设备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。协议_tlsv1_2,,,,密码=没有任何)客户。on_connect=on_connect客户端。on_publish=on_publish客户端。on_disconnect=on_disconnect打印((“连接到Google IoT经纪人...”)客户。连接((mqtt_url,,,,mqtt_port,,,,活着=60)客户。loop_start()尽管真的:睡觉((0.5)打印Connflag如果Connflag==真的:打印((“出版...”)ap_测量=随机的。制服((25.0,,,,150.0)#payload =“ sm1/sm1-payload- {}”。格式(ap_measurement)res=客户。发布((mqtt_topic,,,,ap_测量,,,,QoS=1)如果不是res。IS_PEBLED():打印((“数据未发布!!”)别的:打印((“ ActivePower已发布:%.2F”%ap_测量)别的:打印((“等待连接...”)
错误信息:
无效MQTT发布主题:项目/my_project/topics/sm1
输出:
连接到Google IoT经纪人...
与状态连接:0- msg:接收连接。
真的
出版...
数据未发布!!
('on_disconnect',“发生了一些错误。1:退出记忆。')
欢迎任何帮助,将不胜感激。
这很简单。您的主题名称不正确。
您的客户ID必须是:
“ projects/{}/locations/{}/registries/{}/devices/{}”。格式(project_id,cloud_region,gument_id,device_id)
然后您的主题必须是:
/devices/{}/config/develices/{}/state/devices/{}/events/devesties/devices/{}/events/some其他/其他/主题