智能家居物联网平台

智能家居物联网平台

智能家居物联网平台

基于微服务+微信小程序实现的物联网平台,目前处于软件实现阶段:模拟了智能灯和温湿度感应器的使用状态,后续打算基于STM32制作硬件并接入,接入硬件后会将微信小程序改成Android版本

Gitee地址:仓库链接

技术栈

后端

  • JDK:21
  • Spring Boot:3.2.5
  • Spring Cloud:2023.0.1
  • Spring Cloud Alibaba:2023.0.1.0
  • Spring Data JPA
  • Nacos:2.5.2
  • MQTT
  • WebSocket

数据库

  • MySQL:8.0
  • Redis:6.2.x
  • Influxdb:2.8.0

前端

  • Uniapp
  • Vue2

部署流程

需要先确保技术栈中所有的依赖均已安装,MQTT这里使用的中间件是EMQX(5.8.9),测试MQTT连接使用的是MQTTX。推荐将中间件安装在vmware中,我使用的Linux版本是20.04yml文件中部分配置使用的是192.168.242.137而非本机地址,根据自己的配置进行替换

准备工作

  • 安装MySQLRedis,替换账号密码
  • 安装MQTT中间件EMQX,并新建用户分配权限,将用户名和密码在yml中对应位置进行替换
  • 安装Influxdb,获取自己配置的用户名和密码进行替换,注意要先创建bucketdevice_report
  • 安装Nacos用于服务注册

1. 克隆仓库代码

  • 后端使用IDEA软件
  • 仓库代码中iot_miniprogram.zip为前端压缩包,解压后使用uniapp打开

2. MySQL中运行iot.sql文件

3. 启动所有服务

  • gateway-service
  • user-service
  • device-service

4. 在uniapp中替换manifest.json文件中微信小程序的AppID并运行到微信小程序

5. 查看MySQL中用户表手机号,使用手机号进行登录,登录成功后可以开始体验

项目中所有的控制器controller、入参和回参都带注释,可以查看注释了解对应功能

MQTT主题说明

为了及时更新设备联网状态,使用了EMQX自带的主题上下线订阅。在yml文件中,预置订阅的主题$SYS/brokers/+/clients/#可以在设备上下线后推送通知。

**所有的设备在与MQTT建立连接时,设置的client_id为数据库中iot_device**表中的device_sn字段,这样服务器收到消息时可以通过sn(设备序列号)来标识每一个设备

MQTT所有消息体均使用JSON格式

WebSocket连接说明

device-service服务中的WebsocketConfig文件中,可以看到建立连接时会校验token参数,由于token只有在登录成功后才会返回给用户,因此没有携带此参数的连接会被拒绝。这个权限校验方式可能还不太完善,后续会考虑使用其他校验方式

学习说明

本项目目前比较简单,微服务中只拆分了网关服务,用户服务和设备服务

  • 网关服务主要用于负载均衡,Nacos很多特性比如统一配置管理和自动刷新还没有使用;
  • 用户服务权限校验也只是引入了JWT,后续打算使用Spring Security做权限校验
  • 设备服务中Influxdb的定时同步还可以继续优化,目前是逻辑是每2分钟同步一次温湿度消息,可能延迟会有点严重,再想想怎么同步好一点
  • MQTT的监听消息逻辑中,会考虑使用消息队列RabbitMQ或者异步处理,因为在实际操作中,出现过一个BUG,监听消息处理过程中,如果处理时间过长会影响MQTT的心跳,导致MQTT发生重连
  • 最重要一点:目前智能灯的指令下发没有做确认操作,可能会出现指令下发了,但是硬件没有接收,这会导致数据库状态不对,需要对已下发的指令做短时间监听,硬件回传状态后再进行数据库的更改

在这里插入图片描述

Read more

Web 可访问性最佳实践:构建人人可用的前端界面

