Пока я работал над Mini-Bucket, параллельно развивался еще один проект. Именно о нем и пойдет речь в этой статье.
Сразу хочу оговориться: я знаю, что обещал поддержку PHP 8+ для Mini-Bucket, но последнее время занимался не ею. Однако всему свое время.
Заранее: Проект создавался изначально под задачи детского контроля, но вполне пригоден и для других нужд.
Предыстория: от проблемы к идее
Я уже неоднократно сталкивался с одной проблемой. Вернее, даже с кучей мелких, но если их обобщить, получится одна большая. Думаю, родители, читающие эту статью, меня прекрасно поймут.
ДЕТИ… Их вечное: «Забыл!», а в голове — только игры и бесконечное сидение в телефонах.
В очередной раз услышав это «Забыл», у меня просто поднакипело (признаюсь, я и сам порой забываю что-то проверить). Я решил: пусть появится некая «напоминалка». Скажете, что таких приложений полно? Полно, и это да. Но у них есть много лишнего, а хотелось сделать своё, под свои нужды.
Так родилась идея: сделать Telegram-бота, который будет отправлять напоминания по расписанию. Написал… Но править бота или файл конфигурации для каждой мелкой правки задачи — разумеется, фу.
Тогда я подумал: дай-ка напишу страничку-менеджер, которая будет управлять задачами, хранить их в базе данных, а бот будет получать их оттуда. Написал…
Потом решил добавить вторую страничку — с настройками: ключи, часовой пояс.
Опять… Все началось с двух страничек…
И понеслось!
Раз уж есть страница настроек и страница управления задачами, пусть будет и дашборд.
А раз есть дашборд, то нужно управление пользователями и ролями.
Бам — и появляется дашборд и страница пользователей.
Так и начал зарождаться очередной проект. Название я ему дал — Napominator. Не знаю почему, но у меня какой-то фетиш на приставку «Тор» (у меня есть еще «Расписатор», но речь сейчас не о нем).
Первая версия: простой функционал
Итак, первая версия Napominator имела простую логику:
-
Создаем пользователя.
-
Приписываем к нему Telegram ID.
-
Создаем задачи под его расписание.
-
Указываем пользователей для этих задач.
Когда наступало время, пользователи получали уведомление в Telegram.
Так я мог контролировать, например, что пора делать уроки, и «подопнуть» ребенка на это мероприятие, если бы он вдруг «забил».
Проблема: Telegram не везде
Но Telegram работает не везде. За пределами дома мы уже не получим напоминаний.
Пришла идея: накидаем легкое Android-приложение. Пусть оно получает задания, хранит их локально и заводит будильники на время выполнения задач.
Сделано!
Хотел бы я закончить и остановиться на этом, но нет же — меня опять понесло…
Текущая версия (0.0.13): Во что превратилось
Основную задачу и цель проекта я объявил, о начале рассказал. Теперь хочу представить вам, что умеет версия 0.0.13.
Дашборд
Имеет два вида отображения: пользовательский и администраторский.
Пользовательский:

Пользователь видит все самое необходимое:
-
Блок ближайших задач (для быстрого ориентирования).
-
Общую статистику по задачам.
-
Статистику использования приложений и экранного времени для телефонов пользователя.
-
Список из 5 последних задач.
-
Устройства.
-
Лог отправок.
Админский:

-
Общая статистика по всем задачам.
-
Список последних задач.
-
Список всех устройств в системе.
-
Логи всех отправок. (Удалить сообщение и сказать не чего не было не получится)
Задачи
Также имеет два вида отображения.
Пользовательский:

Отображает список задач пользователя. Позволяет создать задачу только для себя. Задачи, созданные администратором, находятся в режиме «Только чтение» — пользователь их редактировать не может.
Админский:

Отображает список всех задач всех пользователей (включая системные задачи отслеживания и сбора статистики). Позволяет создавать, удалять и редактировать задачи для всех пользователей.
Создание задачи:

Позволяет ввести:
-
Заголовок: например, «Почисти зубы».
-
Содержание: например, «=== требуется фото ===».
Тип расписания:
-
Единоразовый — требуется указать дату и время.
-
Ежедневный — требуется указать только время.
-
Еженедельный — требуется указать дни недели и время.
-
Гибкое — идеально подходит на пример для чистки зубов. Позволяет выбрать дни недели и задать индивидуальное время для каждого дня. Можно даже несколько напоминаний в день (например, в 9:10 и 21:00).

