HomeAssistant——Integration开发

ADD-ON & Integration开发的不同

ADD-ON的开发基于docker
Integration的开发


通过git安装HomeAssistant Core,从而安装HomeAssistant

git介绍

git 是个工具,github是图形界面版,用于版本管理,一个fork就是一条开发线branch,repository、project历史版本,commit是一瞬间的快照

安装HA前的准备工作

git clone https://github.com/q1uTruth/core.git

sudo apt-get install python3-pip python3-dev python3-venv autoconf libssl-dev libxml2-dev libxslt1-dev libjpeg-dev libffi-dev libudev-dev zlib1g-dev pkg-config libavformat-dev libavcodec-dev libavdevice-dev libavutil-dev libswscale-dev libavresample-dev libavfilter-dev ffmpeg
libavresample-dev
apt install python3.9-venv

python -m pip install --upgrade pip==21.0

pip uninstall charset-normalizer
pip install charset-normalizer==2.0.0

sudo apt-get remove --auto-remove python3.5

cd /usr/bin
rm -rf python
ln -s /usr/bin/python3 python

https://blog.csdn.net/qq_44801105/article/details/123506999
apt install -y libpcap0.8

启动Home Assistant

连接同一wifi
cd core
source venv/bin/activate
hass -c config

http://127.0.0.1:8123
hass --open-ui
\wsl$看子系统


debugpy远程调试。 debugpy像ida的远程调试,使用单独的协议

cd core
source venv/bin/activate
python3 -m debugpy --listen localhost:5678 --wait-for-client -m homeassistant -c config

如果采用core的安装方式,自己开发的集成这样放入HA:

要在core/config/目录下新建custom_components,将自己开发的集成放到文件夹里

VSCode中的 继续,单步跳过,单步调试,单步跳出

继续:执行到下一个断点
单步跳过:如函数内部无断点,不进入函数内部
单步调试:进入函数内部
单步跳出:跳出函数内部


动态调试,查看调用堆栈

整体逻辑

init.py中的async_setup_entry函数__init__了FileExplorer类(hass.data[DOMAIN]=FileExplorer),但是还没调用获取路径的函数

获取路径的函数是在点击左侧的插件时调用的,点击时先调用view.py(实现了HomeAssistantView的子类)的post方法。
该方法首先获取dir,dir为/root/core/config。通过前者为 /root/core/config/ 后者为空
_path = hass.config.path(‘’) + ‘/’ + res.get(‘path’, ‘’).lstrip(‘/’)
之后判断是请求的类型,如果是get请求,就调用FileExplorer实例的getDirectory,该函数返回一个字典,字典中每个元素对应一个文件,包含文件name、type和size等信息,然后通过self.json传到前端

加载内容使用的是shaonianzhentan.py中的load_content函数

hass的config用于cfg.get(access.key)

关键代码分析

view.py post方法中

    async def post(self, request):
        hass = request.app["hass"]
        fileExplorer = hass.data[DOMAIN]
        res = await request.json()
        _type = res.get('type', '')
        _url = res.get('url', '')
        _path = hass.config.path('') + '/' +  res.get('path', '').lstrip('/')
        try:
            if _type == 'get':
                # 获取目录和文件
                data = fileExplorer.getDirectory(_path)
                return self.json(data)
            elif _type == 'get-content':
                # 获取文件内容
                data = load_content(_path)
                return self.json({ 'code': 0, 'data': data})

file_explore.py

def getDirectory(self, dir):
    allcontent = listdir(dir)
    dirItem    = [] 

    for item in allcontent:            
        try:
            hashInfo = {}
            path_name = join(dir,item)
            if exists(path_name) == False:
                continue
            # os.stat是将文件的相关属性读出来,然后用stat模块来处理
            listInfo = stat(path_name)
            hashInfo['name'] = item
            hashInfo['url']  = item
            hashInfo['edit'] = datetime.datetime.fromtimestamp(int(listInfo.st_mtime)).strftime('%Y-%m-%d %H:%M:%S')
                        
            if isfile(path_name):
                hashInfo['type'] = 'file'
                hashInfo['size'] = int(listInfo.st_size)
            if isdir(path_name):
                hashInfo['type'] = 'dir'
                hashInfo['size'] = get_dir_size(path_name)
            dirItem.append(hashInfo)
        except Exception as ex:
            print(ex)
	# 按照字典里的name键升序排序
    dirItem.sort(key=lambda x: x['name'], reverse=True)
    return dirItem

