Jump to content
Александр Рыжов

Использование IFTTT и Zapier

Recommended Posts

Для пользователей кинетиков звёзды сошлись удачно: набор применяемых в роутере технологий прямо явно намекает на то, что управление роутером может быть автоматизировано.

Здесь как раз к месту будет сервис IFTTT.com, позволяющий создавать рецепты из готовых блоков «IF» (событие), «THEN» (действие). За шесть лет развития число доступных блоков перевалило за 500, а число пользовательских рецептов за 20 млн.

Пока роутер мало что может предложить для блока «IF», но вот рулить роутером можно в полный рост, т.к. есть весь необходимый набор технологий:

  • Можно организовать удалённый доступ к роутеру по доменному имени даже за серым IP, чуть ниже описано как это сделать,
  • Есть универсальный RESTful интерфейс, позволяющий выполнять любые доступные команды простым POST HTTP-запросом. Если лень копаться в документации, то нужный запрос можно подсмотреть в режиме разработчкика, нажав при открытом веб-интерфейсе в браузере F12.
  • Есть basic-авторизация, позволяющая защитить веб-интерфейс от непрошенных вмешательств.

На IFTTT в качестве действия «THEN» надо будет выбрать сервис Webhooks, умеющий отправлять POST-запросы кинетику в JSON-формате, что нам, собственно и требуется для управления.

Чтобы организовать удалённый доступ к роутеру из интернета, для прошивок 2.12.B.0.0-1 и позже необходимо:

  1. Завести доменное имя KeenDNS, например giga.keenetic.pro,
  2. Ниже в разделе «Доступ к веб-приложениям домашней сети» назначить доменное имя четвёртого уровня, например, rci.giga.keeneitc.pro с параметрами «Этот интернет центр», порт TCP79, галка «разрешить доступ». Таким образом, обращения на rci.giga.keeneitc.pro начнут проксироваться на REST API 127.0.0.1:79, где авторизации нет.
  3. Включить авторизацию для этого проксирования из CLI:
    ip http proxy rci auth

     

  4. Завести в WebUI пользователя (например rci), присвоить ему пароль (например, rcipassword) и тэг «HTTP Proxy»,

  5. Получить SSL-сертификат для домена rci.giga.keeneitc.pro, в дальнейшем он будет обновляться прошивкой автомагически:

ip http ssl acme get rci.giga.keenetic.pro

Всё. Теперь можно вызывать REST API как и раньше, обращаясь на адрес:
 

https://rci:rcipassword@rci.giga.keenetic.pro/rci/

В конфиге должно получиться что-то похожее на

user rci
    password md5 94b8062cc4e362d45872b22a7c38ede2
    password nt 0384e45875e61d6f7d50d934587d1ab1e7
    tag http-proxy
!
...
ip http proxy rci
    upstream http 127.0.0.1 79
    domain ndns
    allow public
!
...

Эти шаги необходимы для реализации любого из решений, описанных далее.

 

  • Thanks 2
  • Upvote 3

Share this post


Link to post
Share on other sites

Переход на резервный канал с помощью Telegram

  1. Создайте новый апплет, выбрав в качестве «this» сервис Telegram, триггер «New message with key phrase to @IFTTT».
  2. В качестве ключевой фразы «выключи основной канал», в шаблоне ответа «готово!» после чего нажмите «create trigger».
  3. В качестве «that» выберите сервис Webhooks,
  4. выберите его единственное действие «Make a web request».
  5. Параметры действия следующие:
    • URL: https://rci:rcipassword@rci.giga.keenetic.pro/rci/ ,
    • Method: POST
    • Content type: application/json
    Body: [{"interface":{"ISP":{"up":{"no":true} } } }]
  6. Нажмите «finish»

Цифры в списке выше соответвуют шагам создания апплета на сайте IFTTT, соответствующие скриншоты по номерам прикреплены ко вложению.

Для перехода обратно с резервного на основной канал придётся создать аналогичный рецепт, изменив только ключевую фразу, которую вы будете посылать телеграм-боту IFTTT на «включи основной канал», а параметр Body запроса на [{"interface":{"ISP":{"up":{"no":false} } } }]

