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