scd_mqtt_transpond.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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_transpond_scd 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, RecentSCDdata, SCDdata, SCDstatus, SCDstatus_all
  16. from apps.ReportManage.all_dict import transpont_equip_scd
  17. import re
  18. import requests
  19. import datetime
  20. class CJSONEncoder(json.JSONEncoder):
  21. def default(self, obj):
  22. if isinstance(obj, datetime):
  23. return obj.strftime('%Y-%m-%d %H:%M:%S')
  24. elif isinstance(obj, date):
  25. return obj.strftime('%Y-%m-%d')
  26. else:
  27. return json.JSONEncoder.default(self, obj)
  28. # 连接后的操作: 0为成功
  29. def on_connect(client, userdata, flags, rc):
  30. # print("Connected with result code "+str(rc))
  31. # for x in transpont_equip_scd:
  32. # client.subscribe("/yfkj/scd/pub/%s"%x)
  33. # client.subscribe("/yfkj/scd/offline/%s"%x)
  34. client.subscribe("/yfkj/scd/pub/#")
  35. client.subscribe("/yfkj/scd/offline/#")
  36. # *****成功发布******
  37. def on_publish(msg, rc):
  38. if rc == 0:
  39. print("publish success,msg = "+msg)
  40. # 从服务器接受到消息后回调此函数 :
  41. def on_message(client, userdata, msg):
  42. print('\r')
  43. print('=================================================')
  44. print('\r')
  45. print("<-----topic:\n" + msg.topic + ';\n')
  46. print("Message:\n" + str(msg.payload) + "----->\n")
  47. # 从主题中获取imei
  48. # imei = msg.topic[14:len(msg.topic)]
  49. imei = re.sub("\D", "", msg.topic)
  50. print("<-----imei:", imei, "----->")
  51. # url = "http://127.0.0.1:8000/test"
  52. payload = json.loads(msg.payload.decode())
  53. # payload = json.dumps(payload, cls=CJSONEncoder)
  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. if equip_id.equip_data_between == "1":
  62. res_1 = requests.post(equip_id.equip_data_url, data=data, timeout=3)
  63. elif equip_id.equip_data_between == "2":
  64. headers = {"Content-Type": "application/json; charset=UTF-8", 'Connection': 'close'}
  65. res_1 = requests.post(equip_id.equip_data_url, data=data, timeout=3,headers=headers)
  66. print("res_1",res_1)
  67. print("res_1.text",res_1.text)
  68. print("send success")
  69. except Exception as e:
  70. print("错误信息为==================>>",e)
  71. if __name__ == '__main__':
  72. client = mqtt.Client(
  73. client_id="PY_MQTT_TRANSPOND_SCD",
  74. clean_session=True,
  75. userdata=None,
  76. # protocol=MQTTv311,# 数据库版本
  77. )
  78. # 必须设置,否则会返回「Connected with result code 4」
  79. client.username_pw_set("admin", "password")
  80. client.on_connect = on_connect
  81. client.on_message = on_message
  82. HOST = "127.0.0.1"
  83. client.connect(HOST, 1883, 60)
  84. client.loop_forever()
  85. # # 输入发布的话题名称:
  86. # # user = input("请输入名称:")
  87. # topic = "/yfkj/scd/cmd/2001"
  88. # client.user_data_set(topic)
  89. # client.loop_start()
  90. # while True:
  91. # str = input()
  92. # if str:
  93. # client.publish("/yfkj/scd/cmd/2001", json.dumps({"topic": topic, "cmd": str}))