[Модификация] Sonoff через IFTT

Вносятся изменения в файлы или устанавливаются доп программы

Модераторы: immortal, newz20

Ответить
Аватара пользователя
yii
Сообщения: 246
Зарегистрирован: Пн апр 17, 2017 1:39 pm
Благодарил (а): 30 раз
Поблагодарили: 33 раза

[Модификация] Sonoff через IFTT

Сообщение yii » Ср янв 16, 2019 11:13 am

Не нашел подобного на форуме, может пригодится кому, если уже было подобное, прошу не осуждать :)

О том как подключить к MD Sonoff через IFTT

Собственно подойдет для всего чего еще нет в MD, но есть в IFTT

Итак, в конце ноября у меня появился первый sonoff, я до этого читал на форуме что на родной прошивке его не подключить, но Sonoff подключается к Google Home, а для меня управление голосом было приоритетнее чем управление из MD, поэтому шить его даже не предполагалось.

Буквально за несколько дней до появления выключателя, здесь появился модуль для управления Sonoff без перепрошивки viewtopic.php?f=5&t=5871&view=unread#unread , но к сожалению он у меня пока не работает, обсуждаю проблему с автором модуля, и надеюсь на скорое решение... но руки то чешутся, поэтому пока решил попробовать по другому. Сразу скажу что идея модуля из темы выше мне нравится больше (как минимум меньше писанины и исключение из цепочке лишнего сервиса) и когда модуль заработает у меня, я перейду на него, то что я предлагаю это просто еще один способ связать Sonoff на родной прошивке с MD. Может пригодится кому для чего то другова.

Управление выключателем из MD на примере одного канала одного выключателя:

Регистрируемся на iftt.com
В разделе My Applets создаем на один канал выключателя 2 апплета, один на включение, один на выключение, скелет апплета такой:

If Webhooks then eWeLink
если получили webhook то даем команду eWelink

В webhooks любой понятный вам event, например livingroom_light_on (и livingroom_light_off соответственно во втором), в eWeLink соответствующая команда на включение или выключение нужного вам канала на нужном выключателе.

Далее переходите на вкладку Services и находите и выбираете Webhooks и нажимаете Documentation

Там вы видите строку вида

Код: Выделить всё

https://maker.ifttt.com/trigger/Ваш_event/with/key/Ваш_ключ
Т.е. если вы в бровзере перейдете по этой ссылке подставив вместо вашего event реальный event из тех что вы описали выше и ваш ключ который вы увидите на странице, то ваш выключатель соответственно включится или выключится

Теперь в MD делаем объект типа SRelays назовем его LivinroomSwitch

В его методе turnOn

Код: Выделить всё

sg('LivinroomSwitch.status',1);
getURL('https://maker.ifttt.com/trigger/livingroom_light_on/with/key/Ваш_ключ', 0);
В его методе turnOff соответственно

Код: Выделить всё

sg('LivinroomSwitch.status',0);
getURL('https://maker.ifttt.com/trigger/livingroom_light_off/with/key/Ваш_ключ', 0);
Все, далее визуализируете этот объект как вам удобно и вызывая кликом соответствующие его методы включаете или выключаете свой выключатель.

Как бы все работает, но мы ведь любим красивую визуализацию, когда например на нашей сцене нарисована включенная лампочка если свет включен и выключенная если выключен... а тут... при включении/выключении из MD все окей, но вот вы включили/выключили свет голосом, руками или из eWelink... то на вашей сцене останется последнее состояние из MD... непорядок... надо теперь в обратную сторону, читать статусы eWeLink в MD.

Это так же можно сделать, но нужно чтобы ваш сервер MD был виден из интернета с постоянным ip или именем, если у вас это есть то можете делать далее...

Конечно хорошо бы чтобы ваш сервер еще и пароль требовал на входе и по https работал...

Для примера рассмотрим что наш сервер отвечает по http по адресу myserver.com на порту 8080 и требует логин mylogin и пароль mypassword

В корне нашего сервера (/var/www/) создаем файлик mywebhooks.php со следующим содержимым:

------------------------------------------

Код: Выделить всё

<?php

include_once("./config.php");
include_once("./lib/loader.php");

// connecting to database
$session = new session("mysession");
$db = new mysql(DB_HOST, '', DB_USER, DB_PASSWORD, DB_NAME);

// Set switch status
if ($_GET['status'] == 'light_in_livinroom_on') {  // event отдаваемый iftt при включении
 sg('LivinroomSwitch.status',1);
};
if ($_GET['status'] == 'light_in_livinroom_off') {  // event отдаваемый iftt при выключении
 sg('LivinroomSwitch.status',0);
};

// closing database connection
$db->Disconnect();

?>
------------------------------------------

Исправить в нем вам надо только events на включение и выключение, я намеренно назвал их не так как events из MD в IFTT что бы было понятно что это разные вещи, разумеется можете назвать их также livingroom_light_on и livingroom_light_off соответственно


Далее в iftt делаем два апплета со скелетом
If eWeLink then Webhooks
если получили команду eWelink то шлем webhook

В части eWeLink выбираем соответствующий выключатель, его секцию и статус

в тексте webhhoks пишем

Код: Выделить всё

http://mylogin:mypassword@myserver.com:8080/mywebhooks.php/?status=light_in_livinroom_on
ну и во втором

Код: Выделить всё

http://mylogin:mypassword@myserver.com:8080/mywebhooks.php/?status=light_in_livinroom_off
соответственно

Пароль, логин и порт если нужны, event в статусе после = такой же как в файле mywebhooks.php

Метод GET, тип text/plain

Все теперь у вас в свойстве status вашего объекта LivinroomSwitch всегда реальный статус вашего выключателя, как бы его не включили/выключили, вручную, из MD, из eWeLink или голосом через ассистента, соответственно если у вас например условная визуализация сцены по статусу объекта, то и визуализацию вы будете видеть верную...

Далее масштабируете на нужное количество девайсов, но лучше дождитесь отладки модуля, там все же проще, повторюсь что делал просто ради эксперимента потому что руки чесались.
За это сообщение автора yii поблагодарили (всего 5):
skysilver (Ср янв 16, 2019 12:56 pm) • newz20 (Чт янв 17, 2019 10:01 am) • Samir77 (Пн мар 11, 2019 11:51 pm) • Divan (Пт авг 23, 2019 1:28 am) • ale7676 (Ср ноя 27, 2019 11:13 am)
Рейтинг: 5.81%
Ответить