Clean up the smart devices that are no longer in use Add DaikinOne HA component to test if it works
149 lines
4.0 KiB
Nix
Executable File
149 lines
4.0 KiB
Nix
Executable File
{ pkgs, ... }:
|
|
|
|
{
|
|
virtualisation.podman.enable = true;
|
|
|
|
services.home-assistant = {
|
|
enable = true;
|
|
configDir = "/var/lib/hass";
|
|
extraComponents = [
|
|
"accuweather"
|
|
"calendar"
|
|
"cast"
|
|
"daikin"
|
|
"ipp"
|
|
"lovelace"
|
|
"met"
|
|
"nest"
|
|
"nextcloud"
|
|
"ping"
|
|
"piper"
|
|
"radio_browser"
|
|
"roborock"
|
|
"smart_meter_texas"
|
|
"speedtestdotnet"
|
|
"solaredge"
|
|
"whisper"
|
|
"wyoming"
|
|
"zwave_js"
|
|
];
|
|
customComponents = with pkgs.home-assistant-custom-components; [
|
|
pkgs.python3.pkgs.daikinone
|
|
nest_protect
|
|
smartthinq-sensors
|
|
];
|
|
|
|
config = {
|
|
default_config = { };
|
|
tts = [ { platform = "google_translate"; } ];
|
|
http = {
|
|
use_x_forwarded_for = true;
|
|
trusted_proxies = [
|
|
"127.0.0.1"
|
|
"::1"
|
|
];
|
|
server_host = "127.0.0.1";
|
|
};
|
|
#"automation manual" = *nix config here* and so on
|
|
"automation ui" = "!include automations.yaml";
|
|
"script ui" = "!include scripts.yaml";
|
|
"scene ui" = "!include scenes.yaml";
|
|
};
|
|
};
|
|
|
|
# Helps with Voice stuff for Home Assistant
|
|
services.wyoming = {
|
|
faster-whisper.servers = {
|
|
greg = {
|
|
enable = true;
|
|
beamSize = 1; # wut?
|
|
device = "auto"; # Could be CPU or CUDA
|
|
language = "en";
|
|
model = "base-int8";
|
|
uri = "tcp://0.0.0.0:13415";
|
|
};
|
|
};
|
|
piper.servers.greg = {
|
|
enable = true;
|
|
uri = "tcp://0.0.0.0:13416";
|
|
voice = "en_US-amy-medium";
|
|
};
|
|
};
|
|
|
|
# Although NixOS has a package for Home Assistant, it is not kept as up to date as the container and the upstream
|
|
# is very vocal about only supporting their own container or the HAOS deployments. So we deploy the container here
|
|
# and avoid any potential messes from that
|
|
virtualisation.oci-containers = {
|
|
backend = "podman";
|
|
|
|
# I have ZWave devices. The easiest way to connect to them is the zwavejs2mqtt service running, so we spin up
|
|
# its container and map the ZWave device into it
|
|
containers.zwave = {
|
|
autoStart = false; # We will try to start it with udev.extraRules listed below, as this option starts it too quickly
|
|
image = "zwavejs/zwave-js-ui:latest";
|
|
ports = [
|
|
"8091:8091"
|
|
"3000:3000"
|
|
];
|
|
volumes = [ "/var/lib/zwave:/usr/src/app/store" ];
|
|
extraOptions = [
|
|
"--device"
|
|
"/dev/serial/by-id/usb-0658_0200-if00:/dev/zwave"
|
|
"--pull=newer"
|
|
];
|
|
environment = {
|
|
TZ = "America/Chicago";
|
|
CONSOLE_OUTPUT = "true";
|
|
};
|
|
};
|
|
};
|
|
|
|
# Both of the above container need storage for their configuration and devices, but it is not created correctly by
|
|
# the container. So we add the creation of /var/lib/{zwave,hass} to the systemd Unit files
|
|
systemd.services = {
|
|
"podman-zwave" = {
|
|
after = [
|
|
"sys-devices-pci0000:00-0000:00:1e.0-0000:02:1b.0-usb2-2\\x2d1-2\\x2d1:1.0-tty-ttyACM0.device"
|
|
];
|
|
wantedBy = [
|
|
"sys-devices-pci0000:00-0000:00:1e.0-0000:02:1b.0-usb2-2\\x2d1-2\\x2d1:1.0-tty-ttyACM0.device"
|
|
];
|
|
serviceConfig = {
|
|
StateDirectory = "zwave";
|
|
StateDirectoryMode = pkgs.lib.mkForce "0777";
|
|
};
|
|
};
|
|
};
|
|
|
|
services.udev.extraRules = ''
|
|
SUBSYSTEM=="tty", KERNEL=="ttyACM0", TAG+="systemd"
|
|
'';
|
|
|
|
greg.proxies = {
|
|
"smart.home".target = "http://127.0.0.1:8123/";
|
|
"smart.thehellings.lan".target = "http://127.0.0.1:8123/";
|
|
"zwave.home".target = "http://127.0.0.1:8091/";
|
|
};
|
|
|
|
# Ensure that both ports are up and running. We keep 8123 directly open because we are on the LAN and sometimes want to connect
|
|
# directly for troubleshooting Nginx configuration
|
|
networking.firewall = {
|
|
allowedTCPPorts = [
|
|
80
|
|
443
|
|
];
|
|
};
|
|
|
|
greg.backup.jobs.zwave = {
|
|
src = "/var/lib/zwave";
|
|
dest = "zwave";
|
|
id = "zwave-rsnap";
|
|
};
|
|
|
|
greg.backup.jobs.hass-backup = {
|
|
src = "/var/lib/hass";
|
|
dest = "hass";
|
|
id = "hass-rsnap";
|
|
};
|
|
}
|