Add honme-assistant module
This commit is contained in:
parent
f60a0bc019
commit
e10e91571c
62
modules/home-assistant/default.nix
Normal file
62
modules/home-assistant/default.nix
Normal file
|
@ -0,0 +1,62 @@
|
|||
{
|
||||
lib,
|
||||
config,
|
||||
options,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.pub-solar.home-assistant;
|
||||
in {
|
||||
imports = [
|
||||
./home-assistant.nix
|
||||
./mqtt.nix
|
||||
./zigbee.nix
|
||||
];
|
||||
|
||||
options.pub-solar.home-assistant = {
|
||||
enable = mkOption {
|
||||
description = "Control your home";
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
|
||||
config = options.services.home-assistant.config;
|
||||
extraComponents = options.services.home-assistant.extraComponents;
|
||||
extraPackages = options.services.home-assistant.extraPackages;
|
||||
|
||||
mqtt = {
|
||||
enable = mkOption {
|
||||
description = "use mqtt";
|
||||
type = types.bool;
|
||||
default = true;
|
||||
};
|
||||
|
||||
users = mkOption {
|
||||
description = "mqtt users";
|
||||
# type = types.AttrSet;
|
||||
default = null;
|
||||
};
|
||||
};
|
||||
|
||||
zigbee2mqtt = {
|
||||
enable = mkOption {
|
||||
description = "Enable zigbee2mqtt";
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
|
||||
device = mkOption {
|
||||
description = "Device to connect to zigbee network";
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
};
|
||||
|
||||
adapter = mkOption {
|
||||
description = "Specify zigbee adapter type";
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
21
modules/home-assistant/home-assistant.nix
Normal file
21
modules/home-assistant/home-assistant.nix
Normal file
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.pub-solar.home-assistant;
|
||||
in {
|
||||
config = mkIf cfg.enable {
|
||||
services.home-assistant = {
|
||||
enable = true;
|
||||
openFirewall = true;
|
||||
extraComponents =
|
||||
cfg.extraComponents
|
||||
++ lib.optionals cfg.mqtt.enable ["mqtt"];
|
||||
extraPackages = cfg.extraPackages;
|
||||
config = cfg.config;
|
||||
};
|
||||
};
|
||||
}
|
21
modules/home-assistant/mqtt.nix
Normal file
21
modules/home-assistant/mqtt.nix
Normal file
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
haCfg = config.pub-solar.home-assistant;
|
||||
cfg = config.pub-solar.home-assistant.mqtt;
|
||||
in {
|
||||
config = mkIf (haCfg.enable && cfg.enable) {
|
||||
networking.firewall.allowedTCPPorts = [
|
||||
1883 # mosquitto
|
||||
];
|
||||
|
||||
services.mosquitto = {
|
||||
enable = true;
|
||||
listeners = [{users = cfg.users;}];
|
||||
};
|
||||
};
|
||||
}
|
35
modules/home-assistant/zigbee.nix
Normal file
35
modules/home-assistant/zigbee.nix
Normal file
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
haCfg = config.pub-solar.home-assistant;
|
||||
cfg = config.pub-solar.home-assistant.zigbee2mqtt;
|
||||
in {
|
||||
config = mkIf (haCfg.enable && cfg.enable) {
|
||||
networking.firewall.allowedTCPPorts = [
|
||||
8080 # zigbee2mqtt
|
||||
];
|
||||
|
||||
#services.udev.extraRules = ''KERNEL=="${cfg.device}", OWNER="zigbee2mqtt", GROUP="zigbee2mqtt"'';
|
||||
|
||||
services.zigbee2mqtt = {
|
||||
enable = true;
|
||||
settings = {
|
||||
frontend = true;
|
||||
permit_join = false;
|
||||
homeassistant = true;
|
||||
mqtt = {
|
||||
user = "z2m";
|
||||
password = "!secrets.yaml mqtt_password";
|
||||
};
|
||||
serial = {
|
||||
port = cfg.device;
|
||||
adapter = mkIf (cfg.adapter != null) cfg.adapter;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
Loading…
Reference in a new issue