shaonianzhentan.py

# 加载内容
def load_content(file_path):
    fp = open(file_path, 'r', encoding='UTF-8')
    content = fp.read()
    fp.close()
    return content

前端VUE开发

大量js代码连接html和css文件,但缺乏正规的组织形式

VUE是一个JavaScript框架

在这里插入图片描述
在这里插入图片描述
想获得设备的信息好像是去实体状态表里看
\wsl$\kali-linux\root\core\config.storage core.entity_registry


Home Assistant Overview

在这里插入图片描述
自动化要有DOMAIN,不仅要理所应当地处理内部,还要对外部的变化进行对应处理

贡献给官方,官方会人工审核

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要将奥克斯空调接入到 Home Assistant 中,可以按照以下步骤操作: 1. 在 Home Assistant 中安装 "SmartIR" 插件,这个插件可以帮助 Home Assistant 与红外设备进行通信。 2. 然后,在 "configuration.yaml" 文件中添加以下代码: ``` smartir: # 设置红外遥控器的制造商和型号 # 你可以在 SmartIR 插件的文档中找到支持的设备列表 # 这个例子中,我们使用了奥克斯空调的型号 "KF-25GW/BMVE2B" # 如果你使用不同的型号,请将它替换为你的型号 # 注意:制造商和型号应该用小写字母 # 注意:空调的型号可能在不同的地方有所不同 # 例如,在一些地区,奥克斯空调的型号是 "KF-25GW/BMVE2" # 如果你不确定你的空调型号,可以在空调遥控器上查找 # 或者在奥克斯的官方网站上查找 # 以下代码中的 "ac" 表示空调,你也可以使用其他名称 ac: # 设置空调的制造商和型号 # 你可以在 SmartIR 插件的文档中找到支持的设备列表 # 这个例子中,我们使用了奥克斯空调的型号 "KF-25GW/BMVE2B" # 如果你使用不同的型号,请将它替换为你的型号 # 注意:制造商和型号应该用小写字母 # 注意:空调的型号可能在不同的地方有所不同 # 例如,在一些地区,奥克斯空调的型号是 "KF-25GW/BMVE2" # 如果你不确定你的空调型号,可以在空调遥控器上查找 # 或者在奥克斯的官方网站上查找 # 以下代码中的 "ac" 表示空调,你也可以使用其他名称 manufacturer: oaks model: "kf-25gw/bmve2b" # 将红外遥控器的代码添加到这里 # 你可以使用 SmartIR 插件提供的 "Learn" 功能来学习代码 # 或者你可以在 SmartIR 插件的文档中找到已知的代码 # 以下代码中的 "power" 和 "mode" 是空调的功能名称 # 你可以在 SmartIR 插件的文档中找到支持的功能列表 codes: power: # 将空调打开的代码添加到这里 # 以下代码中的 "data" 是红外遥控器发送的数据 # 你可以在 SmartIR 插件的文档中找到已知的数据 # 或者你可以使用 SmartIR 插件提供的 "Learn" 功能来学习数据 data: "xxxxxxxxxxxx" mode: # 将空调调节模式的代码添加到这里 # 以下代码中的 "data" 是红外遥控器发送的数据 # 你可以在 SmartIR 插件的文档中找到已知的数据 # 或者你可以使用 SmartIR 插件提供的 "Learn" 功能来学习数据 data: "yyyyyyyyyyyy" ``` 3. 保存 "configuration.yaml" 文件,然后重新启动 Home Assistant。 4. 在 Home Assistant 的 UI 中,选择 "Configuration" -> "Integrations" -> "Add Integration" -> "SmartIR"。 5. 按照提示添加你的空调设备。 6. 现在,你就可以在 Home Assistant 的 UI 中控制你的奥克斯空调了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

q1uTruth

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值