diff options
Diffstat (limited to 'makefu/2configs')
51 files changed, 1170 insertions, 442 deletions
diff --git a/makefu/2configs/bureautomation/automation/daily-news.nix b/makefu/2configs/bureautomation/automation/daily-news.nix new file mode 100644 index 000000000..2bafe4795 --- /dev/null +++ b/makefu/2configs/bureautomation/automation/daily-news.nix @@ -0,0 +1,20 @@ +[ + { + alias = "Daily news for Felix"; + trigger = { + platform = "time"; + at = "07:35:00"; + }; + action = + [ + { + service = "notify.telegrambot"; + data_template = { + title = "Daily News"; + # TODO + message = ""; + }; + } + ]; + } +] diff --git a/makefu/2configs/bureautomation/automation/quotes.nix b/makefu/2configs/bureautomation/automation/quotes.nix new file mode 100644 index 000000000..c4625ae30 --- /dev/null +++ b/makefu/2configs/bureautomation/automation/quotes.nix @@ -0,0 +1,4 @@ +# heiss +Lieber Freund, was für ein Sommer! Ich denke Sie mir im Zimmer sitzend, mehr Omelette als Mensch. +Sommer ist die Zeit, in der es zu heiß ist, um das zu tun, wozu es im Winter zu kalt war. + diff --git a/makefu/2configs/bureautomation/automation/schlechteluft.nix b/makefu/2configs/bureautomation/automation/schlechteluft.nix index 8787ee280..370334743 100644 --- a/makefu/2configs/bureautomation/automation/schlechteluft.nix +++ b/makefu/2configs/bureautomation/automation/schlechteluft.nix @@ -66,9 +66,6 @@ in [ language = "de"; }; } - { service = "notify.matrix_notify"; - data_template.message = "Schlechte Luft Alarm seit ${toString long_threshold} Minuten ({{states.sensor.air_quality.state_with_unit}})!"; - } ]; } ] diff --git a/makefu/2configs/bureautomation/camera/stuttgart.nix b/makefu/2configs/bureautomation/camera/stuttgart.nix new file mode 100644 index 000000000..78cbeb3e2 --- /dev/null +++ b/makefu/2configs/bureautomation/camera/stuttgart.nix @@ -0,0 +1,26 @@ + +let + cam = name: still_image_url: + { + inherit name still_image_url; + platform = "generic"; + }; +in [ + ( cam "Max-Eyth-See" https://www.wav-stuttgart.de/webcam/_/webcam1.jpg ) + ( cam "Wilhelma" http://webcam.wilhelma.de/webcam02/webcam02.jpg ) + ( cam "Marktplatz" https://webcam.stuttgart.de/wcam007/current.jpg ) + ( cam "Schoch Areal" https://webcam.stuttgart.de/wcam004/current.jpg ) + ( cam "Leuze" https://webcam.stuttgart.de/wcam005/current.jpg ) + ( cam "Straße Wilhelma" https://webcam.stuttgart.de/wcam006/current.jpg ) + ( cam "Fernsehturm 1" http://webcam.fernsehturmstuttgart.com/current.jpg ) + ( cam "Fernsehturm 2" http://webcam.fernsehturmstuttgart.com/current2.jpg ) + ( cam "Feuerbach Lemberg" http://www.regio7.de/handy/current.jpg ) + ( cam "Flughafen Stuttgart 1" http://webcam.flughafen-stuttgart.de/Flughafen_Stuttgart_Webcam2.jpg ) + ( cam "Flughafen Stuttgart 2" http://webcam.flughafen-stuttgart.de/Flughafen_Stuttgart_Webcam5.jpg ) + ( cam "Flughafen Stuttgart 3" http://webcam.flughafen-stuttgart.de/Flughafen_Stuttgart_Webcam7.jpg ) + ( cam "S21 1" http://webcam-bahnprojekt-stuttgart-ulm.de/S21-Turm-03/s21-turm03.jpg ) + ( cam "S21 2" http://webcam-bahnprojekt-stuttgart-ulm.de/S21-Turm-02/s21-turm-02.jpg ) + ( cam "S21 3" http://webcam-bahnprojekt-stuttgart-ulm.de/S21-Turm-01/s21-turm-01.jpg ) + ( cam "S21 4" http://webcam-bahnprojekt-stuttgart-ulm.de/S21-Jaegerstrasse-Nordkopf/s21-jaegerstrassse-nordkopf.jpg ) + ( cam "S21 5" http://webcam-bahnprojekt-stuttgart-ulm.de/S21-Bahndirektion-Nord/S21-Bundesbahndirektion-Nord.jpg ) +] diff --git a/makefu/2configs/bureautomation/default.nix b/makefu/2configs/bureautomation/default.nix index c55bc1d14..3c1659558 100644 --- a/makefu/2configs/bureautomation/default.nix +++ b/makefu/2configs/bureautomation/default.nix @@ -11,6 +11,7 @@ in { imports = [ ./ota.nix ./comic-updater.nix + ./puppy-proxy.nix ]; networking.firewall.allowedTCPPorts = [ 8123 ]; state = [ "/var/lib/hass/known_devices.yaml" ]; @@ -33,13 +34,14 @@ in { ''; })).override { extraPackages = ps: with ps; [ - pkgs.pico2wave + pkgs.picotts python-forecastio jsonrpc-async jsonrpc-websocket mpd2 (callPackage ./deps/openwrt-luci-rpc.nix { }) ]; }; autoExtraComponents = true; config = { + discovery = {}; homeassistant = { name = "Bureautomation"; time_zone = "Europe/Berlin"; @@ -72,6 +74,8 @@ in { }; matrix = matrix.matrix; mqtt = { + discovery = true; + discovery_prefix = "homeassistant"; broker = "localhost"; port = 1883; client_id = "home-assistant"; @@ -124,7 +128,7 @@ in { frosch.script ten_hours.script mittagessen.script - standup.script + # standup.script ]; binary_sensor = (import ./binary_sensor/buttons.nix) @@ -145,7 +149,8 @@ in { camera = (import ./camera/verkehrskamera.nix) - ++ (import ./camera/comic.nix); + ++ (import ./camera/comic.nix) + ++ (import ./camera/stuttgart.nix); person = (import ./person/team.nix ); @@ -198,9 +203,10 @@ in { "switch.blitzdings" "switch.fernseher" "switch.feuer" + "switch.frosch_blasen" "light.status_felix" - "light.status_daniel" - "light.buslicht" + # "light.status_daniel" + # "light.buslicht" ]; team = [ "person.thorsten" @@ -212,6 +218,7 @@ in { "person.thierry" "person.frank" "person.emeka" + "person.tancrede" #"device_tracker.felix_phone" #"device_tracker.ecki_tablet" #"device_tracker.daniel_phone" @@ -228,6 +235,7 @@ in { "camera.Baumarkt" "camera.Autobahn_Heilbronn" "camera.Autobahn_Singen" + "camera.puppies" "camera.poorly_drawn_lines" ]; nachtlicht = [ @@ -264,7 +272,6 @@ in { outside = [ # "sensor.ditzingen_pm10" # "sensor.ditzingen_pm25" - "sensor.dark_sky_icon" "sensor.dark_sky_temperature" "sensor.dark_sky_humidity" "sensor.dark_sky_uv_index" @@ -282,7 +289,7 @@ in { ++ (import ./automation/hass-restart.nix) ++ ten_hours.automation ++ matrix.automation - ++ standup.automation + # ++ standup.automation ++ frosch.automation ++ mittagessen.automation; device_tracker = (import ./device_tracker/openwrt.nix ); diff --git a/makefu/2configs/bureautomation/deps/aresponses.nix b/makefu/2configs/bureautomation/deps/aresponses.nix new file mode 100644 index 000000000..9e64d2f65 --- /dev/null +++ b/makefu/2configs/bureautomation/deps/aresponses.nix @@ -0,0 +1,38 @@ +{ lib +, buildPythonPackage +, fetchPypi +# propagatedBuildInputs +, aiohttp +# buildInputs +, pytest +, pytest-asyncio +}: + +buildPythonPackage rec { + pname = "aresponses"; + version = "1.1.1"; + + src = fetchPypi { + inherit pname version; + sha256 = "d1d6ef52b9a97142d106688cf9b112602ef3dc66f6368de8f91f47241d8cfc9c"; + }; + + propagatedBuildInputs = [ + aiohttp + ]; + + buildInputs = [ + pytest + pytest-asyncio + ]; + + # tests only distributed via git repository, not pypi + doCheck = false; + + meta = with lib; { + description = "Asyncio testing server"; + homepage = "https://github.com/circleup/aresponses"; + license = licenses.mit; + maintainers = [ maintainers.makefu ]; + }; +} diff --git a/makefu/2configs/bureautomation/multi/10h_timers.nix b/makefu/2configs/bureautomation/multi/10h_timers.nix index 73709e738..a30fb28b0 100644 --- a/makefu/2configs/bureautomation/multi/10h_timers.nix +++ b/makefu/2configs/bureautomation/multi/10h_timers.nix @@ -2,6 +2,8 @@ let persons = [ "frank" "daniel" "thorsten" "carsten" "ecki" "felix" "thierry" # tjeri + "emeka" + "tancrede" ]; random_zu_lange = name: ''{{ [ "Du musst jetzt endlich nach Hause gehen ${name}!", @@ -20,6 +22,7 @@ let random_announce = name: ''{{ [ "${name} is in da House", "Ahoi ${name}", + "Hallöchen Popöchen ${name}", "Moinsen ${name}", "Moin Moin ${name}", "Palim, Palim ${name}", @@ -55,7 +58,7 @@ let "Und es startet für ${name} wieder ein Tag im Paradies", "Lieber ${name}, Markus Keck hat dich bereits drei mal Versucht anzurufen!", "Trotz schwerer Männergrippe ist ${name} heute im Büro erschienen.", - "${name} kenne keine Parteien mehr, ${name} kenne nur noch Arbeitsplätze", + "${name} kennt keine Parteien mehr, ${name} kennt nur noch Arbeitsplätze", "${name}, Frage nicht, was dein Arbeitsplatz für dich tun kann. Frage, was du für deinen Arbeitsplatz tun kannst", "${name} läuft bis in den Jemen - für sein Unternehmen. ${name} schwimmt bis nach Birma - für seine Firma", "Der Cyberian ${name} ist gekommen um die Bahnwelt vor Cyber-Angriffen zu schützen", @@ -121,7 +124,6 @@ let { alias = "start ${name} 10h"; trigger = { platform = "state"; - # TODO: ecki entity_id = [ "person.${name}"]; from = "not_home"; to = "home"; @@ -129,13 +131,11 @@ let condition = { condition = "and"; conditions = [ - { - condition = "state"; + { condition = "state"; entity_id = "timer.${name}_10h"; state = "idle"; } - { - condition = "time"; + { condition = "time"; after = "06:00:00"; before = "12:00:00"; } @@ -146,8 +146,8 @@ let entity_id = [ "timer.${name}_10h" ] ; } { service = "homeassistant.turn_on"; - entity_id = [ - # "switch.fernseher" + entity_id = + [ "switch.fernseher" "script.blitz_10s" "script.announce_${name}" ]; @@ -155,30 +155,45 @@ let ]; } + { alias = "pommes announce ${name}"; + trigger = + { platform = "event"; + event_type = "timer.started"; + event_data.entity_id = "timer.${name}_10h"; + }; + + condition = + { condition = "state"; + entity_id = "binary_sensor.pommes"; + state = "on"; + }; + + action = + { service = "homeassistant.turn_on"; + entity_id = "script.blasen_10s" ; + }; + } + { alias = "Zu lange ${name}!"; trigger = - { - platform = "event"; + { platform = "event"; event_type = "timer.finished"; event_data.entity_id = "timer.${name}_10h"; }; condition = - { - condition = "state"; + { condition = "state"; entity_id = "person.${name}"; state = "home"; }; action = - [ - { service = "homeassistant.turn_on"; - entity_id = [ - "script.blitz_10s" - "script.zu_lange_${name}" - ]; - } - ]; + { service = "homeassistant.turn_on"; + entity_id = [ + "script.blitz_10s" + "script.zu_lange_${name}" + ]; + }; } ]; in @@ -187,7 +202,7 @@ in (map tmr_10h persons); automation = (lib.flatten (map automation_10h persons)); script = lib.fold lib.recursiveUpdate {} ( - (map (p: announce_user p) persons) ++ - (map (p: zu_lange_user p) persons) + (map announce_user persons) ++ + (map zu_lange_user persons) ); } diff --git a/makefu/2configs/bureautomation/multi/daily-standup.nix b/makefu/2configs/bureautomation/multi/daily-standup.nix index f5bd85b9d..38fb22c1a 100644 --- a/makefu/2configs/bureautomation/multi/daily-standup.nix +++ b/makefu/2configs/bureautomation/multi/daily-standup.nix @@ -3,9 +3,9 @@ let random_daily_text = ''{{ [ "Es ist so weit, es ist Standup Zeit!", "Zehn Uhr Fünfunddreissig ist genau die richtige Zeit für ein Standup!", - "Hat jeder seine Hausaufgaben gemacht? Bitte einmal aufstehen und den Zettel nach rechts geben", + "Hat jeder seine zum Standup seine Hausaufgaben gemacht. Bitte einmal aufstehen und den Zettel nach rechts geben", "Aufstehen zum Appell, es wird die Anwesenheit kontrolliert!", - "Hallo Kinder, wisst ihr welche Zeit es ist??? ... Genau! ... Standup Zeit!", + "Hallo Kinder, wisst ihr welche Zeit es ist ... Genau ... Standup Zeit!", "Morgens, halb elf in Deutschland - das Standupchen" ] | random }}''; in { diff --git a/makefu/2configs/bureautomation/multi/frosch.nix b/makefu/2configs/bureautomation/multi/frosch.nix index c0e267b69..816539d46 100644 --- a/makefu/2configs/bureautomation/multi/frosch.nix +++ b/makefu/2configs/bureautomation/multi/frosch.nix @@ -1,5 +1,6 @@ { lib }: # needs: binary_sensor.pommes +# notify.matrix_notify let random_pommes = '' {{ [ "Nur ein Pommes Tag ist ein guter Tag", @@ -51,7 +52,7 @@ in { { alias = "Pommeszeit"; trigger = { platform = "time"; - at = "12:15:00"; + at = "11:00:00"; }; condition = { condition = "state"; @@ -89,6 +90,9 @@ in { language = "de"; }; } + { service = "notify.matrix_notify"; + data_template.message = random_pommes; + } ]; }; }; diff --git a/makefu/2configs/bureautomation/multi/mittagessen.nix b/makefu/2configs/bureautomation/multi/mittagessen.nix index 3ec70998d..2a9993e92 100644 --- a/makefu/2configs/bureautomation/multi/mittagessen.nix +++ b/makefu/2configs/bureautomation/multi/mittagessen.nix @@ -22,9 +22,9 @@ let "Heute bei Aramark: Rezepte aus Ländern, von denen Ihr noch nie gehört habt, Deutsch zubereitet", "Heute bei Aramark im Angebot: Scheiss mit Reis oder Reste von Freitag", "MHHHH es ist wieder mal so weit, lecker Bayerisch Kraut mit asiatischen Nudeln", - "Es ist 12 Uhr 30 und Heute gibt es Pommes - vielleicht", - "Heute gibt es Pommes - leider nicht einzeln zu verkaufen, da die Schälchen alle sind", - "Heute gibt es Pommes - verarscht! Natürlich gibt es nur salzlosen Reis, oder salzlose Nudeln.", + "Es ist 12 Uhr 30 und Heute gibt es nur Pommes, wenn der Pommesfrosch Blasen gespuckt hat.", + "Heute gibt es Pommes leider nicht einzeln zu verkaufen, da die Schälchen alle sind", + "Heute gibt es Pommes, verarscht! Natürlich gibt es nur salzlosen Reis, oder salzlose Nudeln.", "Heute auf dem Speiseplan: Sushi vom Vortag", "Aramark Kantinenessen: Der Hunger treibt es rein, der Geiz hält es drin.", "Das Essen in der Snackeria sieht heute wie die bessere Alternative aus", diff --git a/makefu/2configs/bureautomation/person/team.nix b/makefu/2configs/bureautomation/person/team.nix index fc2d9ba17..2a15abaf5 100644 --- a/makefu/2configs/bureautomation/person/team.nix +++ b/makefu/2configs/bureautomation/person/team.nix @@ -50,16 +50,23 @@ "device_tracker.emeka_phone" ]; } - #{ name = "Sabine"; - # id = 9; - # device_trackers = [ - # "device_tracker.sabine_phone" - # ]; - #} + { name = "Sabine"; + id = 9; + device_trackers = [ + "device_tracker.sabine_phone" + ]; + } { name = "Tobias"; id = 10; device_trackers = [ "device_tracker.tobias_phone" ]; } + { name = "Tancrede"; + id = 11; + device_trackers = [ + "device_tracker.tancrede_phone" + "device_tracker.tancrede_laptop" + ]; + } ] diff --git a/makefu/2configs/bureautomation/puppy-proxy.nix b/makefu/2configs/bureautomation/puppy-proxy.nix new file mode 100644 index 000000000..9e3542509 --- /dev/null +++ b/makefu/2configs/bureautomation/puppy-proxy.nix @@ -0,0 +1,5 @@ +{ pkgs, ... }: +# streamlink 'https://www.ustream.tv/channel/maximilian-schnauzers-cam4' worst --player-external-http --player-external-http-port 15321 --player-passthrough rtsp --retry-streams 60 +{ + environment.systemPackages = [ pkgs.liveproxy ]; +} diff --git a/makefu/2configs/bureautomation/script/multi_blink.nix b/makefu/2configs/bureautomation/script/multi_blink.nix index 5076111ac..e6acdc303 100644 --- a/makefu/2configs/bureautomation/script/multi_blink.nix +++ b/makefu/2configs/bureautomation/script/multi_blink.nix @@ -36,6 +36,18 @@ in { count = 1; alias = "blitz for 10 seconds"; }); + blasen_10s = (flash_entity { + entity = "switch.frosch_blasen"; + delay = 10000; + count = 1; + alias = "blasen for 10 seconds"; + }); + blasen_30s = (flash_entity { + entity = "switch.frosch_blasen"; + delay = 30000; + count = 1; + alias = "blasen for 30 seconds"; + }); schlechteluft = (flash_entity { entity = "switch.bauarbeiterlampe"; alias = "Schlechte Luft Lampe 5 secs"; diff --git a/makefu/2configs/bureautomation/stream/puppies.nix b/makefu/2configs/bureautomation/stream/puppies.nix new file mode 100644 index 000000000..d22be9ea6 --- /dev/null +++ b/makefu/2configs/bureautomation/stream/puppies.nix @@ -0,0 +1,4 @@ +[ + { stream_source = "http://127.0.0.1:53422/base64/c3RyZWFtbGluayBodHRwczovL3d3dy51c3RyZWFtLnR2L2NoYW5uZWwvbWF4aW1pbGlhbi1zY2huYXV6ZXJzLWNhbTIgd29yc3Q=/"; + } +] diff --git a/makefu/2configs/default.nix b/makefu/2configs/default.nix index 5faf3ce93..0cbb5efe7 100644 --- a/makefu/2configs/default.nix +++ b/makefu/2configs/default.nix @@ -28,6 +28,7 @@ with import <stockholm/lib>; openssh.authorizedKeys.keys = [ config.krebs.users.makefu.pubkey ]; }; }; + nix.trustedUsers = [ config.krebs.build.user.name ]; boot.kernelPackages = lib.mkDefault pkgs.linuxPackages_latest; @@ -41,8 +42,6 @@ with import <stockholm/lib>; }; - - boot.tmpOnTmpfs = true; systemd.tmpfiles.rules = [ "d /tmp 1777 root root - -" @@ -61,7 +60,7 @@ with import <stockholm/lib>; environment.shellAliases = { # TODO: see .aliases lsl = "ls -lAtr"; - dmesg = "journalctl -kb | cat"; + dmesg = "dmesg -L --reltime"; psg = "ps -ef | grep"; nmap = "nmap -oN $HOME/loot/scan-`date +\%s`.nmap -oX $HOME/loot/scan-`date +%s`.xml"; grep = "grep --color=auto"; diff --git a/makefu/2configs/deployment/board.euer.krebsco.de.nix b/makefu/2configs/deployment/board.euer.krebsco.de.nix new file mode 100644 index 000000000..ca617976d --- /dev/null +++ b/makefu/2configs/deployment/board.euer.krebsco.de.nix @@ -0,0 +1,15 @@ +let + fqdn = "board.euer.krebsco.de"; + port = 13113; +in { + services.restya-board = { + enable = true; + virtualHost.listenPort = port; + }; + services.nginx.virtualHosts."${fqdn}" = { + enableACME = true; + forceSSL = true; + locations."/".proxyPass = "http://localhost:${toString port}"; + }; +} + diff --git a/makefu/2configs/deployment/docker/archiveteam-warrior.nix b/makefu/2configs/deployment/docker/archiveteam-warrior.nix new file mode 100644 index 000000000..8eef27a20 --- /dev/null +++ b/makefu/2configs/deployment/docker/archiveteam-warrior.nix @@ -0,0 +1,39 @@ +{ lib, ... }: +with lib; +let + port = ident: toString (28000 + ident); + instances = [ 1 2 3 4 5 6 7 8 9 ]; +in { + services.nginx.recommendedProxySettings = true; + services.nginx.virtualHosts."warrior.gum.r".locations = let + # TODO location "/" shows all warrior instances + proxy = ident: + { + "/warrior${toString ident}/" = { + proxyPass = "http://localhost:${port ident}/"; + # rewrite ^/info /warrior${toString ident}/info; + extraConfig = '' + sub_filter "http://warrior.gum.r/info" "http://warrior.gum.r/warrior${toString ident}/info"; + sub_filter_once off; + ''; + }; + + }; + in + foldl' mergeAttrs {} (map proxy instances); + docker-containers = let + container = ident: + { "archiveteam-warrior${toString ident}" = { + image = "archiveteam/warrior-dockerfile"; + ports = [ "127.0.0.1:${port ident}:8001" ]; + environment = { + DOWNLOADER = "makefu"; + SELECTED_PROJECT = "auto"; + CONCURRENT_ITEMS = "6"; + WARRIOR_ID = toString ident; + }; + }; + }; + in + foldl' mergeAttrs {} (map container insta |