從產(chǎn)品角度看物聯(lián)網(wǎng)平臺(tái)的規(guī)則引擎

6 評(píng)論 17634 瀏覽 159 收藏 15 分鐘

編輯導(dǎo)語(yǔ):規(guī)則引擎是物聯(lián)網(wǎng)平臺(tái)的一個(gè)重要功能模塊,是處理復(fù)雜邏輯的引擎,主要對(duì)感知層搜集的數(shù)據(jù)進(jìn)行處理,實(shí)現(xiàn)數(shù)據(jù)邏輯和上層業(yè)務(wù)的解耦;本文作者從產(chǎn)品的角度對(duì)此做出理解,我們一起來(lái)看一下。

大型物聯(lián)網(wǎng)平臺(tái)都有規(guī)劃規(guī)則引擎,而規(guī)則引擎到底是什么?這個(gè)組件有什么意義?具體該怎么做?這些是我在做的過(guò)程中不斷問(wèn)自己的問(wèn)題,以下從產(chǎn)品角度聊聊我對(duì)這些問(wèn)題的理解。

一、規(guī)則引擎是什么

1. 為什么叫規(guī)則引擎

我猜這個(gè)詞是英譯過(guò)來(lái)的,國(guó)外的網(wǎng)站叫rule engine,我們也就叫規(guī)則引擎了,其實(shí)我一直好奇為啥不翻譯成規(guī)則發(fā)動(dòng)機(jī),雖然不高深,但是很好理解呀。

拆詞理解就是:

  • 規(guī)則,是運(yùn)作規(guī)律所遵循的法則。
  • 引擎來(lái)源于發(fā)動(dòng)機(jī),有時(shí)候直接被用來(lái)指代發(fā)動(dòng)機(jī),泛化后被用在很多地方,比如搜索引擎。

所以物聯(lián)網(wǎng)平臺(tái)的規(guī)則引擎就是對(duì)接入設(shè)備設(shè)定規(guī)則的,而規(guī)則的基本公式是如果A,那么B。

2. 為什么做規(guī)則引擎

物聯(lián)網(wǎng)平臺(tái)的基本功能就是對(duì)物的管理和對(duì)物產(chǎn)生的數(shù)據(jù)進(jìn)行處理,數(shù)據(jù)的處理涉及數(shù)據(jù)的存儲(chǔ)、流向、使用。

那么會(huì)自然的提出3個(gè)問(wèn)題:

  • 數(shù)據(jù)存儲(chǔ)在哪里?
  • 流轉(zhuǎn)至什么地方?
  • 怎么使用?

針對(duì)這3個(gè)問(wèn)題都可以通過(guò)代碼實(shí)現(xiàn),但是不同的行業(yè)的業(yè)務(wù)規(guī)則復(fù)雜多樣,通過(guò)代碼實(shí)現(xiàn)的話代碼量、邏輯分支、代碼維護(hù)工作量會(huì)不可想象。

所以需要一種組件,可以將業(yè)務(wù)決策從代碼中分離,易于編寫、易于維護(hù),基于這些需求,規(guī)則引擎應(yīng)運(yùn)而生。

其實(shí)這么解釋總覺(jué)的有一點(diǎn)事后諸葛亮,一種組件的誕生肯定伴隨的需求和功能的不斷迭代,只是事后看起來(lái)清晰了很多。

二、規(guī)則引擎怎么做

1. 從實(shí)際場(chǎng)景出發(fā)

如果公式是如果A,那么B,那么通過(guò)下面幾個(gè)例子看看A、B分別有什么。

場(chǎng)景1:

某個(gè)地庫(kù),紅外感應(yīng)器感應(yīng)到有車移動(dòng),則旁邊的10個(gè)燈亮,2分鐘內(nèi)車不動(dòng),燈滅。

  • A1:[某類型紅外設(shè)備]感應(yīng)到[車移動(dòng)],B1:[旁邊10個(gè)燈][開關(guān)屬性設(shè)置為開];
  • A2:[某類型紅外設(shè)備]感應(yīng)到[2min內(nèi)沒(méi)有車移動(dòng)],B2:[旁邊10個(gè)燈][開關(guān)屬性設(shè)置為關(guān)];

場(chǎng)景2:

