aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/nixos/tests/home-assistant.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/nixos/tests/home-assistant.nix')
-rw-r--r--nixpkgs/nixos/tests/home-assistant.nix132
1 files changed, 59 insertions, 73 deletions
diff --git a/nixpkgs/nixos/tests/home-assistant.nix b/nixpkgs/nixos/tests/home-assistant.nix
index 3365e74ba83..a93a28d877a 100644
--- a/nixpkgs/nixos/tests/home-assistant.nix
+++ b/nixpkgs/nixos/tests/home-assistant.nix
@@ -2,69 +2,66 @@ import ./make-test-python.nix ({ pkgs, ... }:
let
configDir = "/var/lib/foobar";
- apiPassword = "some_secret";
- mqttPassword = "another_secret";
- hassCli = "hass-cli --server http://hass:8123 --password '${apiPassword}'";
+ mqttUsername = "homeassistant";
+ mqttPassword = "secret";
in {
name = "home-assistant";
meta = with pkgs.stdenv.lib; {
maintainers = with maintainers; [ dotlambda ];
};
- nodes = {
- hass =
- { pkgs, ... }:
- {
- environment.systemPackages = with pkgs; [
- mosquitto home-assistant-cli
- ];
- services.home-assistant = {
- inherit configDir;
- enable = true;
- package = pkgs.home-assistant.override {
- extraPackages = ps: with ps; [ hbmqtt ];
- };
- config = {
- homeassistant = {
- name = "Home";
- time_zone = "UTC";
- latitude = "0.0";
- longitude = "0.0";
- elevation = 0;
- auth_providers = [
- {
- type = "legacy_api_password";
- api_password = apiPassword;
- }
- ];
- };
- frontend = { };
- mqtt = { # Use hbmqtt as broker
- password = mqttPassword;
- };
- binary_sensor = [
- {
- platform = "mqtt";
- state_topic = "home-assistant/test";
- payload_on = "let_there_be_light";
- payload_off = "off";
- }
- ];
- };
- lovelaceConfig = {
- title = "My Awesome Home";
- views = [ {
- title = "Example";
- cards = [ {
- type = "markdown";
- title = "Lovelace";
- content = "Welcome to your **Lovelace UI**.";
- } ];
- } ];
- };
- lovelaceConfigWritable = true;
+ nodes.hass = { pkgs, ... }: {
+ environment.systemPackages = with pkgs; [ mosquitto ];
+ services.mosquitto = {
+ enable = true;
+ users = {
+ "${mqttUsername}" = {
+ acl = [ "pattern readwrite #" ];
+ password = mqttPassword;
};
};
+ };
+ services.home-assistant = {
+ inherit configDir;
+ enable = true;
+ config = {
+ homeassistant = {
+ name = "Home";
+ time_zone = "UTC";
+ latitude = "0.0";
+ longitude = "0.0";
+ elevation = 0;
+ };
+ frontend = {};
+ mqtt = {
+ broker = "127.0.0.1";
+ username = mqttUsername;
+ password = mqttPassword;
+ };
+ binary_sensor = [{
+ platform = "mqtt";
+ state_topic = "home-assistant/test";
+ payload_on = "let_there_be_light";
+ payload_off = "off";
+ }];
+ logger = {
+ default = "info";
+ logs."homeassistant.components.mqtt" = "debug";
+ };
+ };
+ lovelaceConfig = {
+ title = "My Awesome Home";
+ views = [{
+ title = "Example";
+ cards = [{
+ type = "markdown";
+ title = "Lovelace";
+ content = "Welcome to your **Lovelace UI**.";
+ }];
+ }];
+ };
+ lovelaceConfigWritable = true;
+ };
};
testScript = ''
@@ -77,28 +74,13 @@ in {
with subtest("Check that Home Assistant's web interface and API can be reached"):
hass.wait_for_open_port(8123)
hass.succeed("curl --fail http://localhost:8123/lovelace")
- assert "API running" in hass.succeed(
- "curl --fail -H 'x-ha-access: ${apiPassword}' http://localhost:8123/api/"
- )
with subtest("Toggle a binary sensor using MQTT"):
- assert '"state": "off"' in hass.succeed(
- "curl http://localhost:8123/api/states/binary_sensor.mqtt_binary_sensor -H 'x-ha-access: ${apiPassword}'"
- )
+ # wait for broker to become available
hass.wait_until_succeeds(
- "mosquitto_pub -V mqttv311 -t home-assistant/test -u homeassistant -P '${mqttPassword}' -m let_there_be_light"
- )
- assert '"state": "on"' in hass.succeed(
- "curl http://localhost:8123/api/states/binary_sensor.mqtt_binary_sensor -H 'x-ha-access: ${apiPassword}'"
- )
- with subtest("Toggle a binary sensor using hass-cli"):
- assert '"state": "on"' in hass.succeed(
- "${hassCli} --output json state get binary_sensor.mqtt_binary_sensor"
+ "mosquitto_sub -V mqttv311 -t home-assistant/test -u ${mqttUsername} -P '${mqttPassword}' -W 1 -t '*'"
)
hass.succeed(
- "${hassCli} state edit binary_sensor.mqtt_binary_sensor --json='{\"state\": \"off\"}'"
- )
- assert '"state": "off"' in hass.succeed(
- "curl http://localhost:8123/api/states/binary_sensor.mqtt_binary_sensor -H 'x-ha-access: ${apiPassword}'"
+ "mosquitto_pub -V mqttv311 -t home-assistant/test -u ${mqttUsername} -P '${mqttPassword}' -m let_there_be_light"
)
with subtest("Print log to ease debugging"):
output_log = hass.succeed("cat ${configDir}/home-assistant.log")
@@ -107,5 +89,9 @@ 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
'';
})