diff options
author | Robert Schütz <robert.schuetz@stud.uni-heidelberg.de> | 2018-02-17 19:24:20 +0100 |
---|---|---|
committer | Robert Schütz <robert.schuetz@stud.uni-heidelberg.de> | 2018-02-17 20:43:55 +0100 |
commit | 772b72a8d7fbb77e99478d2e2cfe9c60216aed7e (patch) | |
tree | 97b0f9491f43831c801c33225b5c52a90de9bdcd /nixos/tests/home-assistant.nix | |
parent | 76723a26f9e975676d98137981a3079426a0c75a (diff) |
nixos/home-assistant: test MQTT configuration
Diffstat (limited to 'nixos/tests/home-assistant.nix')
-rw-r--r-- | nixos/tests/home-assistant.nix | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/nixos/tests/home-assistant.nix b/nixos/tests/home-assistant.nix index 5d7e0ec65e73..2e45dc78471f 100644 --- a/nixos/tests/home-assistant.nix +++ b/nixos/tests/home-assistant.nix @@ -2,17 +2,27 @@ import ./make-test.nix ({ pkgs, ... }: let configDir = "/var/lib/foobar"; + apiPassword = "secret"; in { name = "home-assistant"; + meta = with pkgs.stdenv.lib; { + maintainers = with maintainers; [ dotlambda ]; + }; nodes = { hass = { config, pkgs, ... }: { + environment.systemPackages = with pkgs; [ + mosquitto + ]; services.home-assistant = { inherit configDir; enable = true; + package = pkgs.home-assistant.override { + extraPackages = ps: with ps; [ hbmqtt ]; + }; config = { homeassistant = { name = "Home"; @@ -22,7 +32,16 @@ in { elevation = 0; }; frontend = { }; - http = { }; + http.api_password = apiPassword; + mqtt = { }; # Use hbmqtt as broker + binary_sensor = [ + { + platform = "mqtt"; + state_topic = "home-assistant/test"; + payload_on = "let_there_be_light"; + payload_off = "off"; + } + ]; }; }; }; @@ -31,7 +50,7 @@ in { testScript = '' startAll; $hass->waitForUnit("home-assistant.service"); - + # Since config is specified using a Nix attribute set, # configuration.yaml is a link to the Nix store $hass->succeed("test -L ${configDir}/configuration.yaml"); @@ -39,8 +58,19 @@ in { # Check that Home Assistant's web interface and API can be reached $hass->waitForOpenPort(8123); $hass->succeed("curl --fail http://localhost:8123/states"); - $hass->succeed("curl --fail http://localhost:8123/api/ | grep 'API running'"); + $hass->succeed("curl --fail -H 'x-ha-access: ${apiPassword}' http://localhost:8123/api/ | grep -qF 'API running'"); + # Toggle a binary sensor using MQTT + $hass->succeed("curl http://localhost:8123/api/states/binary_sensor.mqtt_binary_sensor -H 'x-ha-access: ${apiPassword}' | grep -qF '\"state\": \"off\"'"); + $hass->waitUntilSucceeds("mosquitto_pub -V mqttv311 -t home-assistant/test -u homeassistant -P '${apiPassword}' -m let_there_be_light"); + $hass->succeed("curl http://localhost:8123/api/states/binary_sensor.mqtt_binary_sensor -H 'x-ha-access: ${apiPassword}' | grep -qF '\"state\": \"on\"'"); + + # Check that no errors were logged $hass->fail("cat ${configDir}/home-assistant.log | grep -qF ERROR"); + + # Print log to ease debugging + my $log = $hass->succeed("cat ${configDir}/home-assistant.log"); + print "\n### home-assistant.log ###\n"; + print "$log\n"; ''; }) |