『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 751|回复: 6

[技术探讨] MQTT的JSON数据解析如何写入到本地文件

[复制链接]

1

主题

8

帖子

91

积分

注册会员

Rank: 2

积分
91
金钱
83
HASS币
0
发表于 2023-6-5 13:50:09 | 显示全部楼层 |阅读模式
对HA使用极为感兴趣,经过几天的摸索,有一个功能想法思路还是不知道如何实现,与各位大佬请教。

我有一个可以Ai识别的摄像头,可以给我推送MQTT数据,我想提取其中的图像数据,在另一个设备上显示图像。我的想法是将MQTT特定字段的数据写入到html文件中,让另一个设备访问这个html,实现识别图像的显示。方法如下:

HA接收到Ai识别设备的MQTT数据:
{
    "data": {
        "event_detect": {
            "detect_list": [
                {
                    "detect_pic": "/9j/6QAEAAD/3QAEH+D/2wBDABQODRQeMkBMDw8S...   ...PmB/9n/////",
                    "event_info": {
                        "target_info": {
                            "target_type": "小三"
                        }
                    }
                }
            ],
            "detect_time": 202305060957
        }
    }
}
通过MQTT JSON解析,获取detect_pic字段的数据,detect_pic是图像的base64编码数据,此时我遇到了第一个问题:
图像的base64数据远超255,无法存入text类型?


若我能够获取这个字段数据后,可以调用特定的python脚本,将这个字段数据写入到smb文件路径开放的html文件里,html文件编写好图片显示的静态代码,python脚本仅仅是实现将这个base64图像数据编入html文件内容去。现在第二个问题:
HA获取到的MQTT字段数据,如何写入到本地文件中?

回复

使用道具 举报

19

主题

478

帖子

2652

积分

金牌会员

Rank: 6Rank: 6

积分
2652
金钱
2174
HASS币
30
发表于 2023-6-5 15:09:39 | 显示全部楼层
https://bbs.hassbian.com/thread-5842-1-1.html
上面这是个在nodered里把平日里存储在内存里的变量,进行本地永久存储的办法,或许可以实现你的需求,你可以参考下,好像过程并不复杂
回复

使用道具 举报

24

主题

623

帖子

2756

积分

金牌会员

Rank: 6Rank: 6

积分
2756
金钱
2123
HASS币
40
发表于 2023-6-5 16:07:04 | 显示全部楼层
请问你用的是什么摄像头啊
回复

使用道具 举报

1

主题

8

帖子

91

积分

注册会员

Rank: 2

积分
91
金钱
83
HASS币
0
 楼主| 发表于 2023-6-5 23:11:47 | 显示全部楼层
sasukebinbin 发表于 2023-6-5 16:07
请问你用的是什么摄像头啊

其实是一个普通摄像头+一个AI识别的盒子,盒子支持HTTP上报侦测的事件内容,通过在docker部署一个http转mqtt的服务,就可以使用MQTT协议推送识别事件信息了,因为不是问题重点,所以概括为AI摄像头
回复

使用道具 举报

1

主题

8

帖子

91

积分

注册会员

Rank: 2

积分
91
金钱
83
HASS币
0
 楼主| 发表于 2023-6-5 23:13:08 | 显示全部楼层
wdmywm3 发表于 2023-6-5 15:09
https://bbs.hassbian.com/thread-5842-1-1.html
上面这是个在nodered里把平日里存储在内存里的变量,进行 ...

好的,感谢,这个文章好像有看到过,我再研究看看
回复

使用道具 举报

24

主题

623

帖子

2756

积分

金牌会员

Rank: 6Rank: 6

积分
2756
金钱
2123
HASS币
40
发表于 2023-6-6 01:09:38 | 显示全部楼层
07etch 发表于 2023-6-5 23:11
其实是一个普通摄像头+一个AI识别的盒子,盒子支持HTTP上报侦测的事件内容,通过在docker部署一个http转m ...

原来是这样.
在NR里,你可以用Base64节点来转换Base64和Buffer. 转成Buffer后,用Write file节点来把buffer写入文件.
在Write file前可以加个function节点来设置文件路径.

msg.filename = '/data/tmp/photo.jpg';
msg.payload = msg.originImage;
return msg;

我的originImage是图片的buffer格式.
然后在Write file节点里填入msg.filename. 就会把msg.payload的内容作为图片保存在msg.filename的路径了.
回复

使用道具 举报

1

主题

8

帖子

91

积分

注册会员

Rank: 2

积分
91
金钱
83
HASS币
0
 楼主| 发表于 2023-6-6 08:37:44 | 显示全部楼层
sasukebinbin 发表于 2023-6-6 01:09
原来是这样.
在NR里,你可以用Base64节点来转换Base64和Buffer. 转成Buffer后,用Write file节点来把buffe ...

好的,NR还没有接入,初步了解而已,没有使用起来,听你们这么回复下来,NR的功能作用很强大,本以为只是方便设计触发联动规则而已,我好好研究下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-27 06:09 , Processed in 0.189076 second(s), 28 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表