【EMQX】通过EMQX webhook实现转发消息到Python web服务器

news2024/11/13 9:32:19

EMQX webhook消息转发Web服务器

    • 一、前言
    • 二、实现
      • 1、EMQX服务器搭建
        • EMQX下载、安装、启动
      • 2、本地Web服务搭建
        • 创建Flask项目
        • 代码
      • 3、EMQX中创建webhook数据桥接
      • 4、EMQX中创建数据转发规则
    • 三、效果

一、前言

需求:获取设备通过mqtt协议发送过来的数据并将数据保存到外部服务中,期间需要使用EMQX代理服务器将消息转发到自有的Web服务中


实现:通过EMQX中的webhook实现消息转发

官方:https://www.emqx.io/docs/zh/v5.0/data-integration/data-bridge-webhook.html
在这里插入图片描述

二、实现

1、EMQX服务器搭建

EMQX下载、安装、启动
  • 到EMQX官网进行下载:https://www.emqx.io/zh/downloads?os=Windows
    EMQX下载安装启动
  • 安装运行完成后,可直接访问 EMQX Dashboard 管理控制台
    • http://localhost:18083/localhost根据实际IP地址修改)
      EMQX服务器控制台
  • 默认用户名及密码
    • admin / public
  • 停止EMQX服务
    • 打开cmd,进入到emqx所在文件夹中的bin目录
    • 输入一下指令
    ./emqx/bin/emqx stop
    

2、本地Web服务搭建

本次Web服务器使用Python Flask进行搭建

创建Flask项目

项目结构

  • 相关功能的代码实现直接在app.py中完成
代码

本次将 mqtt客户端接收EMQX转发的消息数据 都写在该Flask项目中

import json

from flask import request, jsonify, Flask, Blueprint, render_template, session, current_app
from flask_mqtt import Mqtt
from werkzeug.local import LocalProxy

app = Flask(__name__)

# 代理地址(根据实际使用的IP地址进行修改,需要和EMQX处于同一地址)
app.config['MQTT_BROKER_URL'] = '127.0.0.1'
# 端口
app.config['MQTT_BROKER_PORT'] = 1883
# 当需要验证用户名和密码时,设置该项(根据实际情况设定)
# app.config['MQTT_USERNAME'] = 'user'
# 当需要验证用户名和密码时,设置该项(根据实际情况设定)
# app.config['MQTT_PASSWORD'] = '123456'
# 设置心跳时间,单位为秒
app.config['MQTT_KEEPALIVE'] = 60
# 如果服务器支持 TLS,则设置为 True
app.config['MQTT_TLS_ENABLED'] = False
# 主题(根据实际情况设定)
topic = 't/1'
# 实例化
mqtt_client = Mqtt(app)


@app.route('/')
def index():
    # 初始路由
    return render_template('index.html')


@mqtt_client.on_connect()
def handle_connect(client, userdata, flags, rc):
    """连接回调函数"""
    if rc == 0:
        print('Connected successfully')
        # 订阅主题
        mqtt_client.subscribe(topic)
    else:
        # 连接失败
        print('Bad connection. Code:', rc)


@mqtt_client.on_message()
def handle_mqtt_message(client, userdata, message):
    """ 消息回调函数 """
    # 定义接受到的消息
    data = dict(
        # 主题
        topic=message.topic,
        # 内容
        payload=message.payload.decode()
    )
    print(data)
    # 打印输出接收到的消息
    print('Received message on topic: {topic} with payload: {payload}'.format(**data))


@app.route('/publish', methods=['POST'])
def publish_message():
    """
    消息发布接口(实际应用中,该接口可能需要处理一些复杂业务逻辑)
    """
    # 获取前端页面提交的数据,并格式化
    request_data = request.get_json()
    # print("接收到的数据", request_data)
    # 发布消息
    publish_result = mqtt_client.publish(request_data['topic'], request_data['payload'])
    # 返回JSON数据
    return jsonify({'code': publish_result[0]})


