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