热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用EMQX与Shifu实现设备联动

使用EMQX与Shifu实现设备联动-EMQX是一个在世界范围内非常受欢迎的MQTTBroker。它拥有基于Kubernetes的云原生架构,使得自身能力极为适合当今越来越复杂的物

EMQX是一个在世界范围内非常受欢迎的MQTT Broker。它拥有基于Kubernetes的云原生架构,使得自身能力极为适合当今越来越复杂的物联网场景,让设备消息的传输更为高效。因此,Shifu作为Kubernetes原生的Shifu框架,可以与EMQX完美结合,为EMQX提供智能的多协议设备联动的能力。

下面就让我们看一下EMQX是如何与Shifu一起让设备直接更方便地联动吧。

简介

本文将介绍如何在集群内部署EMQX和Shifu,接入一个以MQTT为通信方式的温度计和一个以RTSP为传输协议的海康威视摄像头,并加入一个应用与Shifu进行交互,使得每次温度计检测到超过37度的体温就会让摄像头拍下一张当前照片。

本文使用的简单架构如下

准备

本文使用了如下服务和工具:

  1. Kubernetes: 1.20.10
  2. kubectl, kubeadm, kubelet: 1.20.10
  3. golang: 1.16.10
  4. docker: 19.03.9
  5. EMQX: 4.1-rc1

步骤

第一步:部署Kubernetes

本步可以参考Kubernetes的官方教程进行部署:
https://kubernetes.io/docs/se...

在部署完成后我们应当看到终端打印出如下信息:

第二步:部署Shifu

注:Shifu尚未开源,请联系Shifu团队获取repo权限

将Shifu的GitHub repo克隆到本地

git clone https://github.com/Edgenesis/shifu.git

然后可以通过下列命令部署Shifu:

kubectl apply -f shifu/k8s/crd/install/shifu_install.yml

部署完成后我们应当看到Shifu的CRD controller已经完成部署:

第三步:部署EMQX

首先需要安装EMQX Operator Controller:

$ curl -f -L "https://github.com/emqx/emqx-operator/releases/download/1.1.6/emqx-operator-controller.yaml" | kubectl apply -f -

接着我们写一个最简单的deployment.yaml:

然后就可以部署一个EMQX了:

kubectl apply –f deployment.yaml

第四步:接入设备

对于温度计,我们只需要调整它的MQTT设置,让其可以向EMQX发布MQTT信息即可。

(如果是集群外的温度计,我们可以通过Kubernetes Service来开放External IP供访问)

对于摄像头,Shifu的repo已经包括一个使用RTSP的海康威视摄像头的配置文件,我们可以轻松更改配置文件中的IP、用户名、密码,将它接入Shifu:

https://github.com/Edgenesis/shifu/tree/main/examples/rtspDeviceShifu/


至此,我们的设备已经连接完毕,下面就可以开始联动了。

最后一步:联动应用

我们简单写一个python应用,用来实现下面的逻辑:

该应用向EMQX订阅temperature-shifu-mqtt的消息,每次消息都只包括一个表示当前温度的数字;如果当前温度大于37度,则操作摄像头拍摄一张照片并保存在本地。

以下是应用代码:

加个capture function封装所有摄像头的动作。接着我们就可以将其部署到集群中,开始监视了:

python3 app.py 10.244.0.33

总结

本文描述了如何让EMQX为Shifu赋予更高效的MQTT Broker能力,同时让Shifu与MQTT合作为设备提供联动能力。在现实的应用场景之中,我们可以使用一个仅需一百余元的的红外温度计+摄像头组合,来代替数千元且表现并不稳定的测温摄像头,在大规模部署的情况下节省巨额成本。

非常感谢您看到了这里,我们期待您的反馈,如果觉得文章写得不错或者有任何建议请毫不犹豫地留言。

本文由博客群发一文多发等运营工具平台 OpenWrite 发布

推荐阅读
  • 在CentOS 7上部署WebRTC网关Janus
    在CentOS 7上部署WebRTC网关Janus ... [详细]
  • kubernetes官网关于nodelocaldns缓存的介绍 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • 基于Node.js的高性能实时消息推送系统通过集成Socket.IO和Express框架,实现了高效的高并发消息转发功能。该系统能够支持大量用户同时在线,并确保消息的实时性和可靠性,适用于需要即时通信的应用场景。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 优化后的标题:PHP分布式高并发秒杀系统设计与实现
    PHPSeckill是一个基于PHP、Lua和Redis构建的高效分布式秒杀系统。该项目利用php_apcu扩展优化性能,实现了高并发环境下的秒杀功能。系统设计充分考虑了分布式架构的可扩展性和稳定性,适用于大规模用户同时访问的场景。项目代码已开源,可在Gitee平台上获取。 ... [详细]
  • Android目录遍历工具 | AppCrawler自动化测试进阶(第二部分):个性化配置详解
    终于迎来了“足不出户也能为社会贡献力量”的时刻,但有追求的测试工程师绝不会让自己的生活变得乏味。与其在家消磨时光,不如利用这段时间深入研究和提升自己的技术能力,特别是对AppCrawler自动化测试工具的个性化配置进行详细探索。这不仅能够提高测试效率,还能为项目带来更多的价值。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • Git命令基础应用指南
    本指南详细介绍了Git命令的基础应用,包括如何使用`git clone`从远程服务器克隆仓库(例如:`git clone [url/path/repository]`)以及如何克隆本地仓库(例如:`git clone [local/path/repository]`)。此外,还提供了常见的Git操作技巧,帮助开发者高效管理代码版本。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 在安装 iOS 开发所需的 CocoaPods 时,用户可能会遇到多种问题。其中一个常见问题是,在执行 `pod setup` 命令后,系统无法连接到 GitHub 以更新 CocoaPods/Specs 仓库。这可能是由于网络连接不稳定、GitHub 服务器暂时不可用或本地配置错误等原因导致。为解决此问题,建议检查网络连接、确保 GitHub API 限制未被触发,并验证本地配置文件是否正确。 ... [详细]
  • 在Kubernetes上部署JupyterHub的步骤和实验依赖
    本文介绍了在Kubernetes上部署JupyterHub的步骤和实验所需的依赖,包括安装Docker和K8s,使用kubeadm进行安装,以及更新下载的镜像等。 ... [详细]
  • 像跟踪分布式服务调用那样跟踪Go函数调用链 | Gopher Daily (2020.12.07) ʕ◔ϖ◔ʔ
    每日一谚:“Acacheisjustamemoryleakyouhaven’tmetyet.”—Mr.RogersGo技术专栏“改善Go语⾔编程质量的50个有效实践” ... [详细]
author-avatar
Becky30712701
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有