![](https://habrastorage.org/getpro/habr/post_images/4ca/134/96f/4ca13496f2f708802af8d6a7c9283578.webp)
Прокрастинация хорошо знакома каждому из нас. Кто-то отлынивает от работы больше, кто-то меньше, но хотя бы раз в жизни прокрастинировали все. Один из способов убить время — серфить в сети, листая любимый сайт или общаясь в социальной сети.
Чтобы узнать количество потраченного напрасно времени, можно установить специализированное приложение, которое покажет, где, сколько и как пользователь провел времени в интернете. Ужаснувшись, обычный человек зачастую либо берет себя в руки, либо блокирует сайт при помощи конфигурационного файла или специального софта. Но мы же на Хабре, а значит, можно выбрать необычный способ. Сегодня мы будем делать
В проекте задействуется обычный настенный выключатель и локальный DNS-сервер, запущенный на «малинке». Эта система позволяет надежно блокировать пожирателей времени. Один щелчок выключателем — и сайт не работает, можно посвятить свое время полезному труду. Второй щелчок — любимый ресурс снова онлайн.
Что нам понадобится для проекта
- Raspberry Pi Zero W, SD Card, блок питания.
- Два однополюсных выключателя.
- Распределительная коробка.
- Пластина с рычажками переключателей.
- Провода.
- Отвертки.
Начинаем работу с Raspberry Pi
1. Настраиваем Raspberry Pi Zero W и подключаемся удаленно.
2. Обновляем/устанавливаем git, если ранее это не было сделано:
sudo apt-get update && sudo apt-get install -y git
3. Копируем код из репозитория ниже. Он будет управлять инструментом dnsmasq, нашим локальным DNS:
git clone github.com/rydercalmdown/internet_kill_switch
4. Запускаем команду установки из клонированной директории. Этот шаг позволяет установить все зависимости, инструмент dnsmasq и убедиться, что все работает:
cd internet_kill_switch
make install
5. Убедиться в работоспособности кода просто. Если все хорошо, появится статус “Running” зеленым цветом:
sudo systemctl status dnsmasq
# Use Ctrl + C to exit
6. Запускаем ПО для того, чтобы окончательно убедиться в правильной работе установленного софта:
make run
# Use Ctrl + C to exit
7. Подключаем провода к выключателям. Понятно, что выключатель может быть и не такой. При желании можно приспособить кнопку или что-то еще:
![](https://habrastorage.org/getpro/habr/post_images/99f/b11/7e4/99fb117e4e5b4d96c5033bfd1610553e.jpg)
8. Свободные концы проводов припаиваем к «малинке». Порядок пинов не имеет значения. Главное, чтобы один конец был припаян к пину GPIO, второй — к «земле». По умолчанию нужны пины 18 и 24, но это можно настраивать.
![](https://habrastorage.org/getpro/habr/post_images/015/20e/5eb/01520e5eb6b59a1ed35e71712f055dfc.jpg)
9. Помещаем «малинку» в выключатель. Он должен быть достаточно крупным, чтобы плата в него поместилась. Прикрепить плату можно нагретым силиконом.
![](https://habrastorage.org/getpro/habr/post_images/c5e/ffb/1c7/c5effb1c7d669f563923ce108dbf4f1b.jpg)
10. Пропускаем кабель питания через отверстие в переключателе и закрепляем оба выключателя в распределительной коробке.
![](https://habrastorage.org/getpro/habr/post_images/ec2/df5/3b4/ec2df53b4cf1efd0b4dc6c1d17a0c1aa.jpg)
![](https://habrastorage.org/getpro/habr/post_images/dc1/c9b/dec/dc1c9bdec2eb6cd97af79c46ce48069b.jpg)
11. После этого закрываем готовую конструкцию и наклеиваем под тумблерами наименование сайтов, которые будем блокировать.
12. Открываем файл src/toggle_switches.py для редактирования и добавляем необходимые адреса сайтов. Вы можете добавлять или удалять переключатели, изменяя список SWITCHES и добавляя новые объекты класса SwitchConfig. Допустимые параметры — это номер пина BCM, за которым следует список сайтов, которые нужно заблокировать:
# Example: The switch connected to BCM pin 18 blocks social media, and the switch connected to BCM pin 24 blocks video websites
SWITCHES = [
SwitchConfig(18, ['facebook.com', 'instagram.com']),
SwitchConfig(24, ['netflix.com', 'youtube.com', 'vimeo.com']),
]
13. Проверяем, как все работает. При запуске сервис показывает IP «малинки»:
cd ~/internet_kill_switch
make run
# IP Address is 10.0.0.25
14. Конфигурируем DNS, используя полученный IP. Это можно сделать на уровне роутера или в конфигурации операционной системы.
15. Проверяем работу нашего выключателя. Если все окей, то тумблером можно блокировать или активировать сайт.
![](https://habrastorage.org/getpro/habr/post_images/922/28f/a86/92228fa86df42086b79f80aa485f1f6a.jpg)
16. Теперь все подтверждаем, введя следующий код. Здесь вместо google.com вставляем ресурс, который хотим блокировать:
# When the switch is off
dig +short google.com
172.217.164.238
# When the switch is on
dig +short google.com
127.0.0.1
17. Редактируем файл /etc/rc.local file. Он определяет поведение системы после перезагрузки «малинки»:
sudo nano /etc/rc.local
# Add this line before the very last line
cd /home/pi/internet_kill_switch/src && sudo ../env/bin/python app.py &
18. Устанавливаем выключатель в любом удобном месте и наслаждаемся его работой.
![](https://habrastorage.org/getpro/habr/post_images/b4c/f40/cdf/b4cf40cdfea6b26a0c3a3f62cb725744.webp)
Проект очень простой, но фановый. Любому гику нечто подобное придется по душе. Систему можно менять/усложнять по своему вкусу. Если у вас есть идеи, как это сделать, поделитесь ими в комментариях, будет интересно!
![](https://habrastorage.org/webt/1h/dq/mj/1hdqmj1bvguax5hnugdz0ci_jbw.jpeg)
GennPen
Так же надежно, если я у себя в интерфейсе пропишу внешние DNS, например 8.8.8.8 или 1.1.1.1?
Moskus
После таких комментариев невольно задаюсь вопросом, сколько окружающих людей в состоянии понимать контекст, а сколько — не очень.
Устройство не предлагается, как средство безопасности или полноценный firewall. Так откуда вопрос о его надёжности в таком значении?
saboteur_kiev
Например повесить на скриптик блокировку развлекательных ресурсов для детей. Приходишь — смотришь уроки не сделаны, громко щелкаешь на стене рубильник и хмыкаешь.
И не надо комп из розетки вынимать.
Дело не в надежности, а в эффектности.
nochkin
Что только родители не сделают вместо обычного доброго подзатыльника.
CrashLogger
Технические ограничения стимулируют напрячь мозги чтобы их обойти. А подзатыльник ничего, кроме злобы, не стимулирует.
Pascal_tgn
Ага, у меня так в детстве родители забирали кабель от Dendy — я быстро научился делать их сам. Стали забирать блок питания — я записался на радиокружок и спаял пару запасных БП :) Проблемно было только когда они забирали сам Dendy — тогда его приходилось или искать по всему дому (часто безрезультатно), или идти к приятелю на соседней улице и играть у него в его приставку.
nochkin
Надо было более плавный переход сделать (например, сначала калькулятор, а не сразу всю приставку). Тогда у нас было бы больше вариантов на игровые приставки сегодня благодаря такому таланту.
saboteur_kiev
Так я еще раз — дело в эффектности, а не эффективности =)
А боян "Учение о свободе личности" я естественно читал, но это как бы очень маленькая часть воспитания.
beliashou
В противовес этому баяну есть другой.
Но кто знает чей боян окажется справедливее?
saboteur_kiev
Никак не вижу противовеса. Причем ваш баян даже не баян, и даже не смешной.