2015-12-26 327 views
4

在我當前的項目中,我們嘗試使用Node-RED來實現當前的應用程序功能。功能如下所示。這裏,火狀態接收兩個輸入:(1)TemperatureSensor(2)SmokeDetector。兩個傳感器都使用MQTT發佈者發佈數據。和Firestate組件可以通過MQTT子接口接收數據。在Node-RED中實現兩個輸入

根據這兩個參數if temperaturevalue > 70 and Smokevalue == true,火災狀態可以產生輸出。鑑於此,我的問題是 - Node-RED是否支持兩種輸入功能?如果是,那我們該如何實現這個功能?如果否,那麼..我可以說,兩個輸入功能不能用Node-RED來實現嗎?正如我們所看到的,Node-RED提供了多個輸出,而不是輸入

enter image description here

+0

我想你需要保存第一個輸入的地方,當第二個輸入進來時,你需要第一個輸入來使用它如果聲明。在此設置中,您無法一次獲得兩個輸入。如果你沒有使用MQTT你可以做不同的事情,你的FireState需要在一定的時間間隔內詢問你的傳感器當前的值並在if語句中使用它們。 – Molda

回答

8

您將需要使用一個功能節點,並利用context變量,以保持信息之間的狀態,並使用消息主題,以確定從消息傳來,其輸入。

事情是這樣的:

context.temp = context.temp || 0.0; 
context.smoke = context.smoke || false; 

if (msg.topic === 'smokeDetector') { 
    context.smoke = msg.payload; 
} else if (msg.topic === 'tempSensor') { 
    context.temp = msg.payload; 
} 

if (context.temp >= 70.0 && context.smoke) { 
    return {topic: 'fireState', payload: 'FIRE!'} 
} else { 
    return null 
} 

更多細節可以在功能節點的文檔中找到here

+0

@hardllb:非常感謝指針!它現在有效。 :) – Pankesh

+0

非常有幫助!謝謝 – deltascience

+1

請查看文檔鏈接,因爲訪問上下文的方法已更改 – hardillb

0

您可以在任何節點的任何數量的輸入電線 - 要知道,你的節點會一次只能看到一個輸入信息。沒有固有的味精聚集,因爲有多條輸入線。

相反,聚合多個輸入消息的任務由某些節點處理 - 其中一些節點內置於核心節點 - 紅色服務器,另一些由社區提供。你應該選擇哪一個取決於具體的用例。例如,應該將兩個對象添加到數組中,還是合併爲一個大對象?只有你會知道你想要什麼 - node-red不做任何假設,但給你不同的節點來處理許多常見的用例。對於任何其他用例,總是存在通用的function節點,您可以在其中使用JavaScript來實現您需要的任何行爲。

對於您的原始問題,您正在尋找一種方法將來自不同傳感器的2個有效載荷合併到一個對象中。可以使用核心joinchange節點,也可以使用和node-red-contrib-aggregator節點,該節點位於flow library站點上。

以下是使用join節點組合兩個傳感器輸入,並且然後使用一個switch節點與表達payload.temp > 70 and payload.smoke的一個例子,以確定是否發送MSG向下流動:

[{「ID」: 「87df68f8.51ad58」, 「類型」: 「注入」, 「Z」: 「f9a2eec9.c2e26」, 「名」: 「」, 「主題」: 「煙」, 「有效載荷」: 「真」, 「載荷類型」 : 「布爾」, 「重複」: 「」, 「crontab的」: 「」, 「一次」:假 「onceDelay」:0.1, 「×」:160, 「Y」:1180, 「線」:[[」 da4182a8.47939 「]]},{」 ID 「:」 3ad419ec.1453a6" , 「類型」: 「注入」, 「Z」: 「f9a2eec9.c2e26」, 「名」: 「」, 「主題」:「煙」, 「有效載荷」: 「假」, 「載荷類型」: 「布爾」, 「重複」: 「」, 「crontab的」: 「」, 「一次」:假 「onceDelay」:0.1, 「×」:170, 「Y」:1140, 「線」:[[ 「da4182a8.47939」]]},{ 「ID」 : 「a45b3cb0.f3312」, 「類型」: 「注入」, 「Z」: 「f9a2eec9.c2e26」, 「名」: 「」, 「主題」: 「溫度」, 「有效載荷」: 「65」,「載荷類型「:」 NUM」, 「重複」: 「」, 「crontab的」: 「」, 「一次」:假 「onceDelay」:0.1, 「×」:160, 「Y」:1220, 「線」:[[ 「da4182a8.47939」]]},{ 「ID」: 「a3b07d81.e6b17」, 「類型」: 「注射」, 「Z」:「f9a2eec9。c2e26" , 「名」: 「」, 「主題」: 「溫度」, 「有效載荷」: 「75」, 「載荷類型」: 「民」, 「重複」: 「」, 「crontab中」: 「」,「一次「:假」 onceDelay 「:0.1,」 × 「:160,」 Y 「:1260,」 線 「:[[」 da4182a8.47939 「]]},{」 ID 「:」 da4182a8.47939" ,「類型「:」join「,」z「:」f9a2eec9.c2e26「,」name「:」join payloads「,」mode「:」custom「,」build「:」object「,」property「:」payload「屬性類型 「:」 味精 「 」關鍵「: 」主題「, 」木匠「: 」\ n「, 」joinerType「: 」海峽「, 」積聚「:真, 」超時「: 」「, 」數「:」 2" , 「reduceRight」:假 「reduceExp」: 「」, 「reduceInit」: 「」, 「reduceInitType」: 「」, 「reduceFixup」: 「」, 「×」:430, 「Y」:1200,」電線 「:[[」 315c9ce3.570d64" , 「50f981b4.be654」]]},{ 「ID」: 「315c9ce3.570d64」, 「類型」: 「開關」, 「Z」: 「f9a2eec9.c2e26」,」 name「:」Trigger Alarm?「,」property「:」payload.temp> 70 and payload.smoke「,」propertyType「:」jsonata「,」rules「:[{」t「:」true「}],」 checkall 「:」 真」, 「修理」:假 「輸出」:1, 「×」:640, 「Y」:1200, 「線」:[[ 「50f981b4.be654」]]},{ 「ID」 : 「50f981b4.be654」, 「類型」: 「調試」, 「Z」: 「f9a2eec9.c2e26」, 「名」: 「」, 「主動」:真實的, 「tosidebar」:真正的 「控制檯」:假的, 「tostatus」:假的, 「完全」: 「假」, 「X」:690 ,「y」:1260,「wires」:[]}]