HomeAssistant开源的智能家居docker快速部署实践笔记(CentOS7)
1. SGCC_Electricity 应用介绍
SGCC_Electricity 是一个用于将国家电网(State Grid Corporation of China,简称 SGCC)的电费和用电量数据接入 Home Assistant 的自定义集成组件。通过该应用,用户可以实时追踪家庭用电量情况,并将每日用电量数据保存到数据库中,以便后续查询和分析。
1.1. 核心功能
-
实时数据接入
- 电费与用电量同步:SGCC_Electricity 能够直接从国家电网的官方系统获取用户家庭的实时电费和用电量数据,并同步到 Home Assistant 中。
- 自动化更新:支持设置定时更新频率,确保 Home Assistant 中的数据始终与国家电网的最新数据保持一致。
-
数据存储与历史查询
- 数据库存储:应用支持将每日用电量数据保存到用户指定的数据库中(如 Sqlite3 等),确保历史数据有迹可循。
- 历史数据查询:用户可以通过 Home Assistant 的界面或第三方工具查询历史用电量数据,分析用电趋势,制定节能计划。
-
可视化展示
- Home Assistant 仪表板集成:SGCC_Electricity 提供的数据可以直接在 Home Assistant 的仪表板中展示,用户可以自定义仪表板,以图表、卡片等形式直观地查看用电量情况。
- 多维度分析:支持按日、周、月等时间维度分析用电量,帮助用户更好地了解家庭用电习惯。
1.2. 使用场景
- 家庭节能管理:用户可以通过 SGCC_Electricity 实时了解家庭用电量情况,发现高耗电设备或时段,及时调整用电习惯,实现节能减排。
- 智能家居联动:结合 Home Assistant 的其他功能,用户可以设置自动化规则,如当用电量超过一定阈值时自动关闭非必要电器,或根据用电量情况调整室内温度等。
- 数据分析与报告:对于需要定期提交用电量报告的用户(如企业、学校等),SGCC_Electricity 提供的历史数据查询功能可以大大简化报告制作流程。
1.3. 关于Home Assistant
Home Assistant是一个开源的智能家居自动化系统,其核心特点是将本地控制和隐私保护放在首位。它由全球范围内的爱好者和DIY(自己动手做)热衷者组成的社区推动发展,并且在2024年被列为顶级开源项目之一。以下是关于Home Assistant的简单概述:
- 开源与社区驱动:Home Assistant是一个非营利项目,由Open Home Foundation支持,它不能被出售或收购。该系统的开发依赖于一个活跃且友好的全球社区,成员们热衷于分享他们对智能家居的热情和技术。
- 本地控制与隐私:Home Assistant强调本地控制,意味着用户的数据和操作主要在本地设备上处理,而不是上传到云端,这有助于保护用户隐私。
- 语音助手集成:Home Assistant支持与主流语音助手如Alexa和Google Assistant的集成,允许用户通过语音命令控制家中的智能设备。
- 自定义与扩展性:作为一个开源项目,Home Assistant提供了高度的自定义和扩展性,用户可以根据自己的需求添加功能或集成新的设备。
- 快速且私密的语音助手:Home Assistant还拥有自己的语音助手,它运行在价格实惠的硬件上,提供极快的响应速度,并且支持唤醒词功能,同时保证用户数据的私密性。
- 社区参与:Home Assistant的社区非常活跃,用户可以参与讨论、分享经验,甚至贡献代码来改进系统。
- 最新动态与路线图:用户可以通过Home Assistant的官方网站了解项目的最新进展、发布说明、博客文章以及未来的发展路线图。
- Home Assistant的官方网站是https://www.home-assistant.io/,用户可以在这里找到更多关于系统的详细信息、安装指南、设备集成列表以及社区资源等。

2. 系统快速部署
2.1. 系统概述
Docker镜像部署方式
系统由SGCC_Electricity 应用系统和Home Assistant系统平台构成,其中Home Assistant是本地私有化离线方式。