telegram_chat.png


 

Скрытый текст

 

step1_create_recipe.PNGstep2_create_trigger.PNGstep3_choose_action.PNGstep4_pick_web_request.PNG

 

step5_web_request.pngstep6_finish.PNG

 

 

 

 

  • Thanks 3
  • Upvote 2

Share this post


Link to post
Share on other sites

Обновление прошивки после публикации changelog'а на этом форуме

В соседней теме тов. @ndm публикует изменения, вошедшие в прошивку 2.12. Роутер новую прошивку получает, но для того, чтобы изменения вступили в силу, его надо перегрузить. Отслеживать изменения веб-страниц IFTTT не умеет, однако есть способ превратить тему форума в RSS-поток, с которым он работать может.

  1. Создайте новый аплет, выбрав в качестве блока «THIS» сервис RSS feed, выберите триггер «New feed item matches»,
  2. Параметры триггера:
    • Keyword or simple phrase: 2.12
    • Feed URL: http://feed43.com/5528146701453366.xml
  3. В качестве «that» выберите сервис Webhooks,
  4. выберите его единственное действие «Make a web request».
  5. Параметры действия следующие:
    • URL: https://rci:rcipassword@rci.giga.keenetic.pro/rci/components/commit ,
    • Method: POST
    • Content type: application/json
    • Body: {}
  6. Нажмите «finish»

Готово!

  • Thanks 2
  • Upvote 2

Share this post


Link to post
Share on other sites

Отключение вайфая, когда ухожу из дома

Для этого рецепта используется геолокация в смартфоне, так что придётся установить приложение IFTTT, проверял работу только для Android

  1. Создайте новый аплет, выбрав в качестве блока «THIS» сервис Location, триггер «You enter an area»,
  2. В параметрах триггера укажите на карте точку, где работает ваш кинетик и радиус территории, при покидании которой вайфай будет выключаться
  3. В качестве «that» выберите сервис Webhooks,
  4. выберите его единственное действие «Make a web request».
  5. Параметры действия следующие:
    • URL: https://rci:rcipassword@rci.giga.keenetic.pro/rci/ ,
    • Method: POST
    • Content type: application/json
    • Body: [{"interface":{"WifiMaster0/AccessPoint0":{"up":{"no":true} } } },{"interface":{"WifiMaster1/AccessPoint0":{"up":{"no":true} } } }]
    Пример Body приведён для двух диапазонного роутера, у кого диапазон один, Body будет выглядить как [{"interface":{"WifiMaster0/AccessPoint0":{"up":{"no":false} } } }]
  6. Нажмите «finish»

Готово! Для включения вайфая по возвращению домой надо будет создать аналогичный рецепт, триггером которого будет ваше вхождение в зону действия роутера, а команда на включение (поле Body в web request): {"interface":{"WifiMaster0/AccessPoint0":{"up":{"no":false} } } },{"interface":{"WifiMaster1/AccessPoint0":{"up":{"no":false} } } }]

  • Thanks 2
  • Upvote 3

Share this post


Link to post
Share on other sites

Переподключение к интернету, если получен серый IP

В некоторых регионах Ростелеком иногда выдаёт серый IP-адрес, что может в ряде случаев вас не устраивать. Можно решить эту проблему не прибегая к установке Entware силами Zapier'а, который в отличие от IFTTT настраивается более гибко. В частности, между блоками «триггер» и «действие» можно вставлять собственные фильтры.

В отличие от предыдущих примеров, где роутер лишь воспринимал воздействие от внешнего сервиса, в этом роутер будет выступать и источником события и приёмником события.

Перед началом работы с сервисом присвойте роутеру доменное имя, оканчивающееся на keenetic.link или keenetic.pro и разрешите доступ к роутеру по HTTP через облако.

