Календар ігор на грудень 🎮

Есть ли свет у вас дома? Айтишник создал виджет для телефона, который отвечает на этот вопрос, и поделился инструкцией

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+)%.)$»)} 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-интеграцию для слака, чтобы все видели, что у вас нет света, и что возможна какая-то задержка ответов. «Я как-то делал такое для сирен, поэтому должно быть максимально просто и сделать для света тоже», — добавляет разработчик.

Мобильная связь быстро исчезает, когда у тебя выключают свет. Почему это так и что делать? Какие варианты?
Мобильная связь быстро исчезает, когда у тебя выключают свет. Почему это так и что делать? Какие варианты?
По теме
Мобильная связь быстро исчезает, когда у тебя выключают свет. Почему это так и что делать? Какие варианты?
В Украине неизбежны веерные (на самом деле аварийные) отключения электроэнергии: как к ним готовиться + график отключений
В Украине неизбежны веерные (на самом деле аварийные) отключения электроэнергии: что это, как готовиться к ним + график отключений
По теме
В Украине неизбежны веерные (на самом деле аварийные) отключения электроэнергии: что это, как готовиться к ним + график отключений
Читайте главные IT-новости страны в нашем Telegram
Читайте главные IT-новости страны в нашем Telegram
По теме
Читайте главные IT-новости страны в нашем Telegram
Електробайки по-українськи між Києвом та Лос-Анджелесом в «СКШ»

Дивіться, чим живе Delfast під час війни в Україні

Мы запускаем рассылку об украинском IT-комьюнити. Оставьте email, чтобы понимать больше. Премьера — скоро!
Спасибо! На указанный адрес отправлено письмо для подтверждения подписки.

Хотите сообщить важную новость? Пишите в Telegram-бот

Главные события и полезные ссылки в нашем Telegram-канале

Обсуждение
0

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