135 lines
3.5 KiB
Nix
135 lines
3.5 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
with import ./lib.nix { inherit lib; };
|
|
let
|
|
unstable = import (pkgs.fetchFromGitHub {
|
|
owner = "nixos";
|
|
repo = "nixpkgs";
|
|
rev = (lib.importJSON ../../../krebs/nixpkgs-unstable.json).rev;
|
|
sha256 = (lib.importJSON ../../../krebs/nixpkgs-unstable.json).sha256;
|
|
}) {};
|
|
dwdwfsapi = pkgs.python3Packages.buildPythonPackage rec {
|
|
pname = "dwdwfsapi";
|
|
version = "1.0.3";
|
|
|
|
src = pkgs.python3Packages.fetchPypi {
|
|
inherit pname version;
|
|
sha256 = "0fcv79xiq0qr4kivhd68iqpgrsjc7djxqs2h543pyr0sdgb5nz9x";
|
|
};
|
|
|
|
buildInputs = with pkgs.python3Packages; [
|
|
requests ciso8601
|
|
];
|
|
|
|
# LC_ALL = "en_US.UTF-8";
|
|
};
|
|
|
|
in {
|
|
imports = [
|
|
./zigbee.nix
|
|
./rooms/bett.nix
|
|
./rooms/essen.nix
|
|
./rooms/nass.nix
|
|
];
|
|
|
|
krebs.iptables.tables.filter.INPUT.rules = [
|
|
{ predicate = "-i int0 -p tcp --dport 1883"; target = "ACCEPT"; } # mosquitto
|
|
{ predicate = "-i docker0 -p tcp --dport 1883"; target = "ACCEPT"; } # mosquitto
|
|
{ predicate = "-i int0 -p tcp --dport 8123"; target = "ACCEPT"; } # hass
|
|
{ predicate = "-i int0 -p tcp --dport 1337"; target = "ACCEPT"; } # hass
|
|
{ predicate = "-i retiolum -p tcp --dport 8123"; target = "ACCEPT"; } # hass
|
|
{ predicate = "-i retiolum -p tcp --dport 1337"; target = "ACCEPT"; } # hass frontend
|
|
{ predicate = "-i wiregrill -p tcp --dport 8123"; target = "ACCEPT"; } # hass
|
|
];
|
|
|
|
services.home-assistant = {
|
|
enable = true;
|
|
package = (unstable.home-assistant.overrideAttrs (old: {
|
|
doInstallCheck = false;
|
|
})).override {
|
|
extraPackages = _: [ dwdwfsapi ];
|
|
};
|
|
configWritable = true;
|
|
lovelaceConfigWritable = true;
|
|
config = let
|
|
tasmota_s20 = name: topic: {
|
|
platform = "mqtt";
|
|
inherit name;
|
|
state_topic = "stat/${topic}/POWER";
|
|
command_topic = "cmnd/${topic}/POWER";
|
|
payload_on = "ON";
|
|
payload_off = "OFF";
|
|
};
|
|
in {
|
|
homeassistant = {
|
|
name = "Home";
|
|
time_zone = "Europe/Berlin";
|
|
latitude = "52.46187";
|
|
longitude = "13.41489";
|
|
elevation = 90;
|
|
unit_system = "metric";
|
|
customize = friendly_names;
|
|
};
|
|
config = {};
|
|
sun.elevation = 66;
|
|
shopping_list = {};
|
|
discovery = {};
|
|
frontend = {};
|
|
http = {};
|
|
mqtt = {
|
|
broker = "localhost";
|
|
port = 1883;
|
|
client_id = "home-assistant";
|
|
username = "gg23";
|
|
password = "gg23-mqtt";
|
|
keepalive = 60;
|
|
protocol = 3.1;
|
|
|
|
discovery = true;
|
|
birth_message = {
|
|
topic = "/hass/status";
|
|
payload = "online";
|
|
};
|
|
will_message = {
|
|
topic = "/hass/status";
|
|
payload = "offline";
|
|
};
|
|
};
|
|
sensor = [
|
|
{
|
|
platform = "dwd_weather_warnings";
|
|
region_name = "Berlin";
|
|
}
|
|
];
|
|
switch = [
|
|
(tasmota_s20 "TV" "tv")
|
|
(tasmota_s20 "Drucker Strom" "drucker")
|
|
(tasmota_s20 "Waschmaschine" "wasch")
|
|
(tasmota_s20 "Stereo Anlage" "stereo")
|
|
];
|
|
mobile_app = {};
|
|
weather = [
|
|
{
|
|
platform = "openweathermap";
|
|
api_key = "xxx"; # TODO put into secrets
|
|
}
|
|
];
|
|
system_health = {};
|
|
history = {};
|
|
shopping_list = {};
|
|
};
|
|
};
|
|
|
|
services.mosquitto = {
|
|
enable = true;
|
|
host = "0.0.0.0";
|
|
allowAnonymous = false;
|
|
checkPasswords = true;
|
|
users.gg23 = {
|
|
password = "gg23-mqtt";
|
|
acl = [ "topic readwrite #" ];
|
|
};
|
|
};
|
|
|
|
environment.systemPackages = [ pkgs.mosquitto ];
|
|
}
|