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