💳 Термінова новина! Trustee Plus — найкраще рішення для розрахунку криптою 👉

Чи є світло у вас вдома? Айтішник створив віджет для телефону, який відповідає на це питання, і поділився інструкцією

Fullstack Developer Вадим Клименко створив віджет, за яким може визначати, чи є світло вдома. Своїм досвідом розробник поділився на форумі DOU.

1 коментар
Чи є світло у вас вдома? Айтішник створив віджет для телефону, який відповідає на це питання, і поділився інструкцією

Fullstack Developer Вадим Клименко створив віджет, за яким може визначати, чи є світло вдома. Своїм досвідом розробник поділився на форумі DOU.

«Ще до початку війни відкрив для себе Scriptable — iOS-додаток для створення віджетів на JavaScript. А оскільки нам Тім Кук ще й дозволив створювати віджети для домашнього екрана, то треба цим користуватись!» — пояснює Вадим.

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

В результаті у нього вийшов ось такий віджет:

«Віджет фактично перевіряє, чи доступний ваш роутер в інтернеті. Можуть бути випадки, що електроенергія є, хоча самого інтернету немає — в такому випадку віджет все ще буде червоним. У мене в таких випадках інтернет зʼявлявся протягом 5-ти хвилин, але можуть бути такі проблеми також», — пояснює розробник.

Як це зробити

Спочатку Вадим думав виводити віджет на заблокованому екрані, і знайшов Any Text, який підтримує інтеграцію з Shortcuts. Їх навіть можна запускати по розкладу, але мінімальна періодичність — день. Якщо я хочу оновлювати кожні 15 хвилин, то потрібно створити 96 автоматизацій, і кожну з них вручну. Інших варіантів я так і не знайшов, тому ідея з ноукодом швидко провалилась.

Найпростіший спосіб перевірити, чи є інтернет вдома — зробити пінг на IP адресу роутера, а Scriptable (читай ES6) не вміє робити запити по icmp-протоколу. З доступних ресурсів я знайшов API, яке робить пінг, але там досить довго потрібно чекати на результати — мені достатньо хоча б одного результату, а не перевіряти, чи відповідає мій роутер з усіх материків. Тому треба було створити свій мікросервіс!
Підіймати сервер для одного запиту — така собі ідея, і я спочатку подумав про DigitalOcean Functions (а-ля AWS Lambda), але є проблема, що складно обмежувати кількість запитів у разі необхідності, раптом росіяни почнуть навантажувати сервіс своїми запитами, як і зробили з карти тривог.

Тут сховано код такої фічі

server {     # …     location /ping/ {         default_type 'application/json';         content_by_lua '             local cjson = require «cjson»             if ngx.var.arg_ip == nil then                 ngx.say (cjson.encode ({status="error», error="Передайте IP через ?ip= параметр. Наприклад, ?ip=127.0.0.1"}));                 return             end             local ip = ngx.var.arg_ip;             local chunks = {ip:match («^(%d+)%. (%d+)%. (%d+)%. (%d+)$»)}             if #chunks == 4 then               for _,v in pairs (chunks) do                 if tonumber (v) > 255 then ngx.say (cjson.encode ({status="error», error="Додайте коректний IP в налаштуваннях"})) return end               end             else               ngx.say (cjson.encode ({status="error», error="Додайте коректний IP в налаштуваннях"})); return             end             local handle = io.popen («ping -c 1 " . ngx.var.arg_ip . " -W 0.5», «r»)             local out = handle:read (»*all»)             handle:close ()             if string.find (out, «1 received») then                 ngx.say (cjson.encode ({status="ok"}))             else                 ngx.say (cjson.encode ({status="error"}))             end         ';     } }

Віджет виявився найпростішою частиною, і на основі інших прикладів я швиденько зробив віджет, який показує стан та дату оновлення. Сам код віджета в файлі нижче — там один запит, відображення його та часу генерації, і ніякого рокет саєнс!

Що треба ще знати

Вдома повинен бути завжди статичний IP, оскільки з динамічним складно працювати.

Також iOS сама вирішує, коли їй оновити віджет, і робить це по документації в інтервалі 15-60 хвилин, але фактично в мене виходило 15-20 хвилин. Якщо тапнути по віджету — він оновиться з актуальними даними.

Тобто ось ключові вимоги, щоб такий віджет вам не брехав:

  1. Повинен бути статичний IP. Якщо роутер вимкнути-увімкнути, і IP зміниться — потрібно буде у провайдера замовляти додатково послугу статичного IP. Віджет постійно перевіряє лише одну і ту ж адресу.
  2. Роутер повинен відповідати на ping запити. Якщо повертається помилка при натисканні на кнопку «Надіслати пінг на мій IP», то треба гуглити щось «%router name% Respond to Pings from WAN» та вмикати на роутері.
  3. Потрібно встановити Scriptable, завантажити файл нижче, поділитись ним в Scriptable та замінити IP в першому рядку на потрібний. Раптом що, ось відео, як це робиться.
  4. Створити віджет та додати його на домашній екран.

Що далі?

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

Або можна зробити якусь zapier-інтеграцію для слака, щоб всі бачили, що у вас немає світла, і що можлива якась затримка для відповідей. «Я якось робив таке для сирен, тому повинно бути максимально просто і зробити для світла також», — додає розробник. 

Мобільний звязок швидко зникає коли в тебе вимикають світло. Чому це так та що робити? Які є варіанти?
Мобільний зв’язок швидко зникає, коли в тебе вимикають світло. Чому це так та що робити? Які є варіанти?
По темi
Мобільний зв’язок швидко зникає, коли в тебе вимикають світло. Чому це так та що робити? Які є варіанти?
В Україні неминучі віялові (насправді аварійні) відключення електроенергії: що це як до них готуватися + графік відключень
В Україні неминучі віялові (насправді аварійні) відключення електроенергії: що це, як до них готуватися + графік відключень
По темi
В Україні неминучі віялові (насправді аварійні) відключення електроенергії: що це, як до них готуватися + графік відключень
Читайте головні IT-новини країни в нашому Telegram
Читайте головні IT-новини країни в нашому Telegram
По темi
Читайте головні IT-новини країни в нашому Telegram
УЧАСТЬ В АЗАРТНИХ ІГРАХ МОЖЕ ВИКЛИКАТИ ІГРОВУ ЗАЛЕЖНІСТЬ. ДОТРИМУЙТЕСЯ ПРАВИЛ (ПРИНЦИПІВ) ВІДПОВІДАЛЬНОЇ ГРИ.
Ліцензія видана ТОВ "СЛОТС Ю.ЕЙ." на провадження діяльності з організації та проведення азартних ігор казино у мережі Інтернет від 15.09.23 (рішення КРАІЛ №245 від 31.08.2023); ТОВ "СЛОТС Ю.ЕЙ." – на провадження діяльності з організації та проведення азартних ігор казино у мережі Інтернет від 26.04.2021 (рішення КРАІЛ №150 від 12.04.2021); ТОВ «СПЕЙСИКС» – на провадження діяльності з організації та проведення азартних ігор казино у мережі Інтернет від 08.02.2021 (рішення КРАІЛ №34 від 02.02.2021); ТОВ «ГЕЙМДЕВ» – на провадження діяльності з організації та проведення азартних ігор казино у мережі Інтернет від 16.02.2021 (рішення № 47 від 10.02.2021).

Хочете повідомити важливу новину? Пишіть у Telegram-бот

Головні події та корисні посилання в нашому Telegram-каналі

Обговорення
0

Я не знайшла файл, котрий треба завантажити. Підкажіть, це я не побачила чи його не додали в статтю.