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

 找回密码
 立即注册
查看: 11099|回复: 28

[进阶教程] ESPHome 1.18.0版本引入了一个非常方便、非常科学的新特性!

[复制链接]

98

主题

2866

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
11445
金钱
8514
HASS币
460

教程狂人突出贡献

发表于 2021-6-15 22:53:44 | 显示全部楼层 |阅读模式
本帖最后由 XCray 于 2021-6-15 22:56 编辑

前段时间折腾 《esp32自制蓝牙网关,直接接收解密米家蓝牙门锁发出的消息》 的时候,由于水平知识所限,用了一个很笨拙的办法,就是把代码拷贝到 esphome 容器里,每次修改代码都要重新拷贝一遍然后编译测试。。。。。。
如果重启 esphome 容器,自己拷贝进去的内容就会自动消失,当时也觉得这不是一个正儿八经的好办法。

现在静下心来,翻了翻官方文档,发现有一个非常好、非常方便、非常科学的新特性(也许是我火星了?)—— External Components。

利用这个特性,自己或者其他网友开发的非官方组件也可以更加方便的使用了。

具体来说,就是:

1. 在 config 目录中新建一个子目录,比如 mine ,把非官方组件代码拷贝到这个目录里面。
  比如我用的是hassio addon的esphome,配置目录是 config/esphome,那么这个新的目录就是config/esphome/mine

2. 在用到这些非官方组件代码的节点对应的 yaml 文件里,增加这么两行:
external_components:
  - source: mine
其他配置内容不变。

3. 照常编译、上传即可。

再也不用费劲巴拉的到容器里面折腾了!话说我之前怎么辣么呆呢???

~~~~~~~~~~~~~~~~~~
官文介绍:
You can easily import community or personal components using the external components feature. Bundled components can be overridden using this feature.
.....
You can specify a local path containing external components. This is most useful when developing a component or if you want to manually control the origin of the files.

利用这个特性,你可以很轻松地导入社区或者个人开发的组件,如有重名,官方组件将被无视。

你可以指定本地包含外部组件代码的路径,这在开发组件时最有用啦啦啦啦啦!

除了本地,还支持 git !也许git更有用吧?

官文链接

评分

参与人数 1金钱 +20 HASS币 +10 收起 理由
+ 20 + 10 感谢楼主分享!

查看全部评分

回复

使用道具 举报

43

主题

407

帖子

3629

积分

元老级技术达人

积分
3629
金钱
3217
HASS币
136
发表于 2021-6-15 23:31:39 | 显示全部楼层
虽然不是很明白意思,但esphome 的通用文件想共享引用一直想学,可以减少代码编译,也可以减少一处修改处处修改的问题,目前用的packages,但好像不能设置到下一级目录。大佬的方法貌似可以
回复

使用道具 举报

98

主题

2866

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
11445
金钱
8514
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2021-6-16 08:45:07 | 显示全部楼层
hunterfox 发表于 2021-6-15 23:31
虽然不是很明白意思,但esphome 的通用文件想共享引用一直想学,可以减少代码编译,也可以减少一处修改处处 ...

你说的我是真没明白。。。

可以减少代码编译?——不知道啥意思

esphome也支持packages吗?
回复

使用道具 举报

43

主题

407

帖子

3629

积分

元老级技术达人

积分
3629
金钱
3217
HASS币
136
发表于 2021-6-16 08:51:04 | 显示全部楼层
XCray 发表于 2021-6-16 08:45
你说的我是真没明白。。。

可以减少代码编译?——不知道啥意思

我说的不准确,不是减少代码编译。编译肯定全文件编译的。 主要是代码模块化管理


2.png

回复

使用道具 举报

98

主题

2866

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
11445
金钱
8514
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2021-6-16 09:57:50 | 显示全部楼层
hunterfox 发表于 2021-6-16 08:51
我说的不准确,不是减少代码编译。编译肯定全文件编译的。 主要是代码模块化管理

学习了!

可能是因为我玩的节点太少(只有3~4个)、时间太短,从来没想过使用packages简化配置文件编辑。。。
回复

使用道具 举报

46

主题

641

帖子

4394

积分

元老级技术达人

积分
4394
金钱
3723
HASS币
120
发表于 2021-6-16 10:53:54 | 显示全部楼层
我是win10上装了个esphome,没有你这个烦恼
回复

使用道具 举报

43

主题

407

帖子

3629

积分

元老级技术达人

积分
3629
金钱
3217
HASS币
136
发表于 2021-6-16 11:07:19 来自手机 | 显示全部楼层
我接点配的比较多,通用部分全部用packages 了,代码简洁了不少,主要好批量修改
回复

使用道具 举报

98

主题

2866

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
11445
金钱
8514
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2021-6-16 11:23:15 | 显示全部楼层
hunterfox 发表于 2021-6-16 11:07
我接点配的比较多,通用部分全部用packages 了,代码简洁了不少,主要好批量修改 ...

嗯,清楚了。你说的“代码”实际上是配置文件,yaml;我说的“代码”是c++的功能实现组件。二者有关系但不是一个概念。

配置文件通过packages实现高效管理,确实是一个好办法,尤其是节点多了。
在官方组件之外开发的c++功能代码,通过external components导入,也是便于管理和使用的一个很好的特性。
回复

使用道具 举报

43

主题

407

帖子

3629

积分

元老级技术达人

积分
3629
金钱
3217
HASS币
136
发表于 2021-6-16 11:36:49 来自手机 | 显示全部楼层
嗯嗯,是配置,各种组件配置引用,c++组件高端玩法,只能前人栽树 后人乘凉了。一个c++的uart组件搞的我半死不活的
回复

使用道具 举报

2

主题

239

帖子

817

积分

高级会员

Rank: 4

积分
817
金钱
573
HASS币
20
发表于 2021-6-18 15:15:08 | 显示全部楼层
米家设备,好像可以用Xiaomi MIoT集成直接从云端拿到,或者,可以试试看miio方案,前提是,有蓝牙网关
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-28 15:10 , Processed in 0.055882 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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