我怎么能用 Fiware-Perseo-fe 做下面的例子

How could I do the following example with Fiware-Perseo-fe

我正在尝试执行以下示例:

我在 orionCB 中创建了两个实体。

规则应该是:

1.-如果typeEvent为1,则used属性加1,free属性减1

2.-如果typeEvent为0,则used属性减1,free属性加1

是否可以使用 perseo 规则和订阅?

更多信息:

规则执行完毕后,结果为:

-----> typeEvent:1    
{    
"id":"accumulator1",    
"type":"accumulator",    
"used":133,    
"free":82,    
"total":215,    
}

---> typeEvent:0    
{    
"id":"accumulator1",    
"type":"accumulator",    
"used":131,    
"free":84,    
"total":215    
}

目前上下文代理不允许直接增加属性。

我认为您可以使用一些 win:time 规则来尝试管理这种情况,但我发现实时保持实体“累加器”的一致性可能会非常复杂。

要仅使用 Perseo 来解决这个问题,也许关键是使用允许增加和减少累加器实体属性的规则和订阅的组合。

1.First 我们需要为 Perseo 订阅所有 typeEvent 属性:

POST 到 OrionCB_URL/v2/subscriptions:

   {
     “description”: “Notify Perseo when typeEvent changes”,
     “subject”: {
       “entities”: [
         {
           “idPattern”: “.*“,
           “type”: “sensor”
         }
       ],
       “condition”: {
         “attrs”: [
           “typeEvent”
         ]
       }
     },
     “notification”: {
       “http”: {
         “url”: “<perseoHost>/notices”
       },
       “attrs”: [
         “typeEvent”,
         “id”,
         “id_accumulator”
       ]
     },
     “expires”: “2019-06-30T14:00:00.00Z”
   }
  1. 然后,我们现在创建一个规则,在累加器中添加一个属性,以指示每次传感器更改其 typeEvent 属性的值时都需要更新它:

POST 到 PERSEO_URL/rules:

   {
      “name”:“changeInAcumulator”,
      “text”:“select \“changeInAcumulator\” as ruleName, ev.id_accumulator? as id_accumulator, ev.typeEvent? as typeEvent from pattern [every ev=iotEvent(type=\“sensor\“)]“,
      “action”:{
         “type”:“update”,
         “parameters”:{
             “id”:“${id_accumulator}“,
             “type”:“accumulator”,
             “attributes”: [
                   {
                   “name”:“action”,
                   “value”:“${typeEvent}”
                   }
             ]
         }
      }
   }
  1. 我们为 Perseo 订阅所有累加器类型实体的新属性“action”中发生的更改。

POST 到 OrionCB_URL/v2/subscriptions:

{
     “description”: “Notify Perseo when accumulator changes”,
     “subject”: {
       “entities”: [
         {
           “idPattern”: “.*“,
           “type”: “accumulator”
         }
       ],
       “condition”: {
         “attrs”: [
           “action”
         ]
       }
     },
     “notification”: {
       “http”: {
         “url”: “http://host.docker.internal:9090/notices”
       },
       “attrs”: [
         “id”,
         “free”,
         “used”,
         “action”
       ]
     },
     “expires”: “2019-06-30T14:00:00.00Z”
   }
  1. 我们在 Perseo 中创建了一个新规则,用于管理新的累加器通知,并根据“action”属性的值修改累加器实体,该属性包含由第一条规则更改的最后一个“typeEvent”值。

POST 到 PERSEO_URL/rules:

{
      “name”:“updateAcumulator”,
      “text”:“select \“updateAcumulator\” as ruleName, ev.id? as id, case cast(cast(ev.action?,String),float) when 1 then cast(cast(ev.free?,String),float)-1 else cast(cast(ev.free?,String),float)+1 end as free, case cast(cast(ev.action?,String),float) when 1 then cast(cast(ev.used?,String),float)+1 else cast(cast(ev.used?,String),float)-1 end as used from pattern [every ev=iotEvent(type=\“accumulator\“)]“,
      “action”:{
         “type”:“update”,
         “parameters”:{
             “id”:“${id}“,
             “type”:“accumulator”,
             “attributes”: [
                   {
                   “name”:“free”,
                   “value”:“${free}”
                   },
                   {
                   “name”:“used”,
                   “value”:“${used}”
                   } (editado)
             ]
         }
      }
   }

我希望我对这个回复有所帮助。