teslausb + Raspberry Pi Zero W 安裝 (一)
Tesla 在 V9 軟體 2019 年初的幾次更新中,加入了行車記錄器跟哨兵的功能,我拿到車之後就有這些功能了。
但行車記錄器和哨兵的影片儲存在車主自己插的一個 USB 隨身碟中,車上沒有任何可以觀看裡面影片的功能,要播放影片必須把隨身碟拔下來拿到電腦上看,或是買一個手機可以讀取的雙頭隨身碟,想檢視的時候拔到手機上看。
我剛買車時,行車記錄器的功能還很新鮮,美國 Tesla 的論壇中一天到晚有人在討論相關的功能。我注意到 Reddit 論壇上的一個討論串 中,有人發佈了一個很有趣的 idea:把一片 Raspberry Pi Zero W 裝好系統後,利用 GadgetFS 將它自己模擬成隨身碟,再用 USB OTG port 連接到 Tesla 上,這樣 Tesla 的行車記錄器就會把影片寫入 Pi 的 SD 卡上。而這片 Pi 上一直跑著一個 shell script,無時無刻在尋找它認得的 Wi-Fi。只要連上 Wi-Fi,Pi 就會自動連上一台預先設定好的 SMB/CIFS server,把行車記錄器和哨兵的影片 copy 過去。
這個系統的使用情境是:你家的車庫有 Wi-Fi,而且這個 Wi-Fi 所在的網路上有一台 Windows 或跑在其它機器上的 SMB/CIFS server。當你每天把車子停回車庫,Pi 會自動連上你家的 Wi-Fi,並且把行車記錄器跟哨兵的影片 copy 到 server 上。一切都是自動完成。
原作者雖然也有提供 SFTP 或 cloud storage 的傳檔方法,但都是 experimental 的。我曾經試著設定 Google Drive 跟 AWS S3 傳檔,但程序實在太複雜,後來還是放棄。
我們家的地下停車場有 Wi-Fi,但那個 Wi-Fi 是大樓公用的,跟我家裡的網路並沒有接在一起。我曾經想過幾個方法:
- 從家裡用 Power Line Communication 把家裡的網路打到停車場
- 在停車場裝一台 Mikrotik 的 hAP ac 之類的機器,用其中一個 Wi-Fi 介面連到停車場的 Wi-Fi,建個 site-to-site VPN 到家裡的網路,再把這個 site 用另一個 Wi-Fi 介面打出來給 Pi 連接
很多車主用第一個方法把家裡網路弄到車位邊,但前提是車位的充電電源是從家裡的電錶拉過去的。我們社區因為後來決定裝電動車充電用的公用電錶,我家裡的 AC 跟充電器的 AC 可能要上溯到 22KV 的變壓器次級才相連,我猜用 PLC 通訊成功的機會不大。
至於第二個方法,說難不難,只是我一直懶得動手,而且還得去弄一台 hAP,所以就擱著了。
有一天我突然想到,我幹嘛為了一個裝置要連家裡的網路去搞 site-to-site VPN?我讓 Raspberry Pi Zero W 自己連 VPN 回家不就好了?
雖然這個想法聽起來很簡單,但沒實作前我仍沒有把握這一定可以成功,因為我還不知道原作者的 script 用什麼方法偵測 Wi-Fi 連線、偵測 SMB 伺服器,而我應該在什麼階段把 VPN 叫起來讓它連得到。
Anyway,就來試試看吧。
TESLAUSB 安裝
這個專案剛開始只是 Reddit 討論區上的一個 script,後來移到 GitHub 上去 maintain,也有越來越多人參與開發。目前最完整、維護最好的在這個 repo。它也有了一個非正式的名字,叫做 “teslausb”。
至於為什麼要選用 Raspberry Pi Zero,主要的原因是因為它小又有 Wi-Fi。Zero 系列只有正常 Raspberry Pi 的一半大小,加上專用的塑膠殼後比一般的隨身碟大不了多少。
如果你想用 Raspberry Pi 的話也不是不可以,不過只有 Pi 4 有 OTG 的 USB port 可以拿來跑 GadgetFS 模擬隨身碟,舊的 Pi 1/2/3 因為 SoC 的 USB 過了 USB hub,都只能當 USB host 用,沒辦法跑 OTG,因此不能用。
但 Raspberry Pi 4 的耗電相當驚人,根據官方的文件,Pi 4 的平均耗電電流要 600mA,peak 可以到 1.25A,用 Tesla 前面的 USB 供電會有一點風險。相較之下 Pi Zero W 的平均耗電只有 100mA 到 350mA,真的是又省電又涼快。
這個 repo 的主人 Marcone 為了方便大家安裝,已經做好了可以整包燒錄的安裝包,相較於原來要從 Rasbian 裝起的作法,這實在是簡單太多了。
先到 release 這個頁面去拿最新的安裝 image:
我安裝時的最新版本是 20200122,跟 Tesla V10 的軟體應該已經沒有相容性的問題了。我記得剛更新 V10 時,teslausb 有一些災情傳出。
抓下來的 ZIP 檔解開後會是一個 2GB 左右的 img 檔,這就是 SD 卡的 image 檔。找張夠大的 SD 卡,用寫卡的程式把它寫到卡上。基本的 Raspbian Linux 作業系統大概要 4GB 左右,再來就是看你想要留多大的記憶卡空間給行車記錄器和哨兵模式使用。Tesla 的行車記錄器一分鐘大概會用掉 100MB (這是三個鏡頭時的數據,變成四個鏡頭後應該會再多一點),哨兵模式的流量應該也差不多。大部分的車主都會插至少 64GB 的隨身碟,因此我用了一張 128GB 的 SD 卡。
寫卡的程式很多,我用的是 balenaEtcher,這是個 open source 的寫卡程式,它有各種平台的版本。寫卡的時候千萬小心,務必確認磁碟機代號再按下去,否則有可能會誤殺別的隨身碟或外接硬碟。
Marcone 在 GitHub 上有寫安裝指南,我就簡單的把摘要寫在這裡。
- 用讀卡機和寫卡程式把 image 寫到 SD 卡上。(應該是 microSD)。
- 寫好之後,把卡片從 PC 的讀卡機裡拔出來,再插回去一次。這時會出現兩個磁碟機,其中一個的 drive label 叫 boot,另一個則沒有格式化。打開 boot 這個磁碟機,裡面看得到不少檔案:
- 把 teslausb_setup_variables.conf.sample 這個檔案複製一份,改名叫做 teslausb_setup_variables.conf,然後用文字編輯器 (記事本、UltraEdte、NotePad++…) 編輯它。
- 在接下去之前,我們要先在家裡的網路上開好 Windows 的共享資料夾,以便等一下修改設定檔的時候要填一些資料。我家裡沒有 24 小時開機的 Windows 機器,於是我就把共享資料夾開在一台 QNAP 的 NAS 上。
- 我們需要開兩個資料夾,一個叫 teslacam,是用來同步行車記錄器及哨兵影片檔的;另一個叫 teslamusic,是用來傳音樂檔到 Pi Zero 模擬出來的隨身碟的。對,teslausb 還可以讓你用 Pi 的隨身碟放音樂,音樂檔可以從共享資料夾自動同步到車上。這實在太方便了啊!
- 開好共享資料夾之後可以先用 Windows 的檔案總管試著開開看,並確定使用者帳號密碼跟權限等設定都沒有問題。我建議這邊要為 teslausb 開一個專用的使用者帳號,用來存取這兩個資料夾,而不要用原來 NAS 或 Windows 上的使用者帳號,以免有 security 的風險。
- 接下來要在 teslausb_setup_variables.conf 中設定共享資料夾的相關參數。
export ARCHIVE_SYSTEM=cifs 這一行不要動它
export archiveserver=共享資料夾所在的電腦名稱或 IP address
export sharename=要儲存影片的共享資料夾名稱,我們剛過開的叫 teslacam
export shareuser=可以存取共享資料夾的使用者帳號
export sharepassword=可以存取共享資料夾的使用者帳號 - 接下來要設定 Wi-Fi。Wi-Fi AP 必須要設定 WPA/WPA2 PSK 加密,還有 Pi Zero W 只支援 2.4GHZ 的 802.11b/g/n,還不支援 5GHz。export SSID=’Wi-Fi 的 SSID‘
export WIFIPASS=’Wi-Fi 的連線密碼‘ - 我後來有進去看了 teslausb 的 scipt,它是用 wpa_supplicant 去管理 Wi-Fi 的連線,而它的設定檔 wpa_supplicant.conf 則會由 teslausb 的設定檔自動產生。如果熟悉 wpa_supplicant 的人也可以自己去修改 wpa_supplicant.conf。
- 如果你想要用 teslausb 同步音樂檔案,就要再設定這幾個參數:
camsize 和 musicsize 是你想分配給行車記錄器及音樂檔案的空間大小。GadgetFS 會造出一個有兩個 partition 的隨身碟給 Tesla 讀取,有 teslacam 目錄的那一個就會被拿來寫入影片,而另一個則是放音樂時 USB 音樂的來源。musicsharename 則是 SMB server 上,存放音樂檔的資料夾名稱。我們剛過設定的是 “teslamusic”。 - 以上都設定完後,就可以準備開機了。把 microSD 卡從電腦的讀卡機中拔出來,插到 Raspberry Pi Zero W 上,然後供電給 Pi,開機。Pi Zero W 有兩個 micro USB 插座,一個是純供電用的,另一個則是 OTG。如果要插到 Tesla 上,則要插 OTG 那一個。不過我們現在還不急著把它插到車上,先在家裡把接下來的設定弄完。
- 我們剛剛抓的那個 image 是 teslausb 的無腦自動設定版,因此第一次開機需要一點時間。它會先連上剛剛在設定檔中設定的 Wi-Fi,然後到 GitHub 上抓取最新版的 script,然後進行相關的安裝和設定。在這個過程中,Pi 上唯一的一顆 LED 燈會用不同的閃爍次數指示安裝的進度:
-
閃爍次數 意義 2 驗證設定檔是 OK 的 3 從 GitHub 抓取 script 4 建立儲存行車記錄器影片及音樂檔案的 partition 及模擬磁碟機 5 安裝完成,重新開機 - 整個安裝過程大蓋要 10 到 15 分鐘。如果你家裡的 Wi-Fi 跟停車場的是同一個,那麼到這裡就算安裝完成了。你可以把 Pi Zero 拔下來,插到車子上。記得,要用 OTG 那個 USB 插座,連接到 Tesla 平常插行車記錄器隨身碟的兩個 USB 孔其中一個。
- Raspberry Pi Zero W 每次上電開機都要一點時間,大概 30 秒左右吧。如果剛剛的安裝沒有任何問題,成功開機起來後,Pi Zero 就會模擬出隨身碟。這時候可以打到 D 檔,看看大螢幕上行車記錄器的那個 icon 會不會出現,如果會,那就是隨身碟模擬成功了。接下來的行車記錄器及哨兵影片都會寫到 Pi Zero W 的 SD 卡上。
- 開機完成後 teslausb 會自動開始搜尋認得的 Wi-Fi,如果你剛剛在設定檔裡設定的 Wi-Fi 在車上也收得到,它就會自動連上 Wi-Fi,並開始將模擬隨身碟裡的檔案透過 Wi-Fi 上傳。
以上是 teslausb 標準的安裝方法,但它可能不符合台灣大部分車主的使用習慣。一來我們家裡用來初次設定的 Wi-Fi 網路名稱可能跟停車場的不一樣,再來就是停車場的網路跟家裡的也不一定有直接的連接。因此下一篇我們要再討論的是:
- 安裝完成後修改 Wi-Fi 的設定
- VPN 的安裝
看了這個就想讓ipcam用pi zero連上onedriver,結果openwrt只支援個人版
後續捏?
特斯拉後來加了可以在車上直接看記錄器的功能,這個就沒用了