2016-09-29 234 views
0

使用CEP質子我想檢查在一個時間間隔內接收到的事件,第二個和後續事件的ID是否包含在第一個事件中的類型數組的屬性中。比方說,第一個事件是由稱爲組的整數屬性(10,20,30)的屬性組成的。以下事件將帶有一個ID,例如20,25等。我想檢查這些事件的ID是否包含在第一個事件中包含的屬性組中。 對於我在EPAEPA CEP質子內的陣列條件

ArrayContains(ArrayGet(myevent.group,0),ArrayGet(myevent.id,ArraySize(myevent.id)-1)) 

創造了條件。然而我得到當我點擊驗證

Error Error in EPA: expression error of undefined myepa 

難道我做錯了什麼錯誤? 我無法使用ArrayGet訪問屬性數組嗎?或者ArrayContains可能無法使用ArrayGet的結果?

JSON

{"epn":{"events":[{"name":"GupsyContextUpdate","createdDate":"Thu Sep 29 2016","attributes":[{"name":"entityId","type":"String","dimension":0},{"name":"entityType","type":"String","dimension":0,"description":"The cost of this event occurrence. Negative if this is an opportunity"},{"name":"SF","type":"Integer","dimension":0,"description":"Used in case the this event occur within an interval"},{"name":"occupied","type":"Integer","dimension":"0"},{"name":"framecounter","type":"Integer","dimension":"0"},{"name":"RSSI","type":"String","dimension":"0"},{"name":"hwversion","type":"String","dimension":"0"},{"name":"swversion","type":"String","dimension":"0"},{"name":"compassz","type":"String","dimension":"0"},{"name":"MACBS","type":"String","dimension":"0"},{"name":"SNR","type":"String","dimension":"0"},{"name":"devEUI","type":"String","dimension":"0"},{"name":"battery","type":"String","dimension":"0"},{"name":"devicetype","type":"String","dimension":"0"},{"name":"compassx","type":"String","dimension":"0"},{"name":"compassy","type":"String","dimension":"0"},{"name":"compasst","type":"String","dimension":"0"},{"name":"neighbours","type":"String","dimension":"1"},{"name":"timestamp","type":"String","dimension":"0"}]},{"name":"gupsyoutput","createdDate":"Thu Sep 29 2016","attributes":[{"name":"Certainty","type":"Double","defaultValue":"1","dimension":0,"description":"The certainty that this event happen (value between 0 to 1)"},{"name":"OccurrenceTime","type":"Date","dimension":0,"description":"No value means it equals the event detection time, other option is to use one of the defined distribution functions with parameters"},{"name":"ExpirationTime","type":"Date","dimension":0},{"name":"Cost","type":"Double","dimension":0,"description":"The cost of this event occurrence. Negative if this is an opportunity"},{"name":"Duration","type":"Double","defaultValue":"0","dimension":0,"description":"Used in case the this event occur within an interval"},{"name":"test","type":"String","dimension":"1"}]}],"epas":[{"name":"gupsyepa","createdDate":"Thu Sep 29 2016","epaType":"Aggregate","context":"gupsyct","inputEvents":[{"name":"GupsyContextUpdate","alias":"gupsyupdate","consumptionPolicy":"Consume","instanceSelectionPolicy":"First"}],"computedVariables":[{"name":"count","aggregationType":"Count","gupsyupdate":"ArrayContains(ArrayGet(gupsyupdate.neighbours,0),ArrayGet(gupsyupdate.id,ArraySize(gupsyupdate.id)-1))"}],"assertion":"count == true","evaluationPolicy":"Immediate","cardinalityPolicy":"Single","internalSegmentation":[],"derivedEvents":[{"name":"gupsyoutput","reportParticipants":false,"expressions":{"Duration":"0","test":"ArrayContains(ArrayGet(gupsyupdate.neighbours,0),ArrayGet(gupsyupdate.devEUI,ArraySize(gupsyupdate.devEUI)-1))"}}]}],"contexts":{"temporal":[{"name":"gupsyct","createdDate":"Thu Sep 29 2016","type":"TemporalInterval","atStartup":false,"neverEnding":false,"initiators":[{"initiatorType":"Event","initiatorPolicy":"Ignore","name":"GupsyContextUpdate"}],"terminators":[{"terminatorType":"RelativeTime","terminationType":"Terminate","relativeTime":"15000"}]}],"segmentation":[],"composite":[]},"consumers":[{"name":"gupsyconsumer","createdDate":"Thu Sep 29 2016","type":"Rest","properties":[{"name":"URL","value":"http://127.0.0.1/ProtonParser/TestEvent2Log.php"},{"name":"contentType","value":"application/xml"},{"name":"formatter","value":"xml"},{"name":"delimiter","value":";"},{"name":"tagDataSeparator","value":"="},{"name":"dateFormat","value":"dd/MM/yyyy-HH:mm:ss"}],"events":[{"name":"gupsyoutput"}]}],"producers":[],"name":"gupsy"}} 
+0

請添加標籤「fiware-cep」。 – urishani

回答

1

請分享你的應用程序的整個JSON定義。

根據您提供的信息,不清楚它是哪種類型的EPA(要訪問一系列事件,您需要有狀態的EPA,並且您需要確保以這種方式編寫應用程序以便能夠區分第一個和後續事件)。

此外,還不清楚爲什麼您嘗試訪問表達式的兩個部分中的相同事件實例myevent。 (數組,值)作爲操作數。 你通過它(價值,價值),這就是假設「myevent.id」也是一個數組,從你的描述我明白它不是?

無論如何,我發現你的表情存在很多潛在的問題,因此我希望看到整個JSON,或者至少是與「myepa」EPA有關的部分。

0

我回顧了JSON應用程序,存在多個問題: 1)您正在使用類型爲aggregate的EPA來計算COUNT。伯爵是爲了計數事件。它是一個整數變量。沒有布爾值可以分配給它。 因此比較表達式如「count == true」 或布爾值的分配如:「count:ArrayContains(ArrayGet(gupsyupdate.neighbours,0),ArrayGet(gupsyupdate.id,ArraySize(gupsyupdate.id)-1))」 無效。 2)此外,假設您在某處使用此表達式,而不是在count變量中: -gupsyupdate事件沒有屬性「id」,因此您不能在表達式中使用此表達式。 -ArrayGet(gupsyupdate.neighbours,0) - 將返回一個數組中的單個對象...因此,您不能在ArrayContains表達式中使用它,該表達式應該接收數組

3)EPA的策略不會'沒有道理......這是一個聚合EPA,但你可以使用評估政策「立即」和基數政策「單一」。這意味着這個環保局只會在收到第一個Gupsyupdate事件時立即評估一次。所以它不會真正充當聚合器......

請根據此輸入修改您的應用程序。