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

 找回密码
 立即注册
楼主: evantalk

[智能音箱] 低成本DIY离线语音助手完结【已上传展示视频】

  [复制链接]

0

主题

9

帖子

144

积分

注册会员

Rank: 2

积分
144
金钱
135
HASS币
0
发表于 2022-5-6 00:13:20 来自手机 | 显示全部楼层
上面的代码有点小问题,homeassistant那边的传感器实体值会保留为最后一次发送的内容会导致自动化无法触发,修改后的代码如下:
回复

使用道具 举报

0

主题

9

帖子

144

积分

注册会员

Rank: 2

积分
144
金钱
135
HASS币
0
发表于 2022-5-6 00:14:59 来自手机 | 显示全部楼层
本帖最后由 柳桥风起 于 2022-5-6 16:52 编辑
柳桥风起 发表于 2022-5-6 00:13
上面的代码有点小问题,homeassistant那边的传感器实体值会保留为最后一次发送的内容会导致自动化无法触发 ...
以下为头文件的代码:
#include "esphome.h"

class UartReadLineSensor : public Component, public UARTDevice, public TextSensor
{
public:
    UartReadLineSensor(UARTComponent *parent) : UARTDevice(parent) {}

    void setup() override
    {
        // nothing to do here
    }

    void loop() override
    {
        String str = "";

        while (available())
        {
            char c = read();
            if (c != '\n')
            {
                str = str + c;
            }
            delay(2);
        }

        publish_state(str.c_str());
        str = "";

        delay(100);
    }
};

回复

使用道具 举报

46

主题

641

帖子

4411

积分

元老级技术达人

积分
4411
金钱
3740
HASS币
120
 楼主| 发表于 2022-5-26 23:16:11 | 显示全部楼层
柳桥风起 发表于 2022-5-6 00:14
以下为头文件的代码:
优化一下,多加一个 if(available())判断,防止模块向HA频繁发送空字符的数据
#include "esphome.h"

class UartReadLineSensor : public Component, public UARTDevice, public TextSensor
{
public:
    UartReadLineSensor(UARTComponent *parent) : UARTDevice(parent) {}

    void setup() override
    {
        // nothing to do here
    }

    void loop() override
    {
        if(available())
        {
            String str = "";
            while (available())
            {
                char c = read();
                if (c != '\n')
                {
                    str = str + c;
                }
                delay(2);
            }
            publish_state(str.c_str());        
        }
        
        delay(100);
    }
};
回复

使用道具 举报

23

主题

227

帖子

2776

积分

金牌会员

Rank: 6Rank: 6

积分
2776
金钱
2549
HASS币
0
发表于 2022-6-19 09:46:46 | 显示全部楼层
本帖最后由 water3033 于 2022-6-19 10:51 编辑

想问下这个是啥情况啊,频繁的发送空的状态。已经更新为上面的这个头文件了。HA里面的传感器状态也是空的,要么是不可用。
用串口工具测试了一下,功能正常。但一接SU03T就会发送很多图中的数据。
屏幕截图 2022-06-19 093449.jpg
屏幕截图 2022-06-19 0934491.jpg
回复

使用道具 举报

23

主题

227

帖子

2776

积分

金牌会员

Rank: 6Rank: 6

积分
2776
金钱
2549
HASS币
0
发表于 2022-6-19 09:47:58 | 显示全部楼层
evantalk 发表于 2022-5-26 23:16
优化一下,多加一个 if(available())判断,防止模块向HA频繁发送空字符的数据
...

大神,请教下
回复

使用道具 举报

46

主题

641

帖子

4411

积分

元老级技术达人

积分
4411
金钱
3740
HASS币
120
 楼主| 发表于 2022-6-20 09:16:51 | 显示全部楼层

你用63楼的代码就不会有空数据了
回复

使用道具 举报

23

主题

227

帖子

2776

积分

金牌会员

Rank: 6Rank: 6

积分
2776
金钱
2549
HASS币
0
发表于 2022-6-20 09:38:15 | 显示全部楼层
evantalk 发表于 2022-6-20 09:16
你用63楼的代码就不会有空数据了

用的就是63楼的那个代码   不知道咋回事。我接的是nodemcu的gpio5针脚
回复

使用道具 举报

23

主题

227

帖子

2776

积分

金牌会员

Rank: 6Rank: 6

积分
2776
金钱
2549
HASS币
0
发表于 2022-6-20 11:00:38 | 显示全部楼层
evantalk 发表于 2022-6-20 09:16
你用63楼的代码就不会有空数据了

另外请教大佬,怎么实现HA里面的数据通过8266回传给SU03T啊?我想的是基于sensor的文本变化,HA可以将一些数据或状态,比如说温度数据自动化回传给8266,8266再回传给SU03T。
回复

使用道具 举报

46

主题

641

帖子

4411

积分

元老级技术达人

积分
4411
金钱
3740
HASS币
120
 楼主| 发表于 2022-6-21 09:40:44 | 显示全部楼层
water3033 发表于 2022-6-20 11:00
另外请教大佬,怎么实现HA里面的数据通过8266回传给SU03T啊?我想的是基于sensor的文本变化,HA可以将一 ...

https://www.esphome.io/components/sensor/homeassistant.html
看看这个你就回啦
回复

使用道具 举报

23

主题

227

帖子

2776

积分

金牌会员

Rank: 6Rank: 6

积分
2776
金钱
2549
HASS币
0
发表于 2022-6-22 11:29:25 | 显示全部楼层
evantalk 发表于 2022-6-21 09:40
https://www.esphome.io/components/sensor/homeassistant.html
看看这个你就回啦

感谢,我试验了一下,按照这个设置后,在HA里面会生成一个实体,ESPhome里面也会触发相应的数据变化,但不会转化为十六进制串口输出至SU03T啊,我用串口调试助手接了nodemcu的txpin,即esphome中设置的针脚。但串口助手没有任何接收。麻烦大佬详细说下。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-23 10:18 , Processed in 0.106713 second(s), 31 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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