Як моніторити відключення світла з новим додатком «Де світло»

Усі статті, обговорення, новини про Mobile — в одному місці. Підписуйтеся на телеграм-канал!

Досить недавно в мене виникла одна ситуація, яка і надихнула мене розробити додаток.

На районі, де я живу в Києві (Осокорки) вимкнули світло. А в мене ще й таска, яку планував завершити в той день, і як раз потрібен нормальний інтернет (мобільний сильно просідає в такі моменти). Тож вирішив їхати до товариша на Оболонь.

І от, майже доїжджаючи до квартири товариша, на його районі теж вимикають світло. Мобільний звʼязок просів так, що навіть зателефонувати було не можливо, а в той момент це було дуже для мене важливо.

Повертатись до себе — це, знову ж, час, та й я не знав, чи ввімкнули там світло. Вирішили шукати місцину, де є і світло, і інтернет. Знайшли.

І от говоримо з друзями про те, типу, як було б класно, якби був додаток, який може сповіщати, коли в тебе вдома є світло чи ні.

Розробка

Першу версію я почав робити ще в четвер ввечері. Тоді була зроблена маленька частинка, бо після робочого дня хотілось тро[и розвантажитись, вирішив продовжити в суботу.

Повноцінна розробка почалась на вихідних. Я побачив топік на DOU, де розробники обговорюють софт для iOS, за допомогою якого можна автоматизувати телефон, і там були інструкції, які базовому користувачу можуть здатись складними.

Цей був квест на 24 години. Я не спав всю ніч, в неділю додаток вже було розроблено і відтестовано. Зареєстрував домен. Відправив додаток на публікацію в Google Play.

Фічі

Основний принцип роботи додатка дуже простий. Він просто моніторить, чи отримує телефон живлення від розетки, і на основі цих даних повідомляє по SMS про те, чи заряджається зараз телефон. Перетворіть свій додатковий смартфон в датчик для моніторингу наявності енергозабезпечення у вас вдома.

В процесі розробки зʼявилась ідея, щоб це був не просто додаток, а ціла спільнота.

Наразі додаток має такі фічі:

  • може сповіщати користувача про те, що зʼявилось або вимкнулось світло (використовуючи SMS, що при поганому звʼязку, коли вимикають світло, більш стабільний канал, чим якщо це робити, використовуючи інтернет);
  • можливість додати декілька телефонних номерів, на які будуть відправляти оповіщення;
  • за бажанням користувач може долучитись до спільноти та переглядати на карті, де є світло в режимі реального часу. Ця функція працює по принципу взаємодопомоги. Надайте додатку доступ анонімно поширювати вашу геолокацію на сервер, щоб бачити на карті статуси, автоматично надані іншими користувачами додатка, які дозволили поширювати геолокацію;
  • простий та інтуїтивно зрозумілий інтерфейс;
  • не потребує реєстрації та є безкоштовним. Все прозоро. Просто встанови і користуйся.

Технічна складова

Додаток написаний на мові Dart (framework: Flutter).

При встановленні додатка користувачеві пропонується дозволити роботу в фоновому режимі, щоб операційна система не завершувала процес.

Коли користувач додає телефонний номер, йому буде запропоновано надати також доступ для відправлення SMS-повідомлень, які смартфон буде відправляти у випадку зміни статусу енергозабезпечення.

Також в додатку є можливість переглядати дані на карті. Ці дані формуються наступним чином: коли користувач дозволив доступ до геопозиції, то, окрім SMS, на вказані номери ще буде відправлено запит на сервер ось такого формату:


{
      'latitude': 50.4016823,
      'longitude': 30.2456267,
      'isCharging': true,
      'date': 2022-11-07T06:43:59+00:00,
 }

При перегляді карти, навпаки, зображаємо найближчі маркери, які були передані іншими користувачами.

Бекенд розробив на Python. Взяв за основу код, який використовував на своєму іншому проєкті (стаття тут).

Наразі вся база — це лише дві таблиці (одна для історії статусів, інша просто містить в собі маркери та має структуру як JSON в запиті на сервер, за виключенням ще одного поля, що містить первинний ключ).

Також використовую RabbitMQ. Коли сервер отримує маркер, то передає його на сервер черг, який слухає Consumer і записує маркер в базу.

Детальніше тут: desvitlo.online

Лінк на додаток в Google Play

Станом на 07.11.2022 15:36, час подачі цього тексту на DOU, додаток ще публікується в Google Play

👍ПодобаєтьсяСподобалось8
До обраногоВ обраному1
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

«Перетворіть свій додатковий смартфон в датчик для моніторингу наявності енергозабезпечення у вас вдома» і вбийте свій акум :). Але результат про наявність світла — 100%

Працює, дуже дякую!

