• 在Django中写mqtt脚本并使用


    在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

    在views中引用mqtt脚本

    1 from django.shortcuts import render
    2 from module import mqtt_function
    3 # Create your views here.
    4 
    5 
    6 def test(request):
    7     mqtt_function.mqtt_run()
    8     return render(request, 'test.html')

    效果是打开这个网页,就会接收数据。

  • 相关阅读:
    如何通过logcat查看系统程序的意图
    jmeter测试本地myeclips调试状态下的tomcat程序死锁
    利用开源项目使discus论坛与java应用同步登录和注册
    hibernate映射文件基础
    长沙理工大学校园网客户端无法卸载解决办法
    26个Jquery使用小技巧
    eclipse 书签
    Notepad++ 书签
    【转】不提拔你,就因为你只想把工作做好
    自己开发开源jquery插件--给jquery.treeview加上checkbox
  • 原文地址:https://www.cnblogs.com/nuister/p/12950641.html
Copyright © 2020-2023  润新知