ma ham: use new home-assistant merge function

This commit is contained in:
makefu 2020-11-18 22:23:33 +01:00
parent e04ae7a314
commit 78fc347be0
No known key found for this signature in database
GPG Key ID: 36F7711F3FC0F225
9 changed files with 350 additions and 339 deletions

View File

@ -7,27 +7,31 @@ let
}; };
}; };
sec = seconds: { delay.seconds = seconds; }; sec = seconds: { delay.seconds = seconds; };
in [ in
{ {
alias = "Nightly reboot of firetv"; services.home-assistant.config.sensor =
trigger = { [
platform = "time"; {
at = "03:00:00"; alias = "Nightly reboot of firetv";
}; trigger = {
action = [ platform = "time";
(cmd "reboot") at = "03:00:00";
(sec 90) # go to my music because apparently select_source does not seem to always work };
(cmd "HOME") action = [
(sec 2) (cmd "reboot")
(cmd "DOWN") (sec 90) # go to my music because apparently select_source does not seem to always work
(sec 2) (cmd "HOME")
(cmd "DOWN") (sec 2)
(sec 2) (cmd "DOWN")
(cmd "ENTER") (sec 2)
(sec 4) (cmd "DOWN")
(cmd "RIGHT") (sec 2)
(sec 2) (cmd "ENTER")
(cmd "RIGHT") (sec 4)
]; (cmd "RIGHT")
} (sec 2)
] (cmd "RIGHT")
];
}
];
}

View File

@ -2,7 +2,12 @@ let
cred = import <secrets/ham/nextcloud-calendar>; cred = import <secrets/ham/nextcloud-calendar>;
in in
{ {
platform = "caldav"; services.home-assistant.config.calendar =
inherit (cred) username password; [
url = "https://o.euer.krebsco.de/remote.php/dav"; {
platform = "caldav";
inherit (cred) username password;
url = "https://o.euer.krebsco.de/remote.php/dav";
}
];
} }

View File

@ -4,39 +4,27 @@
## wake-on-lan server ## wake-on-lan server
## ##
let let
upkgs = (import <nixpkgs-unstable> {}).pkgs; prefix = (import ./lib).prefix;
hlib = (import ./lib);
prefix = hlib.prefix;
tasmota = hlib.tasmota;
firetv_stick = "192.168.1.24"; firetv_stick = "192.168.1.24";
hassdir = "/var/lib/hass"; hassdir = "/var/lib/hass";
zigbee = import ./multi/zigbee2mqtt.nix;
#flurlicht = import ./multi/flurlicht.nix;
kurzzeitwecker = import ./multi/kurzzeitwecker.nix;
firetv_restart = import ./multi/firetv_restart.nix;
the_playlist = import ./multi/the_playlist.nix;
fliegen-counter = import ./multi/fliegen-couter.nix;
# switch
# automation
# binary_sensor
# sensor
# input_select
# timer
in { in {
imports = [ imports = [
./mqtt.nix ./mqtt.nix
./zigbee2mqtt/default.nix
# hass config
./zigbee2mqtt/hass.nix
# ./multi/flurlicht.nix
./multi/kurzzeitwecker.nix
./multi/the_playlist.nix
./multi/fliegen-couter.nix
./device_tracker/openwrt.nix
./sensor/outside.nix
./calendar/nextcloud.nix
./automation/firetv_restart.nix
]; ];
services.home-assistant = { services.home-assistant = {
package = (upkgs.home-assistant.overrideAttrs (old: {
doCheck = false;
checkPhase = ":";
installCheckPhase = ":";
})).override {
extraPackages = ps: with ps; [
python-forecastio jsonrpc-async jsonrpc-websocket mpd2 pkgs.picotts androidtv
];
};
config = { config = {
influxdb = { influxdb = {
database = "ham"; database = "ham";
@ -48,8 +36,6 @@ in {
}; };
config = {}; config = {};
input_select = zigbee.input_select; # dict
timer = zigbee.timer // kurzzeitwecker.timer; # dict
homeassistant = { homeassistant = {
name = "Home"; time_zone = "Europe/Berlin"; name = "Home"; time_zone = "Europe/Berlin";
latitude = "48.7687"; latitude = "48.7687";
@ -60,12 +46,10 @@ in {
conversation = {}; conversation = {};
history = {}; history = {};
logbook = {}; logbook = {};
counter = fliegen-counter.counter;
logger = { logger = {
default = "info"; default = "info";
}; };
rest_command = {} rest_command = {};
// the_playlist.rest_command;
tts = [ tts = [
{ platform = "google_translate"; { platform = "google_translate";
language = "de"; language = "de";
@ -81,7 +65,7 @@ in {
# "platform": "broadcast", # "platform": "broadcast",
# "api_key": "", # talk to Botfather /newbot # "api_key": "", # talk to Botfather /newbot
# "allowed_chat_ids": [ ID ] # curl -X GET # https://api.telegram.org/bot<YOUR_API_TOKEN>/getUpdates # "allowed_chat_ids": [ ID ] # curl -X GET # https://api.telegram.org/bot<YOUR_API_TOKEN>/getUpdates
#} # }
(builtins.fromJSON (builtins.fromJSON
(builtins.readFile <secrets/hass/telegram-bot.json>)) (builtins.readFile <secrets/hass/telegram-bot.json>))
]; ];
@ -101,7 +85,6 @@ in {
]; ];
sun.elevation = 247; sun.elevation = 247;
recorder = {}; recorder = {};
device_tracker = (import ./device_tracker/openwrt.nix);
media_player = [ media_player = [
{ platform = "FireTV Stick kodi"; { platform = "FireTV Stick kodi";
host = firetv_stick; host = firetv_stick;
@ -149,25 +132,12 @@ in {
monitored_conditions = [ "ping" "download" "upload" ]; monitored_conditions = [ "ping" "download" "upload" ];
} }
# https://www.home-assistant.io/cookbook/automation_for_rainy_days/ # https://www.home-assistant.io/cookbook/automation_for_rainy_days/
] ];
++ ((import ./sensor/outside.nix) {inherit lib;})
++ the_playlist.sensor
++ zigbee.sensor ;
frontend = { }; frontend = { };
calendar = [ (import ./calendar/nextcloud.nix) ];
# light = flurlicht.light;
http = { }; http = { };
switch = []; switch = [];
automation = [] automation = [];
++ (import ./automation/firetv_restart.nix) script = { };
++ kurzzeitwecker.automation
#++ flurlicht.automation
++ the_playlist.automation
++ fliegen-counter.automation
++ zigbee.automation;
script =
{ }
// kurzzeitwecker.script; # dict
}; };
enable = true; enable = true;
configDir = hassdir; configDir = hassdir;

View File

@ -1,10 +1,13 @@
[ {
{ platform = "luci"; services.home-assistant.config.device_tracker =
host = "192.168.1.5"; [
username = "root"; { platform = "luci";
password = import <secrets/hass/router.nix>; host = "192.168.1.5";
interval_seconds = 30; # instead of 12seconds username = "root";
consider_home = 300; # 5 minutes timeout password = import <secrets/hass/router.nix>;
new_device_defaults.track_new_devices = true; interval_seconds = 30; # instead of 12seconds
} consider_home = 300; # 5 minutes timeout
] new_device_defaults.track_new_devices = true;
}
];
}

View File

@ -15,53 +15,57 @@ let
data.entity_id = "counter.${for}_fliegen"; data.entity_id = "counter.${for}_fliegen";
}) incr; }) incr;
}; };
in { in
counter = { {
felix_fliegen = {}; services.home-assistant.config =
misa_fliegen = {}; {
counter = {
felix_fliegen = {};
misa_fliegen = {};
};
automation = [
(fly_swat "misa" "btn1" "single" 1)
(fly_swat "misa" "btn1" "double" 2)
(fly_swat "misa" "btn1" "triple" 3)
(fly_swat "felix" "btn2" "single" 1)
(fly_swat "felix" "btn2" "double" 2)
(fly_swat "felix" "btn2" "triple" 3)
{
alias = "Send Fly Counter Update";
trigger = [
{
platform = "state";
entity_id = "counter.felix_fliegen";
}
{
platform = "state";
entity_id = "counter.misa_fliegen";
#above = -1;
}
];
action = {
service = "mqtt.publish";
data_template = { # gauge-style
payload = "{{ trigger.to_state.state }}";
topic = "${hlib.prefix}/flycounter/{{ trigger.to_state.object_id }}";
};
};
}
{
alias = "Reset Fly counters on midnight";
trigger = {
platform = "time";
at = "01:00:00";
};
action = [
{ service = "counter.reset";
data.entity_id = "counter.misa_fliegen";
}
{ service = "counter.reset";
data.entity_id = "counter.felix_fliegen";
}
];
}
];
}; };
automation = [
(fly_swat "misa" "btn1" "single" 1)
(fly_swat "misa" "btn1" "double" 2)
(fly_swat "misa" "btn1" "triple" 3)
(fly_swat "felix" "btn2" "single" 1)
(fly_swat "felix" "btn2" "double" 2)
(fly_swat "felix" "btn2" "triple" 3)
{
alias = "Send Fly Counter Update";
trigger = [
{
platform = "state";
entity_id = "counter.felix_fliegen";
}
{
platform = "state";
entity_id = "counter.misa_fliegen";
#above = -1;
}
];
action = {
service = "mqtt.publish";
data_template = { # gauge-style
payload = "{{ trigger.to_state.state }}";
topic = "${hlib.prefix}/flycounter/{{ trigger.to_state.object_id }}";
};
};
}
{
alias = "Reset Fly counters on midnight";
trigger = {
platform = "time";
at = "01:00:00";
};
action = [
{ service = "counter.reset";
data.entity_id = "counter.misa_fliegen";
}
{ service = "counter.reset";
data.entity_id = "counter.felix_fliegen";
}
];
}
];
} }

View File

@ -8,125 +8,128 @@
# notify.telegrambot # notify.telegrambot
let let
button = "sensor.zigbee_btn2_click"; button = "sensor.zigbee_btn2_click";
in { in
timer.kurzzeitwecker = {
{ services.home-assistant.config = {
name = "Zigbee Kurzzeitwecker"; timer.kurzzeitwecker =
duration = 300;
};
script.add_5_minutes_to_kurzzeitwecker =
{ {
alias = "Add 5 minutes to kurzzeitwecker"; name = "Zigbee Kurzzeitwecker";
sequence = [ duration = 300;
{ service = "timer.pause"; };
entity_id = "timer.kurzzeitwecker"; script.add_5_minutes_to_kurzzeitwecker =
} {
{ service = "timer.start"; alias = "Add 5 minutes to kurzzeitwecker";
data_template = { sequence = [
{ service = "timer.pause";
entity_id = "timer.kurzzeitwecker"; entity_id = "timer.kurzzeitwecker";
duration = '' }
{% set r = state_attr('timer.kurzzeitwecker', 'remaining') ~ '-0000' %} { service = "timer.start";
{% set t = strptime(r, '%H:%M:%S.%f%z') %} data_template = {
{{ (as_timestamp(t) + 300) | timestamp_custom('%H:%M:%S', false) }} entity_id = "timer.kurzzeitwecker";
''; duration = ''
{% set r = state_attr('timer.kurzzeitwecker', 'remaining') ~ '-0000' %}
{% set t = strptime(r, '%H:%M:%S.%f%z') %}
{{ (as_timestamp(t) + 300) | timestamp_custom('%H:%M:%S', false) }}
'';
};
}
];
};
automation =
[
{
alias = "Start Timer 5min";
trigger = {
platform = "state";
entity_id = button;
to = "single";
}; };
condition =
{ condition = "state";
entity_id = "timer.kurzzeitwecker";
state = "idle";
};
action = [
{ service = "timer.start";
entity_id = "timer.kurzzeitwecker";
data.duration = "00:05:00";
}
{
service = "notify.telegrambot";
data.message = "Timer gestartet {{state_attr('timer.kurzzeitwecker', 'remaining') }}, verbleibend ";
}
];
}
{
alias = "Add Timer 5min";
trigger = {
platform = "state";
entity_id = button;
to = "single";
};
condition =
{ condition = "state";
entity_id = "timer.kurzzeitwecker";
state = "active";
};
action = [
{ service = "homeassistant.turn_on";
entity_id = "script.add_5_minutes_to_kurzzeitwecker";
}
{
service = "notify.telegrambot";
data.message = ''Timer um 5 minuten verlängert, {{ state_attr('timer.kurzzeitwecker', 'remaining') | truncate(9,True," ") }} verbleibend '';
}
];
}
{
alias = "Stop timer on double click";
trigger = [
{
platform = "state";
entity_id = button;
to = "double";
}
{
platform = "state";
entity_id = button;
to = "triple";
}
];
condition =
{
condition = "state";
entity_id = "timer.kurzzeitwecker";
state = "active";
};
action = [
{
service = "timer.cancel";
entity_id = "timer.kurzzeitwecker";
}
{
service = "notify.telegrambot";
data.message = "Timer gestoppt, abgebrochen";
}
];
}
{
alias = "Timer Finished";
trigger = {
platform = "event";
event_type = "timer.finished";
event_data.entity_id = "timer.kurzzeitwecker";
};
action = [
{
service = "notify.telegrambot";
data.message = "Timer beendet";
}
];
} }
]; ];
}; };
automation =
[
{
alias = "Start Timer 5min";
trigger = {
platform = "state";
entity_id = button;
to = "single";
};
condition =
{ condition = "state";
entity_id = "timer.kurzzeitwecker";
state = "idle";
};
action = [
{ service = "timer.start";
entity_id = "timer.kurzzeitwecker";
data.duration = "00:05:00";
}
{
service = "notify.telegrambot";
data.message = "Timer gestartet {{state_attr('timer.kurzzeitwecker', 'remaining') }}, verbleibend ";
}
];
}
{
alias = "Add Timer 5min";
trigger = {
platform = "state";
entity_id = button;
to = "single";
};
condition =
{ condition = "state";
entity_id = "timer.kurzzeitwecker";
state = "active";
};
action = [
{ service = "homeassistant.turn_on";
entity_id = "script.add_5_minutes_to_kurzzeitwecker";
}
{
service = "notify.telegrambot";
data.message = ''Timer um 5 minuten verlängert, {{ state_attr('timer.kurzzeitwecker', 'remaining') | truncate(9,True," ") }} verbleibend '';
}
];
}
{
alias = "Stop timer on double click";
trigger = [
{
platform = "state";
entity_id = button;
to = "double";
}
{
platform = "state";
entity_id = button;
to = "triple";
}
];
condition =
{
condition = "state";
entity_id = "timer.kurzzeitwecker";
state = "active";
};
action = [
{
service = "timer.cancel";
entity_id = "timer.kurzzeitwecker";
}
{
service = "notify.telegrambot";
data.message = "Timer gestoppt, abgebrochen";
}
];
}
{
alias = "Timer Finished";
trigger = {
platform = "event";
event_type = "timer.finished";
event_data.entity_id = "timer.kurzzeitwecker";
};
action = [
{
service = "notify.telegrambot";
data.message = "Timer beendet";
}
];
}
];
} }

View File

@ -7,77 +7,80 @@
# automation # automation
# sensor # sensor
{ {
rest_command = { services.home-assistant.config =
good_song = { {
url = "http://prism.r:8001/good"; rest_command = {
method = "POST"; good_song = {
}; url = "http://prism.r:8001/good";
bad_song = { method = "POST";
url = "http://prism.r:8001/skip"; };
method = "POST"; bad_song = {
url = "http://prism.r:8001/skip";
method = "POST";
};
}; };
automation = [
{
alias = "playlist song publish";
trigger = {
#platform = "event";
#event_data.entity_id = "sensor.the_playlist_song";
platform = "state";
entity_id = "sensor.the_playlist_song";
};
action = {
service = "mqtt.publish";
data = {
topic = "/ham/the_playlist/song";
payload_template = "{{ states.sensor.the_playlist_song.state }}";
};
};
}
{
alias = "playlist upvote on button";
trigger = {
platform = "state";
entity_id = "binary_sensor.playlist_button_good";
from = "off";
to = "on";
};
action.service = "rest_command.good_song";
}
{
alias = "playlist downvote on button";
trigger = {
platform = "state";
entity_id = "binary_sensor.playlist_button_bad";
from = "off";
to = "on";
};
action.service = "rest_command.bad_song";
}
];
sensor = [
{ platform = "rest";
name = "pl";
resource = "http://prism.r:8001/current";
scan_interval = 30;
value_template = "1";
json_attributes = [ "name" "filename" "youtube" ];
}
{ platform = "template";
sensors = {
the_playlist_song = {
friendly_name = "Current Song";
value_template = ''{{ states.sensor.pl.attributes['name'] }}'';
};
the_playlist_url = {
friendly_name = "Song Youtube URL";
value_template = ''{{ states.sensor.pl.attributes['youtube'] }}'';
};
the_playlist_filename = {
friendly_name = "Song Filename";
value_template = ''{{ states.sensor.pl.attributes['filename'] }}'';
};
};
}
];
}; };
automation = [
{
alias = "playlist song publish";
trigger = {
#platform = "event";
#event_data.entity_id = "sensor.the_playlist_song";
platform = "state";
entity_id = "sensor.the_playlist_song";
};
action = {
service = "mqtt.publish";
data = {
topic = "/ham/the_playlist/song";
payload_template = "{{ states.sensor.the_playlist_song.state }}";
};
};
}
{
alias = "playlist upvote on button";
trigger = {
platform = "state";
entity_id = "binary_sensor.playlist_button_good";
from = "off";
to = "on";
};
action.service = "rest_command.good_song";
}
{
alias = "playlist downvote on button";
trigger = {
platform = "state";
entity_id = "binary_sensor.playlist_button_bad";
from = "off";
to = "on";
};
action.service = "rest_command.bad_song";
}
];
sensor = [
{ platform = "rest";
name = "pl";
resource = "http://prism.r:8001/current";
scan_interval = 30;
value_template = "1";
json_attributes = [ "name" "filename" "youtube" ];
}
{ platform = "template";
sensors = {
the_playlist_song = {
friendly_name = "Current Song";
value_template = ''{{ states.sensor.pl.attributes['name'] }}'';
};
the_playlist_url = {
friendly_name = "Song Youtube URL";
value_template = ''{{ states.sensor.pl.attributes['youtube'] }}'';
};
the_playlist_filename = {
friendly_name = "Song Filename";
value_template = ''{{ states.sensor.pl.attributes['filename'] }}'';
};
};
}
];
} }

View File

@ -1,20 +1,25 @@
{lib,...}: [ {lib,...}:
{ platform = "darksky";
api_key = lib.removeSuffix "\n" {
(builtins.readFile <secrets/hass/darksky.apikey>); services.home-assistant.config.sensor =
language = "de"; [
monitored_conditions = [ { platform = "darksky";
"summary" "icon" api_key = lib.removeSuffix "\n"
"nearest_storm_distance" "precip_probability" (builtins.readFile <secrets/hass/darksky.apikey>);
"precip_intensity" language = "de";
"temperature" # "temperature_high" "temperature_low" monitored_conditions = [
"apparent_temperature" "summary" "icon"
"hourly_summary" # next 24 hours text "nearest_storm_distance" "precip_probability"
"humidity" "precip_intensity"
"pressure" "temperature" # "temperature_high" "temperature_low"
"uv_index" "apparent_temperature"
]; "hourly_summary" # next 24 hours text
units = "si" ; "humidity"
scan_interval = "00:30:00"; "pressure"
} "uv_index"
] ];
units = "si" ;
scan_interval = "00:30:00";
}
];
}

View File

@ -0,0 +1,14 @@
{
availability_topic: /ham/zigbee/bridge/state
command_topic: /ham/zigbee/flur_arbeitszimmer_osram2/set
- platform: "mqtt"
state_topic: "zigbee2mqtt/<FRIENDLY_NAME>"
availability_topic: "zigbee2mqtt/bridge/state"
payload_on: true
payload_off: false
value_template: "{{ value_json.battery_low}}"
device_class: "battery"
}