@app.route('/emqx', methods=['POST'])
def test_emqx_conn():
    """
    测试 搭建简易EMQX HTTP服务(用于接收EMQX转发过来的消息)
    在后面的 webhook数据桥接 创建中,URL填写为:http://127.0.0.1:5000/emqx
    """
    # 响应
    reply = {"result": "ok", "message": "success"}
    print("got post request: ", request.get_data())
    return json.dumps(reply), 200


if __name__ == '__main__':
    app.debug = True
    app.run()

3、EMQX中创建webhook数据桥接

  • EMQX控制台中找到webhook,点击创建
    在这里插入图片描述
  • 输入数据桥接名称(要求是大小写英文字母和数字的组合)
  • 请求方法选择 POST,
  • URL 为 http://127.0.0.1:5000/emqx(根据实际使用填写)
  • 其他使用默认值
  • 点击最下方保存按钮完成规则创建。
    在这里插入图片描述

4、EMQX中创建数据转发规则

  • 创建好webhook后,会自动根据创建的webhook桥接生成一个规则
  • 直接点击生成的规则中的 设置
    在这里插入图片描述
  • SQL编辑器根据个人实际业务进行修改,修改完成后直接点击更新
    在这里插入图片描述

三、效果

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1304513.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【sqli靶场】第四关和第五关通关思路

目录 前言 一、sqli靶场第四关 1.1 判断注入类型 1.2 观察报错 1.3 判断数据表中的列数 1.4 使用union联合查询 1.5 使用group_concat()函数 二、sqli靶场第五关 2.1 判断注入类型 2.2 使用extractvalue函数报错 2.3 爆出数据库中的表名 2.4 爆出users表中的列名 2.5 爆出use…

异地现场工控设备,如何实现远程配置、调试?

南京某企业专注于工业物联领域,在相关项目中往往会在各个点位部署基于Linux系统的中控主机,实现各类物联设备信息的采集、汇总。但是,由于各点位分散多地,且数量达到了上百个,虽然中控主机具备4G物联网接入能力&#x…

Java设计模式-单例(Singleton)设计模式的概述及实现

目录 🐶1 设计模式概述 🐶2 何为单例模式 🐶3 实现思路 🐶4 饿汉式实现代码 🐶5 懒汉式实现代码 🐶6 对比两种模式(特点、优缺点) 🐶7 单例模式的优点及应用场景 &…

系统提示:comres.dll丢失怎么办,comres.dll丢失的解决方法

comres.dll是Windows操作系统中一个非常重要的动态链接库文件,它负责提供一些重要的功能和资源。当这个文件丢失或损坏时,可能会导致一系列的问题和影响。本文将介绍comres.dll文件丢失对电脑的影响以及comres.dll丢失的原因,并提供5个解决方…

数据科学工作的20个Pandas函数(备忘)

Pandas 是数据科学社区中使用最广泛的库之一,它是一个强大的工具,可以进行数据操作、清理和分析。 本文将提供最常用的 Pandas 函数以及如何实际使用它们的样例。我们将涵盖从基本数据操作到高级数据分析技术的所有内容,到本文结束时&#xf…

Fnac、Darty跨境利用利用自养号测评补单提升销量和排名

Fnac是法国最有名字的零售商之一,成立于1954年,也是欧洲增长最快的平台之一,2016年,Fnac并购Darty,同时在自己的网站上添加了Darty板块,FnacDarty集团正式成立 国内的产品在Fnac,Darty平台上还…

使用shell脚本将一台虚拟机上面数据分发到其他虚拟机上面xsync

目录 1,功能2,注意点3,shell脚本介绍4,bash内容 1,功能 使用shell脚本将一台虚拟机上面数据分发到其他虚拟机上面。 2,注意点 需要修改的地方:hadoop250 hadoop251 hadoop252 hadoop253 hado…

【Redis】深入理解 Redis 常用数据类型源码及底层实现(1.结构与源码概述)