2.2. CentOS7 离线安装Docker
Docker 离线安装包下载地址https://download.docker.com/linux/centos/7/x86_64/stable/Packages/。
依赖包参考如下文档,在此只安装核心文件。
[root@DeepLearning ha]#rpm -ivh docker-ce-cli-19.03.12-3.el7.x86_64.rpm
[root@DeepLearning ha]#rpm -ivh container-selinux-2.119.1-1.c57a6f9.el7.noarch.rpm
[root@DeepLearning ha]#rpm -ivh containerd.io-1.2.13-3.2.el7.x86_64.rpm
[root@DeepLearning ha]#rpm -ivh docker-ce-18.09.0-3.el7.x86_64.rpm
[root@DeepLearning ha]#rpm -ivh docker-compose-plugin-2.6.0-3.el7.x86_64.rpm
- 启动 Docker 服务
安装完成后,启动 Docker 服务:
[root@DeepLearning ha]#systemctl start docker
- 设置 Docker 开机自启:
[root@DeepLearning ha]#systemctl enable docker
- 检查 Docker 安装
确保 Docker 本身已正确安装:
[root@DeepLearning ha]#docker --version
2.3. 安装Home Assistant镜像
官方安装文档,参考https://www.home-assistant.io/installation/linux。
随着 Docker 命令变得越来越复杂,切换到使用 docker compose 可能会更合适,因为它支持在服务失败或系统重启时自动重启。创建一个 compose.yml 文件(注:实际文件名为 docker-compose.yml)。
创建ha目录,创建docker-compose.yml文件,把如下内容编辑进去。
[root@DeepLearning ha]#mkdir ha
[root@DeepLearning ha]#touch docker-compose.yml
[root@DeepLearning ha]#nano docker-compose.yml
docker compose 安装方式,镜像配置文件。
services:homeassistant:container_name: homeassistantimage: ghcr.io/home-assistant/home-assistant:stable # 中国地区镜像地址:ghcr.nju.edu.cn/home-assistant/home-assistant:stable或者用你自己的 $volumes:- "./config:/config"- "/etc/localtime:/etc/localtime:ro"- "/run/dbus:/run/dbus:ro" # 蓝牙设备需要environment:- SET_CONTAINER_TIMEZONE=true- CONTAINER_TIMEZONE=Asia/Shanghairestart: unless-stoppedprivileged: true
从中国区镜像地址安装镜像。
[root@DeepLearning ha]#docker compose up --build -d
Docker 容器默认运行在独立的网络命名空间中,若未显式映射端口,外部无法访问。设置ports端口,如下配置所示。
[root@DeepLearning ha]#vi docker-compose.yml
services:homeassistant:container_name: homeassistantimage: ghcr.nju.edu.cn/home-assistant/home-assistant:stableports:- "8123:8123" # 关键:将容器的 8123 端口映射到宿主机的 8123 端口volumes:- "./config:/config"- "/etc/localtime:/etc/localtime:ro"- "/run/dbus:/run/dbus:ro"environment:- SET_CONTAINER_TIMEZONE=true- CONTAINER_TIMEZONE=Asia/Shanghairestart: unless-stoppedprivileged: true
停止当前服务,重新启动服务。
docker compose down # 停止当前服务
docker compose up -d # 重新启动服务
2.4. Home Assistant获取永久访问令牌
https://blog.csdn.net/qq_25886111/article/details/106282492

2.5. 安装sgcc_electricity镜像
2.5.1. 克隆仓库
git clone https://github.com/ARC-MX/sgcc_electricity_new.git
# 如果github网络环境不好的话可以使用国内镜像,完全同步的,个人推荐使用国内镜像
# git clone https://gitee.com/ARC-MX/sgcc_electricity_new.git
cd sgcc_electricity_new
2.5.2. 创建环境变量文件
cp example.env .env
vim .env # 参考以下文件编写.env文件
### 以下项都需要修改
## 国网登录信息
# 修改为自己的登录账号
PHONE_NUMBER="xxx"
# 修改为自己的登录密码
PASSWORD="xxxx"
# 排除指定用户ID,如果出现一些不想检测的ID或者有些充电、发电帐号、可以使用这个环境变量,如果有多个就用","分隔,","之间不要有空格
IGNORE_USER_ID=xxxxxxx,xxxxxxx,xxxxxxx# SQLite 数据库配置
# or False 不启用数据库储存每日用电量数据。
ENABLE_DATABASE_STORAGE=True
# 数据库名,默认为homeassistant
DB_NAME="homeassistant.db"
# COLLECTION_NAME默认为electricity_daily_usage_{国网用户id},不支持修改。## homeassistant配置
# 改为你的localhost为你的homeassistant地址
HASS_URL="http://localhost:8123/"
# homeassistant的长期令牌
HASS_TOKEN="eyxxxxx"## selenium运行参数
# 任务开始时间,24小时制,例如"07:00”则为每天早上7点执行,第一次启动程序如果时间晚于早上7点则会立即执行一次,每隔12小时执行一次。
JOB_START_TIME="07:00"
# 每次操作等待时间,推荐设定范围为[2,30],该值表示每次点击网页后所要等待数据加载的时间,如果出现“no such element”诸如此类的错误可适当调大该值,如果硬件性能较好可以适当调小该值
RETRY_WAIT_TIME_OFFSET_UNIT=15## 记录的天数, 仅支持填写 7 或 30
# 国网原本可以记录 30 天,现在不开通智能缴费只能查询 7 天造成错误
DATA_RETENTION_DAYS=7## 余额提醒
# 是否缴费提醒
RECHARGE_NOTIFY=Flase
# 余额
BALANCE=5.0
# pushplus token 如果有多个就用","分隔,","之间不要有空格,单个就不要有","
PUSHPLUS_TOKEN=xxxxxxx,xxxxxxx,xxxxxxx
2.5.3. 运行
我已经优化了镜像环境,将镜像的地址配置为阿里云,如果要使用docker hub的源可以将docker-compose.yml中 image: registry.cn-hangzhou.aliyuncs.com/arcw/sgcc_electricity:latest 改为 arcw/sgcc_electricity:latest
services:sgcc_electricity_app:env_file:- .envimage: registry.cn-hangzhou.aliyuncs.com/arcw/sgcc_electricity:latest # for use docker.io: arcw/sgcc_electricity:latestprivileged: true # 这是后加上的container_name: sgcc_electricitynetwork_mode: "host"environment:- SET_CONTAINER_TIMEZONE=true- CONTAINER_TIMEZONE=Asia/Shanghairestart: unless-stoppedvolumes:- ./:/data # if you want to read homeassistant.db, homeassistant.db is in the container at /data/command: python3 main.pyinit: true
运行获取传感器名称:
docker-compose up -d
docker-compose logs sgcc_electricity_app

