stockholm/makefu/2configs/ham/multi/zigbee2mqtt.nix
makefu d31fbfe31e
ma 2/homeautomation -> 2/ham
avoid overlapping autocomplete with home-manager
2020-02-05 17:34:44 +01:00

166 lines
3.8 KiB
Nix

# provides:
# switch
# automation
# binary_sensor
# sensor
# input_select
# timer
let
inherit (import ../lib) zigbee;
prefix = zigbee.prefix;
xiaomi_btn = name: [
(zigbee.battery name)
(zigbee.linkquality name)
(zigbee.click name)
];
xiaomi_temp = name: [
(zigbee.battery name)
(zigbee.linkquality name)
(zigbee.temperature name)
(zigbee.humidity name)
(zigbee.pressure name)
];
xiaomi_contact = name: [
(zigbee.battery name)
(zigbee.linkquality name)
(zigbee.contact name)
];
router_link = name: [
(zigbee.linkquality name)
];
router_bin = name: [
(zigbee.state name)
];
in {
sensor =
(xiaomi_btn "btn1")
++ (xiaomi_btn "btn2")
++ (xiaomi_btn "btn3")
++ (xiaomi_temp "temp1")
++ (xiaomi_temp "temp2")
++ (xiaomi_temp "temp3")
++ (router_link "router1")
++ (router_link "router2")
++ [
# Sensor for monitoring the bridge state
{
platform = "mqtt";
name = "Zigbee2mqtt Bridge state";
state_topic = "${prefix}/bridge/state";
icon = "mdi:router-wireless";
}
# Sensor for Showing the Zigbee2mqtt Version
{
platform = "mqtt";
name = "Zigbee2mqtt Version";
state_topic = "${prefix}/bridge/config";
value_template = "{{ value_json.version }}";
icon = "mdi:zigbee";
}
# Sensor for Showing the Coordinator Version
{
platform = "mqtt";
name = "Coordinator Version";
state_topic = "${prefix}/bridge/config";
value_template = "{{ value_json.coordinator }}";
icon = "mdi:chip";
}
];
binary_sensor =
(router_bin "router1")
++ (router_bin "router2");
switch = [
{
platform = "mqtt";
name = "Zigbee2mqtt Main join";
state_topic = "${prefix}/bridge/config/permit_join";
command_topic = "${prefix}/bridge/config/permit_join";
payload_on = "true";
payload_off = "false";
}
];
automation = [
{
alias = "Zigbee2mqtt Log Level";
initial_state = "on";
trigger = {
platform = "state";
entity_id = "input_select.zigbee2mqtt_log_level";
};
action = [
{
service = "mqtt.publish";
data = {
payload_template = "{{ states('input_select.zigbee2mqtt_log_level') }}";
topic = "${prefix}/bridge/config/log_level";
};
}
];
}
# Automation to start timer when enable join is turned on
{
id = "zigbee_join_enabled";
alias = "Zigbee Join Enabled";
hide_entity = "true";
trigger =
{
platform = "state";
entity_id = "switch.zigbee2mqtt_main_join";
to = "on";
};
action =
{
service = "timer.start";
entity_id = "timer.zigbee_permit_join";
};
}
# # Automation to stop timer when switch turned off and turn off switch when timer finished
{
id = "zigbee_join_disabled";
alias = "Zigbee Join Disabled";
hide_entity = "true";
trigger = [
{
platform = "event";
event_type = "timer.finished";
event_data.entity_id = "timer.zigbee_permit_join";
}
{
platform = "state";
entity_id = "switch.zigbee2mqtt_main_join";
to = "off";
}
];
action = [
{ service = "timer.cancel";
data.entity_id = "timer.zigbee_permit_join";
}
{ service = "switch.turn_off";
entity_id = "switch.zigbee2mqtt_main_join";
}
];
}
];
input_select.zigbee2mqtt_log_level =
{
name = "Zigbee2mqtt Log Level";
options = [
"debug"
"info"
"warn"
"error"
];
initial = "info";
icon = "mdi:format-list-bulleted";
};
timer.zigbee_permit_join =
{
name = "Zigbee Time remaining";
duration = 120;
};
}