本帖最后由 bugprogrammer 于 2024-10-16 00:27 编辑
2024.10.16更新,重构部分弹出卡片
B站视频链接
hassbian.zip
(27.66 KB, 下载次数: 62)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
前言:UI设计借鉴了论坛小伙伴消逝的作品,彩平图是jenny QQ群中群友摸鱼小能手代做,在此感谢。UI做完将近两个月了,之前在B站发了视频,今天才有空在论坛发帖。
B站视频链接
一 所需集成(与UI有关)
1 版本(HA里直接添加)
2 和风天气
https://github.com/dscao/qweather
3 browser mod hacs安装
4 chineseholiday
https://github.com/Crazysiri/chineseholiday
5 Home Assistant Supervisor HA直接添加
6 IPMI connector
https://github.com/ateodorescu/home-assistant-ipmi
7 System Monitor HA直接添加
8 Proxmox VE
https://github.com/dougiteixeira/proxmoxve
9 kiosk mode hacs安装
10 owntone HA直接添加
二 所需UI卡片(按照模块分类,重复的不写)
1 主页
picture-elements
button-card
hui-element
bar-card
mini-graph-card
2 设备耗材模块
Battery State Card
3 安防 功耗 系统 三个模块
mushroom
4 搜索模块
search card
5 自动化模块
auto-entities card
6 音乐模块
iframe
mini-media-player
7 服务器监控模块
Flexible Horseshoe Card for Lovelace
8 其他
Decluttering Card
三 着重讲一下需要docker或其他方案对接的服务(其他简单的见附件)
1 日历 (记得替换端口)
x86: docker run -d -p XXXX:80 --name calendar-remark --restart="unless-stopped" bugprogrammer/calendar-remark:latest
arm64v8: docker run -d -p XXXX:80 --name calendar-remark --restart="unless-stopped" bugprogrammer/calendar-remark:latest_arm64v8
2 本地诗词RESTFul (记得替换端口)
自建诗词服务的意义:1 实现自己控制诗词内容,格式,如:七言诗,五言诗等。避免诗句过长而引起UI编写的麻烦。2 没有调用次数限制
首先准备诗词.txt文件,以便docker映射。格式:题目-朝代-作者-正文1-正文2
x86: docker run -d -p xxxx:5000 -v /mnt/诗词.txt:/app/shici.txt --name jinrishici --restart="unless-stopped" bugprogrammer/shici:latest
arm64v8: docker run -d -p xxxx:5000 -v /mnt/诗词.txt:/app/shici.txt --name jinrishici --restart="unless-stopped" bugprogrammer/shici:latest_arm64v8
3 音乐服务owntone(播放nas中的音乐,从AirPlay(2)音箱输出)
---
services:
daapd:
image: lscr.io/linuxserver/daapd:latest
container_name: daapd
network_mode: host
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
volumes:
- /path/to/daapd/data:/config
- /path/to/music:/music
restart: unless-stopped
4 摄像头接入
1 onvif接入(目的是调用service做遮蔽等自动化,延迟较高,不引入UI)
2 搭建zoneminder接入HA(延迟极低,可以存NAS,引入UI)
搭建方法 https://wiki.zoneminder.com/Debi ... h_Zoneminder_1.37.x
5 服务器监控(两台PVE机器)
用proxmox ve以及ipmi的集成获取到绝大部分数据,其他的用自建RESTFul的方式完成(弃用mqtt方案的原因:pve默认的邮件提醒策略我没研究,mqtt每次失败,比如我的ha关机维护,mqtt发不过去,就会给我发邮件,不胜其扰。而且,ha自带的刷新实体服务可以随时刷新RESTFul传感器数据)
RESTFul方案举例讲解,以zfs阵列状态监控为例。注意,系统为基于Debian的Linux发行版,下文提到的三个文件,py文件以及service文件直接抄,sh文件改成自己的,按照需求改。
因为我们要获取pve主机数据,故不用docker,采用直接搭建的方案,也顺便介绍给大家一个极简的RESTFul制作方案。
1 安装python3基础环境
apt install python3 python3-venv python3-pip
2 新建用户,新建并进入python虚拟环境
adduser wbx
su - wbx
mkdir -p flaskapp
cd flaskapp
python3 -m venv virtualenv
source virtualenv/bin/activate
3 安装Flask以及gunicorn
pip3 install flask gunicorn
4 在当前目录新建mymonitor作为项目文件夹
mkdir mymonitor
cd mymonitor
5 在当前目录新建app.py以及mymonitor.sh两个文件
app.py(这个文件不要改,直接用)
import subprocess
from subprocess import Popen, PIPE
from subprocess import check_output
from flask import Flask
def get_shell_script_output_using_communicate():
session = Popen(['./mymonitor.sh'], stdout=PIPE, stderr=PIPE)
stdout, stderr = session.communicate()
if stderr:
raise Exception("Error "+str(stderr))
return stdout.decode('utf-8')
def get_shell_script_output_using_check_output():
stdout = check_output(['./mymonitor.sh']).decode('utf-8')
return stdout
app = Flask(__name__)
@app.route('/',methods=['GET',])
def home():
return get_shell_script_output_using_check_output()
app.run(host="0.0.0.0")
mymonitor.sh (这个文件按照自己的监控需求修改,例如,监控Linux内核版本,即为uname -r)
#!/bin/bash
zfs_free=$(zpool list MyPool | grep MyPool | awk -F' ' '{print $4}' | sed 's/T//g')
zfs_used=$(zpool list MyPool | grep MyPool | awk -F' ' '{print $8}' | sed 's/%//g')
if [ $(zpool status MyPool | grep state | awk -F' ' '{print $NF}') == "ONLINE" ]
then
zfs_status="在线"
else
zfs_status="异常"
fi
echo "{"阵列剩余容量": "剩余: $zfs_free", "阵列已用百分比": "$zfs_used", "阵列状态": "状态: $zfs_status"}"
6 在/etc/systemd/system/路径下新建mymonitor.service文件(不要改,直接抄)
mymonitor.service
[Unit]
Description=mymonitor
After=network.target
[Service]
User=wbx
WorkingDirectory=/home/wbx/flaskapp/mymonitor
ExecStart=/home/wbx/flaskapp/virtualenv/bin/gunicorn -b localhost:5555 app:app
Restart=always
[Install]
WantedBy=multi-user.target
7 收尾
systemctl start mymonitor.service(启动)
systemctl enable mymonitor.service(开机自启动)
至此,RestFul数据获取已经完成,写个sensor即可接入
四 讲一下Decluttering Card卡片的用法
简单的说,这个卡片就是为了减少代码冗余,把需要改的以参数形式代替,使用时将参数换成具体值
例如:
新建模版:
decluttering_templates:
mini_graph_card_template:
card:
type: custom:mini-graph-card
name: '[[name1]]' (参数)
icon: '[[icon]]'
tap_action:
action: none
entities:
- entity: '[[entity1]]'
name: '[[name2]]'
show_state: true
color_thresholds:
- color: '#4dd2ff'
value: 17
- color: '#01a4db'
value: 20
- color: '#fccd68'
value: 26
- color: '#ff1a1a'
value: 30
- entity: '[[entity2]]'
name: '[[name3]]'
show_state: true
color_thresholds:
- color: '#4dd2ff'
value: 35
- color: '#01a4db'
value: 50
- color: '#fccd68'
value: 70
- color: '#ff1a1a'
value: 80
update_interval: 600
show:
icon: true
legend: true
name: true
使用:
- type: custom:decluttering-card
template: mini_graph_card_template
variables:
- name1: 机房 (替换具体值)
- name2: 机房温度
- name3: 机房湿度
- entity1: sensor.0x00158d000ad9ab76_temperature
- entity2: sensor.0x00158d000ad9ab76_humidity
- icon: mdi:home-thermometer-outline
style:
left: 15%
top: 82%
五 附录(见附件)
2024.9.8更新
1 重新上传附件(之前有段重复代码)
2 新增百度网盘完整版附件
链接: https://pan.baidu.com/s/1fiRjYwAlz59k2d0LQMujpA 提取码: bxcv
|