Далее привожу по шагам создание необходимого Zap'а, номера скриншотов под катом соответвуют пунктам списка:

  1. После регистрации на сервисе создайте новый Zap и выберите в качестве триггера Webhooks by Zapier, действие Catch Hook и нажмите «Continue»,
  2. На следующем экране введите имя единственного поля, значение которого будет нас интересовать — «ip» и нажмите «Continue»,
  3. Скопируйте в буфер обмена или текстовой файл предложенный URL вида https://hooks.zapier.com/hooks/catch/3453280/оерdfc/ , при обращении к которому будет срабатывать рецепт, затем нажмите кн. «Ok, I did it»,
  4. На следующем шаге сервис будет ждать пока вы не протестируете этот URL, просто вставьте его в адресную строку новой вкладки вашего браузера, допишите в конце URL'а «?ip=123» и нажмите Enter. Появится сообщение о том, что URL успешно протестирован и станет доступна кн.«Continue»,
  5. Добавьте фильтр, нажав «+» на диаграмме рецепта и выбрав «filter»,
  6. Выберите тип фильтра only if continue, затем «Save+Continue»,
  7. Задайте параметры фильтра, выбрав из выпадающего списка Querystring ip, условие Text starts with и впишите в оставшееся поле значение «100.». Если серые адреса вашего провайдера отличаются от 100.x.y.z, то впишите подходящее значение. Далее нажимайте «Test&Continue». Вы получите сообщение о том, что тестовый вызов URL не содержал искомое значение (в примере выше в свободной вкладке мы дописывали ip=123, так и должно быть), просто нажимайте «Continue»,
  8. Будет предложено выбрать приложение-действие, выбирайте снова Webhooks by Zapier и вариант Custom Request,
  9. Заполните детали запроса, в частности:
    — Method: Post,
    — URL: https://rci.giga.keenetic.pro/rci/ ,
    — Data:
    [{"interface":{"ISP":{"up":{"no":true}}}},{"interface":{"ISP":{"up":{"no":false}}}}]
    — Basic Auth: rci|rcipassword, г
    — Headers: пара значений Content-Type и application/json
  10. В следующем окне будет возможность проверить правильность введённых параметров, нажмите «Send Test to Webhooks by Zapier»
  11. Если всё сделали правильно, то сервис сможет подключиться к роутеру и выполнить разовое переподключение к интернету. Будет выдано сообщение об успешном выполнении запроса и кнопка «Finish».
  12. На последнем шаге будет предложено присвоить имя для созданного рецепта.

Вернитесь в веб-интерфейс роутера и на вкладке Доменное имя > DDNS выберите «Сервис: Другой» и вставьте в поле «Адрес сервиса» значение https://hooks.zapier.com/hooks/catch/3453280/оерdfc/?ip=${ip} , это тот URL, что вы копировали в буфер обмена или текстовой файл при создании рецепта. К концу сохранённого URL надо самостоятельно дописать хвост «?ip=${ip}» по образцу.

Всё! Контролировать работу рецепта можно вкладки Task History. В ней будет видно какие IP-адреса кинетик сообщал сервису и отвечал ли сервис кинетику, если адрес был серым. В случае, если от провайдера был получен серый IP, Zapier скомандует роутеру переподключиться к интернету.

Ограничений на число переподключений здесь нет, а через некоторое время Zapier захочет денег. Пожалуйста это учтите.

Скрытый текст

 

01_create_trigger.png

02_hook_field.png

03_hook_url.png

04_test_hook.png

05_add_filter.png

06_only_if_continue.png

07_filter_params.png

08_pick_action.png

09_request params1.png

09_request params2.png

10_test_request.png

11_make_test_request.png

12_get_Zap_a_name.png

 

 

16_task_log.png

  • Thanks 1
  • Upvote 1

Share this post


Link to post
Share on other sites

Голосовое управление гостевый вайфаем на русском языке стало возможные благодаря платформе Яндекс.Диалоги, доступной на текущей момент в бета-версии мобильного Яндекса.

