物聯(lián)網(wǎng)設備接入產(chǎn)品該怎么設計?
在某些B端產(chǎn)品中,會通過安裝物聯(lián)網(wǎng)設備來提高工作效率,比如能耗監(jiān)測、智能抄表、遠程監(jiān)控等。而如果接入的物聯(lián)網(wǎng)設備品牌多又不一樣的話,就需要產(chǎn)品層面設計一個物聯(lián)網(wǎng)接入模塊了。本文作者對物聯(lián)網(wǎng)設備接入產(chǎn)品的設計進行了分析,一起來看一下吧。
在某些B 端產(chǎn)品中,會通過安裝物聯(lián)網(wǎng)設備來提高工作效率,比如能耗監(jiān)測、智能抄表、遠程監(jiān)測等等。如果接入的物聯(lián)網(wǎng)設備品牌多、各家協(xié)議、數(shù)據(jù)格式不一致的話,那么就需要產(chǎn)品層面設計一個物聯(lián)網(wǎng)接入模塊,這個模塊充當業(yè)務層和設備層的橋梁,使得業(yè)務層無需關心具體接入設備的品牌、協(xié)議和數(shù)據(jù)格式。
有了物聯(lián)網(wǎng)接入模塊后,接入新的設備時就不需要更改業(yè)務層的設計了,也就能夠減少業(yè)務層的開發(fā)工作量,提高整個團隊的產(chǎn)出效率。
01 一個反面案例
先給大家看一個沒有物聯(lián)網(wǎng)設備接入模塊的反面案例,這樣會更好理解為什么需要物聯(lián)網(wǎng)接入模塊。本人曾經(jīng)接觸過一個物聯(lián)網(wǎng)監(jiān)測項目,他們的產(chǎn)品選用的物聯(lián)網(wǎng)設備只有一個廠家,因此產(chǎn)品設計沒有多考慮,開發(fā)這邊也是為了盡快上線,于是設計了下面這樣的產(chǎn)品架構。
結構很簡單,實現(xiàn)起來確實也很快,產(chǎn)品順利上線了。隨著業(yè)務的發(fā)展,從成本和廠家設備的質(zhì)量綜合考慮,公司又選了另外一個廠家的同類設備,但問題來了,新廠家的數(shù)據(jù)格式和之前的廠家的完全不同,為了接入新設備,他們的產(chǎn)品架構變成了下面的樣子。
業(yè)務模塊變“胖”了,需要新的業(yè)務邏輯來對接新廠家的數(shù)據(jù) API 接口。更為失誤的是,他們的前端頁面的字段名稱是按照之前的設備寫死的,這就意味著前端應用也需要按不同的廠家類型做適配,如果是廠家1就按廠家1的數(shù)據(jù)格式展示,如果是廠家2就按廠家2的數(shù)據(jù)格式展示。
之后,公司又引入了新的廠家,然后開發(fā)同學就“炸鍋”了 —— 簡直就是在人工制造“代碼屎山”?。∫胍粋€新的廠家,一是整個開發(fā)鏈條從設備數(shù)據(jù) API對接,到業(yè)務邏輯處理再到前端頁面展示全部都需要跟著改動;二是整個業(yè)務的代碼里面堆積了一堆按不同廠家做的條件判斷,越來越臃腫,難以維護。開發(fā)同學怨聲載道,對產(chǎn)品經(jīng)理的配合度自然會下降很多。
02 問題在哪?
出了問題,自然要看看怎么“甩鍋”。那么這里到底是產(chǎn)品同學的問題還是開發(fā)同學的問題呢?個人覺得都有問題,但是產(chǎn)品是源頭,責任更大一些。作為產(chǎn)品經(jīng)理,應該要具備業(yè)務前瞻性。以這個案例來說,物聯(lián)網(wǎng)設備屬于硬件設備,作為公司運營肯定會考慮硬件采購的成本,產(chǎn)品的質(zhì)量、穩(wěn)定性。因此,很大可能會使用其他廠家的設備替換。
而且,物聯(lián)網(wǎng)設備有一個很大的特點就是,設備已經(jīng)部署后,可能分布在全國各個地方,根本不太可能用一個新廠家的設備完全替換已有的設備。這就意味著,產(chǎn)品設計上需要考慮不同廠家設備的共存情況 —— 也就是要能夠支持多個廠家的物聯(lián)網(wǎng)設備接入。
物聯(lián)網(wǎng)設備接入需要考慮不同廠家的兼容性,需要能夠同時接入不同廠家的同類功能設備。
03 如何解決問題?
先講我們生活中的一個例子。我們知道不同國家的交流電的電壓是不同的,有220伏 ,也有110V的。如果直接接入電器設備,電器設備會因為工作電壓超出范圍而導致燒毀。
這個問題是怎么解決呢?通過電源適配器來解決,比如下圖是一個筆記本的電源適配器,標明了工作輸入電壓范圍是100-240伏,雖然輸入電壓波動范圍很大,但是輸出一直穩(wěn)定在筆記本需要的電壓范圍內(nèi)(下圖是19.5伏)。
適配器就是解決不同的輸入源不影響輸出的一個中間設備。受到適配器的啟發(fā),軟件設計領域就產(chǎn)生了一個“適配器”模式。適配器模式就是將不同的輸入轉(zhuǎn)換為相同的輸出,從而避免業(yè)務層和輸入直接產(chǎn)生關系。這樣,輸入源的改變處理全部由適配器來完成,業(yè)務層則無需關心輸入源的變動。
對于物聯(lián)網(wǎng)設備接入,我們會發(fā)現(xiàn)和適配器要解決的問題是一樣的。因此,對于物聯(lián)網(wǎng)設備接入,我們應該設計一個適配層,作為廠家數(shù)據(jù) API 和業(yè)務層的橋梁。這個適配層的職責就是接入不同廠家的物聯(lián)網(wǎng)設備數(shù)據(jù) API,然后轉(zhuǎn)換為業(yè)務層需要的標準格式數(shù)據(jù)。
這樣,即便是換廠家、換設備,都只需要更改適配層,業(yè)務層和前端都不需要做任何改動。有了適配層之后,我們的產(chǎn)品架構就演變成下面的樣子。這種架構下,不管接入多少個廠家、多少種設備,都只需要在適配層進行調(diào)整,業(yè)務模塊和前端無需做任何修改。
圖中繪制的箭頭是單向的,實際上換成雙向箭頭也是沒問題的。如果業(yè)務模塊需要下發(fā)指令到物聯(lián)網(wǎng)設備,同樣也可以通過適配層將標準指令轉(zhuǎn)換為不同廠家設備能夠接收的相應指令,接入新廠家設備同樣也不需要更改業(yè)務模塊。
04 經(jīng)驗分享
其實上面說的反面案例類似的情況十分常見,出現(xiàn)這樣的問題很大程度上是沒有類似的產(chǎn)品設計經(jīng)驗。本人曾經(jīng)負責過一個智能電表抄表模塊的產(chǎn)品設計,這里面就涉及到抄表、計費、欠費拉閘斷電、充值恢復通電、手動通斷電等等業(yè)務。
在產(chǎn)品設計時,由于有適配器這樣的概念(實際經(jīng)驗來自做軟件開發(fā)時的設計模式),所以提前考慮了做適配層。并且,明確和開發(fā)同學交待要考慮未來新的廠商設備接入。到后面,確實也因為采購成本原因,采購了另一個廠家的設備。由于有適配層的存在,新廠家的智能電表非??炀徒尤氲疆a(chǎn)品中,而業(yè)務層并沒有做任何改動。要知道,如果要更改業(yè)務層的抄表、計費、通斷電指令那開發(fā)的工作量就非常多,而且還容易出現(xiàn)紕漏導致 bug。
對于物聯(lián)網(wǎng)設備適配層,通常來說需要下面幾個模塊:
1)設備檔案
設備檔案主要維護設備的基礎信息,其中關鍵的一個信息就是與廠家平臺對接的唯一標識,通常會是設備編號或 IMEI。在產(chǎn)品設計的時候,需要考慮支持移動端登記設備檔案以及批量導入。移動端登記是方便設備安裝的時候邊安裝邊登記;批量導入是應對大量設備的批量錄入,提高效率。
2)接口管理
與不同廠家的對接接口管理,這里有兩種處理方式,一是開發(fā)直接在代碼層面完成,二是通過頁面配置完成。第二種會更復雜一些,但是通用性更強。
3)數(shù)據(jù)格式配置
將廠家的設備數(shù)據(jù)轉(zhuǎn)換為業(yè)務模塊的標準格式數(shù)據(jù),和接口管理一樣,一種方式是開發(fā)在代碼里完成,另一種方式是通過配置完成。通常,如果是配置會和接口配置一起完成,將廠家的設備數(shù)據(jù)字段映射到業(yè)務模塊相應的字段。
異常監(jiān)控:異常監(jiān)控包括兩種類型,一個是廠家的服務可用性監(jiān)控,另一個是業(yè)務數(shù)據(jù)層的監(jiān)控??捎眯允欠乐箯S家的服務不可用導致自有業(yè)務的不可用;業(yè)務數(shù)據(jù)層的監(jiān)控是監(jiān)測異常數(shù)據(jù),方便及時發(fā)現(xiàn)業(yè)務層面的問題。比如我們的智能電表就遇到過一個極端的案例,由于線路故障導致抄表數(shù)據(jù)異常。
另外,如果你的產(chǎn)品是 SaaS 平臺,那么建議是按照“開箱即用”的理念來設計物聯(lián)網(wǎng)設備接入模塊。什么是“開箱即用”?那就是臟活累活由平臺運營來做,客戶在業(yè)務系統(tǒng)中只需要關注業(yè)務模塊即可。
以我們的抄表為例,我們把設備檔案這個最繁雜的工作留給了平臺運營層面完成。我們會在平臺層面完成設備檔案的錄入,然后將設備分配給客戶的對應的業(yè)務單元。到了客戶這邊,只需要完成業(yè)務層面的計費、通斷電規(guī)則就可以像使用非智能表一樣使用我們的智能抄表功能。
05 總結
本篇以實例的方式介紹了物聯(lián)網(wǎng)設備接入的產(chǎn)品設計??梢钥吹剑ㄟ^引入適配層可以有效實現(xiàn)多廠家設備快捷接入而不影響業(yè)務層。
對于產(chǎn)品經(jīng)理而言,在做物聯(lián)網(wǎng)設備接入或者類似的功能模塊時,應當具備業(yè)務前瞻視野,提前預判可能的變化,在產(chǎn)品設計上引入應對變化的適配層,從而提高產(chǎn)品迭代的速度、減少開發(fā)工作量的同時提高產(chǎn)品的穩(wěn)定性。
作者:產(chǎn)品海豚灣;公眾號:產(chǎn)品海豚灣(ID:pm-dophin-bay)
本文由@產(chǎn)品海豚灣 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自Unsplash,基于CC0協(xié)議。
該文觀點僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務。
你說的這個適配層,是不是用一個物聯(lián)網(wǎng)網(wǎng)關就能解決
他是跟物聯(lián)網(wǎng)平臺鏈接數(shù)據(jù),不是直連設備,直連設備,可以配置網(wǎng)關
請問“與不同廠家的對接接口管理,這里有兩種處理方式,一是開發(fā)直接在代碼層面完成,二是通過頁面配置完成?!钡诙N頁面配置如何設計實現(xiàn)?
能加個好友交流下么
感謝大佬分享,詳讀后收獲巨大,之前的一些困惑也理清了
已關注大佬,期望能再寫些物聯(lián)設備相關的文章
再次感謝
數(shù)據(jù)倉庫可以解決這個問題