某條街道,所有路燈夏季19:00亮,6:00滅,冬季17:30亮,7:00滅。

  • A1:[街上的所有路燈]在[5月1日-8月31日的19點(diǎn)],B1:[街上所有路燈的開關(guān)屬性設(shè)置為開];
  • A2:[街上的所有路燈]在[5月1日-8月31日的6點(diǎn)],B2:[街上所有路燈的開關(guān)屬性設(shè)置為關(guān)];
  • A3:[街上的所有路燈]在[9月1日-4月30日的17點(diǎn)半],B3:[街上所有路燈的開關(guān)屬性設(shè)置為開];
  • A4:[街上的所有路燈]在[9月1日-4月30日的7點(diǎn)],B4:[街上所有路燈的開關(guān)屬性設(shè)置為關(guān)];

場(chǎng)景3:

某個(gè)家,識(shí)別開門人員,非主人的話報(bào)警。

  • A:[門感應(yīng)器]在[感應(yīng)到門開],B:[報(bào)警];

場(chǎng)景4:

某個(gè)大型工廠,某類機(jī)器的溫濕度數(shù)據(jù)轉(zhuǎn)發(fā)至A服務(wù)(用于分析環(huán)境的服務(wù)),某類機(jī)器的運(yùn)行參數(shù),如高度、角度等數(shù)據(jù)轉(zhuǎn)發(fā)至B服務(wù)(用于分析機(jī)器運(yùn)轉(zhuǎn)情況的服務(wù))。

  • A1:[是X類機(jī)器的溫度、適度],B1:[轉(zhuǎn)發(fā)至A服務(wù)];
  • A2:[是Y類機(jī)器的高度、角度],B2:[轉(zhuǎn)發(fā)至B服務(wù)];

以上幾個(gè)場(chǎng)景可以看出A包括時(shí)間點(diǎn)、時(shí)間范圍、日期范圍、設(shè)備的屬性值、設(shè)備的類型等,B可能是狀態(tài)的變化、產(chǎn)生告警、轉(zhuǎn)發(fā)數(shù)據(jù)等。

接下來(lái)的工作就是如何把這些信息整合成界面上易于操作的功能了。

2. 需求的抽象與邏輯的整合

把以上的ABCD進(jìn)一步抽象:

  • 條件:日期、時(shí)間、設(shè)備的類型、設(shè)備的范圍、設(shè)備的某個(gè)屬性、設(shè)備的某個(gè)屬性的值;
  • 邏輯關(guān)系:=、==、≥、≤、!=、>、<;
  • 執(zhí)行動(dòng)作:告警、轉(zhuǎn)發(fā)、改變屬性;

是不是很熟悉,在excel或者木疙瘩、axure等工具里有很多處理類似邏輯的地方。

Excel對(duì)邏輯的處理

木疙瘩對(duì)邏輯的處理

那么參考這些邏輯,整合出來(lái)的頁(yè)面便是:

簡(jiǎn)單的規(guī)則實(shí)現(xiàn)

等等,還有好多問(wèn)題沒(méi)有考慮清楚:

1)條件間的邏輯關(guān)系是“與”還是“或”?(A與A)

  • 如果是“與”,那恰好在某個(gè)點(diǎn)設(shè)備上報(bào)數(shù)據(jù)符合設(shè)定條件的情況在現(xiàn)實(shí)中存在嗎?
  • 如果是“與”,用戶創(chuàng)建了兩個(gè)時(shí)間點(diǎn)的條件,那這條規(guī)則就沒(méi)意義了吧?

2)動(dòng)作間的關(guān)系是“與”還是“或”?(B與B)

既要將數(shù)據(jù)轉(zhuǎn)發(fā)到別的服務(wù)上,又要讓某個(gè)設(shè)備執(zhí)行某個(gè)動(dòng)作,合理嗎?

3)不合理的規(guī)則是按照正常(自認(rèn)為正常)的邏輯寫死在程序里還是讓用戶自己判斷?

4)規(guī)則什么時(shí)候生效,立即生效還是指定時(shí)間生效,還是周期生效?

沒(méi)有標(biāo)準(zhǔn)答案…

其實(shí)以上問(wèn)題沒(méi)有標(biāo)準(zhǔn)的答案,做成什么樣子都要根據(jù)現(xiàn)實(shí)的需求來(lái)。

對(duì)于某些簡(jiǎn)單的場(chǎng)景,規(guī)則引擎都沒(méi)必要做,有些場(chǎng)景,沒(méi)必要做數(shù)據(jù)轉(zhuǎn)發(fā)。

阿里和華為都把規(guī)則引擎分為數(shù)據(jù)轉(zhuǎn)發(fā)和設(shè)備聯(lián)動(dòng),這個(gè)分法比較通用,而通用的另一面便是抽象,不貼合業(yè)務(wù)。

