mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-07-13 21:50:33 +03:00
nixos/home-assistant: test MQTT configuration
This commit is contained in:
parent
76723a26f9
commit
772b72a8d7
1 changed files with 33 additions and 3 deletions
|
@ -2,17 +2,27 @@ import ./make-test.nix ({ pkgs, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
configDir = "/var/lib/foobar";
|
configDir = "/var/lib/foobar";
|
||||||
|
apiPassword = "secret";
|
||||||
|
|
||||||
in {
|
in {
|
||||||
name = "home-assistant";
|
name = "home-assistant";
|
||||||
|
meta = with pkgs.stdenv.lib; {
|
||||||
|
maintainers = with maintainers; [ dotlambda ];
|
||||||
|
};
|
||||||
|
|
||||||
nodes = {
|
nodes = {
|
||||||
hass =
|
hass =
|
||||||
{ config, pkgs, ... }:
|
{ config, pkgs, ... }:
|
||||||
{
|
{
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
mosquitto
|
||||||
|
];
|
||||||
services.home-assistant = {
|
services.home-assistant = {
|
||||||
inherit configDir;
|
inherit configDir;
|
||||||
enable = true;
|
enable = true;
|
||||||
|
package = pkgs.home-assistant.override {
|
||||||
|
extraPackages = ps: with ps; [ hbmqtt ];
|
||||||
|
};
|
||||||
config = {
|
config = {
|
||||||
homeassistant = {
|
homeassistant = {
|
||||||
name = "Home";
|
name = "Home";
|
||||||
|
@ -22,7 +32,16 @@ in {
|
||||||
elevation = 0;
|
elevation = 0;
|
||||||
};
|
};
|
||||||
frontend = { };
|
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 = ''
|
testScript = ''
|
||||||
startAll;
|
startAll;
|
||||||
$hass->waitForUnit("home-assistant.service");
|
$hass->waitForUnit("home-assistant.service");
|
||||||
|
|
||||||
# Since config is specified using a Nix attribute set,
|
# Since config is specified using a Nix attribute set,
|
||||||
# configuration.yaml is a link to the Nix store
|
# configuration.yaml is a link to the Nix store
|
||||||
$hass->succeed("test -L ${configDir}/configuration.yaml");
|
$hass->succeed("test -L ${configDir}/configuration.yaml");
|
||||||
|
@ -39,8 +58,19 @@ in {
|
||||||
# Check that Home Assistant's web interface and API can be reached
|
# Check that Home Assistant's web interface and API can be reached
|
||||||
$hass->waitForOpenPort(8123);
|
$hass->waitForOpenPort(8123);
|
||||||
$hass->succeed("curl --fail http://localhost:8123/states");
|
$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");
|
$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";
|
||||||
'';
|
'';
|
||||||
})
|
})
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue