aboutsummaryrefslogtreecommitdiff
path: root/nixos/modules/home-assistant.nix
diff options
context:
space:
mode:
authorKarel Kočí <cynerd@email.cz>2022-12-30 21:13:56 +0100
committerKarel Kočí <cynerd@email.cz>2022-12-30 21:13:56 +0100
commitef25d69c4d273765afd2ef86783e42bc98ca4b3d (patch)
tree13882154c7bdb305473aa7e9191917d31ec1c9f6 /nixos/modules/home-assistant.nix
parente09a2f8a23161e52859754e5cf874ec4099a2008 (diff)
downloadnixos-personal-ef25d69c4d273765afd2ef86783e42bc98ca4b3d.tar.gz
nixos-personal-ef25d69c4d273765afd2ef86783e42bc98ca4b3d.tar.bz2
nixos-personal-ef25d69c4d273765afd2ef86783e42bc98ca4b3d.zip
nixos: move home assistant around
Diffstat (limited to 'nixos/modules/home-assistant.nix')
-rw-r--r--nixos/modules/home-assistant.nix175
1 files changed, 175 insertions, 0 deletions
diff --git a/nixos/modules/home-assistant.nix b/nixos/modules/home-assistant.nix
new file mode 100644
index 0000000..80c76b3
--- /dev/null
+++ b/nixos/modules/home-assistant.nix
@@ -0,0 +1,175 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+ cnf = config.cynerd.home-assistant;
+
+in {
+ options = {
+ cynerd.home-assistant = mkEnableOption "Enable Home Assistant and Bigclown";
+ };
+
+ config = mkIf cnf {
+
+ services.mosquitto = {
+ enable = true;
+ listeners = [
+ {
+ users = {
+ cynerd = {
+ acl = ["readwrite #"];
+ passwordFile = "/run/secrets/mosquitto.cynerd.pass";
+ };
+ bigclown = {
+ acl = ["readwrite bigclown/#"];
+ passwordFile = "/run/secrets/mosquitto.bigclown.pass";
+ };
+ homeassistant = {
+ acl = [
+ "readwrite bigclown/#"
+ "readwrite homeassistant/#"
+ ];
+ passwordFile = "/run/secrets/mosquitto.homeassistant.pass";
+ };
+ };
+ }
+ ];
+ };
+ networking.firewall.allowedTCPPorts = [1883];
+
+ services.bigclown = {
+ gateway = {
+ enable = true;
+ device = "/dev/ttyUSB0";
+ environmentFile = "/run/secrets/bigclown.env";
+ baseTopicPrefix = "bigclown/";
+ mqtt = {
+ username = "bigclown";
+ password = "@PASS_MQTT@";
+ };
+ };
+ mqtt2influxdb = {
+ enable = true;
+ environmentFile = "/run/secrets/bigclown.env";
+ mqtt = {
+ username = "bigclown";
+ password = "@PASS_MQTT@";
+ };
+ influxdb = {
+ host = "cynerd.cz";
+ database = "bigclown";
+ username = "bigclown";
+ password = "@PASS_INFLUXDB@";
+ ssl = true;
+ verify_ssl = false;
+ };
+ points = [
+ {
+ measurement = "temperature";
+ topic = "bigclown/node/+/thermometer/+/temperature";
+ fields.value = "$.payload";
+ tags = {
+ id = "$.topic[2]";
+ channel = "$.topic[4]";
+ };
+ }
+ {
+ measurement = "relative-humidity";
+ topic = "bigclown/node/+/hygrometer/+/relative-humidity";
+ fields.value = "$.payload";
+ tags = {
+ id = "$.topic[2]";
+ channel = "$.topic[4]";
+ };
+ }
+ {
+ measurement = "illuminance";
+ topic = "bigclown/node/+/lux-meter/0:0/illuminance";
+ fields.value = "$.payload";
+ tags = {
+ id = "$.topic[2]";
+ };
+ }
+ {
+ measurement = "pressure";
+ topic = "bigclown/node/+/barometer/0:0/pressure";
+ fields.value = "$.payload";
+ tags = {
+ id = "$.topic[2]";
+ };
+ }
+ {
+ measurement = "voltage";
+ topic = "bigclown/node/+/battery/+/voltage";
+ fields.value = "$.payload";
+ tags = {
+ id = "$.topic[2]";
+ };
+ }
+ {
+ measurement = "button";
+ topic = "bigclown/node/+/push-button/+/event-count";
+ fields.value = "$.payload";
+ tags = {
+ id = "$.topic[2]";
+ channel = "$.topic[4]";
+ };
+ }
+ ];
+ };
+ };
+
+ systemd.services.bigclown-leds = {
+ description = "Bigclown LEDs control";
+ wantedBy = ["multi-user.target"];
+ wants = ["mosquitto.service"];
+ serviceConfig.ExecStart = "${pkgs.bigclown-leds}/bin/bigclown-leds /run/secrets/bigclown-leds.ini";
+ };
+
+ services.home-assistant = {
+ enable = false;
+ openFirewall = true;
+ configDir = "/var/lib/hass";
+ config = {
+ homeassistant = {
+ name = "SPT";
+ latitude = "!secret latitude";
+ longitude = "!secret longitude";
+ elevation = "!secret elevation";
+ time_zone = "Europe/Prague";
+ country = "CZ";
+ };
+ http.server_port = 8808;
+ mqtt = {
+ broker = "localhost";
+ port = 1883;
+ username = "homeassistant";
+ password = "!secret mqtt_password";
+ sensor = import ./home-assistant/sensors.nix;
+ light = import ./home-assistant/light.nix;
+ };
+ met = {};
+ default_config = {};
+ };
+ extraComponents = [];
+ package = pkgs.home-assistant.override {
+ extraPackages = pkgs: with pkgs; [
+ securetar
+ ];
+ packageOverrides = (self: super: {
+ scapy = super.scapy.override {
+ withPlottingSupport = false;
+ };
+ s3transfer = super.s3transfer.overridePythonAttrs (oldAttrs: {
+ dontUsePytestCheck = true;
+ dontUseSetuptoolsCheck = true;
+ });
+ });
+ };
+ };
+
+ };
+
+}