Homeassistant docker配置
Homeassistant docker配置
【说明】本系列为自用教程,记录以便下次使用
【背景】一台J1900 4G+64G的小主机,安装了OP系统,里面自带了Docker。为实现Homeassistant(简称HA)控制智能家居设备,进行如下配置。
【参考】主要基于GPT生成的教程,并基于自己的测试,进行配置。如有特殊参考,会在文中备注。
【通用账号】:能修改的使用root,不能修改的一般为admin
一、配置Portainer
Portainer 是一个用于 Docker 容器管理的可视化界面工具。方便管理容器和卷。
- 创建 Portainer 数据卷:
docker volume create portainer_data
- 运行 Portainer 容器:
docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
指令的解释:
-d:表示在后台模式运行容器。
-p 9000:9000:这将宿主机的 9000 端口映射到容器的 9000 端口。
–name portainer:为容器指定一个名称。
–restart always:确保容器在任何情况下都会重新启动。
-v /var/run/docker.sock:/var/run/docker.sock:这允许 Portainer 直接访问 Docker API。
-v portainer_data:/data:将前面创建的数据卷挂载到容器内。
完成上述步骤后,你可以通过浏览器访问 http://<你的服务器IP>:9000 来使用 Portainer 界面进行 Docker 容器的管理。
- 配置
访问http://<你的服务器IP>:9000,进行账密配置。
二、配置HA的docker
要在 Docker 中安装 Home Assistant,你可以使用官方的 Home Assistant Docker 映像。
- 创建一个数据卷 (用于存储 Home Assistant 的配置和数据):
docker volume create homeassistant_data
- 运行 Home Assistant 容器:
docker run -d --name="home-assistant" -v homeassistant_data:/config -e "TZ=Asia/Shanghai" --net=host homeassistant/home-assistant:stable
指令的解释:
-d:表示在后台模式运行容器。
–name=“home-assistant”:为容器指定一个名称。
-v homeassistant_data:/config:将前面创建的数据卷挂载到容器内,用于存储 Home Assistant 的配置。
-e “TZ=Asia/Shanghai”:设置时区为上海 (你可以根据需要修改为其他时区)。
–net=host:这允许 Home Assistant 使用宿主机的网络,有助于自动发现和控制本地网络上的设备。
homeassistant/home-assistant:stable:使用稳定版的 Home Assistant 映像。
完成上述步骤后,你应该可以通过浏览器访问 http://<你的服务器IP>:8123 来访问 Home Assistant 的界面,并进行初始设置。
- 配置
访问http://<你的服务器IP>:8123 ,进行账密配置。其他配置在后续说明
三、配置MQTT服务器(Eclipse Mosquitto)
对于 MQTT 服务器,经常推荐使用的是 Eclipse Mosquitto。Mosquitto 是一个开源的 MQTT 代理,非常轻量级且可靠,可以很好地与 Home Assistant 和 Node-RED 配合使用。
额外参考:https://zhuanlan.zhihu.com/p/452896841
- 创建 Mosquitto 数据卷:
docker volume create mosquitto_config
docker volume create mosquitto_data
docker volume create mosquitto_log
- 配置 mosquitto.conf 文件:
在mosquitto_config
下创建文件mosquitto.conf
,特别注意,由于使用docker volume创建,应该是在mosquitto_config的_data文件夹下。实际路径如下:
cd /opt/docker/volumes/mosquitto_config/_data
touch mosquitto.conf
chmod 755 mosquitto.conf # 需要给权限,因为容器可能要读写
nano mosquitto.conf
写入以下内容:
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
allow_anonymous true
listener 1883
- 运行 Mosquitto 容器:
docker run -d \--name mosquitto \--privileged \-p 1883:1883 \-p 9001:9001 \-v mosquitto_config:/mosquitto/config \-v mosquitto_data:/mosquitto/data \-v mosquitto_log:/mosquitto/log \--restart always \eclipse-mosquitto
三、配置MariaDB数据库
Home Assistant 默认使用 SQLite 数据库,但在大型设置或长时间使用后,使用 MariaDB 或 PostgreSQL 可能更高效。
为了长时间运行的稳定,那还是设置吧
- 创建一个持久化存储数据的 Docker 卷:
MariaDB 将其数据存储在 /var/lib/mysql,所以为了确保数据的持久性,我们应该为这个路径创建一个 Docker 卷。
docker volume create mariadb_data
- 启动 MariaDB 容器:
使用以下命令运行 MariaDB 容器,注意替换 password 为您自己的值。
docker run -d \--name mariadb \--privileged \--restart always \-e MYSQL_ROOT_PASSWORD=password \-e MYSQL_DATABASE=homeassistant \-e MYSQL_USER=root \-e MYSQL_PASSWORD=password \-v mariadb_data:/var/lib/mysql \-p 3306:3306 \mariadb:latest
- 配置 Home Assistant 使用 MariaDB:
如之前所述,您需要更新 Home Assistant 的 configuration.yaml 文件,指向这个新的 MariaDB 实例。修改password。
recorder:db_url: mysql://root:password@127.0.0.1/homeassistant?charset=utf8
- 之后重启HA
使用数据库工具DBeaver,连接这个数据库进行查看,可以看到正常。
四、配置Node-RED
Node-RED 是一个基于流的开发工具,用于连接硬件设备、API 和在线服务。
- 创建 Node-RED 数据卷 (用于存储 Node-RED 的配置和数据):
docker volume create nodered_data
- 运行 Node-RED 容器:
docker run -d --name nodered -p 1880:1880 -v nodered_data:/data --user node-red --restart always nodered/node-red:latest
指令的解释:
-d: 表示在后台模式运行容器。
–name nodered: 为容器指定一个名称。
-p 1880:1880: 这将宿主机的 1880 端口映射到容器的 1880 端口。
-v nodered_data:/data: 将前面创建的数据卷挂载到容器内,用于存储 Node-RED 的配置。
–user node-red: 以 node-red 用户身份运行 Node-RED,增加安全性。
–restart always: 确保容器在任何情况下都会重新启动。
nodered/node-red:latest: 使用最新版本的 Node-RED Docker 映像。
完成上述步骤后,你应该可以通过浏览器访问 http://<你的服务器IP>:1880 来访问 Node-RED 的界面并开始构建你的流。
五、配置ESPHome
ESPHome 是一个很好的选择,尤其是如果你计划使用 ESP8266 或 ESP32 微控制器来扩展你的 Home Assistant 设置。
- 创建 ESPHome 数据卷 (用于存储 ESPHome 的配置和数据):
docker volume create esphome_data
- 运行 ESPHome 容器:
docker run -d \--name esphome \-p 6052:6052 \-v esphome_data:/config \--restart always \esphome/esphome
完成上述步骤后,你应该可以通过浏览器访问 http://<你的服务器IP>:6052 来访问 ESPHome 的界面,并开始创建和管理你的设备配置。
六、配置Duplicati
Duplicati 是一个备份软件,用于存储加密的、增量的、压缩的备份到云或本地存储。下面是在 Docker 中安装 Duplicati 的步骤:
- 创建 Duplicati 的数据卷 (用于存储配置和备份数据):
docker volume create duplicati_backups
docker volume create duplicati_config
docker volume create duplicati_data
- 运行 Duplicati 容器:
注意替换/opt/docker/volumes为你需要备份的文件夹。
docker run -d \--name duplicati \-p 8200:8200 \-v duplicati_backups:/backups \-v duplicati_config:/config \-v duplicati_data:/data \-v /opt/docker/volumes:/source:ro \--restart unless-stopped \duplicati/duplicati
- 配置
首先在设置中设置密码。
随后创建备份,使用onedrive或其他进行备份。
七、配置HA的HACS
参考官方:https://hacs.xyz/docs/setup/download/,使用container的教程
- 打开HA的bash,输入如下指令即可
wget -O - https://get.hacs.xyz | bash -
- 打开HA中的高级模式
- 添加集成HACS,并进行相应配置,即可显示HACS内容
八、配置HA的Node-Red
- HACS安装Node-Red
- 添加集成Node-Red
- HA导航栏添加Node-Red
配置configuration.yaml,添加如下内容后重启HA。(顺带把ESPhome的也添加进来)
panel_iframe:nodered:title: 'Node-Red'icon: 'mdi:shuffle-variant'#填写node-red的地址url: 'http://192.168.5.1:1880/'esphome:title: 'ESPHome'icon: 'mdi:car-esp'#填写node-red的地址url: 'http://192.168.5.1:6052/'
九、配置Node-Red
- 在Node-Red中添加节点node-red-contrib-home-assistant-websocket,并安装
- 拖入一个HA节点,随后进行HA的配置,如下:
- 其中的令牌在HA中创建并复制
- 测试一下,获取IP并显示
十、配置MQTT
-
HA添加集成MQTT,并配置如下:
-
进行测试
-
使用MQTT发布一个传感器给HA的教程,请参考另外一个博客。
十一、配置彩云天气
- HACS搜索彩云天气,安装组件和卡片
- 添加集成Colorfuclouds,并进行相应配置
- 在主页中添加卡片,为了高级使用,要学会使用编辑器。
十二、配置mini-graph-card
可以在主页显示好看的时序数据,比如温湿度、流量、等等
-
HACS搜索并安装
-
添加如下卡片:
-
手动添加卡片到资源中
可能会出现卡片无法检索到,需要手动添加。
首先在HACS的该卡片,打开源获得该卡片路径:http://192.168.5.1:8123/hacsfiles/mini-graph-card/mini-graph-card-bundle.js
其次,在配置-仪表盘-资源(右上角选择),添加如下资源。可以看到,这里还包括的彩云天气得到资源
相关文章:

