文章類型
文章類型

【Simple Care】長照開源工作坊,集結眾人合力Debug

作者:Ches拔(Sco Lin

Simple Care是一個開放長照智慧系統,在不使用無線攝影機讓長輩們覺得剝奪隱私,同時又能掌握一整天的作息。利用聯發科所生產的Linkit 7697開發板,成本不高又能做室內定位,用來規劃、使用,再加上AI 技術,讓Maker們在長照方面也能貢獻一份心力。

以前看到眾人合力幫忙翻修房子之類的新聞報導,體驗不到眾人合作力量的感覺,但這次終於知道那是什麼感覺,只是我們改為眾人合力Debug。Simple Care系統架構裡面有不少待解事項,我們在台北舉辦的工作坊,來了許多神人,解決了所有Simple Care大方向問題,完整的Code請參閱這兒

Simple Care台北場工作坊+駭客松現況景況(Source:Simple Care社群)

新加坡政府也做了類似Simple Care系統,但台灣目前無人導入,沒關係!最近「功德」二字很熱門,那就由我們這群做功德的Maker自己動手來完成。目前看起來要將系統上線只是時間長短而已,台北場的工作坊改進不少Firmware功能運作,這篇文章是集眾人之力修正而來。

Linkit 7697系統設定家中帳密

這裡說明一下系統如何設定家中帳號密碼,假設先前EEPROM完全沒燒寫過,Linkit7697開機時,將會進入AP mode。

AP名稱為Simple Care

可以使用手機或電腦連線,但這裡我們是使用電腦做說明

下載Sokit這個軟體,打開後,選擇Client,輸入Server IP:10.10.10.1,Port:80,按下TCP Connect,會發現Output顯示TCP connection “IP:Port” opend!

Linkit 7697這邊會顯示Someone connected!

回到Sokit,在Buf裡面輸入以下格式:\v\AP帳號\AP密碼\

v 是為了讓EEPROM做驗證,本來認為買回來的EEPROM應該不會燒錄任何資料,但想到有可能是向朋友借來玩的,所以EEPROM有可能不是空值,放一個v讓程式做驗證。而我們在EEPROM存入AP的帳號及密碼(感謝大神實作 orz),將來手機APP也會以傳Socket的方式來寫

在Linkit 7697這邊會看到系統開始Restart,這是因為Linkit 7697不像ESP8266可以強制讓AP mode停掉,再轉成Station mode,所以只能選擇讓它重啟,這樣就可以找不到這個AP了。

接下來會看到使用者輸入的帳號及密碼,連上之後會看到MQTT Server已connected

如果使用者用的是Localhost,那就要連到自家IP address,請自行修改Source code如下:

設定完帳號密碼後,哪天家裡的帳密想更換,那就按下板子的USR鍵,就可以再次設定了!

然後大神又說要在程式裡加一個Watch Dog,因為Linkit 7697常常不明原因當機,所以當機後設定它在確認過EEPROM有v後,等待25秒重啟

再來是於Scan BLE ID與RSSI前,設置Watch Dog的進入點,這樣當Linkit 7697當機後,就會自動連線,然後再Scan BLE ID與RSSI囉~

接下來要修正Backend為multi process,php有pcntl_fork可以使用,還在思考要不要改用node.js或是python,而python將來對接AI套件又非常方便。目前開發群持續Debug中,應該做個前端,上面貼大神們的照片,寫上豐功偉業才對!這次的工作坊,讓夥伴互相認識才是最重要的,別讓大神們寂寞了 XD
下圖為大神制作的流程圖,有了這張圖,就知道流程怎麼走了,實在太感恩啦!

這是另一位大神寫的資料,簡直是強翻天! 居然可以讀懂菜比八小弟寫的亂七八糟Code!

要使用這份協定需要的背景知識:

  1. MQTT
    1. 知道他要帳號密碼以及什麼是TOPIC即可
  2. SQL
    1. 知道INSERT 和 UPDATE 即可
    2. 知道這篇文章的UPSERT是在講先做SELECT, 找不到就INSERT, 找得到就UPDATE
subscribe_simple_care.php這份文件主要用途為將MQTT的資料和資料庫互動,使用到的TOPIC目前有六項:
  1. hello/update_BLE_data
    1. 貌似設備將BLE資料送上來,主要參數有四,分別為:
      1. CentralID
      2. PeripheralID
      3. RSSI
      4. Distance
    2. 訊息範例為 \${CentralID}\${PeripheralID}\${RSSI}\{$Distance}
    3. 呼叫後會將資料寫入log_peripheralwithcentral 資料表
  1. hello/add_data
    1. 註冊使用者(吧
    2. 主要參數有七,分別是
      1. CentralID
      2. CentralName
      3. GPS_N
      4. GPS_E
      5. // 保留
      6. UserEmail
    3. 訊息範例為\${CentralID}\${CentralName}\${GPS_N}\${GPS_E}\\${UserEmail}
    4. 假如有一樣的CentralID 則更新,否則插入 (UPSERT)
  1. home/#
    1. 主要設定目前狀態為 Armed 或是 Disarmed
    2. 主要參數有一
      1. ArmedOrDisarmed:值有可能是Armed 或是 Disarmed
    3. 訊息範例為\${ArmedOrDisarmed}
    4. 輸入Armed後會同時在phone/background 這個TOPIC推送Armed
    5. 輸入Disarmed後會同時在phone/background 這個TOPIC推送Disarmed
  1. hello/indoor_location
    1. 取得最近5筆的基站位置平均
    2. 三個基站目前的CentralID為
      1. 7D:03:00:2B:88:8C(RAN)
      2. DB:2F:00:2B:88:8C(RAN)
      3. 21:0B:00:2B:88:8C(RAN)
    3. PeripheralID 為
      1. D8:98:4B:BD:90:C0(RAN)
    4. 會將結果推送至phone/indoor_background TOPIC
  1. phone/background
    1. 主要為手機取得目前狀態為Armed或是Disarmed
  1. phone/indoor_background
    1. 主要為取得BLE資料
    2. 主要參數有三
      1. Distance1 7D的前五筆資料
      2. Distance2 DB的前五筆資料
      3. Distance3 21的前五筆資料
    3. 訊息範例為\${Distance1}\${Distance2}\${Distance3}

(本文同步發表於作者部落格 — 物聯網學習筆記文章連結;責任編輯:葉于甄。)

Ches拔(Sco Lin)

Ches拔(Sco Lin)

兩個男孩的爸爸、下班變身孩子王、衝浪閱讀與coding、PM擔當RD魂。
Ches拔(Sco Lin)

上一篇: | 下一篇:

468 ad

我想回應

你的電子郵件位址並不會被公開。 必要欄位標記為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料

成城共創股份有限公司版權所有、轉載必究.Copyright(c) 2017 MakerPRO