Платформа Алисы умеет посылать POST-запрос на указанный URL, но не умеет заполнять тело запроса, поэтому схема будет следующей: Алиса посылает пустой POST-запрос определённого вида сервису IFTTT в качестве триггера, а IFTTT уже будет отсылать роутеру сформированный POST-запрос с нужным содержимым.

  1. Создайте новый IFTTT апплет, выбрав в качестве «this» сервис Webhooks,
  2. Назовите событие именем guest_wifi_on,
  3. В качестве «that» выберите сервис Webhooks,
  4. выберите его единственное действие «Make a web request».
  5. Параметры действия следующие:
    • URL: https://rci:rcipassword@rci.giga.keenetic.pro/rci/ ,
    • Method: POST
    • Content type: application/json
    Body: [{"interface":{"WifiMaster0/AccessPoint1":{"up":{"no":false} } } } ]
  6. Нажмите «finish»
  7. Теперь зайдите в документацию WebHooks и перешлите любым удобным способом на мобильный телефон URL, служащий триггером события, он будет иметь вид https://maker.ifttt.com/trigger/guest_wifi_on/with/key/c4fwNrulqpfI4_fze9wpL6
  8. Скажите на мобильнике Алисе «Включи волшебные заклинания»,
  9. Добавьте пересланный на мобильник URL и ключевую фразу «включи гостям вайфай».

Аналогичными шагами добавляется реакция на ключевую фразу «выключи гостям вайфай», результат работы аплета показан в ролике:

 

  • Thanks 2
  • Upvote 1

Share this post


Link to post
Share on other sites

Добавлю, что для Google Assistant настраивается еще проще, т. к. его поддержка есть в IFTTT. В IF добавляем желаемую фразу для ассистента, в THEN все так же, как в посте выше. Работает!

P. S. Пока ассистент на русском не доступен, работать все будет, если основной язык телефона английский. Разумеется, фразу задавать тоже на английском.

Спасибо @Александр Рыжов за отличную идею!

Edited by Sergey Zozulya
P. S.

Share this post


Link to post
Share on other sites

а это всё провернуть с белым ip и своим доменом можно или только keendns?

Share this post


Link to post
Share on other sites
В 28.05.2018 в 14:45, Александр Рыжов сказал:
  • Скажите на мобильнике Алисе «Включи волшебные заклинания»,
  • Добавьте пересланный на мобильник URL и ключевую фразу «включи гостям вайфай».

Никак не хочет эта тётя включать заклинания:
image.png.7f5cdc0886e1559f55d792710bd49bbf.png

> > "Волшебные заклинания" это внешний навык Алисы, т.е. навык созданный сторонними разработчиками.
> > В настоящее время вызвать этот навык нельзя.
> > Но вы можете создать свой собственный навык, аналогичный этому)
> >
> > С уважением,
> > Служба поддержки Яндекса

Edited by Vik2018

Share this post


Link to post
Share on other sites

Здравствуйте! Возник вопрос воспитания младшего поколения. :D Скажите возможно-ли при появлении в сети смартфона (я или жена) включать доступ в сеть Телевизор (по проводу) и телефон ребенка (по воздуху). Все устройства зарегистрированы и IP прибиты к ним. При отсутствии в сети обоих телефонов (я и жена) - отрубать доступ в сеть телевизору (провод) и телефону ребенка (воздух).
В принципе это возможно? Если да то посоветуйте как. Спасибо заранее!  Если написал не в ту тему - посоветуйте куда можно постучаться.

Share this post


Link to post
Share on other sites
1 час назад, Игорь Белов сказал:

Здравствуйте! Возник вопрос воспитания младшего поколения. :D Скажите возможно-ли при появлении в сети смартфона (я или жена) включать доступ в сеть Телевизор (по проводу) и телефон ребенка (по воздуху). Все устройства зарегистрированы и IP прибиты к ним. При отсутствии в сети обоих телефонов (я и жена) - отрубать доступ в сеть телевизору (провод) и телефону ребенка (воздух).
В принципе это возможно? Если да то посоветуйте как. Спасибо заранее!  Если написал не в ту тему - посоветуйте куда можно постучаться.

Если осилите написание скрипта где основная часть ниже - определить устройство по MAC появилось оно или нет, потом есть куча вариантов блокировать/разблокировать (один из них ниже)

