copy nb configuration and modules
This commit is contained in:
112
utils/modules/room-assistant.nix
Normal file
112
utils/modules/room-assistant.nix
Normal file
@@ -0,0 +1,112 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
with lib;
|
||||
let
|
||||
cfg = config.services.room-assistant;
|
||||
in
|
||||
{
|
||||
options = {
|
||||
services.room-assistant = {
|
||||
enable = mkEnableOption (lib.mdDoc "room-assistant");
|
||||
|
||||
name = mkOption {
|
||||
type = with types; uniq string;
|
||||
description = "
|
||||
...
|
||||
";
|
||||
default = "room";
|
||||
};
|
||||
|
||||
mqttHost = mkOption {
|
||||
type = with types; uniq string;
|
||||
description = "
|
||||
...
|
||||
";
|
||||
default = "";
|
||||
};
|
||||
|
||||
mqttUser = mkOption {
|
||||
type = with types; uniq string;
|
||||
description = "
|
||||
...
|
||||
";
|
||||
default = "espresense";
|
||||
};
|
||||
|
||||
mqttPassword = mkOption {
|
||||
type = with types; uniq string;
|
||||
description = "
|
||||
...
|
||||
";
|
||||
default = "insecure-password";
|
||||
};
|
||||
};
|
||||
};
|
||||
config = mkIf cfg.enable {
|
||||
hardware = {
|
||||
bluetooth.enable = true;
|
||||
deviceTree.filter = "bcm2711-rpi-*.dtb";
|
||||
};
|
||||
|
||||
systemd.services = {
|
||||
btattach = {
|
||||
before = [ "bluetooth.service" ];
|
||||
after = [ "dev-ttyAMA0.device" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
serviceConfig = {
|
||||
ExecStart = "${pkgs.bluez}/bin/btattach -B /dev/ttyAMA0 -P bcm -S 3000000";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
virtualisation.docker.enable = true;
|
||||
|
||||
environment.etc."room-assistant.yml" = {
|
||||
text = ''
|
||||
global:
|
||||
instanceName: ${cfg.name}
|
||||
integrations:
|
||||
- homeAssistant
|
||||
- bluetoothClassic
|
||||
homeAssistant:
|
||||
mqttUrl: 'mqtt://${cfg.mqttHost}'
|
||||
mqttOptions:
|
||||
username: ${cfg.mqttUser}
|
||||
password: ${cfg.mqttPassword}
|
||||
bluetoothClassic:
|
||||
addresses:
|
||||
- A8:5B:B7:98:84:F0
|
||||
- 00:24:E4:E6:FE:AD
|
||||
|
||||
'';
|
||||
|
||||
# The UNIX file mode bits
|
||||
mode = "0440";
|
||||
};
|
||||
|
||||
systemd.services."room-assistant" = {
|
||||
description = "room-assistant";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "docker.service" "docker.socket" ];
|
||||
requires = [ "docker.service" "docker.socket" ];
|
||||
script = ''
|
||||
exec ${pkgs.docker}/bin/docker run \
|
||||
--rm \
|
||||
--name=room-assistant \
|
||||
--network=host \
|
||||
-v /var/run/dbus:/var/run/dbus \
|
||||
-v /etc/room-assistant.yml:/room-assistant/config/local.yml \
|
||||
--cap-add=NET_ADMIN \
|
||||
mkerix/room-assistant:2.20.0
|
||||
'';
|
||||
preStop = "${pkgs.docker}/bin/docker stop room-assistant";
|
||||
reload = "${pkgs.docker}/bin/docker restart room-assistant";
|
||||
serviceConfig = {
|
||||
ExecStartPre = "-${pkgs.docker}/bin/docker rm -f room-assistant";
|
||||
ExecStopPost = "-${pkgs.docker}/bin/docker rm -f room-assistant";
|
||||
TimeoutStartSec = 0;
|
||||
TimeoutStopSec = 120;
|
||||
Restart = "always";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user