Web 可访问性最佳实践:构建人人可用的前端界面 代码如诗,包容如画。让我们用可访问性的理念,构建出人人都能使用的前端界面。 什么是 Web 可访问性? Web 可访问性(Web Accessibility)是指网站、工具和技术能够被所有人使用,包括那些有 disabilities 的人。这意味着无论用户的能力如何,他们都应该能够感知、理解、导航和与 Web 内容交互。 为什么 Web 可访问性很重要? 1. 法律要求:许多国家和地区都有法律法规要求网站必须具有可访问性。 2. 扩大用户群体:约 15% 的世界人口生活有某种形式的 disability,可访问性可以让更多人使用你的网站。 3. SEO 优化:搜索引擎爬虫依赖于可访问性良好的网站结构。 4. 更好的用户体验:可访问性改进通常会使所有用户受益,而不仅仅是那些有 disabilities 的用户。 5. 社会责任:

亲测Hunyuan-MT-7B-WEBUI,网页一键翻译实测效果惊艳

亲测Hunyuan-MT-7B-WEBUI,网页一键翻译实测效果惊艳 最近在做一批跨境内容本地化项目,需要频繁处理日语、西班牙语、维吾尔语和藏语的政策文档与产品说明。试过七八个在线翻译工具和本地部署模型,不是术语翻不准,就是小语种支持弱,要么就是部署卡在CUDA版本上三天没跑通。直到同事甩来一个链接:“试试这个——腾讯混元开源的Hunyuan-MT-7B-WEBUI,不用装环境,点一下就开用。” 我半信半疑点进去,5分钟内完成部署,浏览器里输入三行维吾尔语,回车,0.8秒后跳出地道汉语译文,连“乡村振兴”“基层治理”这类政策热词都译得准确自然。那一刻真有点惊讶:原来翻译这件事,真的可以做到又快、又准、又省心。 这不是概念演示,也不是实验室Demo——这是我连续两周每天真实使用的工具。下面不讲参数、不列公式,只说你最关心的三件事:它到底能不能用?好用在哪?哪些场景下值得你立刻部署? 1. 部署过程:从下载到可用,全程不到4分钟 很多人被“大模型”三个字吓退,以为又要配环境、调依赖、查报错。但Hunyuan-MT-7B-WEBUI的设计哲学很朴素:

前端监控:别让你的应用在黑暗中运行

前端监控:别让你的应用在黑暗中运行 毒舌时刻 这应用运行得跟幽灵似的,出了问题都不知道。 各位前端同行,咱们今天聊聊前端监控。别告诉我你还在等用户反馈问题,那感觉就像在没有监控的仓库里放贵重物品——能放,但丢了都不知道。 为什么你需要前端监控 最近看到一个项目,用户反映页面经常崩溃,但开发团队根本不知道问题出在哪里。我就想问:你是在做应用还是在做猜谜游戏? 反面教材 // 反面教材:没有监控 function App() { const [data, setData] = React.useState([]); useEffect(() => { async function fetchData() { try { const response = await fetch('/api/data'); const result = await response.json(); setData(result); } catch (error)

他到底喜欢我吗?赛博塔罗Java+前端实现,一键解答!

他到底喜欢我吗?赛博塔罗Java+前端实现,一键解答!

个人主页-爱因斯晨 文章专栏-赛博算命 原来我们在已往的赛博算命系列文章中的源码已经传到我的Github仓库中,有兴趣的家人们可以自己运行查看。 Github 源码中的一些不足,还恳请业界大佬们批评指正! 本文章的源码已经打包至资源绑定,仓库中也同步更新。 一、引言 在数字化浪潮席卷全球的当下,传统塔罗牌占卜这一古老智慧也迎来了新的表达形式 ——“赛博塔罗”。本文档旨在深入剖析塔罗牌的核心原理,并详细介绍如何利用 Java 语言实现一个简易的塔罗牌预测程序,展现传统神秘学与现代编程技术的融合。 二、塔罗牌原理 (一)集体潜意识与原型理论 瑞士心理学家卡尔・荣格提出的 “集体潜意识” 理论,为塔罗牌的运作提供了重要的心理学支撑。该理论认为,人类拥有超越个体经验的共同心理结构,其中蕴含着 “原型”—— 即普遍存在的、象征性的模式或形象。 塔罗牌的 22 张大阿尔卡那牌恰好与这些基本原型相对应。例如,“愚人” 代表着天真与新开始的原型,“魔术师” 象征着创造力与潜能的原型,“女祭司” 则体现了智慧与直觉的原型。这些原型是全人类共通的心理元素,这也正是不同文化背景的人都能