Цей додаток не можна випускати! ДЕ Є СВТЛО, наразі, це важлива стратегічна інформація, яка може стати в нагоді ворогу.
Люди, ви що?
Схаменіться!
Наразі Гугл все одно реджектне додаток якщо там є дозвіл на відправлення SMS, але якщо він все одно зʼявиться у маркеті, я особисто повідомлю відповідні органи.

От через цей момент я і випиляв був карти і взагалі перегралась ідея додатку, тому не панікуйте))))

Навіщо для цього застосунку бекенд-сервер кастомний? Телефон який дома лежить, може напряму смс відправляти на інший телефон.
Ще й локацію повідомляти, навіщо це потрібно?
Це як мінімум не надійно і не секьюрно. Бекенд це публічно доступний сервіс, який треба захищати від усіх можливих видів атак — а у вас навіть авторизації нема, судячи з усього. Мовчу про масштабування для майбутніх навантажень, ітд.
До речі, код бекенд серверу також було б непогано побачити.

Крім цього, уся схема виглядає якось мутно. Для такого інформування достатньо зробити відправку емейлу «все працює» кожні ~півгодини, зробити окрему пошту на гмейлі і туди дивитися. Листів немає — світла немає, все дуже просто.
Такий спосіб не привносить непотрібні ризики і не дає ніякого простору для кібер-атак взагалі. Ми нічого не повідомляємо окремим публічним серверам, ми нічого не «світимо» публічно в інтернет, не збираємо непотрібні дані користувачів. Все через Гугл пошту повідомляється, а тому доступно для огляду з будь якого пристрою, на якому можна зайти в пошту через Гугл аккаунт.

А ваш застосунок виглядає вкрай підозріло, як не крути. Тут і збір даних локації, і свій закритий апі, і використання номера телефону, і дозвіл на відправку смс потрібен. І відмова на FDroid публікувати, і затримка в ревью від Гугл Плей. І закритий код кастомного апі.
Розумієте, як це виглядає в нинішніх умовах?
Вишенка на торті — оця engaging backstory про поїздки через усе місто. Все це виглядає вкрай несправжнім і неавтентичним. І при цьому, таким що має всі необхідні ознаки для того щоб "продати"/"втюхати" якнайбільшому числу людей.

Тому вважаю що цьому додатку довіряти не можна. Якщо так потрібно — ставите TeamViewer / Chrome remote desktop і буде вам можливість бачити оперативно і просто, чи є світло вдома чи ні.

Цей додаток лише один зі способів моніторити світло, звичайний chill на ніч, не більше. Результат всього цього доступний в виді вихідного коду на GitLab, тому не бачу нічого, як Ви кажете, такого мутного.

До того ж карта і локація була випиляна, бо в мене банально немає часу займатись цим проектом і продовжувати цю ідею. Історія теж, до речі, правдива.
Мені здається Ви самі себе в цьому накрутили.

По F-Droid. Так, я його не публікував там, але в чому проблема зайти на GitLab, виконати дві команди і збілдати апку самому? В чому проблема?

По Google Play. Апка публікувалась майже 5 днів, я отримав листа, що додаток не може бути опублікований бо використовує гео-локацію в фоні (що є критичним пермішеном, про що я не знав), тому я карта і була випиляна, там все по історії комітів видно.
Ось лінк, якщо що: gitlab.com/sergeidub.mvc/desvitlo

От зробиш якусь благу справу і точно знайдеться чел, який все запаскудить)))

Якщо світло є, а звʼязку (мережі та інтернету) немає, то що?
І чи сигналізує додаток інших користувачів про те, що в моєму районі чи будинку немає світла, коли я просто відʼєднав телефон від зарядки?

Так, але вже готую фікс. Принцип простий: отримую евенти від магнітометра, коли координати були змінені більше ніж на N, то тимчасово вимикаю моніторинг на деякий час. Таким чином це зменшує ймовірність того, що хтось взяв телефон і вимкнув, а нотифікації вже відправились, бо на момент відключення телефона від розетки моніторинг буде призупинено. Але це не до кінця вирішує проблему спрацювання коли телефон був неподвижним і вимкнутий від зарядки вручну...

Пані та панове. Актуальний статус: in Review.
Як тільки щось зміниться — повідомлю додатково.

Щось не проходить перевірку в гугл плеї

Та ще публікується. В мене така сама затримка була коли публікував перший додаток. Там зазвичай декілька днів займає. Наразі бачу в консолі статус «In review» і теж чекаю :)

Конкурс на «додаток моніторингу світла з мінімальними танцями з бубном» почався.

Як варіант — камера або щось іще з «розумного дому».

Доданок для домушників «дома хтось є?» ;)

Ну і вебкам, ага... ;)

Це все супер, але я за закриті дані — по-перше, якщо у вас немає до кого поїхати у сусідний район чи місто — то й сенсу від інформації про наявність чи відсутність там світла для вас немає.