在文章【Redis】不卡壳的 Redis 学习之路:从十大数据类型开始入手中我们介绍了Redis常用的10大数据类型,这10大数据类型可并不是直接在底层通过代码实现的,而是通过不同的底层数据结构组合起来的,这篇我们介绍下Redis常用数据类型…

多域名和通配符SSL证书的区别

域名SSL证书和通配符SSL证书都是SSL数字证书中用一张证书保护多个域名站点的证书产品,这两种类型的SSL数字证书各自有各自的特色,今天就随SSL盾小编了解多域名SSL证书和通配符SSL证书的区别。 1.保护的域名类型不同:多域名SSL证书默认保护3-…

从视频中提取图片,轻松制作专属视频封面

你是否曾经为如何制作一个吸引人的视频封面而烦恼?现在,我们将向你展示如何从视频中提取图片,并轻松制作专属的视频封面。无论你是视频编辑新手,还是经验丰富的专业人士,这个技巧都能够帮助你快速提升你的视频品质。 …

外包干了3年,技术退步太明显了。。。。。

先说一下自己的情况,本科生生,18年通过校招进入武汉某软件公司,干了差不多3年的功能测试,今年国庆,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能…

4fiddler抓包工具的使用

一、定义 1.1 抓包的定义 说明:客户端向服务器发送请求以及服务器响应客户端的请求,都是以数据包来传递的。 抓包(packet capture):通过工具拦截客户端与服务器交互的数据包 1.2 fiddler的介绍 Fiddler是一个http协议调试代理工具&#…

黄油市场调研:预计2028年将达到717亿美元

黄油富含矿物质和维生素,奶油主要为脂肪和蛋白质组成,黄油主要用于涂抹面包和煎牛排等,随着西餐认可度提升,国内需求持续上行。黄油营养成分为乳制品之首,脂肪含量更高。 黄油主要用于涂抹面包和煎牛排等,随…

二叉树的所有路径

257. 二叉树的所有路径 - 力扣(LeetCode) 题目描述 给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 样例输入 示例 1: 输入:root […

以太坊:前世今生与未来

一、引言 以太坊,这个在区块链领域大放异彩的名字,似乎已经成为了去中心化应用(DApps)的代名词。从初期的萌芽到如今的繁荣发展,以太坊经历了一段曲折而精彩的旅程。让我们一起回顾一下以太坊的前世今生,以…

protobuf基础学习

部分内容出自:https://blog.csdn.net/baidu_32237719/article/details/99723353 proto文件来预先定义的消息格式。数据包是按照proto文件所定义的消息格式完成二进制码流的编码和解码。proto文件,简单地说,就是一个消息的协议文件&#xff0c…

【WinRAR】为什么右键没有压缩选项?

我们安装了WinRAR之后想要压缩文件,但是右键点击文件之后发现并没有WinRAR压缩选项,这应该如何设置才能出现右键带有压缩选项呢?方法如下: 首先打开WinRAR,在上面功能中点击选项 – 设置 然后我们在设置界面中切换到集…

Guardrails for Amazon Bedrock 基于具体使用案例与负责任 AI 政策实现定制式安全保障(预览版)

作为负责任的人工智能(AI)战略的一部分,您现在可以使用 Guardrails for Amazon Bedrock(预览版),实施专为您的用例和负责任的人工智能政策而定制的保障措施,以此促进用户与生成式人工智能应用程…

parser

"typescript-eslint/parser": "5.56.0", "vue-eslint-parser": "9.1.0", 代码来自ruoyi-plus vue-eslint-parser是一个专门用于解析Vue.js单文件组件(.vue文件)的ESLint插件。ESLint是一个用于检查和修复Java…

陪诊软件开发|北京陪诊系统功能介绍

随着互联网技术的不断发展,医疗行业也日新月异。在这个数字化时代,陪诊软件成为了重要的创新工具,为患者和医生提供了全新的医疗服务体验。本文将探讨陪诊软件开发的关键要点及其功能,为您揭示医疗行业的又一面向未来的重要突破口…