17年的時候我入職了一家做智能家居的公司,終于寫完了對這個項目進行復盤余黎。
復盤主要還是宏觀層面上的思考,并且挑選了部分模塊的案例载萌。
智能硬件產(chǎn)品的形態(tài)是智能時鐘惧财,這個idea是出自老板在兩年前早上洗漱時候覺得如果在這段時間希望能自動提醒今天的天氣、新聞甚至車輛限號的情況扭仁。
這個場景其實在家居中目前還沒有成熟的產(chǎn)品能夠實現(xiàn)垮衷,原因有兩點:
做智能硬件比單一的軟件在難度上要高很多,因為要考慮到硬件的很多的模塊乖坠,比如底層系統(tǒng)架構搀突,wifi模塊,顯示模塊熊泵,揚聲器模塊仰迁,外觀等等因素甸昏,以及與手機之間的交互。
其二是由于技術不成熟目前的智能家居還未細化到對單一場景進行智能優(yōu)化徐许。
項目啟動之初施蜜,首先是要考慮的是產(chǎn)品形態(tài),以什么樣的消費升級來做這個概念雌隅。
經(jīng)過頭腦風暴后翻默,老板最終拍板決定使用時鐘。
硬件組成
接下來需要分析的是硬件方面的組成恰起。
首先作為一個智能硬件修械,必要的是CPU,WiFi模塊检盼,藍牙模塊肯污。
而從概念來講那么一塊屏幕和揚聲器也是必要的。
那么作為一款“電器”梯皿,還需要考慮的是仇箱,使用蓄電池還是使用插電式的方式,這就需要綜合產(chǎn)品形態(tài)來考量东羹。
既然是時鐘剂桥,那么必然是掛在墻上幾乎不會移動的,所以從能耗的出發(fā)點属提,我們摒棄了電池以追求不必充電的效果权逗,所以在時鐘下部墜了一根電源線,而在線上參考手機耳機設置了調節(jié)音量的按鈕冤议。
在操作上來講斟薇,首先是需要手機app進行遠程交互,另外在硬件上也需要一些簡單的按鈕進行操作恕酸。而設計之初由于成本的把控和技術的實現(xiàn)堪滨,沒有加入語音控制系統(tǒng),那么也就不需要麥克風蕊温。
在場景的考慮上袱箱,一款家居類硬件我們需要它除了使用網(wǎng)絡獲取外界的信息,之外還需要有相應的傳感器檢測整個家的一些情況义矛,所以在這里我們加入了溫濕度傳感器发笔。?
在硬件上的模塊清單大致如上。
設備設置
設備聯(lián)網(wǎng)
軟件這里也需要分成兩個部分來進行設計凉翻,一個是設備上的另一個是手機app了讨。
軟硬件交互,是最基本的一個功能,首先面臨的問題是關聯(lián)手機和如何讓硬件聯(lián)網(wǎng)前计。
時鐘的屏幕由于不是觸摸屏胞谭,所以需要用戶在手機上進行聯(lián)網(wǎng)操作。
登錄后手機聯(lián)網(wǎng)引導界面
設備聯(lián)網(wǎng)為了友好顯示残炮,做了分步驟進行:?
開機之后語音提示用戶掃描屏幕上的二維碼去應用商店下載手機應用韭赘,下載之后手機進行登錄操作,此時按照手機上的說明讓設備進入了等待藍牙連接的狀態(tài)势就。
手機與設備藍牙連接之后,手機上輸入WiFi的信息會通過藍牙傳給設備脉漏,從而進行設備聯(lián)網(wǎng)苞冯。
設備成功聯(lián)網(wǎng)之后,進入新手引導環(huán)節(jié)侧巨。
操作引導
由于設備是自定義的操作模式舅锄,所以用戶需要引導進行使用從而培養(yǎng)習慣。
設備上語音+動畫的形式幫助說明:
音量控制司忱、切換應用皇忿、喚起菜單、播放/暫停元媚、選擇 等的簡單操作罢防。
手機應用設計
手機上的應用采用了常規(guī)的底欄按鈕分頁面設計载绿。
首頁:是對于設備中插件的一些操作(類似我們在手機或電腦的桌面,或者可以理解為遙控器)幔荒,也包含了一些常用的設備快捷操作及增刪設備上的插件(功能)。
插件商店(精選):用戶可以在商店中下載需要的一些插件(功能)梳玫。
*插件:
為避免和應用這一名詞的混淆(如微信爹梁、淘寶等),我們將設備上的應用定義為插件提澎。
也就是說姚垃,在App Store或Google Play下載下來的是應用(即在應用商店下載了“時鐘應用”),而在我們時鐘應用中的插件商店可以下載到插件對設備進行安裝使用盼忌。
所以在設計插件時不僅需要做手機端的插件积糯,還需要做設備端的插件,并且保證雙方版本號一致碴犬,才能夠進行正常使用絮宁。
在這里的插件下載不需要手機端應用的升級和更新(只有ROM/Launcher有修改時,手機端應用或設備需要推送升級)服协。
個人中心:包括了賬號設置绍昂、不常用的設備操作以及設備基本設置,如解綁設備、添加設備窘游、添加用戶唠椭、切換設備等。
智能播報
在我入職之前忍饰,大部分基礎功能已經(jīng)做好了贪嫂,比如設備設置、賬號系統(tǒng)艾蓝、以及部分插件如時鐘力崇、電臺、藍牙音樂赢织。
我需要做的是各個部分的優(yōu)化以及新插件亮靴。
在做智能播報之前,我發(fā)現(xiàn)設備似乎少了點什么于置。
設備總是需要被動的去喚起某一項功能茧吊,比如看天氣時需要手動切換到天氣插件,需要聽電臺時又需要手動切換至電臺插件八毯。
基于這個思路搓侄,結合現(xiàn)在已有的功能,我想到了讓設備主動去推信息流话速。也就是說當用戶預設好了場景后讶踪,就可以收聽信息。
再回到idea的階段尿孔,用戶的需求是在洗漱的時間收聽時間俊柔、天氣、限行及路況活合。
那么一旦洗漱時間固定雏婶,我們就可把這個信息流做進鬧鐘里,時間到了就自動序列去播放內容白指。
而這樣一個功能聯(lián)動了不同的插件留晚,同時也不適合做成新插件,就需要在launcher中加入一個提醒狀態(tài)告嘲,可以類似手機中鬧鐘響了桌面會覆蓋一個圖層顯示當前鬧鐘狀態(tài)错维,用戶可以進行手動關閉。同樣的橄唬,我們在設備上也設置了手動關閉的操作赋焕。
自動播報
我們可以讓用戶在手機上設置好播放內容、時間等并該播報處于開啟狀態(tài)仰楚,到時間時就可以進行播報隆判。
手機端智能播報頁面
而設備端會暫停當前音頻犬庇,進入‘智能播報順序流’,跳轉至對應插件頁面侨嘀。
播報順序:
鈴聲:20秒音樂臭挽,第15秒開始減弱。
叮咚音效(選擇鈴聲時咬腕,該音效不播放欢峰;未選擇鈴聲時播放該音效)
時間tts:{{早上(4:00-12:00]/下午(12:00-18:00]/晚上(18:00-4:00]}}好,現(xiàn)在是{{19}}點{{17}}分涨共,桔貓為您準備了{{起床播報}}纽帖。
日歷tts:今天是{{2018}}年{{1}}月{{1}}日,星期二举反,農(nóng)歷{{冬}}月{{十五}}抛计。(設備端顯示日歷頁面)
天氣tts:當前為您播報的是{{西安}}的天氣,今日{{雨夾雪}}照筑,最高氣溫{{1}}度,最低氣溫{{零下3}}度瘦陈,PM2.5為{{400}}凝危,{{重度污染,外出請戴好防霾口罩}}晨逝。{{易發(fā)感冒}}蛾默,{{今天不適宜洗車}}。(設備端顯示天氣頁面)
新聞tts:現(xiàn)在為您播報桔貓{{國內}}新聞:{{……}}(設備端顯示新聞頁面)
mozik:現(xiàn)在為您播報的是mozik精選音樂(設備端顯示mozik頁面)
手動播報
而定時播報幾乎僅限類似于時間規(guī)律的場景捉貌,那如果我們也想讓用戶在不固定的時間聽到播報推送要怎么做支鸡?
時間不固定的場景最典型的的是下班回家,由于下班的時間以及路上所花費的時間導致下班回家不是固定的時間趁窃,那么首先要考慮的是如何獲得用戶回家的信息牧挣。
一開始我想到了一回家用戶的手機會自動連上家里的WiFi,通過這一信息聯(lián)動傳遞醒陆,設備獲知了用戶連上WiFi了就等同于下班了瀑构。但對此,開發(fā)也進行了技術預研刨摩,發(fā)現(xiàn)并不能從路由器或手機系統(tǒng)獲得相關數(shù)據(jù)寺晌。
關鍵詞是“快捷”“用戶想聽”,從這兩點出發(fā)澡刹,我想到了在設備上設置一個快捷喚醒智能播報的操作呻征。
同時在錯過了“想聽”的時候不會再去推,這樣也就需要時效性罢浇。比如說用戶下班已經(jīng)是晚上11點陆赋,回到家只想倒床就睡沐祷,那么設備一旦過了“播報有效期”就默認今天不需要播報,提示也會在設備屏幕上消失奏甫。
這樣一來就有了“手動播報”的定義:在預設好的某一時間段內戈轿,手動拉動拉繩開始進行播報。
手動播報
當?shù)竭_用戶所設置的手動播報時間段內阵子,設備端底部彈出如圖彈框思杯;
[已為您準備好今日的{{播報名}} 下拉拉繩開始收聽]
下拉拉繩后進入自動播報;
當過了有效時間時挠进,底部彈框消失色乾,手動播報不會被觸發(fā)。
編輯播報頁面
手機端新增播報頁面
‘重復’與當前鬧鐘選擇【重復頁面】一致领突,點擊跳轉【重復頁面】暖璧;
‘播報內容’顯示當前已選序列流內容名,點擊進入【播報內容頁面】君旦;
點擊‘播報時長’跳轉至【播報時長頁面】澎办,可選項有:5 分鐘 10分鐘 15分鐘 20分鐘 30分鐘 自定義,點擊自定義彈框彈出[0-12]小時[0-59]分鐘選項金砍,點擊確定后局蚀,‘對勾標記’停留在‘自定義’一欄,點擊確定恕稠,【編輯播報頁面】顯示播放時間為 {{分鐘}}分鐘琅绅;
顯示:
0小時X分鐘顯示 X分鐘
X小時0分鐘顯示X小時
點擊‘手動播報’可進行切換開啟/關閉,時長選擇范圍與播報時長一致鹅巍;
點擊右上角‘確定’為保存千扶,該播報開關依然保持之前的狀態(tài);
點擊左上角‘返回箭頭’視為取消操作(未保存)骆捧。
插件設計
新聞播報插件
新聞模塊最簡單的方式是接入了第三方的API澎羞,我們在后臺設置定時的拉流接口就可以了。
新聞播報這個插件在我入職之前就已經(jīng)上線了凑懂,但由于硬件設備與手機不同煤痕,會出現(xiàn)一些因為設備關閉/斷網(wǎng)的狀態(tài)導致的一些問題,這個就算是一個邏輯優(yōu)化接谨。
問題:之前新聞播放到A摆碉,過了幾天之后進入新聞界面,設備端顯示A的標題脓豪,手機端底部不顯示播放進度bar巷帝,設備端點擊中鍵后不能播放。
原因:進入新聞界面后:手機端的播放記錄是從服務器拉取扫夜,這個時候服務器返回空楞泼,所以底部播放記錄的bar不展示驰徊;設備端的播放記錄是讀的本地,所以顯示A堕阔,點擊播放的時候請求服務端棍厂,由于A已經(jīng)被刪掉所以點擊中鍵后不能播放。
優(yōu)化:
每次更新新聞之后超陆,設備端顯示當前所選頻道的(最新更新的)第一條新聞牺弹,不顯示上次的播放記錄(早上6:50-7:00之間用戶打開新聞應用,需要設備端主動拉取新聞內容时呀,檢查該新聞是不是今天的新聞)张漂;
判斷歷史記錄是不是當天的;
每天只刪除一次新聞內容谨娜,刪除時間點是每天早上6:50航攒,設備端保持一致;
新聞更新失敗要有重試邏輯趴梢,播放后臺已經(jīng)刪除的新聞BUG解決漠畜;
流程圖
測試用例
倒計時插件
作為時間類的設備,常用的功能必然是與時間相關坞靶。
在一次頭腦風暴中盆驹,同事們提到有時候經(jīng)常會用到提醒工具,比如提示敷面膜的倒計時滩愁,以防時間過長。
那么此類的工具在家的場景下使用設備操作更為方便辫封,于是構思了在移動端設置常用的倒計時硝枉,在設備上進行使用。
計時器通常的設置需要名稱及時長倦微,所以在手機端添加只有這兩個字段妻味。
手機端添加計時器
而在設備上呈現(xiàn)的需要三種狀態(tài):未開始-進行中-已結束责球。
同時也需要展示倒計時名稱拓劝,倒計時所剩時間郑临。
操作上有切換倒計時及開始/結束倒計時厢洞。
倒計時結束tts:
[【音效】您設置的計時器{{煮雞蛋}}已結束];
異常情況的處理是每一個設計都需要考慮到的部分卫玖,在設計倒計時的時候假瞬,異常情況大概會有以下幾條:
主從用戶是否需要同步‘倒計時信息’嚣崭;
設備關閉/斷電等原因關機雹舀,如何處理;
鬧鐘/提醒來時虚吟,聲音是否會重復串慰;
正在進行倒計時邦鲫,手機端添加一條倒計時庆捺,設備端是否需要刷新滔以,及倒計時的順序氓拼;
這里給出解決方案:
(當前倒計時結束后順序重置桃漾,如:有倒計時ABC撬统,A為第一個倒計時宪摧,顯示:CAB,當前進行倒計時A沿后,此時手機端添加倒計時D尖滚,按下鍵則顯示DAB(A被選中)
設備端倒計時正在進行漆弄,手機端管理倒計時撼唾,當前倒計時不受影響倒谷。該倒計時結束時渤愁,同步手機端信息抖格;)
其他
升級更新
硬件設備比較難的一點是ROM升級咕晋,在研發(fā)狀態(tài)時候可以隨時打開設備插上數(shù)據(jù)線更換ROM包捡需,而對于測試階段多個設備情況下就需要批量統(tǒng)一升級站辉,這里就必須要使用OTA進行升級饰剥。
交互流程如泳道圖
強制更新:
后臺推送之后,會使用第三方OTA推送至設備顾孽,設備處于非離線的狀態(tài)就可以立即進入更新若厚;
設備重新聯(lián)網(wǎng)時需要主動請求當前版本是否與后臺版本一致测秸,如果不一致會立即進入更新霎冯。
非強制更新:
用戶在手機端確認更新后沈撞,設備開始下載更新安裝包关串,下載完成后晋修,設備則自動開始進入更新狀態(tài)墓卦。