Подписки:
Здесь указываются получатели уведомлений. Когда наступает время сработки задачи, этим пользователям приходит оповещение:
-
Если задан Telegram — приходит в него.
-
Если установлено только приложение — срабатывает уведомление на устройстве.
-
Если и то, и то — уведомления дублируются.
Пересылка отчета:
Это самая удобная штука на мой взгляд. При выборе этой опции мы получаем список пользователей, и выбранным будет приходить отчет о ходе выполнения задачи. Эту фишку я внедрил уже в самом конце, снова по обстоятельствам: я понял, что некоторые задачи просто игнорируются, а проконтролировать их выполнение нет возможности.
Но решение было найдено. В приложении у каждой задачи теперь есть кнопка «Отправить отчет» (текст, фото, видео — с камеры или из файлов). Отчет отправляется на сервер, а бот пересылает его нам в Telegram.
P.S. Забавно было увидеть в Telegram недовольное лицо ребенка с зубной щеткой во рту.
Также доступна возможность отключать задачу.
Отчеты
Доступ только у администраторов.

На этой странице мы видим все отчеты, отправленные из приложения. Доступны фильтры по датам. Удобно искать, а предпросмотр не требует скачивания файла — можно открыть фото или видео прямо в браузере. Собственно, отсюда бот и забирает отчеты для отправки в Telegram. Приложение о Telegram даже не знает. Удаление отчетов удаляет их вместе с файлами.
Пользователи
Доступ только у администраторов.

Вроде бы тут не о чем говорить, но есть интересный момент.
В целом страница отображает всех пользователей системы и позволяет ими управлять: создавать, удалять, редактировать, менять пароли и роли.
Самое интересное — это пункт «Добавление устройств пользователю».

Да-да! В приложении (в настройках) я добавил возможность сканирования QR-кода, чтобы не вбивать адрес API и ключ вручную. По мимо url и api key в qr коде передается ID пользователя, чтобы приложение понимало, какие задачи ему запрашивать.
При добавлении устройства приложение пишет «Устройство добавлено», а в блоке «Устройства» появляется новая запись. Получилось очень удобно.
Устройства
Доступ только у администраторов.

Страница отображает все устройства в системе. Есть кнопка «Отключить/Включить» (пока ни на что не влияет, сделал на будущее). Позволяет искать устройства и удалять их.
Геопозиция
Доступ только у администраторов.
Личная просьба жены. Сложно сказать, что нас ждет в будущем с сервисами Google, да и работают они порой криво (то батарею жрут, то еще какие баги). А наблюдать за ребенком надо.
При выборе пользователя подгружаются его устройства. При выборе устройства и нажатии «Отследить» на устройство отправляется системная задача на отправку геопозиции, и мы получаем искомое на карте.
Важно: устройство отправляет координаты до тех пор, пока активна задача. Для экономии энергии отслеживание лучше останавливать. Можно выйти со страницы, проигнорировав предупреждение, но устройство продолжит отправлять данные, что скажется на батарее. Если вернуться на страницу после закрытия (без прерывания слежения), система увидит задачу и предложит продолжить или остановить её. Можно также удалить задачу вручную, отобразив системные задачи в разделе [Задачи].
Если коротко: нажал кнопку, получил результат — этого вполне достаточно.
История использования
Доступ только у администраторов.
Вот это — больше моя задача. Я подозревал, что ребенок не спит в положенное время, поэтому внедрил этот инструмент.
Он позволяет поставить задачу мониторинга запуска приложений на устройстве и по расписанию отправляет накопленную статистику. Есть кнопка «Форс», которая создает системную задачу (аналогично локации), чтобы получить журнал, не дожидаясь расписания.
Именно так «засранец» и попался: я увидел в отчете, что он играет в игры, когда должен спать.
Отчет показывает полную историю использования приложений. Есть фильтры по дате и по событиям. Графики визуально показывают, какие приложения запускаются чаще всего и как часто используется телефон.
Настройки
Доступ только у администраторов.
Основные настройки приложения: API-ключ, часовой пояс, API-ключ Telegram.
Android-приложение
Само приложение хранится на сервере Napominator. Ссылка для скачивания есть на странице входа. В будущем сделаю QR-код для быстрой установки.
Итог
Если коротко подытожить:
Теперь я могу создавать задачи для ребенка, жены и для себя. Отчеты о выполнении приходят в Telegram и хранятся на сервере.
P.S. Некоторые зададутся вопросом: как приучить ребенка к приложению? У меня выход простой: не читаешь уведомления — значит, телефон используется не по назначению, значит, сдаешь телефон.
Есть у меня еще один инструмент влияния — «Минибанк» (домашний банк виртуальной валюты). Ребенок зарабатывает виртуальные деньги, выбрасывая мусор или выполняя работы, не входящие в его обязанности. Деньги тратит на включение Wi-Fi (нажатием кнопки в банке через API MikroTik) или обналичивает их. Но это пока крайне сыро, и не об этом речь.
Думаю, на сегодня хватит. Всем спасибо за внимание! В следующих статьях расскажу, как правильно установить, настроить и пользоваться Napominator. Как устроено и работает приложение.
Если вам интересно — голосуйте)
Больше информации:
Ссылка на проект: https://trapex.ru/?page_id=452
Почта для связи: sa@itp-corp.ru
Если у вас есть вопросы — пишите, не стесняйтесь)
ссылка на оригинал статьи https://habr.com/ru/articles/1060488/