2016-04-22 2 views
8

Я работаю над проектом Android, который использует этот Philips Hue SDK.Использование Philips Hue с переадресацией портов

Я реализовал некоторые функции, чтобы я мог успешно управлять огнями, но я также пытаюсь заставить приложение управлять огнями, когда пользователь находится вдали от дома.

Я настроил переадресацию портов, чтобы я мог подключиться к моему общедоступному IP-адресу через порт 80, и он перенаправляет его на мост.

Идея состоит в том, что пользователь подключается к мосту и аутентифицируется мостом на своих локальных IP-адресах. Затем пользователь может ввести внешний адрес.

У меня есть функция, которая при подключении к мосту я проверяю, подключен ли пользователь к Wi-Fi и они находятся на собственном домашнем wifi. Затем я устанавливаю IP-адрес PHAccessPoint адреса моста моста локального пользователя.

Если пользователь не подключен к Wi-Fi или не находится на домашнем Wi-Fi, то IP-адрес PHAccessPoint обновляется до того, что пользователь вводил в качестве внешнего адреса.

Когда я это делаю, я продолжаю получать либо мост, не отвечающий, не подключенный, либо мост уже подключенный, и это продолжает происходить быстро. Несмотря на то, что в обработчике ошибок, если я получаю мост, не отвечающий или не подключенный, я гарантирую, что я отключу PHAccessPoint и попытаюсь снова подключиться.

Я попытался отключить интервал сердечного ритма или увеличить его, и это не имеет никакого значения.

Если, однако, я нахожусь на Wi-Fi, но все еще подключаюсь через свой общедоступный IP-адрес, это работает, я получаю эту проблему только при переходе по мобильным данным.

Есть ли какие-либо трюки, чтобы сделать эту работу, я видел, что другие приложения делают что-то похожее, но не являются открытым исходным кодом, поэтому не могут понять, как они это реализовали.

Я знаю, что могу подписаться на Philips Hue Remote API, который я делал до Рождества, но у меня не было ответа от них.

Спасибо за любую помощь, которую вы можете предоставить.

ответ

4

После много проб и ошибок и Android Studio, способных декомпилировать SDK, чтобы я мог видеть некоторые из кода, я думаю, что это ограничение того, как используется официальный SDK.

В основном я думаю, что проблема заключается в том, что вы создаете объект PHAccessPoint и устанавливаете внешний ip, например. 86.85.84.83, когда вы подключаетесь к мосту, вы успешно соединяетесь и получаете детали моста, и он сохраняет конфигурацию моста в качестве объекта PHBridge. Этот объект содержит локальную сеть моста, например IP. 192.168.x.x. Когда вы затем делаете что-либо еще, подключенный мост и объект PHAccessPoint не совпадают, и поэтому ошибка соединения не возвращается, пытаясь обработать это и повторно подключиться, поскольку SDK имеет мост, настроенный как подключенный SDK возвращает, что вы уже подключены, и вы в конечном итоге застреваете в цикле.

Я думаю, что единственный способ обойти это - либо иметь сервер, который подвергается через переадресацию портов, а сообщения передаются с сервера на локальный мост, а затем обратно через сервер (так что фактический мост остается локальный) или выполнить собственную реализацию SDK с использованием API RESTful

+0

RE: «свернуть собственную реализацию SDK с использованием API RESTful» Вот что я в итоге сделал.Я устал от борьбы с API-интерфейсом Hue для объектива-c и обнаружил, что было намного проще просто читать и писать JSON на мостике оттенков, а также анализировать концентратор JSON на объекты, чтобы предоставить модель данных для моего приложения, который работает на OS X и iOS, используя ту же модель и код синтаксического анализа. –

Смежные вопросы