https://learn.javascript.ru/xhr-longpoll
А, ну понятно. Окей, это вариант реализации. Согласен. НО!
Во первых для ленивых опишу словами то что описано по ссылке простыми словами:
1) контроллер пингует сервер раз в 15 секунд
2) сервер получив запрос от контроллера держит его N секунд, в ожидании команд от оператора(например открытия двери с веб интерфейса).
3) дождавшись любой команды, отвечает на пинг(или любой другой запрос) с командой.
3) если за N секунд никаких команд не появилось, то отвечаем пустым понг ответом и go to 2
Что имеем в реале:
Абсолютно не важно какой интервал пингования установлен в контроллере или передан через параметр Interval. Контроллер в любом случае посылает команду power_on, если нет ответа на пинг в течении 4-х секунд. Есть предположение что проверяется отсутствия пинга более 4.99... секунд.
Т.е. по факту отложить можно максимум на 4 секунды
Но и это еще не все. Следующий пинг контроллер посылает только тогда, когда получит ответ на предыдущий пинг
Т.е. ни о какой асинхронности даже и речи нет
И в итоге, данный подход для реализации на этом контроллере полностью бесполезен. Ладно бы новый пинг от понга не зависел бы, еще можно было бы выставить время интервала в 5 секунд, отвечать не позднее чем в 4 секунды и можно было бы говорить что почти что реалтайм(конечно с оговорками что если произошло событие, то новое событие может произойти только в течении interval секунд)
2018-06-20 13:35:53 - Z5RWEB446405b2a03d94816e - ...ping
2018-06-20 13:35:57 - Z5RWEB446405b2a03d94816e - ...pong
2018-06-20 13:36:12 - Z5RWEB446405b2a03ec1a205 - ...ping
2018-06-20 13:36:16 - Z5RWEB446405b2a03ec1a205 - ...pong
Интервал пингования 15 секунд, сон между пинг и понг 4 секунды. По таймингу видно как ведет себя контроллер.