ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

小智 AI 还能这么玩?接入萤石摄像头,告警抓图一气呵成!

小智 AI 还能这么玩?接入萤石摄像头,告警抓图一气呵成! 本人玩各种AI硬件、具身智能、AI算法、模型训练、机器视觉等。欢迎合作小智AI接入萤石云摄像头MQTT 实时告警 图片预览。让小智AI/ESP32 设备秒变智能安防终端——门口摄像头检测到有人出现时屏幕自动弹出告警消息、播放提示音还能下载并显示现场抓拍图片。整体架构萤石摄像头(门铃) │ ├─→ 萤石开放平台 ←─ 注册设备、开启告警推送 │ │ │ ├─→ 告警事件推送 → 消息回调服务 → 发布到 MQTT Broker │ │ │ │ │ ├─→ 飞书机器人 ←─ 手机端实时查看 │ │ │ │ │ └─→ 小智AI(ESP32) ←─ MQTT 订阅 │ │ │ │ │ ├─ 屏幕显示告警气泡 │ │ ├─ 播放提示音 │ │ └─ 下载并显示抓拍图片步骤一门铃接入萤石开放平台1. 注册萤石开放平台账号访问 萤石开放平台注册并登录开发者账号。2. 添加设备在萤石 APP 中确保门铃已联网并正常工作在开放平台「我的资源」中添加设备或扫描设备二维码完成绑定3. 创建应用获取 AppKey / AppSecret进入「我的应用」→ 创建应用获取AppKey和AppSecret后续 API 调用需要用到4. 开启告警推送在「告警服务」中开启设备的移动侦测/门铃事件推送配置告警推送地址为你的服务器回调 URL步骤二部署消息回调服务萤石开放平台会将告警事件以 HTTP POST 方式推送到你的服务器需要部署一个回调服务来接收并转发。服务功能萤石告警推送 → 回调服务解析 → 提取消息文本和图片URL │ ├─→ 发布到 MQTT Broker (qiongmu/mqtt/ys) └─→ 推送飞书机器人 webhook部署方式服务器任意 Linux 服务器阿里云、腾讯云等HTTPS萤石回调要求 HTTPS可用 Nginx 反向代理 Let’s Encrypt 证书保活使用systemd或supervisor管理进程步骤三接入飞书机器人1. 创建飞书自定义机器人打开飞书群聊 → 设置 → 群机器人 → 添加机器人 → 自定义机器人获取 Webhook 地址2. 配置回调服务在上面的回调服务中配置FEISHU_WEBHOOK告警消息会同时推送到飞书 门口有人出现 抓拍: https://i.ys7.com/streamer/alarm/url/get?fileId...3. 效果手机端飞书 APP 收到群消息推送随时查看带图片点击链接可查看抓拍图片可配合飞书自动化设置特别关注、DND 时段等步骤四小智接入 MQTT 实现告警设备端实现在小智AIESP32-S3上运行MqttListener独立订阅 MQTT 告警主题// mqtt_listener.h - 独立 MQTT 客户端classMqttListener{// TLS 连接 emqxsl.cn:8883// 订阅 qiongmu/mqtt/ysstaticMqttListenerGetInstance();voidInitialize();voidStart();};在Application::Initialize()中初始化automqtt_listenerMqttListener::GetInstance();mqtt_listener.SetMessageCallback([this](conststd::stringtopic,conststd::stringpayload){OnMqttMessage(payload);});mqtt_listener.Initialize();// 网络激活后启动mqtt_listener.Start();消息处理MQTT 消息通过事件队列进入主事件循环MQTT 收到 → 入队 → MAIN_EVENT_MQTT_MESSAGE ↓ HandleMqttMessageEvent() ↓ ├── 解析 JSON → msg pic ├── SetChatMessage(system, msg) → 显示气泡消息 ├── PlaySound(OGG_SUCCESS) → 播放提示音3次 └── xTaskCreate() → 后台下载图片图片下载与显示完整流程HTTP GET → 跟随 302 重定向(最多3次) → 下载 JPEG ↓ jpeg_to_image() → 解码为 RGB565 ↓ 最近邻缩放至 320×320保持宽高比 ↓ LvglAllocatedImage → SetPreviewImage() 显示重定向处理萤石云图片 URL 返回 302 跳转到 AWS S3while(redirect_count3){autohttpBoard::GetInstance().GetNetwork()-CreateHttp(3);http-SetKeepAlive(false);// 禁用连接复用http-Open(GET,current_url);if(status_code302){std::string locationhttp-GetResponseHeader(Location);http-Close();current_urllocation;redirect_count;vTaskDelay(pdMS_TO_TICKS(200));continue;}// 下载并解码...}JPEG 解码 缩放使用 ESP-IDF 自带的 JPEG 解码器优先硬件加速解码后缩放到 320×320// JPEG 解码uint8_t*rgb565nullptr;esp_err_t errjpeg_to_image(jpeg_data,content_length,rgb565,rgb_len,img_width,img_height,img_stride);// 缩放到 320×320保持宽高比constintMAX_DIM320;if(img_widthMAX_DIM||img_heightMAX_DIM){intscale_w(img_widthimg_height)?MAX_DIM:(MAX_DIM*img_width/img_height);intscale_h(img_heightimg_width)?MAX_DIM:(MAX_DIM*img_height/img_width);uint8_t*scaledheap_caps_malloc(scale_w*scale_h*2,MALLOC_CAP_SPIRAM);downscale_rgb565((uint16_t*)rgb565,img_width,img_height,scaled,scale_w,scale_h);heap_caps_free(rgb565);// 立即释放原始大图}内存对比原始分辨率解码后缩放后1920×1080~4MB~200KB1280×720~1.8MB~112KB640×480~600KB~150KB内存保护ESP32 内存有限下载前检查可用堆大小if(esp_get_free_heap_size()80*1024){ESP_LOGW(TAG,Skipping image download, low memory (%zu KB),esp_get_free_heap_size()/1024);}else{xTaskCreate(...,mqtt_img,4096*2,...);}消息气泡持久化移除了所有SetChatMessage(system, )空内容调用让 MQTT 消息在聊天区永久显示直到消息数量超过 MAX_MESSAGES默认 20 条自动挤掉最旧的新对话开始时清除最终效果终端效果小智AI屏幕弹出告警气泡 提示音 抓拍图片飞书APP随时随地查看门铃动态后续计划图片点击放大全屏查看支持更多图片格式PNG/WebPMQTT 告警消息数量统计语音播报告警内容飞书机器人交互式按钮静音时段、确认已处理等项目xiaozhi-esp32作者qiongmu.tech
返回列表