3. 实践中所遇到的问题:
3.1. docker: ‘compose’ is not a docker command
docker compose version
docker: ‘compose’ is not a docker command.
Docker Compose 是一个独立的工具,需要单独安装。根据你的 Docker 版本和环境,选择适合的安装方法。
3.2. 运行docker镜像,报权限错:
OpenBLAS blas_thread_init: pthread_create failed for thread 1 of 6: Operation not permitted
解决方案:
增加参数,privileged: true:这会授予容器几乎所有的内核功能,类似于使用 docker run --privileged。
vim docker-compose.yml
services:sgcc_electricity_app:env_file:- .envimage: registry.cn-hangzhou.aliyuncs.com/arcw/sgcc_electricity:latest # for use docker.io: arcw/sgcc_electricity:latestcontainer_name: sgcc_electricitynetwork_mode: "host"environment:- SET_CONTAINER_TIMEZONE=true- CONTAINER_TIMEZONE=Asia/Shanghairestart: unless-stoppedvolumes:- ./:/data # if you want to read homeassistant.db, homeassistant.db is in the container at /data/command: python3 main.pyinit: true
参考:
[1]. https://github.com/ARC-MX/sgcc_electricity_new
[2]. https://www.home-assistant.io/installation/linux
[3].花陌黎呀. Home Assistant获取永久访问令牌. CSDN博客. 2020.05
[4].一枚小爪哇. 【CentOS7离线安装Docker】. CSDN博客. 2021.12
相关文章:
HomeAssistant开源的智能家居docker快速部署实践笔记(CentOS7)
1. SGCC_Electricity 应用介绍 SGCC_Electricity 是一个用于将国家电网(State Grid Corporation of China,简称 SGCC)的电费和用电量数据接入 Home Assistant 的自定义集成组件。通过该应用,用户可以实时追踪家庭用电量情况&…...
JAVA EE(进阶)_HTML
思如云烟,行若磐石。 ——陳長生. ❀主页:陳長生.-CSDN博客❀ 📕上一篇:JAVA EE(进阶)_进阶的开端-CSDN博客 1.HTML HTML(HyperText Mark…...
自定义类、元组、字典和结构体对比——AutoCAD C# 开发中建立不同对象之间的联系
以下是对它们的详细分析和对比: 1. 自定义类(Class) 优势 封装性强:可以定义字段、属性、方法和事件,实现复杂的行为和逻辑。继承与多态:支持继承体系,可通过接口或抽象类实现多态。引用类型…...
鸿蒙北向源码开发: 检查应用接口dts文件api规范性
开源鸿蒙5.0.2对应的api版本是14 5.0社区仓有工具检查接口规范性报告工具: interface/sdk-js/build-tools/api_check_plugin api_check_plugin是什么? 在解释api_check_plugin是什么之前得先知道 应用调用的api接口都是文件名后缀为.d.ts的文件,这些文件内部声明了arkts的a…...
谷歌 NotebookLM 即将推出 Sparks 视频概览:Gemini 与 Deep Research 加持,可生成 1 - 3 分钟 AI 视频
近期,谷歌旗下的 NotebookLM 即将推出一项令人瞩目的新功能 ——Sparks 视频概览。这一功能借助 Gemini 与 Deep Research 的强大能力,能够生成 1 - 3 分钟的 AI 视频,为用户带来全新的内容创作与信息获取体验。 NotebookLM:AI 笔…...
5月19日笔记
BGP的路由聚合 BGP(Border Gateway Protocol,边界网关协议)是互联网中用于在不同自治系统(AS)之间交换路由信息的一种协议。在BGP中,路由聚合是一种技术,它允许网络管理员通过减少路由表中冗余的…...
从基础到高级:网站反爬技术全景解析与第三方工具对比
网站反爬与用户行为检测实战指南:从基础防护到智能识别 在当今数据驱动的互联网时代,网站面临着日益复杂的爬虫攻击和恶意行为威胁。本文将系统性地介绍网站反爬与用户行为检测的技术体系,包括基本原理、防护策略、第三方组件选型以及真实案例分析,帮助开发者构建更加安全…...
Java面试实战:从Spring Boot到分布式缓存的深度探索
Java面试实战:从Spring Boot到分布式缓存的深度探索 场景介绍 在一家著名的互联网大厂,面试官老王正对求职者“水货程序员”明哥进行Java技术面试。明哥带着一点紧张和自信,迎接这场技术“拷问”。 第一轮:基础问题 老王&#…...
职坐标AIoT技能培训课程实战解析
职坐标AIoT技能培训课程以人工智能与物联网技术深度融合为核心,构建了“理论实战行业应用”三位一体的教学体系。课程体系覆盖Python编程基础、传感器数据采集、边缘计算开发、云端服务部署及智能硬件开发全链路,通过分层递进的知识模块帮助学员建立系统…...
pytorch小记(二十):深入解析 PyTorch 的 `torch.randn_like`:原理、参数与实战示例
pytorch小记(二十):深入解析 PyTorch 的 torch.randn_like:原理、参数与实战示例 一、函数签名与参数详解二、torch.randn_like vs torch.randn三、基础示例四、进阶用法与参数覆盖4.1 覆盖数据类型(dtype)…...
小结:网页性能优化
网页性能优化是提升用户体验、减少加载时间和提高资源利用率的关键。以下是针对网页生命周期和事件处理的性能优化技巧,结合代码示例,重点覆盖加载、渲染、事件处理和资源管理等方面。 1. 优化加载阶段 减少关键资源请求: 合并CSS/JS文件&a…...
8-游戏详情制作(Navigation组件)
1.1 需求 使用Navigation实现游戏主详情视图,从瀑布流容器中的游戏项(游戏中心首页-游戏瀑布流列表)点击游戏后进入游戏详情页,从游戏详情页可以返回游戏列表主页。 1.2 界面原型 从瀑布流组件进入: 游戏详情&#…...
Unity引擎源码-物理系统详解-其二
继续我们关于Unity的物理系统的源码阅读,不过这一次我们的目标是PhysX引擎——这个Unity写了一堆脚本来调用API的实际用C写成的底层物理引擎。 Github的地址如下:NVIDIA-Omniverse/PhysX: NVIDIA PhysX SDK (github.com) 下载后发现由三个文件组成&…...
1.3.3 数据共享、汇聚和使用中的安全目标
探索数据共享、汇聚与使用中的安全目标 在当今数字化时代,数据的价值愈发凸显,数据共享、汇聚与使用成为了推动业务发展、促进创新的重要环节。然而,在这一过程中,数据安全至关重要,我们需要明确并保障保密性、完整性…...
【Docker】Docker安装Redis
目录 1.下载镜像 1.1查看下载的镜像 2.创建挂载目录 3.创建容器并启动 4.测试连接 1.下载镜像 根据指令下载镜像文件 docker pull redis#上面指令是下载最新,如需下载指定版本可带版本号 docker pull redis:xxx 响应内容: 1.1查看下载的镜像 下载完…...
Oc语言学习 —— Foundation框架总结
1、NSString类 我们对一个NSString对象赋值的方法是直接将字符串常量赋给对象,例如:NSString *str "hello"; 因为我们的NSString是不可变的,所以我们只能通过一些方法来在我们原来的字符串后面追加或初始化我们的字符串来间接修改…...
react+html2canvas+jspdf将页面导出pdf
主要使用html2canvasjspdf 1.将前端页面导出为pdf 2.处理导出后图表的截断问题 export default function AIReport() {const handleExport async () > {try {// 需要导出的内容idconst element document.querySelector(#AI-REPORT-CONTAINER);if (!element) {message.err…...
LWIP的Socket接口
Socket接口简介 类似于文件操作的一种网络连接接口,通常将其称之为“套接字”。lwIP的Socket接口兼容BSD Socket接口,但只实现完整Socket的部分功能 netconn是对RAW的封装 Socket是对netconn的封装 SOCKET结构体 struct sockaddr { u8_t sa_len; /* 长…...
基于支持向量机(SVM)的P300检测分类
基于支持向量机(SVM)的P300检测分类MATLAB实现,包含数据预处理、特征提取和分类评估流程: %% P300检测分类完整流程(SVM实现) clc; clear; close all;%% 1. 数据加载与模拟生成(实际应用需替换…...
Better Faster Large Language Models via Multi-token Prediction 原理
目录 模型结构: Memory-efficient implementation: 实验: 1. 在大规模模型上效果显著: 2. 在不同类型任务上的效果: 为什么MLP对效果有提升的几点猜测: 1. 并非所有token对生成质量的影响相同 2. 关…...
51c嵌入式※~合集7~Linux
我自己的原文哦~ https://blog.51cto.com/whaosoft/13926843 一、u-boot和bootloader~区别 Bootloader 比Bootloader从字面上来看就是启动加载的意思。用过电脑的都知道,windows开机时会首先加载bios,然后是系统内核,最后启动完毕。那…...
Spring的Validation,这是一套基于注解的权限校验框架
为了保证数据的正确性、完整性,作为一名后端开发工程师,不能仅仅依靠前端来校验数据,还需要对接口请求的参数进行后端的校验。 controller 全局异常处理器 在项目中添加一个全局异常处理器,处理校验异常 RestControllerAdvice p…...
MySQL - 如何突破单库性能瓶颈
数据库服务器硬件优化 我们来看看对数据库所在的服务器是如何进行优化的,服务器是数据库的宿主,其性能直接影响了数据库的性能,所以服务器的优化也是数据库优化的第一步。 数据库服务器通常是从 CPU、内存、磁盘三个角度进行硬件优化的&…...
基于 Vue 和 Node.js 实现图片上传功能:从前端到后端的完整实践
在开发一个社交分享平台时,图片上传功能是核心需求之一。本文将基于一个旅拍社交分享系统,详细解析其图片上传功能的实现原理和技术细节,包括前端处理、后端接收和数据库存储等环节。 1. 前端图片上传实现 在这个项目中,图片上传…...
go封装将所有数字类型转浮点型,可设置保留几位小数
封装转换方法 /* * * 将类型转浮点型,并保留小数 ToFloat(123, 2) ToFloat(3.5254, 0) */ func ToFloat(value interface{}, precision int) (float64, error) {var f float64var err errorswitch v : value.(type) {case float64:f vcase float32:f float64(v)c…...
Rust 学习笔记:关于 Vector 的练习题
Rust 学习笔记:关于 Vector 的练习题 Rust 学习笔记:关于 Vector 的练习题哪个调用会报错?以下代码能否通过编译?若能,输出是?以下代码能否通过编译?若能,输出是?以下代码…...
Linux 系统异常触发后自动重启配置指南
Linux 系统异常触发后自动重启配置指南 一、内核级自动重启配置 适用于内核崩溃(Kernel Panic)、硬件驱动故障等场景,通过 SysRq 和 Watchdog 实现快速恢复。 1. SysRq 强制重启 功能:通过触发内核崩溃或强制重启,绕…...
apisix透传客户端真实IP(real-ip插件)
文章目录 apisix透传客户端真实IP需求和背景apisix real-ip插件为什么需要 trusted_addresses?安全架构的最佳实践 示例场景apisix界面配置 apisix透传客户端真实IP 需求和背景 当 APISIX 前端有其他反向代理(如 Nginx、HAProxy、云厂商的 LBÿ…...
Oracle 数据库的默认隔离级别
Oracle 数据库的默认隔离级别 默认隔离级别:READ COMMITTED Oracle 默认使用 读已提交(READ COMMITTED) 隔离级别,这是大多数OLTP(在线事务处理)系统的标准选择。 官方文档 https://docs.oracle.com/en/database/oracle/oracle-database/19/cncpt/da…...
统计客户端使用情况,使用es存储数据,实现去重以及计数
这篇文件的重点在tshark、filebeat、和logstash。 需求:统计客户使用的客户端版本 实现工具:tshark 1.10.14,filebeat 8.17.0,logstash 8.17.0,elasticsearch 8.17.0,kibana 8.17.0 总体设计:…...
