hass: configure fyrtur and batteries
This commit is contained in:
parent
49574ee6ec
commit
902df4d118
10 changed files with 260 additions and 347 deletions
|
@ -152,7 +152,6 @@ in {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
alias = "Set Scene To Outside when opening door";
|
alias = "Set Scene To Outside when opening door";
|
||||||
trigger = [
|
trigger = [
|
||||||
|
@ -179,68 +178,88 @@ in {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
# window roles
|
# window roles
|
||||||
{
|
{
|
||||||
alias = "windows down in the evening";
|
alias = "windows down in the evening";
|
||||||
trigger = [{
|
trigger = [{
|
||||||
platform = "sun";
|
platform = "sun";
|
||||||
event = "sunset";
|
event = "sunset";
|
||||||
offset = "+00:10:00"; # 10 min after sunset
|
offset = "+00:01:00"; # 10 min after sunset
|
||||||
}];
|
}];
|
||||||
action = [
|
action = [
|
||||||
{
|
{
|
||||||
service = "mqtt.publish";
|
service = "mqtt.publish";
|
||||||
data_template = {
|
data_template = {
|
||||||
topic = "zigbee2mqtt/fyrtur1/set";
|
topic = "zigbee2mqtt/fyrtur1/set"; # office
|
||||||
payload_template = ''{"position":"15"}'';
|
payload_template = ''{"position":"15"}'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
service = "mqtt.publish";
|
service = "mqtt.publish";
|
||||||
data_template = {
|
data_template = {
|
||||||
topic = "zigbee2mqtt/fyrtur2/set";
|
topic = "zigbee2mqtt/fyrtur2/set"; # office
|
||||||
payload_template = ''{"position":"15"}'';
|
payload_template = ''{"position":"15"}'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
service = "mqtt.publish";
|
||||||
|
data_template = {
|
||||||
|
topic = "zigbee2mqtt/fyrtur3/set";
|
||||||
|
payload_template = ''{"position":"21"}'';
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
service = "mqtt.publish";
|
||||||
|
data_template = {
|
||||||
|
topic = "zigbee2mqtt/fyrtur4/set";
|
||||||
|
payload_template = ''{"position":"21"}'';
|
||||||
|
};
|
||||||
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
alias = "windows up in the morning";
|
alias = "windows up in the morning";
|
||||||
trigger = [{
|
trigger = [{
|
||||||
platform = "sun";
|
platform = "time";
|
||||||
event = "sunrise";
|
at = "09:00:00";
|
||||||
offset = "-00:3:00"; # 3 min before sunrise
|
|
||||||
}];
|
}];
|
||||||
action = [{
|
action = [
|
||||||
|
{
|
||||||
service = "mqtt.publish";
|
service = "mqtt.publish";
|
||||||
data_template = {
|
data_template = {
|
||||||
topic = "zigbee2mqtt/fyrtur1/set";
|
topic = "zigbee2mqtt/fyrtur1/set";
|
||||||
payload_template = ''{"position":"90"}'';
|
payload_template = ''{"position":"90"}'';
|
||||||
};
|
};
|
||||||
}];
|
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
alias = "windows up in the morning";
|
service = "mqtt.publish";
|
||||||
trigger = [{
|
data_template = {
|
||||||
platform = "sun";
|
topic = "zigbee2mqtt/fyrtur3/set";
|
||||||
event = "sunrise";
|
payload_template = ''{"position":"99"}'';
|
||||||
offset = "+02:30:00"; # 2 1/2 hours after sunrise
|
};
|
||||||
}];
|
}
|
||||||
action = [{
|
{
|
||||||
|
service = "mqtt.publish";
|
||||||
|
data_template = {
|
||||||
|
topic = "zigbee2mqtt/fyrtur4/set";
|
||||||
|
payload_template = ''{"position":"99"}'';
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
service = "mqtt.publish";
|
service = "mqtt.publish";
|
||||||
data_template = {
|
data_template = {
|
||||||
topic = "zigbee2mqtt/fyrtur2/set";
|
topic = "zigbee2mqtt/fyrtur2/set";
|
||||||
payload_template = ''{"position":"90"}'';
|
payload_template = ''{"position":"90"}'';
|
||||||
};
|
};
|
||||||
}];
|
|
||||||
}
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
# heater
|
||||||
{
|
{
|
||||||
alias = "heater on in the morning";
|
alias = "heater on in the morning";
|
||||||
trigger = [{
|
trigger = [{
|
||||||
platform = "time";
|
platform = "time";
|
||||||
at = "09:30:00";
|
at = "09:00:00";
|
||||||
}];
|
}];
|
||||||
action = [
|
action = [
|
||||||
{
|
{
|
||||||
|
@ -248,7 +267,7 @@ in {
|
||||||
data_template = {
|
data_template = {
|
||||||
topic = "zigbee2mqtt/heater1/set"; # office
|
topic = "zigbee2mqtt/heater1/set"; # office
|
||||||
payload_template =
|
payload_template =
|
||||||
''{"system_mode":"auto","current_heating_setpoint":21.5}'';
|
''{"system_mode":"auto","current_heating_setpoint":21.0}'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
@ -256,7 +275,7 @@ in {
|
||||||
data_template = {
|
data_template = {
|
||||||
topic = "zigbee2mqtt/heater2/set"; # office
|
topic = "zigbee2mqtt/heater2/set"; # office
|
||||||
payload_template =
|
payload_template =
|
||||||
''{"system_mode":"auto","current_heating_setpoint":21.5}'';
|
''{"system_mode":"auto","current_heating_setpoint":21.0}'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
@ -264,7 +283,7 @@ in {
|
||||||
data_template = {
|
data_template = {
|
||||||
topic = "zigbee2mqtt/heater3/set"; # bed room
|
topic = "zigbee2mqtt/heater3/set"; # bed room
|
||||||
payload_template =
|
payload_template =
|
||||||
''{"system_mode":"auto","current_heating_setpoint":20.0}'';
|
''{"system_mode":"auto","current_heating_setpoint":19.0}'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
@ -272,12 +291,52 @@ in {
|
||||||
data_template = {
|
data_template = {
|
||||||
topic = "zigbee2mqtt/heater4/set"; # storage room
|
topic = "zigbee2mqtt/heater4/set"; # storage room
|
||||||
payload_template =
|
payload_template =
|
||||||
''{"system_mode":"auto","current_heating_setpoint":18.0}'';
|
''{"system_mode":"auto","current_heating_setpoint":19.0}'';
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
alias = "heater up in the early evening";
|
||||||
|
trigger = [{
|
||||||
|
platform = "time";
|
||||||
|
at = "19:45:00";
|
||||||
|
}];
|
||||||
|
action = [
|
||||||
|
{
|
||||||
|
service = "mqtt.publish";
|
||||||
|
data_template = {
|
||||||
|
topic = "zigbee2mqtt/heater1/set"; # office
|
||||||
|
payload_template =
|
||||||
|
''{"system_mode":"auto","current_heating_setpoint":24.0}'';
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
service = "mqtt.publish";
|
||||||
|
data_template = {
|
||||||
|
topic = "zigbee2mqtt/heater2/set"; # office
|
||||||
|
payload_template =
|
||||||
|
''{"system_mode":"auto","current_heating_setpoint":24.0}'';
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
service = "mqtt.publish";
|
||||||
|
data_template = {
|
||||||
|
topic = "zigbee2mqtt/heater3/set"; # bed room
|
||||||
|
payload_template =
|
||||||
|
''{"system_mode":"auto","current_heating_setpoint":24.0}'';
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
service = "mqtt.publish";
|
||||||
|
data_template = {
|
||||||
|
topic = "zigbee2mqtt/heater4/set"; # storage room
|
||||||
|
payload_template =
|
||||||
|
''{"system_mode":"auto","current_heating_setpoint":19.0}'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
alias = "heater off in the evening";
|
alias = "heater off in the evening";
|
||||||
trigger = [{
|
trigger = [{
|
||||||
|
|
|
@ -106,8 +106,9 @@
|
||||||
delay = delay;
|
delay = delay;
|
||||||
command = {
|
command = {
|
||||||
# Configure it once to the color you like
|
# Configure it once to the color you like
|
||||||
# {"state":"{{state}}","brightness":{{brightness}},"color":{"hex":"#FFFFFF}}
|
# {"state":"{{state}}","brightness":{{brightness}},"color":{"hex":"#FFFFFF},"color_temp":255","transition":0}
|
||||||
command = ''{"state":"{{state}}","brightness":{{brightness}}}'';
|
command = ''
|
||||||
|
{"state":"{{state}}","brightness":{{brightness}},"transition":0}'';
|
||||||
topic = "${topic}/set";
|
topic = "${topic}/set";
|
||||||
on = "ON";
|
on = "ON";
|
||||||
off = "OFF";
|
off = "OFF";
|
||||||
|
@ -131,6 +132,10 @@
|
||||||
topic = "zigbee2mqtt/light_7";
|
topic = "zigbee2mqtt/light_7";
|
||||||
rooms = [ "sleeping_room" ];
|
rooms = [ "sleeping_room" ];
|
||||||
})
|
})
|
||||||
|
(led {
|
||||||
|
topic = "zigbee2mqtt/led_1";
|
||||||
|
rooms = [ "office_room" ];
|
||||||
|
})
|
||||||
(led {
|
(led {
|
||||||
topic = "zigbee2mqtt/led_2";
|
topic = "zigbee2mqtt/led_2";
|
||||||
rooms = [ "kitchen" ];
|
rooms = [ "kitchen" ];
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
./mqtt.nix
|
./mqtt.nix
|
||||||
./zigbee2mqtt/buttons.nix
|
./zigbee2mqtt/buttons.nix
|
||||||
./zigbee2mqtt/doors.nix
|
./zigbee2mqtt/doors.nix
|
||||||
|
./zigbee2mqtt/fyrtur.nix
|
||||||
./zigbee2mqtt/heater.nix
|
./zigbee2mqtt/heater.nix
|
||||||
./zigbee2mqtt/leds.nix
|
./zigbee2mqtt/leds.nix
|
||||||
./zigbee2mqtt/lights.nix
|
./zigbee2mqtt/lights.nix
|
||||||
|
@ -10,7 +11,6 @@
|
||||||
./zigbee2mqtt/repeater.nix
|
./zigbee2mqtt/repeater.nix
|
||||||
./zigbee2mqtt/service.nix
|
./zigbee2mqtt/service.nix
|
||||||
./zigbee2mqtt/temperatur.nix
|
./zigbee2mqtt/temperatur.nix
|
||||||
./zigbee2mqtt/windows.nix
|
|
||||||
];
|
];
|
||||||
|
|
||||||
services.zigbee2mqtt = {
|
services.zigbee2mqtt = {
|
||||||
|
|
|
@ -11,19 +11,19 @@ let
|
||||||
allDevices = {
|
allDevices = {
|
||||||
"button_1" = {
|
"button_1" = {
|
||||||
id = "0x00158d0002b04f65";
|
id = "0x00158d0002b04f65";
|
||||||
groups = [ "living_room" ];
|
#groups = [ "living_room" ];
|
||||||
states.single = "input_boolean.situation_toggle";
|
states.single = "input_boolean.situation_toggle";
|
||||||
states.hold = "input_boolean.printer_toggle";
|
states.hold = "input_boolean.printer_toggle";
|
||||||
};
|
};
|
||||||
"button_2" = {
|
"button_2" = {
|
||||||
id = "0x00158d0002b04f09";
|
id = "0x00158d0002b04f09";
|
||||||
groups = [ "bed_room" ];
|
#groups = [ "bed_room" ];
|
||||||
states.single = "input_boolean.situation_toggle";
|
states.single = "input_boolean.situation_toggle";
|
||||||
states.hold = "input_boolean.printer_toggle";
|
states.hold = "input_boolean.printer_toggle";
|
||||||
};
|
};
|
||||||
"button_3" = {
|
"button_3" = {
|
||||||
id = "0x00158d0002b00e04";
|
id = "0x00158d0002b00e04";
|
||||||
groups = [ "bed_room" ];
|
#groups = [ "bed_room" ];
|
||||||
states.single = "input_boolean.situation_toggle";
|
states.single = "input_boolean.situation_toggle";
|
||||||
states.hold = "input_boolean.printer_toggle";
|
states.hold = "input_boolean.printer_toggle";
|
||||||
};
|
};
|
||||||
|
@ -107,41 +107,37 @@ in {
|
||||||
|
|
||||||
# create groups
|
# create groups
|
||||||
# -------------
|
# -------------
|
||||||
group = let
|
#group = let
|
||||||
|
# # to have nice panels for every device
|
||||||
# to have nice panels for every device
|
# sensorGroups = lib.mapAttrs (name:
|
||||||
sensorGroups = lib.mapAttrs (name:
|
# { states ? { }, ... }:
|
||||||
{ states ? { }, ... }:
|
# let
|
||||||
let
|
# entityIds = { single ? "input_boolean.single_${name}"
|
||||||
entityIds = { single ? "input_boolean.single_${name}"
|
# , double ? "input_boolean.double_${name}"
|
||||||
, double ? "input_boolean.double_${name}"
|
# , hold ? "input_boolean.hold_${name}", ... }: [
|
||||||
, hold ? "input_boolean.hold_${name}", ... }: [
|
# single
|
||||||
single
|
# double
|
||||||
double
|
# hold
|
||||||
hold
|
# ];
|
||||||
];
|
# in {
|
||||||
in {
|
# entities = [ "sensor.${name}" ] ++ (entityIds states)
|
||||||
entities = [ "sensor.${name}" ] ++ (entityIds states)
|
# ++ [ "sensor.battery_${name}" "sensor.link_${name}" ];
|
||||||
++ [ "sensor.battery_${name}" "sensor.link_${name}" ];
|
# }) allDevices;
|
||||||
}) allDevices;
|
# # sort lights into given groups.
|
||||||
|
# sortedInGroups = let
|
||||||
# sort lights into given groups.
|
# groupEntries = lib.zipAttrs (lib.flatten (lib.mapAttrsToList (name:
|
||||||
sortedInGroups = let
|
# { groups ? [ ], states ? { }, ... }:
|
||||||
groupEntries = lib.zipAttrs (lib.flatten (lib.mapAttrsToList (name:
|
# map (groupName: {
|
||||||
{ groups ? [ ], states ? { }, ... }:
|
# "${groupName}" = if (lib.hasAttr "single" states) then
|
||||||
map (groupName: {
|
# states.single
|
||||||
"${groupName}" = if (lib.hasAttr "single" states) then
|
# else
|
||||||
states.single
|
# "input_boolean.single_${name}";
|
||||||
else
|
# }) groups) allDevices));
|
||||||
"input_boolean.single_${name}";
|
# in lib.mapAttrs (name: entities: { inherit entities; }) groupEntries;
|
||||||
}) groups) allDevices));
|
#in sortedInGroups // sensorGroups // {
|
||||||
in lib.mapAttrs (name: entities: { inherit entities; }) groupEntries;
|
# all_sensors.entities =
|
||||||
|
# lib.mapAttrsToList (name: { ... }: "binary_sensor.${name}") allDevices;
|
||||||
in sortedInGroups // sensorGroups // {
|
#};
|
||||||
|
|
||||||
all_sensors.entities =
|
|
||||||
lib.mapAttrsToList (name: { ... }: "binary_sensor.${name}") allDevices;
|
|
||||||
};
|
|
||||||
|
|
||||||
# create automation
|
# create automation
|
||||||
# -----------------
|
# -----------------
|
||||||
|
|
52
configs/pepe/home-assistant/zigbee2mqtt/fyrtur.nix
Normal file
52
configs/pepe/home-assistant/zigbee2mqtt/fyrtur.nix
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
{ pkgs, lib, ... }:
|
||||||
|
let
|
||||||
|
|
||||||
|
# https://www.zigbee2mqtt.io/devices/E1757.html
|
||||||
|
allDevices = {
|
||||||
|
"fyrtur1" = { id = "0x680ae2fffe64fa40"; }; # office
|
||||||
|
"fyrtur2" = { id = "0x680ae2fffe6e9f41"; }; # bed room
|
||||||
|
"fyrtur3" = { id = "0x680ae2fffe8f6411"; }; # office (close to kitchen)
|
||||||
|
"fyrtur4" = { id = "0x680ae2fffe91d234"; }; # kitchen
|
||||||
|
};
|
||||||
|
|
||||||
|
# -t "zigbee2mqtt/fyrtur1/set" -m '{"position":100}'
|
||||||
|
# -t "zigbee2mqtt/fyrtur1/set" -m '{"position":15}'
|
||||||
|
in {
|
||||||
|
|
||||||
|
services.zigbee2mqtt.devices = lib.mapAttrs' (name:
|
||||||
|
{ id, ... }: {
|
||||||
|
name = id;
|
||||||
|
value = {
|
||||||
|
retain = false;
|
||||||
|
friendly_name = name;
|
||||||
|
transition = 0.1;
|
||||||
|
};
|
||||||
|
}) allDevices;
|
||||||
|
|
||||||
|
services.homeAssistantConfig = {
|
||||||
|
|
||||||
|
sensor = lib.flatten (lib.mapAttrsToList (name:
|
||||||
|
{ ... }: [
|
||||||
|
{
|
||||||
|
name = "battery_${name}";
|
||||||
|
platform = "mqtt";
|
||||||
|
state_topic = "zigbee2mqtt/${name}";
|
||||||
|
availability_topic = "zigbee2mqtt/bridge/state";
|
||||||
|
unit_of_measurement = "%";
|
||||||
|
icon = "mdi:battery-10";
|
||||||
|
value_template = "{{ value_json.battery }}";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "link_${name}";
|
||||||
|
platform = "mqtt";
|
||||||
|
state_topic = "zigbee2mqtt/${name}";
|
||||||
|
availability_topic = "zigbee2mqtt/bridge/state";
|
||||||
|
icon = "mdi:signal";
|
||||||
|
unit_of_measurement = "lqi";
|
||||||
|
value_template = "{{ value_json.linkquality }}";
|
||||||
|
}
|
||||||
|
]) allDevices);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -26,83 +26,27 @@ in {
|
||||||
|
|
||||||
services.homeAssistantConfig = {
|
services.homeAssistantConfig = {
|
||||||
|
|
||||||
#light = lib.flatten (lib.mapAttrsToList (name:
|
sensor = lib.flatten (lib.mapAttrsToList (name:
|
||||||
# { ... }: [
|
{ ... }: [
|
||||||
# {
|
{
|
||||||
# name = "rgb_${name}";
|
name = "battery_${name}";
|
||||||
# platform = "mqtt";
|
platform = "mqtt";
|
||||||
# state_topic = "zigbee2mqtt/${name}";
|
state_topic = "zigbee2mqtt/${name}";
|
||||||
# availability_topic = "zigbee2mqtt/bridge/state";
|
availability_topic = "zigbee2mqtt/bridge/state";
|
||||||
# brightness = true;
|
unit_of_measurement = "%";
|
||||||
# color_temp = true;
|
icon = "mdi:battery-10";
|
||||||
# xy = true;
|
value_template = "{{ value_json.battery }}";
|
||||||
# schema = "json";
|
}
|
||||||
# command_topic = "zigbee2mqtt/${name}/rgb/set";
|
{
|
||||||
# brightness_scale = 254;
|
name = "link_${name}";
|
||||||
# state_topic_postfix = "rgb";
|
platform = "mqtt";
|
||||||
# }
|
state_topic = "zigbee2mqtt/${name}";
|
||||||
# {
|
availability_topic = "zigbee2mqtt/bridge/state";
|
||||||
# name = "white_${name}";
|
icon = "mdi:signal";
|
||||||
# platform = "mqtt";
|
unit_of_measurement = "lqi";
|
||||||
# state_topic = "zigbee2mqtt/${name}";
|
value_template = "{{ value_json.linkquality }}";
|
||||||
# availability_topic = "zigbee2mqtt/bridge/state";
|
}
|
||||||
# brightness = true;
|
]) allDevices);
|
||||||
# schema = "json";
|
|
||||||
# command_topic = "zigbee2mqtt/${name}/white/set";
|
|
||||||
# brightness_scale = 254;
|
|
||||||
# state_topic_postfix = "white";
|
|
||||||
# }
|
|
||||||
# ]) allDevices);
|
|
||||||
|
|
||||||
#sensor = with lib;
|
|
||||||
# mapAttrsToList (name:
|
|
||||||
# { ... }: {
|
|
||||||
# name = "link_${name}";
|
|
||||||
# platform = "mqtt";
|
|
||||||
# state_topic = "zigbee2mqtt/${name}";
|
|
||||||
# availability_topic = "zigbee2mqtt/bridge/state";
|
|
||||||
# icon = "mdi:signal";
|
|
||||||
# unit_of_measurement = "lqi";
|
|
||||||
# value_template = "{{ value_json.linkquality}}";
|
|
||||||
# }) allDevices;
|
|
||||||
|
|
||||||
# binary_sensor = lib.mapAttrsToList (name:
|
|
||||||
# { ... }: {
|
|
||||||
# name = "update_${name}";
|
|
||||||
# platform = "mqtt";
|
|
||||||
# state_topic = "zigbee2mqtt/${name}";
|
|
||||||
# availability_topic = "zigbee2mqtt/bridge/state";
|
|
||||||
# payload_on = true;
|
|
||||||
# payload_off = false;
|
|
||||||
# value_template = "{{ value_json.update_available }}";
|
|
||||||
# }) allDevices;
|
|
||||||
|
|
||||||
# # create groups
|
|
||||||
# # -------------
|
|
||||||
# group = let
|
|
||||||
|
|
||||||
# # to have nice panels for every device
|
|
||||||
# lightGroups = lib.mapAttrs (name:
|
|
||||||
# { ... }: {
|
|
||||||
# entities = [
|
|
||||||
# "light.${name}"
|
|
||||||
# "sensor.link_${name}"
|
|
||||||
# "binary_sensor.update_${name}"
|
|
||||||
# ];
|
|
||||||
# }) allDevices;
|
|
||||||
|
|
||||||
# # sort lights into given groups.
|
|
||||||
# sortedInGroups = let
|
|
||||||
# groupEntries = lib.zipAttrs (lib.flatten (lib.mapAttrsToList (name:
|
|
||||||
# { groups ? [ ], ... }:
|
|
||||||
# map (groupName: { "${groupName}" = "light.${name}"; }) groups)
|
|
||||||
# allDevices));
|
|
||||||
# in lib.mapAttrs (name: entities: { inherit entities; }) groupEntries;
|
|
||||||
|
|
||||||
# in sortedInGroups // lightGroups // {
|
|
||||||
# all_lights.entities =
|
|
||||||
# lib.mapAttrsToList (name: { ... }: "light.${name}") allDevices;
|
|
||||||
# };
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,8 @@ let
|
||||||
"led_2" = { id = "0x00124b001ee958b3"; };
|
"led_2" = { id = "0x00124b001ee958b3"; };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# -t "zigbee2mqtt/led_1/set" -m '{"state":"ON","transition":0, "color_temp":255}'
|
||||||
|
# -t "zigbee2mqtt/led_1/set" -m '{"state":"OFF","transition":0, "color_temp":255}'
|
||||||
# -t "zigbee2mqtt/led_1/set" -m '{"state":"ON","brightness":255,"color":{"hex":"#00FFFF"}}'
|
# -t "zigbee2mqtt/led_1/set" -m '{"state":"ON","brightness":255,"color":{"hex":"#00FFFF"}}'
|
||||||
# -t "zigbee2mqtt/led_1/set" -m '{"state":"OFF"}'
|
# -t "zigbee2mqtt/led_1/set" -m '{"state":"OFF"}'
|
||||||
in {
|
in {
|
||||||
|
|
|
@ -51,63 +51,28 @@ in {
|
||||||
};
|
};
|
||||||
}) allDevices;
|
}) allDevices;
|
||||||
|
|
||||||
#services.homeAssistantConfig = {
|
services.homeAssistantConfig = {
|
||||||
# # define meta information sensors
|
# define meta information sensors
|
||||||
# sensor = lib.flatten (lib.mapAttrsToList (name:
|
sensor = lib.flatten (lib.mapAttrsToList (name:
|
||||||
# { ... }: [
|
{ ... }: [
|
||||||
# {
|
{
|
||||||
# name = "battery_${name}";
|
name = "battery_${name}";
|
||||||
# platform = "mqtt";
|
platform = "mqtt";
|
||||||
# state_topic = "zigbee2mqtt/${name}";
|
state_topic = "zigbee2mqtt/${name}";
|
||||||
# availability_topic = "zigbee2mqtt/bridge/state";
|
availability_topic = "zigbee2mqtt/bridge/state";
|
||||||
# unit_of_measurement = "%";
|
unit_of_measurement = "%";
|
||||||
# icon = "mdi:battery-10";
|
icon = "mdi:battery-10";
|
||||||
# value_template = "{{ value_json.battery }}";
|
value_template = "{{ value_json.battery }}";
|
||||||
# }
|
}
|
||||||
# {
|
{
|
||||||
# name = "link_${name}";
|
name = "link_${name}";
|
||||||
# platform = "mqtt";
|
platform = "mqtt";
|
||||||
# state_topic = "zigbee2mqtt/${name}";
|
state_topic = "zigbee2mqtt/${name}";
|
||||||
# availability_topic = "zigbee2mqtt/bridge/state";
|
availability_topic = "zigbee2mqtt/bridge/state";
|
||||||
# icon = "mdi:signal";
|
icon = "mdi:signal";
|
||||||
# unit_of_measurement = "lqi";
|
unit_of_measurement = "lqi";
|
||||||
# value_template = "{{ value_json.linkquality }}";
|
value_template = "{{ value_json.linkquality }}";
|
||||||
# }
|
}
|
||||||
# ]) allDevices);
|
]) allDevices);
|
||||||
# binary_sensor = lib.mapAttrsToList (name:
|
};
|
||||||
# { ... }: {
|
|
||||||
# name = name;
|
|
||||||
# platform = "mqtt";
|
|
||||||
# device_class = "motion";
|
|
||||||
# state_topic = "zigbee2mqtt/${name}";
|
|
||||||
# availability_topic = "zigbee2mqtt/bridge/state";
|
|
||||||
# payload_on = true;
|
|
||||||
# payload_off = false;
|
|
||||||
# value_template = "{{ value_json.occupancy }}";
|
|
||||||
# }) allDevices;
|
|
||||||
# # create groups
|
|
||||||
# # -------------
|
|
||||||
# group = let
|
|
||||||
# # to have nice panels for every device
|
|
||||||
# sensorGroups = lib.mapAttrs (name:
|
|
||||||
# { ... }: {
|
|
||||||
# entities = [
|
|
||||||
# "binary_sensor.${name}"
|
|
||||||
# "sensor.battery_${name}"
|
|
||||||
# "sensor.link_${name}"
|
|
||||||
# ];
|
|
||||||
# }) allDevices;
|
|
||||||
# # sort lights into given groups.
|
|
||||||
# sortedInGroups = let
|
|
||||||
# groupEntries = lib.zipAttrs (lib.flatten (lib.mapAttrsToList (name:
|
|
||||||
# { groups ? [ ], ... }:
|
|
||||||
# map (groupName: { "${groupName}" = "binary_sensor.${name}"; }) groups)
|
|
||||||
# allDevices));
|
|
||||||
# in lib.mapAttrs (name: entities: { inherit entities; }) groupEntries;
|
|
||||||
# in sortedInGroups // sensorGroups // {
|
|
||||||
# all_sensors.entities =
|
|
||||||
# lib.mapAttrsToList (name: { ... }: "binary_sensor.${name}") allDevices;
|
|
||||||
# };
|
|
||||||
#};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,34 +78,30 @@ in {
|
||||||
|
|
||||||
# create groups
|
# create groups
|
||||||
# -------------
|
# -------------
|
||||||
group = let
|
#group = let
|
||||||
|
# # to have nice panels for every device
|
||||||
|
# sensorGroups = lib.mapAttrs (name:
|
||||||
|
# { ... }: {
|
||||||
|
# entities = [
|
||||||
|
# "sensor.${name}"
|
||||||
|
# "sensor.humidity_${name}"
|
||||||
|
# #"sensor.pressure_${name}"
|
||||||
|
# "sensor.battery_${name}"
|
||||||
|
# "sensor.link_${name}"
|
||||||
|
# ];
|
||||||
|
# }) allDevices;
|
||||||
|
# # sort lights into given groups.
|
||||||
|
# sortedInGroups = let
|
||||||
|
# groupEntries = lib.zipAttrs (lib.flatten (lib.mapAttrsToList (name:
|
||||||
|
# { groups ? [ ], ... }:
|
||||||
|
# map (groupName: { "${groupName}" = "sensor.${name}"; }) groups)
|
||||||
|
# allDevices));
|
||||||
|
# in lib.mapAttrs (name: entities: { inherit entities; }) groupEntries;
|
||||||
|
#in sortedInGroups // sensorGroups // {
|
||||||
|
# all_sensors.entities =
|
||||||
|
# lib.mapAttrsToList (name: { ... }: "sensor.${name}") allDevices;
|
||||||
|
#};
|
||||||
|
|
||||||
# to have nice panels for every device
|
|
||||||
sensorGroups = lib.mapAttrs (name:
|
|
||||||
{ ... }: {
|
|
||||||
entities = [
|
|
||||||
"sensor.${name}"
|
|
||||||
"sensor.humidity_${name}"
|
|
||||||
#"sensor.pressure_${name}"
|
|
||||||
"sensor.battery_${name}"
|
|
||||||
"sensor.link_${name}"
|
|
||||||
|
|
||||||
];
|
|
||||||
}) allDevices;
|
|
||||||
|
|
||||||
# sort lights into given groups.
|
|
||||||
sortedInGroups = let
|
|
||||||
groupEntries = lib.zipAttrs (lib.flatten (lib.mapAttrsToList (name:
|
|
||||||
{ groups ? [ ], ... }:
|
|
||||||
map (groupName: { "${groupName}" = "sensor.${name}"; }) groups)
|
|
||||||
allDevices));
|
|
||||||
in lib.mapAttrs (name: entities: { inherit entities; }) groupEntries;
|
|
||||||
|
|
||||||
in sortedInGroups // sensorGroups // {
|
|
||||||
|
|
||||||
all_sensors.entities =
|
|
||||||
lib.mapAttrsToList (name: { ... }: "sensor.${name}") allDevices;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,106 +0,0 @@
|
||||||
{ pkgs, lib, ... }:
|
|
||||||
let
|
|
||||||
|
|
||||||
# https://www.zigbee2mqtt.io/devices/E1757.html
|
|
||||||
allDevices = {
|
|
||||||
"fyrtur1" = { id = "0x680ae2fffe64fa40"; }; # office
|
|
||||||
"fyrtur2" = { id = "0x680ae2fffe6e9f41"; }; # sleeping room
|
|
||||||
};
|
|
||||||
|
|
||||||
# -t "zigbee2mqtt/fyrtur1/set" -m '{"position":100}'
|
|
||||||
# -t "zigbee2mqtt/fyrtur1/set" -m '{"position":15}'
|
|
||||||
in {
|
|
||||||
|
|
||||||
services.zigbee2mqtt.devices = lib.mapAttrs' (name:
|
|
||||||
{ id, ... }: {
|
|
||||||
name = id;
|
|
||||||
value = {
|
|
||||||
retain = false;
|
|
||||||
friendly_name = name;
|
|
||||||
transition = 1;
|
|
||||||
};
|
|
||||||
}) allDevices;
|
|
||||||
|
|
||||||
services.homeAssistantConfig = {
|
|
||||||
|
|
||||||
#light = lib.flatten (lib.mapAttrsToList (name:
|
|
||||||
# { ... }: [
|
|
||||||
# {
|
|
||||||
# name = "rgb_${name}";
|
|
||||||
# platform = "mqtt";
|
|
||||||
# state_topic = "zigbee2mqtt/${name}";
|
|
||||||
# availability_topic = "zigbee2mqtt/bridge/state";
|
|
||||||
# brightness = true;
|
|
||||||
# color_temp = true;
|
|
||||||
# xy = true;
|
|
||||||
# schema = "json";
|
|
||||||
# command_topic = "zigbee2mqtt/${name}/rgb/set";
|
|
||||||
# brightness_scale = 254;
|
|
||||||
# state_topic_postfix = "rgb";
|
|
||||||
# }
|
|
||||||
# {
|
|
||||||
# name = "white_${name}";
|
|
||||||
# platform = "mqtt";
|
|
||||||
# state_topic = "zigbee2mqtt/${name}";
|
|
||||||
# availability_topic = "zigbee2mqtt/bridge/state";
|
|
||||||
# brightness = true;
|
|
||||||
# schema = "json";
|
|
||||||
# command_topic = "zigbee2mqtt/${name}/white/set";
|
|
||||||
# brightness_scale = 254;
|
|
||||||
# state_topic_postfix = "white";
|
|
||||||
# }
|
|
||||||
# ]) allDevices);
|
|
||||||
|
|
||||||
#sensor = with lib;
|
|
||||||
# mapAttrsToList (name:
|
|
||||||
# { ... }: {
|
|
||||||
# name = "link_${name}";
|
|
||||||
# platform = "mqtt";
|
|
||||||
# state_topic = "zigbee2mqtt/${name}";
|
|
||||||
# availability_topic = "zigbee2mqtt/bridge/state";
|
|
||||||
# icon = "mdi:signal";
|
|
||||||
# unit_of_measurement = "lqi";
|
|
||||||
# value_template = "{{ value_json.linkquality}}";
|
|
||||||
# }) allDevices;
|
|
||||||
|
|
||||||
# binary_sensor = lib.mapAttrsToList (name:
|
|
||||||
# { ... }: {
|
|
||||||
# name = "update_${name}";
|
|
||||||
# platform = "mqtt";
|
|
||||||
# state_topic = "zigbee2mqtt/${name}";
|
|
||||||
# availability_topic = "zigbee2mqtt/bridge/state";
|
|
||||||
# payload_on = true;
|
|
||||||
# payload_off = false;
|
|
||||||
# value_template = "{{ value_json.update_available }}";
|
|
||||||
# }) allDevices;
|
|
||||||
|
|
||||||
# # create groups
|
|
||||||
# # -------------
|
|
||||||
# group = let
|
|
||||||
|
|
||||||
# # to have nice panels for every device
|
|
||||||
# lightGroups = lib.mapAttrs (name:
|
|
||||||
# { ... }: {
|
|
||||||
# entities = [
|
|
||||||
# "light.${name}"
|
|
||||||
# "sensor.link_${name}"
|
|
||||||
# "binary_sensor.update_${name}"
|
|
||||||
# ];
|
|
||||||
# }) allDevices;
|
|
||||||
|
|
||||||
# # sort lights into given groups.
|
|
||||||
# sortedInGroups = let
|
|
||||||
# groupEntries = lib.zipAttrs (lib.flatten (lib.mapAttrsToList (name:
|
|
||||||
# { groups ? [ ], ... }:
|
|
||||||
# map (groupName: { "${groupName}" = "light.${name}"; }) groups)
|
|
||||||
# allDevices));
|
|
||||||
# in lib.mapAttrs (name: entities: { inherit entities; }) groupEntries;
|
|
||||||
|
|
||||||
# in sortedInGroups // lightGroups // {
|
|
||||||
# all_lights.entities =
|
|
||||||
# lib.mapAttrsToList (name: { ... }: "light.${name}") allDevices;
|
|
||||||
# };
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in a new issue