О том как подключить к 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/Ваш_ключ
Теперь в MD делаем объект типа SRelays назовем его LivinroomSwitch
В его методе turnOn
Код: Выделить всё
sg('LivinroomSwitch.status',1);
getURL('https://maker.ifttt.com/trigger/livingroom_light_on/with/key/Ваш_ключ', 0);
Код: Выделить всё
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 или голосом через ассистента, соответственно если у вас например условная визуализация сцены по статусу объекта, то и визуализацию вы будете видеть верную...
Далее масштабируете на нужное количество девайсов, но лучше дождитесь отладки модуля, там все же проще, повторюсь что делал просто ради эксперимента потому что руки чесались.