А ось для ворога дізнатись з даних цього доданку про наявніть та відсутність електрики — і зв’язати це з ударами по інфрі чи з виїздами ремонтних бригад — великий подарунок.

Тому значно краще зробити так, щоб кожен користувач мід під’єднатись до якого-сь закритого коммюніті — і не зберігати дані про геолокацію, а просто записувати загальновідомі для коммюніті мітки — наприклад для якоїсь фірми достатньо «офіс на лівому», «офіс головний»... А для звичайної людини — «дім», «Вася», «Брат», «батьки» — і перебуваючи у 2 коммюніті він чи вона буде знати куди поїхати. При цьому для ворога ці дані будуть майже беззмістовні. Та й збирати по всій країні дані дуже важко. Особливо, якщо підключення до коммюніті за згодою з кількома членами.

Також непогано було-б додати історичні графіки відключення — щоб можна було побачити якусь закономірність — наприклад, що в якійсь точці відключають приблизно в один час — а в іншій саме в цей час електрика майже завжди є. І буде простіше планувати...

Треба буде ось це все обмізкувати як зручно зробити)

Ну, я б тут думав про щось у хмарі для синхронізації. Для маленьких коммюніті можна і щось на кшалт S3 або Dropbox/Google drive для синхронизації (а там якийсь json + lock-файл), а ось для великих — на сотні чи тисячі членів — тут вже треба якусь бд:

learn.microsoft.com/...​w-to-deploy?view=azuresql

www.mongodb.com/free-cloud-database

cloud.google.com/...​e-cloud-features#bigquery

cloud.google.com/...​-cloud-features#firestore

Та купа їх насправді. Тобто, можна навіть при створенні коммюніті надати вибір з кількох варіантів, відразу створити аккаунт і через апи створити БД. все. Поширювати налаштування та підключення до коммюніті через QR.

По графіках. Була ідея потім автоматизувати процес порівняння реальних відключень з прогнозованими (с Ясно, ДТЕК і т.д, якщо в них є API).

По мітках на карті, які потенційно міг би використати ворог обдумав. Наразі дійшов до того, щоб не відображати мітки по будь-якій області куди користувач перевів курсор, а лише в радіусі, наприклад, 10-15 км від місцезнаходження смартфону, який виступає в ролі датчику. Сервер просто не буде віддавати координати точок, які знаходяться далі. Таким чином ворог йде в відомому нам всім напрямку, а ми можемо зручно чекнути де є світло поблизу :)ʼ

Хто заважає запустити додаток у віртуальному андроід з підстановкою фейкових координат та «пройтись» по всій країні? ;) з купи динамічних айпі адрес ніби то реальні акки? ;)
Найкращій спосіб не дозволити вкрасти дані — просто не зберігати їх.

Зі збором даних від провайдерів — Ясно, ДТЕК і т.д, — гарна ідея.

або лінка бита або додатку не існує.
плей стор повертає шо такого нема
p.s.
побачив допис що додатка ще нема, тоді чекаємо

Привіт. Так, ще до сих пір публікується. В принципі, на що я розраховував, коли надіявся, що публікація буде швидкою. В мене вона завжди займала пару-тройку днів.
Які тільки буде опубліковано, я додатково повідомлю в цьому топіку.

Чи можна це зробити по geoip ?
Беремо всі IP адреси в радіусі
І потім пінгуємо

Це не гарантія — пінг можуть різати провайдери. адреси зазвичай видаються динамічно — тож, в кращому випадку ви будете знати, що десь в тому районі є світло, але не факт, що в усіх будинках і таке інше. більш того — блоки адресів не завжди вірно реєструють. Мені якось видавали алресу з іншого міста ;) Ну і на останок, навіть при вірній та локації у вас не буде можливості перевірити, чи то інтернет не працює, чи електрика.

Повіддавав смартфони родичам... А кнопкові не допоможуть ))
Так то ідея не погана, але робочий телефон убивати постійною зарядкою не хочеться.
Яка мінімальна версія Андроїду? Наскільки старий телефон може бути

У мене на Sony xperia zr Андроїд 5 не встановився додаток: синтаксична помилка. На девайсі з Андроїд 10 встановився, але потрібно на старий смартфон встановити, де 5 версія

Можна ще відкрити код на GitLab та викласти додаток на F-Droid.

Супер) Дякую за ідею. Сьогодні так і зроблю)

Я переглянув F-Droid. Чесно кажучи, там строки публікації не краще, тому очікую завершення публікації на Google Play.

Цитата з F-Droid.

When we detect a new release, it may take a few days to make it into the repository as the build process runs only once a day.

Link: f-droid.org/...​ocs/FAQ_-_App_Developers

Підписатись на коментарі