3

他のデバイスの中には、Belkin WeMo スイッチと 3M WiFi サーモスタットがあります。どちらも Android アプリが付属しています。自宅 (デバイスと同じ WiFi サブネット上の電話) でアプリを開くと、アプリは、デバイスが「ローカル」であるか、アプリがデバイスに「直接」接続されていると表示します。行った変更は、デバイスに直接反映されます。

家の外のどこからでも接続すると、デバイスがローカルではないことを何らかの方法で「認識」します。私の理解が正しければ、どこかで独自のサーバーを更新し、最終的に自宅のデバイスが更新を取得します。

アプリはどのようにそれを行いますか? その機能を再現したい。

基本的に、GPIO を介して何かを行う Raspberry Pi があり、Web ページにアクセスすることでそのアクションをトリガーできます。ホーム ネットワークでは、Web ページは でアクセスできますhttp://192.168.10.25/do_something...ホーム ネットワークの外では、Web ページは でアクセスできますhttp://my_custom_name.some_free_dynamic_dns.com:8080/do_something。WAN の 8080 を LAN の 192.168.10.25:80 にポート転送するようにルーターをセットアップしました。これは機能します。

2 ページにならないようにするにはどうすればよいですか? を効果的に表示するアプリを作成したいと考えてい192.168.10.25/do_something URLます。私が家にいるときは、電話がURLと同じネットワーク上にあることを「自動的に」検出し、192.168.10.25/do_something直接開くだけです...そして私が外にいるときは、それも「自動的に」検出して起動する必要がありhttp://my_custom_name.some_Free_dynamaic_dns.com:8080/do_somethingます.

ここで重要な点は、家にいるときは、たとえ ISP がダウンしていてホスト名が解決されていなくても、すべてがローカルであるため問題にならないということです。

どうすればこれを行うことができますか?

4

1 に答える 1

2

最初に 192.168.10.25 (または選択した任意のローカル アドレス) の Web サーバーにアプリを接続してみます。妥当な時間内 (5 秒で十分) に応答がない場合は、外部 Web サーバーに接続します。

セキュリティのために、192.168.10.25 の Web サーバーが実際にあなたの Web サーバーであることを確認することをお勧めします。これを行うには、チャレンジ アンド レスポンスと公開鍵暗号化を使用します。ご希望があれば詳細をお伝えできます。

電話の IP アドレスを調べることで、(存在しない) ローカル Web サーバーを待たないようにすることができます。192.168.xy でない場合は、ローカルではないと見なして、外部の Web サイトに直接アクセスできます。

192.168.10.25 をアプリに直接埋め込む場合、ホスト ルックアップは必要ありません。

于 2014-10-30T04:18:05.843 に答える