
Прокрастинация хорошо знакома каждому из нас. Кто-то отлынивает от работы больше, кто-то меньше, но хотя бы раз в жизни прокрастинировали все. Один из способов убить время — серфить в сети, листая любимый сайт или общаясь в социальной сети.
Чтобы узнать количество потраченного напрасно времени, можно установить специализированное приложение, которое покажет, где, сколько и как пользователь провел времени в интернете. Ужаснувшись, обычный человек зачастую либо берет себя в руки, либо блокирует сайт при помощи конфигурационного файла или специального софта. Но мы же на Хабре, а значит, можно выбрать необычный способ. Сегодня мы будем делать троллейбус из буханки хлеба блокировщик сайтов с использованием Raspberry Pi.
В проекте задействуется обычный настенный выключатель и локальный 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. Подключаем провода к выключателям. Понятно, что выключатель может быть и не такой. При желании можно приспособить кнопку или что-то еще:

8. Свободные концы проводов припаиваем к «малинке». Порядок пинов не имеет значения. Главное, чтобы один конец был припаян к пину GPIO, второй — к «земле». По умолчанию нужны пины 18 и 24, но это можно настраивать.

9. Помещаем «малинку» в выключатель. Он должен быть достаточно крупным, чтобы плата в него поместилась. Прикрепить плату можно нагретым силиконом.

10. Пропускаем кабель питания через отверстие в переключателе и закрепляем оба выключателя в распределительной коробке.


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. Проверяем работу нашего выключателя. Если все окей, то тумблером можно блокировать или активировать сайт.

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. Устанавливаем выключатель в любом удобном месте и наслаждаемся его работой.

Проект очень простой, но фановый. Любому гику нечто подобное придется по душе. Систему можно менять/усложнять по своему вкусу. Если у вас есть идеи, как это сделать, поделитесь ими в комментариях, будет интересно!

Автор: Александр