|
|
|
@ -2,8 +2,6 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: |
|
|
|
|
|
|
|
|
|
let |
|
|
|
|
configDir = "/var/lib/foobar"; |
|
|
|
|
mqttUsername = "homeassistant"; |
|
|
|
|
mqttPassword = "secret"; |
|
|
|
|
in { |
|
|
|
|
name = "home-assistant"; |
|
|
|
|
meta.maintainers = lib.teams.home-assistant.members; |
|
|
|
@ -11,18 +9,6 @@ in { |
|
|
|
|
nodes.hass = { pkgs, ... }: { |
|
|
|
|
environment.systemPackages = with pkgs; [ mosquitto ]; |
|
|
|
|
|
|
|
|
|
services.mosquitto = { |
|
|
|
|
enable = true; |
|
|
|
|
listeners = [ { |
|
|
|
|
users = { |
|
|
|
|
"${mqttUsername}" = { |
|
|
|
|
acl = [ "readwrite #" ]; |
|
|
|
|
password = mqttPassword; |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
} ]; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
services.postgresql = { |
|
|
|
|
enable = true; |
|
|
|
|
ensureDatabases = [ "hass" ]; |
|
|
|
@ -76,23 +62,6 @@ in { |
|
|
|
|
# https://www.home-assistant.io/integrations/frontend/ |
|
|
|
|
frontend = {}; |
|
|
|
|
|
|
|
|
|
# configure an mqtt broker connection |
|
|
|
|
# https://www.home-assistant.io/integrations/mqtt |
|
|
|
|
mqtt = { |
|
|
|
|
broker = "127.0.0.1"; |
|
|
|
|
username = mqttUsername; |
|
|
|
|
password = mqttPassword; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
# create a mqtt sensor that syncs state with its mqtt topic |
|
|
|
|
# https://www.home-assistant.io/integrations/sensor.mqtt/ |
|
|
|
|
binary_sensor = [ { |
|
|
|
|
platform = "mqtt"; |
|
|
|
|
state_topic = "home-assistant/test"; |
|
|
|
|
payload_on = "let_there_be_light"; |
|
|
|
|
payload_off = "off"; |
|
|
|
|
} ]; |
|
|
|
|
|
|
|
|
|
# set up a wake-on-lan switch to test capset capability required |
|
|
|
|
# for the ping suid wrapper |
|
|
|
|
# https://www.home-assistant.io/integrations/wake_on_lan/ |
|
|
|
@ -109,11 +78,9 @@ in { |
|
|
|
|
listen_port = 80; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
# show mqtt interaction in the log |
|
|
|
|
# https://www.home-assistant.io/integrations/logger/ |
|
|
|
|
logger = { |
|
|
|
|
default = "info"; |
|
|
|
|
logs."homeassistant.components.mqtt" = "debug"; |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
@ -167,12 +134,6 @@ in { |
|
|
|
|
hass.wait_for_open_port(8123) |
|
|
|
|
hass.succeed("curl --fail http://localhost:8123/lovelace") |
|
|
|
|
|
|
|
|
|
with subtest("Toggle a binary sensor using MQTT"): |
|
|
|
|
hass.wait_for_open_port(1883) |
|
|
|
|
hass.succeed( |
|
|
|
|
"mosquitto_pub -V mqttv5 -t home-assistant/test -u ${mqttUsername} -P '${mqttPassword}' -m let_there_be_light" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
with subtest("Check that capabilities are passed for emulated_hue to bind to port 80"): |
|
|
|
|
hass.wait_for_open_port(80) |
|
|
|
|
hass.succeed("curl --fail http://localhost:80/description.xml") |
|
|
|
@ -188,10 +149,6 @@ in { |
|
|
|
|
with subtest("Check that no errors were logged"): |
|
|
|
|
assert "ERROR" not in output_log |
|
|
|
|
|
|
|
|
|
# example line: 2020-06-20 10:01:32 DEBUG (MainThread) [homeassistant.components.mqtt] Received message on home-assistant/test: b'let_there_be_light' |
|
|
|
|
with subtest("Check we received the mosquitto message"): |
|
|
|
|
assert "let_there_be_light" in output_log |
|
|
|
|
|
|
|
|
|
with subtest("Check systemd unit hardening"): |
|
|
|
|
hass.log(hass.succeed("systemctl cat home-assistant.service")) |
|
|
|
|
hass.log(hass.succeed("systemd-analyze security home-assistant.service")) |
|
|
|
|