貼合業(yè)務(wù)近的平臺(tái)可以按照自己的需求劃分,比如規(guī)則引擎(定時(shí)聯(lián)動(dòng)、設(shè)備聯(lián)動(dòng))、規(guī)則引擎(設(shè)備聯(lián)動(dòng)、告警)、規(guī)則引擎(數(shù)據(jù)轉(zhuǎn)發(fā)、定時(shí)聯(lián)動(dòng)、設(shè)備聯(lián)動(dòng))等等。

3. 阿里云物聯(lián)網(wǎng)平臺(tái)的規(guī)則引擎

阿里云物聯(lián)網(wǎng)平臺(tái)的規(guī)則引擎

阿里云物聯(lián)網(wǎng)平臺(tái)規(guī)則引擎的數(shù)據(jù)流轉(zhuǎn)

阿里云物聯(lián)網(wǎng)平臺(tái)規(guī)則引擎的設(shè)備聯(lián)動(dòng)

阿里云把條件分成觸發(fā)器和執(zhí)行條件,好處是從代碼的角度知道什么時(shí)候執(zhí)行,比如:

  • 到點(diǎn)就判斷條件;
  • 執(zhí)行動(dòng)作或者上報(bào)的數(shù)據(jù)符合邏輯就判斷條件,執(zhí)行動(dòng)作。

這樣的設(shè)計(jì)我理解,規(guī)則的執(zhí)行只能根據(jù)設(shè)備上報(bào)的值或者時(shí)間點(diǎn)開始執(zhí)行程序,只有一個(gè)時(shí)間范圍的時(shí)候是無(wú)法運(yùn)行的;但是有些程序員思維,尤其引入“觸發(fā)器”概念對(duì)用戶很不友好,見仁見智吧。

條件間邏輯關(guān)系與動(dòng)作間邏輯關(guān)系:

1)將條件分成觸發(fā)器和執(zhí)行條件,隱含的一層邏輯是觸發(fā)器和執(zhí)行條件間是“與”的關(guān)系。

2)觸發(fā)器間的關(guān)系明確定義為“或”,可以為時(shí)間觸發(fā)或者設(shè)備觸發(fā)。這樣設(shè)計(jì)是合理的,畢竟不管時(shí)間或者設(shè)備上報(bào)的屬性/事件同時(shí)滿足條件的情況幾乎沒(méi)有。

3)執(zhí)行條件間的關(guān)系明確說(shuō)明定義為“與”。

當(dāng)室內(nèi)溫度低于23°C時(shí),如果室內(nèi):有人或者有寵物則:打開空調(diào),并將溫度調(diào)節(jié)至26°C。

以上例子需要?jiǎng)?chuàng)建2條聯(lián)動(dòng)規(guī)則,但是也可以這么設(shè)置:

當(dāng)室內(nèi):有人或者有寵物,如果室內(nèi):溫度低于23°C時(shí),則:打開空調(diào)并將溫度調(diào)節(jié)至26°C。

也就是說(shuō)如何使用,很大一部分由用戶的腦洞決定。

4)動(dòng)作間定義了關(guān)系也是“與”,這個(gè)設(shè)計(jì)我認(rèn)為合理,如果確實(shí)有“或”的需求,設(shè)計(jì)的時(shí)候自己選擇一個(gè)設(shè)置在規(guī)則中即可,到目前為止,沒(méi)有碰到過(guò)必須是“或”的強(qiáng)需求。

規(guī)則的生效時(shí)間有如下設(shè)計(jì):

  • 規(guī)則列表有一個(gè)是否啟動(dòng)的手動(dòng)開關(guān),打開后表示規(guī)則開始生效。
  • 是否指定時(shí)間生效設(shè)計(jì)在執(zhí)行條件中,用的是明確的時(shí)間范圍表單。
  • 是否指定周期生效設(shè)計(jì)在觸發(fā)器中,用的是cron表達(dá)式,很靈活,對(duì)使用者有一定要求。

阿里云物聯(lián)網(wǎng)平臺(tái)規(guī)則引擎規(guī)則生效時(shí)間設(shè)計(jì)

4. 華為云IoTDA的規(guī)則引擎

華為云IoTDA的規(guī)則引擎

華為云IoTDA的數(shù)據(jù)轉(zhuǎn)發(fā)

華為云IoTDA規(guī)則引擎的設(shè)備聯(lián)動(dòng)