/ # ndmq -p 'show ip hotspot' -x | xml sel -t -m '//host[active="yes"][mac="хх:хх:хх:хх:хх:be"]' -v 'name'
хх:хх:хх:хх:хх:be - мас нужного устройства

Вариант А через регистрацию устройств, всем зарег.устройствам разрешен выход в интернет, которых нет в списке им блокирован
/ # ndmq -p 'known host 123 11:22:33:44:55:66' -P message;
/ # ndmq -p 'no known host 11:22:33:44:55:66' -P message;
убрать данное устройство из зарегистрированных устройств

по конфигу это "11:22:33:44:55:66 permit" - есть доступ, если эту запись убрать то доступа нет
ip hotspot
    policy Home deny
    host 11:22:33:44:55:66 permit
    host aa:bb:cc:dd:ee:ff permit
    default-policy deny

ip hotspot
    policy Home deny
    host aa:bb:cc:dd:ee:ff permit
    default-policy deny


Вариант В создать еще один профиль для которого выход в интернет не разрешен и помещать в него устройство
Варинт С ......

#!/bin/sh
mac_client1=`ndmq -p 'show associations' -x | xml sel -t -m '//station[authenticated="yes"][mac="хх:хх:хх:хх:хх:aa"]' -v 'mac' `;
mac_client2=`ndmq -p 'show associations' -x | xml sel -t -m '//station[authenticated="yes"][mac="хх:хх:хх:хх:хх:bb"]' -v 'mac' `;
......
if [ "$mac_client1" = ""  ]; then
   if "$mac_client2" = ""  ]; then	
...... контроль устройства, должно быть в не разрешенных		
       exit;
   fi
fi
ndmq -p 'known host 123 11:22:33:44:55:66' -P message;
.......
exit;

Как то так

Или еще проще есть в WEB установка для клиента времени

(confg-hotspot)> host ‹mac› (‹access› | schedule ‹schedule› | policy ‹policy›)

(config-hotspot)> host 54:e4:3a:8a:f3:a7 schedule MYSCHEDULE
Hotspot::Manager: Schedule "MYSCHEDULE" applied to host "54:e4:3a:8a:f3:a7"

указать время в schedule MYSCHEDULE

access 
-permit Разрешить доступ к сети Интернет.
-deny Запретить доступ к сети Интернет.

 

Edited by vasek00

Share this post


Link to post
Share on other sites

Алиса дёргает веб-хук. На вас ложится обработка реакции на него. Следственно:

  • настраиваете на роутере веб-сервер,
  • пишите CGI-обработчик, разбирающий пришедшее событие и исполняющий нужные команды.

Т.е. сложно и не оправданно (IMHO).

Share this post


Link to post
Share on other sites
В 26.02.2018 в 16:07, Александр Рыжов сказал:

Таким образом, обращения на rci.giga.keeneitc.pro начнут проксироваться на REST API 127.0.0.1:79, где авторизации нет.

Здравствуйте, подскажите, пожалуйста, я верно понимаю, что на устройствах без USB-порта REST API тоже работает?

Настраивал все по вашей инструкции, по  rci.giga.keenetic.pro/rci прекрасно открывается конфиг, правда по rci.giga.keenetic.pro - веб сервер не доступен

Share this post


Link to post
Share on other sites
В 13.06.2019 в 17:59, Igor Puteev сказал:

Здравствуйте, подскажите, пожалуйста, я верно понимаю, что на устройствах без USB-порта REST API тоже работает?

Настраивал все по вашей инструкции, по  rci.giga.keenetic.pro/rci прекрасно открывается конфиг, правда по rci.giga.keenetic.pro - веб сервер не доступен

Да, все работает на всех устройствах.

Этот REST API - это не морда, это именно что API. Потому доступен только URI /rci, все остальное выдает ошибку.

Share this post


Link to post
Share on other sites
6 часов назад, Le ecureuil сказал:

Да, все работает на всех устройствах.

Этот REST API - это не морда, это именно что API. Потому доступен только URI /rci, все остальное выдает ошибку.

так уже и стал думать. Спасибо большое за подсказку - помогли разобраться быстрее техподдержки.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...