ybq_mqtt_transpond.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. # -*- coding: utf-8 -*-
  2. # File Name:mqtt_chat_client.py
  3. # Python Version:3.5.1
  4. import os
  5. import django
  6. import sys
  7. BASE_DIR = os.path.dirname(os.path.abspath(__file__)) # 定位到你的django根目录
  8. sys.path.append(os.path.abspath(os.path.join(BASE_DIR, os.pardir)))
  9. os.environ.setdefault("DJANGO_SETTINGS_MODULE",
  10. "yfwlw_pro.settings") # project_name 项目名称
  11. django.setup()
  12. print("<-----python_mqtt_client_qxz is run----->")
  13. import paho.mqtt.client as mqtt
  14. import json
  15. from apps.AppInfoManage.models import Alarm_record, Equip, Equip_Forward, Equip_type, MyUser, QXZ_Base_Info, QXZdata, QXZstatus, QXZstatus_New, QXZswitchdata, QXZswitchstatus
  16. from apps.ReportManage.all_dict import transpont_equip_ybq
  17. import re
  18. import datetime
  19. import requests
  20. import time
  21. class CJSONEncoder(json.JSONEncoder):
  22. def default(self, obj):
  23. if isinstance(obj, datetime):
  24. return obj.strftime('%Y-%m-%d %H:%M:%S')
  25. elif isinstance(obj, date):
  26. return obj.strftime('%Y-%m-%d')
  27. else:
  28. return json.JSONEncoder.default(self, obj)
  29. # 连接后的操作: 0为成功
  30. def on_connect(client, userdata, flags, rc):
  31. # print("Connected with result code "+str(rc))
  32. # for x in transpont_equip_ybq:
  33. # client.subscribe("yfkj/xycb/c2s/%s"%x)
  34. # equip_list = Equip_Forward.objects.all()
  35. # for x in equip_list:
  36. client.subscribe("yfkj/xycb/c2s/#")
  37. # *****成功发布******
  38. def on_publish(msg, rc):
  39. if rc == 0:
  40. print("publish success,msg = "+msg)
  41. # 从服务器接受到消息后回调此函数 :
  42. def on_message(client, userdata, msg):
  43. print('\r')
  44. print('=================================================')
  45. print('\r')
  46. print("<-----topic:\n" + msg.topic + ';\n')
  47. print("Message:\n" + str(msg.payload) + "----->\n")
  48. # 从主题中获取imei
  49. # imei = msg.topic[14:len(msg.topic)]
  50. imei = msg.topic.split('/')[-1]
  51. # imei = re.sub("\D", "", msg.topic)
  52. print("<-----imei:", imei, "----->")
  53. payload = json.loads(msg.payload.decode())
  54. print("type_payload",type(payload))
  55. data = {"topic":msg.topic,"payload":payload}
  56. data = json.dumps(data, cls=CJSONEncoder)
  57. print("发送数据为:",data)
  58. try:
  59. if Equip_Forward.objects.filter(equip_id=imei).exists():
  60. equip_id = Equip_Forward.objects.get(equip_id=imei)
  61. headers = {"Content-Type": "application/json; charset=UTF-8", 'Connection': 'close'}
  62. res_1 = requests.post(equip_id.equip_data_url, data=data, timeout=3,headers=headers)
  63. print("res_1",res_1)
  64. print("res_1.text",res_1.text)
  65. print("send success")
  66. except Exception as e:
  67. print("错误信息为==================>>",e)
  68. if __name__ == '__main__':
  69. client = mqtt.Client(
  70. client_id="PY_MQTT_TRANDSPOND_YBQ",
  71. clean_session=True,
  72. userdata=None,
  73. # protocol=MQTTv311,# 数据库版本
  74. )
  75. # 必须设置,否则会返回「Connected with result code 4」
  76. client.username_pw_set("admin", "password")
  77. client.on_connect = on_connect
  78. client.on_message = on_message
  79. HOST = "127.0.0.1"
  80. client.connect(HOST, 1883, 60)
  81. client.loop_forever()