Homeassistant docker配置
Homeassistant docker配置 【说明】本系列为自用教程,记录以便下次使用 【背景】一台J1900 4G64G的小主机,安装了OP系统,里面自带了Docker。为实现Homeassistant(简称HA)控制智能家居设备,进行如下配置。 【…...
Go 深入解析非类型安全指针
一、引言 非类型安全指针(也称为“裸指针”或“原始指针”)在编程领域中一直是一个具有争议和挑战性的主题。它们赋予程序员直接操作计算机内存的能力,为高级性能优化和底层系统交互提供了可能。然而,这种能力往往伴随着高风险&a…...
vue动态绑定class
Vue.js 允许您使用 v-bind 指令或简写的 : 来动态绑定 class 属性。这允许您基于某些条件为元素添加或删除类名,从而实现动态样式控制。以下是一些示例: 动态添加单个类名: <template> <div> <p :class"{ active: isActi…...

UDP网络通信反复发收
package UDP2;import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.Scanner;/* * 完成UDP 通信快速入门 实现发1收1*/ public class Client {public static void main(String[] args) throws Exception{// …...

ip报头和ip报文切片组装问题
在tcp层将数据打包封装向下传递后,网络层将其整个看为一个数据,然后对其数据加网络报头操作,在网络层最具有代表的协议就是ip协议。在这里我们探究ipv4的报头。 ip报头 4位版本:指定ip的版本号,对于ipv4来说就是4。 …...

linux之应用编程回顾总结
gcc编译过程 一个c/c文件要经过预处理、编译、汇编和链接4个阶段,才能变成可执行文件 1.预处理 C/C源文件中,以“#”开头的命令被称为预处理命令,如包含命令“#include”、宏定义命令“#define”、条件编译命令“#if”、“#ifdef”等。预处理…...

nginx配置负载均衡--实战项目(适用于轮询、加权轮询、ip_hash)
👨🎓博主简介 🏅云计算领域优质创作者 🏅华为云开发者社区专家博主 🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…...
Mac GPU MPS常用方法
Requirements Mac computers with Apple silicon or AMD GPUs macOS 12.3 or later Python 3.7 or later Xcode command-line tools: xcode-select --install 判断是否可用 import torch if torch.backends.mps.is_available():mps_device torch.device("mps")x …...

【数据结构】线性表(四)双向链表的各种操作(插入、删除、查找、修改、遍历打印)
目录 线性表的定义及其基本操作(顺序表插入、删除、查找、修改) 四、线性表的链接存储结构 1. 单链表 2. 循环链表 3. 双向链表 a. 双向链表节点结构 b. 创建一个新的节点 c. 在链表末尾插入节点 d. 在指定位置插入节点 e. 删除指定位置的节点…...

数据结构和算法——图
图 有向图 带权图 邻接矩阵 邻接表相较于邻接矩阵,减少了存储空间; 邻接表 参考视频:【尚硅谷】数据结构与算法(Java数据结构与算法)_哔哩哔哩_bilibili...
大数据学习(16)-mapreduce详解
&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦ᾑ…...
Android---OkHttp详解
OkHttp 是一套处理 HTTP 网络请求的依赖库,由 Square 公司设计研发并开源,目前可以在 Java 和 Kotlin 中使用。对于 Android App,OkHttp 现在几乎已经占据了所有的网络请求操作。RetroFit OkHttp 实现网络请求似乎成了一种标配。 因此&…...

向某文件中逐秒追加带序号输入当前时间 fgets fputs fprintf sprintf
//向某文件中逐秒追加带序号输入当前时间 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<string.h> #include <unistd.h> int main(int argc, char const *argv[]) { time_t tv; // time(&tv);//法1:获取秒数 …...

同为科技(TOWE)机架PDU产品在IDC数据中心机房建设中的应用
当今社会互联网发展迅速, 随着带宽需求的提升, 网络的保密性、安全性的要求就越来越迫切。PDU(Power Distribution Unit) 是 PDU具备电源分配和管理功能的电源分配管理器。PDU电源插座是多有设备运行的第一道也是最为密切的部件, PDU的好坏直…...

Elasticsearch学习笔记
1.核心概念 bucket: 一个数据分组(类似于sql group by以后的数据)metric:对bucket执行的某种聚合分析的操作,比如说求平均值,最大值,最小值。一些系列的统计方法(类似 select count(1) MAX MIN AVG) 请…...
Java框架随笔
Maven面试题 Myabtis面试题 文章目录 Maven面试题Myabtis面试题 1、简述Spring Boot的启动流程2、如何理解Bean的生命周期3、MyBatis的主要功能4、MyBatis的组成部分5、MyBatis的动态SQL 1、简述Spring Boot的启动流程 Spring Boot的启动流程可以分为以下几个步骤:…...

自然语言处理基础——词表示
词表示 把自然语言中最基本的语言单元——词转换为机器能够理解的 词表示能完成以下两个能力 词相似度计算 词与词之间语义的关系 近义词&上位词 使用近义词或上位词表示的问题 遗漏差异 遗漏新的释义 带有主观性 数据吸收 需要大量人工构建 One-Hot Representation …...
2023年9月青少年软件编程(C 语言) 等级考试试卷(七级)
青少年软件编程(C/C)7级等级考试真题试卷(2023年9月) 编程题第 1 题 红与黑(2023.9) 有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,…...

鸿鹄工程项目管理系统 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统项目背景
鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工程管…...

apache httpd 换行解析漏洞
原理 Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。 漏洞编号 cve-2017-15715 环境…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...

Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
TCP/IP 网络编程 | 服务端 客户端的封装
设计模式 文章目录 设计模式一、socket.h 接口(interface)二、socket.cpp 实现(implementation)三、server.cpp 使用封装(main 函数)四、client.cpp 使用封装(main 函数)五、退出方法…...
【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析
1. 元器件定义与技术特点 TPS54618CQRTERQ1 是德州仪器(TI)推出的一款 汽车级同步降压转换器(DC-DC开关稳压器),属于高性能电源管理芯片。核心特性包括: 输入电压范围:2.95V–6V,输…...