2010-09-27 52 views
5

我目前正在試圖通過面向互聯網的網站來控制嵌入式設備的項目。這個想法是,用戶可以去一個網站,並告訴這個設備做某種行動。網站上的操作將被轉換爲一系列CLI命令,然後發送到設備。溝通可能會在未來兩種方式,但現在我專注於服務器到設備。創建一個網站與嵌入式設備進行通信

Web服務器是使用Python(Django)的LAMP堆棧,我試圖與之通信的設備是運行eLinux的Beagle Board。任何時候只有一臺設備與服務器通信。

我有所有的功能部分寫在服務器和設備端,但我有一些問題找出如何編寫通信層。我的一個重大問題是設備將會移動,並且每隔幾天就會移動位置。所以,我無法保證設備的靜態IP地址。我的網絡編程知識非常少,所以我從哪裏開始就沒有那麼棒的想法。

有沒有人有任何想法/資源如何開始發展這種溝通?

謝謝!

回答

3

你可以簡單地註冊使用像DynDNS提供者的動態主機名,並有設備更新它的IP在該網站上,以便動態主機總是指向設備IP - 有大量的客戶,腳本等,可用於Linux那樣做。

+0

+1:可能比爲設備連接時寫一些東西更簡單。爲什麼要發明輪子是對的? :) – 2010-09-28 00:04:30

3

如果服務器將是靜態的,您可以始終讓設備建立與服務器的連接以報告其IP地址。

您可以爲設備編寫a simple UDP server以偵聽傳入的通信,然後使用write a client in python爲您的Web服務器調用。

2

我的行爲正常模式(當然,因爲它可能要經過NAT和等),以使設備設置反向SSH隧道只是「家裏打電話」:http://www.howtoforge.com/reverse-ssh-tunneling

提個醒,SSH連接會不時斷開,所以我會在服務器上設置心跳方法,如果客戶端(Beagle Board)錯過了一定數量的心跳,讓它破壞隧道&創建一個新的。

+0

我會去這個選項,因爲您的客戶端設備可能沒有在某些電話網絡上的公共IP地址。 – 2010-09-27 23:57:10

+0

實際上,運營商表示,它將是移動的(因爲不是靜態的)不連接到調制解調器或移動電話。 Wrikken的回答是一個很好的建議:) – 2010-09-28 00:02:32

0

該設備將是移動的,並將每隔幾天移動位置。所以,我無法保證設備的靜態IP地址。

您的設備可以是網站的客戶端。

您的網站有兩個界面。

  1. 人們的HTML界面。

  2. 該設備的非HTML接口。作爲網站的客戶端,該設備需要一個HTTP客戶端庫向網站發送請求。此請求將包含設備的IP地址,以及埋在HTTP請求中的所有常見的malarky。(有標準頭的一堆在請求發送)

一旦設備取得了它的初始請求,那麼你的網站能夠節省設備的當前狀態,並通過如果其他協議與它通信想要這樣做。 (我猜「我有所有的功能部分寫在服務器和設備端」意味着你有一些其他的協議來控制設備,並且這個協議不是基於HTTP。)

它可能從長遠來看最簡單的方法是讓設備輪詢網站上的命令或更新或事物。這樣的設備是純粹的Web客戶端只使用HTTP,而您的網站是純粹的Web服務器,只使用HTTP。那麼你不需要更專門的第二協議。只使用HTTP意味着您可以使用SSL來確保安全通信。

如果您的設備使用HTTP獲取命令和更新,則需要爲可輕鬆編碼爲HTTP請求和響應的數據制定可用的表示形式。選擇包括XML,JSON和YAML。您始終可以創建自己的數據格式;不過,你可能會更快樂地調試JSON等標準格式。

在Django中構建這兩個接口非常簡單。您只需擁有一些適用於您的設備的網址。您將查看返回HTML頁面的人的功能,並查看返回JSON或XML消息的設備的功能。