亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Vorto 中的自定義 JavaScript 轉換解析非固定格式的二進制有效負載

使用 Vorto 中的自定義 JavaScript 轉換解析非固定格式的二進制有效負載

鴻蒙傳說 2023-11-01 21:21:13
我們現在主要使用 Vorto 作為標準化格式,并開始研究使用映射引擎將不同的有效負載格式映射到 Vorto 模型。我或多或少了解如何使用 xpath 和轉換函數從 JSON 或二進制有效負載映射功能塊屬性。但是,我不清楚如何支持使用此方法解析非固定格式二進制有效負載。例如,我們有一個現成的 LoRaWAN 傳感器,它以以下格式傳輸: <length><frame type>[<sensor-id><sensor-value>]其中長度是總幀長度,傳感器 ID(例如溫度、濕度、電池……)描述了如何解析傳感器值(即長度、數據類型)。在一幀中,這些讀數的多個可以以隨機順序出現。解析這個可以很容易地在 loraserver.io 中使用一個小的 javascript 函數來完成,該函數迭代所有字節并返回解析的屬性。同樣的方式也適用于 Ditto 有效負載映射引擎 afaik。但是,目前我不知道如何在 Vorto 映射中執行類似的操作。當然,這只是一個特定的傳感器示例,但市場上存在更多使用類似動態有效負載格式的示例。我知道已經有一個待解決的問題 (#1535) 來改進文檔,但如果知道使用映射 DSL 是否可以實現這種靈活的解析,將會很有幫助。我嘗試將原始有效負載作為字節數組傳遞給 javascript 函數。為了測試這一點,我復制org.eclipse.vorto.mapping.engine.converter.binary.BinaryMappingTest#testMappingBinaryContaining2DataPoints并調整模型以使用像這樣的自定義 JavaScript 函數    evaluator.addScriptFunction(new ScriptClassFunction("extractTemperature","function extractTemperature(value) { " +        " print(\"parameter of type \" + typeof value + \", value = \" + value);" +        " print(value[1]);" +        "}"));該函數的輸出是parameter of type number, value = 1undefined其中值 1 是使用的字節數組的第一個元素。另外,我注意到JavaScript 代碼中不允許使用像for和這樣的循環關鍵字。while因此,即使我可以訪問 javascript 函數中的 bytearray 參數,我現在也看不到如何迭代它。在 gitter 上,我收到了以下回復(以及將討論移至 SO 的建議)你是對的。我們將 Javascript 函數的使用限制為非?;镜恼Z言關鍵字集,不包括 for 循環,因為可以在那里實現令人討厭的東西。相反,您可以做的是將您自己的命名空間中的 java 函數注冊到映射引擎。該函數可以保存一個字節數組。稍后這個函數可以作為標準函數貢獻給地圖引擎,以提取出一定的值供其他開發人員重用。但我不認為這能解決問題。如上所述,這只是現成傳感器有效負載格式的一個示例,我不知道如何將其概括為足夠大以將其作為通用函數包含在映射引擎中。而且我認為不需要在 Java 中實現特定于傳感器的轉換,因為(作為想要部署新傳感器類型的物聯網平臺的最終用戶)這比一點 javascript 的開發和部署更復雜可以在運行時在映射規范中更改的函數。我看到能夠在 javascript 中進行簡單映射有很多價值,就像在loraserver.io和Eclipse Ditto中可以完成的那樣。我認為能夠將字節數組傳遞給 JavaScript 是第一步。我還想知道在 javascript 中允許循環的風險到底在哪里?例如,Ditto 在 javascript 沙箱中也有一些限制(請參閱此處),但這允許循環,并且只能防止無限循環和遞歸。他們聲明如下:使用 Rhino 代替 Nashorn(Java 附帶的較新 JavaScript 引擎)的好處是可以更好地應用沙箱。需要對不同的有效負載腳本進行沙箱處理,因為 Ditto 旨在作為云服務運行,同時為不同的租戶管理到不同端點的多個連接。這就需要隔離每個單獨的腳本,以避免與其他腳本的干擾,并保護執行腳本的 JVM 免受有害代碼的執行。在 Vorto 中使用 Rhino 是否也可以控制您看到的風險并允許在 Vorto 映射中構建循環?
查看完整描述

2 回答

?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

我為您創建了一個問題,請求在 Javascript 轉換器中支持此操作: https: //github.com/eclipse/vorto/issues/2029

如問題中所述,作為當前的解決方法,您可以使用 Java 注冊您自己的自定義轉換器函數,并在映射中重復使用此函數。在這些 java 轉換器函數中,您可以使用 java 語言進行轉換以從任意列表中提取正確的屬性。為了了解如何使用 Java 實現您自己的自定義轉換器功能,請查看此處:https: //github.com/eclipse/vorto/tree/master/mapping-engine#Advanced-Usage


查看完整回答
反對 回復 2023-11-01
?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

自 Eclipse Vorto 0.12.3 發布以來,已提供針對您請求的修復。這樣就可以將數組對象傳遞給 javascript Converter 以及在 javascript 函數內使用 for 循環。你可能想嘗試一下。請參閱發行說明https://github.com/eclipse/vorto/blob/master/docs/release-notes.md


查看完整回答
反對 回復 2023-11-01
  • 2 回答
  • 0 關注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號