華為云就只有執(zhí)行條件和執(zhí)行動(dòng)作,把生效周期和范圍這個(gè)條件隱含在了規(guī)則的基本信息中,個(gè)人覺(jué)得這樣設(shè)計(jì)對(duì)使用者更友好。

條件間邏輯關(guān)系與動(dòng)作間邏輯關(guān)系:

1)將生效周期和時(shí)間范圍放在規(guī)則的基礎(chǔ)信息中隱含的一層邏輯是生效時(shí)間和執(zhí)行條件間是“與”的關(guān)系。

時(shí)間與周期設(shè)計(jì)

2)執(zhí)行條件間通過(guò)靈活的選項(xiàng)讓用戶選擇是“或”還是“與”,設(shè)計(jì)很靈活,靈活的反面就是錯(cuò)誤操作導(dǎo)致條件間相互矛盾,規(guī)則只判斷不執(zhí)行。

靈活的邏輯關(guān)系選擇

3)動(dòng)作間邏輯關(guān)系是指定“與”。

4)為了解決觸發(fā)器的問(wèn)題設(shè)置了觸發(fā)時(shí)效,將時(shí)間點(diǎn)拉成了可設(shè)置的時(shí)間線。

靈活的邏輯關(guān)系選擇觸發(fā)時(shí)效

規(guī)則的生效時(shí)間有如下設(shè)計(jì):

  • 規(guī)則列表有一個(gè)是否啟動(dòng)的手動(dòng)開關(guān),打開后表示規(guī)則開始生效。
  • 是否指定時(shí)間生效設(shè)計(jì)在規(guī)則基礎(chǔ)信息中,用的是明確的時(shí)間范圍表單。
  • 是否指定周期生效同樣設(shè)計(jì)在規(guī)則基礎(chǔ)信息中,指定按照“周”循環(huán),用戶很明確知道怎么用,但是按照年、月循環(huán)的場(chǎng)景無(wú)法實(shí)現(xiàn)。

5. 做的時(shí)候如何決策和平衡

參考同類型的產(chǎn)品會(huì)發(fā)現(xiàn)同樣的功能如何做都存在優(yōu)劣勢(shì),做好選擇便是我們要考慮的問(wèn)題;而決策的源頭不僅是公司面臨的實(shí)際需求、市場(chǎng)的變化、技術(shù)的選型都會(huì)影響最后的呈現(xiàn),一點(diǎn)小小的不同便會(huì)導(dǎo)致大大的差別。

而這個(gè)軟能力并非一蹴而就,我們可能需要一邊往前走一邊檢驗(yàn),是否做得好甚至還需要一點(diǎn)點(diǎn)運(yùn)氣。

三、寫在最后

文中描述的細(xì)節(jié)只涉及到了規(guī)則的邏輯組織,但是數(shù)據(jù)關(guān)系的細(xì)節(jié)更多,主要和物模型的定義、設(shè)備接入、技術(shù)選型有關(guān),就不再贅述了。

物聯(lián)網(wǎng)產(chǎn)品路上的點(diǎn)點(diǎn)滴滴,一起學(xué)習(xí)。

 

本文由 @娜娜 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。

題圖來(lái)自Unsplash,基于CC0協(xié)議

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 你好,方便加個(gè)微信交流一下嗎?

    來(lái)自安徽 回復(fù)
  2. 你好 我想問(wèn)下嵌套規(guī)則引擎這種如果設(shè)計(jì)呢。例如((條件1 and 條件2) or 條件3) and 條件4這種的。目前我考慮的就只有讓用戶自己直接輸入表達(dá)式,但對(duì)非技術(shù)型用戶來(lái)說(shuō)操作不太友好

    來(lái)自重慶 回復(fù)
    1. 了解一下新的規(guī)則/流程引擎-ice~
      文檔:http://waitmoon.com/docs

      來(lái)自浙江 回復(fù)
    2. 不好意思才回復(fù),如果非要這么做,其實(shí)在界面上指定執(zhí)行順序和條件關(guān)系就好了,我是想知道什么場(chǎng)景會(huì)這么用呢?工業(yè)物聯(lián)網(wǎng)嗎?

      來(lái)自北京 回復(fù)
  3. 贊。我司物聯(lián)網(wǎng)產(chǎn)品也正在打造自己的規(guī)則引擎。

    回復(fù)
  4. 寫得很詳細(xì),舉例也很詳實(shí)

    來(lái)自浙江 回復(fù)