在Django中写mqtt脚本并使用
表结构如下
新建一个module文件夹用来存放自编脚本
1 # __author: gy-chen 2 # data: 2020/5/23 3 # -*- coding: UTF-8 -*- 4 5 6 # 为了能在外部脚本中调用Django ORM模型,必须配置脚本环境变量,将脚本注册到Django的环境变量中 7 import os, sys 8 import django 9 # 第一个参数固定,第二个参数是工程名称.settings 10 os.environ.setdefault('DJANGO_SETTING_MODULE', 'backend.settings') 11 django.setup() 12 13 # 引入mqtt包 14 import paho.mqtt.client as mqtt 15 # 使用独立线程运行 16 from threading import Thread 17 # from app名 import models 18 from backend import models # import models可以操作数据 19 20 import time 21 import json 22 23 24 # 建立mqtt连接 25 def on_connect(client, userdata, flag, rc): 26 print("Connect with the result code " + str(rc)) 27 client.subscribe('data/receive', qos=0) 28 29 30 # 接收、处理mqtt消息 31 def on_message(client, userdata, msg): 32 out = msg.payload.decode('utf-8') 33 # print("topic:"+msg.topic) 34 # print(out) # string类型 35 # out = json.loads(out) 36 37 # 收到消息后执行任务 38 if msg.topic == 'data/receive': 39 40 # 处理model层业务 41 # 增 42 # obj = models.MqttData(topic=msg.topic, msg=out) 43 # obj.save() 44 # print("==>" + out) 45 # 查 46 # data = models.MqttData.objects.all() 47 # print(data) 48 # 改 49 models.MqttData.objects.filter(topic=msg.topic).update(msg=out) 50 51 52 # mqtt客户端启动函数 53 def mqttfunction(): 54 global client 55 # 使用loop_start 可以避免阻塞Django进程,使用loop_forever()可能会阻塞系统进程 56 # client.loop_start() 57 # client.loop_forever() 有掉线重连功能 58 client.loop_forever(retry_first_connection=True) 59 60 61 client = mqtt.Client(client_id="test", clean_session=False) 62 63 64 # 启动函数 65 def mqtt_run(): 66 client.on_connect = on_connect 67 client.on_message = on_message 68 # 绑定 MQTT 服务器地址 69 broker = '120.79.57.0' 70 # MQTT服务器的端口号 71 client.connect(broker, 1883, 4000) 72 client.username_pw_set('admin', 'admin') 73 client.reconnect_delay_set(min_delay=1, max_delay=2000) 74 # 启动 75 mqttthread = Thread(target=mqttfunction) 76 mqttthread.start() 77 78 79 # 启动 MQTT 80 # mqtt_run() 81 82 83 if __name__ == "__main__": 84 mqtt_run()
mqtt_function
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在Django中写mqtt脚本并使用 - Python技术站