GE Orion Context Broker: when we make an update of the entity, does not allow us to update the attribute of type "coords" -
regards,
our problem ‘a priori’ related ge implementation orion context broker. our version orion context broker: 0.14.0.
we have web service have implemented, sending info collected number of dispositives, machine have deployed in our business relationship fi-ware platform. problem has been presented 1 of attributes setting type attribute “coords” , when trying create update of entity, not allow update attribute, , gives next error (see below, part of response). want update field.
</contextattribute> <contextattribute> <name>android_version</name> <type /> <contextvalue /> </contextattribute> <contextattribute> <name>date</name> <type /> <contextvalue /> </contextattribute> <contextattribute> <name>position</name> <type>coords</type> <contextvalue /> <metada> <contextmetadata> <name>location</name> <type>string</type> <value>wsg84</value> </contextmetadata> </metada> </contextattribute> </contextattributelist> </contextelement> <statuscode> <code>472</code> <reasonphrase>request parameter invalid/not allowed</reasonphrase> <details>action:update - entity: (300000000000008, dispositivo) - offending attribute: position - location attribute has defined @ creation time, append</details> </statuscode> </contextelementresponse>
the rest request setting contextbroker , giving problems is:
public static string payloadupdatetemplate = @"<updatecontextrequest> <contextelementlist> <contextelement> <entityid type='dispositivo' ispattern='false'> <id>{0}</id> </entityid> <contextattributelist> <contextattribute> <name>temperature</name> <type>cº</type> <contextvalue>{1}</contextvalue> </contextattribute> <contextattribute> <name>latitude</name> <type>φ</type> <contextvalue>{2}</contextvalue> </contextattribute> <contextattribute> <name>longitude</name> <type>λ</type> <contextvalue>{3}</contextvalue> </contextattribute> <contextattribute> <name>altitude</name> <type>m</type> <contextvalue>{4}</contextvalue> </contextattribute> <contextattribute> <name>acceleration</name> <type>m/s²</type> <contextvalue>{5}</contextvalue> </contextattribute> <contextattribute> <name>android_version</name> <type></type> <contextvalue>{6}</contextvalue> </contextattribute> <contextattribute> <name>date</name> <type></type> <contextvalue>{7}</contextvalue> </contextattribute> <contextattribute> <name>position</name> <type>coords</type> <contextvalue>{2}, {3}</contextvalue> <metadata> <contextmetadata> <name>location</name> <type>string</type> <value>wsg84</value> </contextmetadata> </metadata> </contextattribute> </contextattributelist> </contextelement> </contextelementlist> <updateaction>update</updateaction> </updatecontextrequest>"; yes, have created entity trying update, using updatecontext operation append action type. payload using entity creation is:
public static string payloadinserttemplate = @"<updatecontextrequest> <contextelementlist> <contextelement> <entityid type='dispositivo' ispattern='false'> <id>{0}</id> </entityid> <contextattributelist> <contextattribute> <name>temperature</name> <type>cº</type> <contextvalue>{1}</contextvalue> </contextattribute> <contextattribute> <name>latitude</name> <type>φ</type> <contextvalue>{2}</contextvalue> </contextattribute> <contextattribute> <name>longitude</name> <type>λ</type> <contextvalue>{3}</contextvalue> </contextattribute> <contextattribute> <name>altitude</name> <type>m</type> <contextvalue>{4}</contextvalue> </contextattribute> <contextattribute> <name>acceleration</name> <type>m/s²</type> <contextvalue>{5}</contextvalue> </contextattribute> <contextattribute> <name>android_version</name> <type></type> <contextvalue>{6}</contextvalue> </contextattribute> <contextattribute> <name>date</name> <type></type> <contextvalue>{7}</contextvalue> </contextattribute> <contextattribute> <name>position</name> <type>coords</type> <contextvalue>{2}, {3}</contextvalue> <metadata> <contextmetadata> <name>location</name> <type>string</type> <value>wsg84</value> </contextmetadata> </metadata> </contextattribute> </contextattributelist> </contextelement> </contextelementlist> <updateaction>append</updateaction> </updatecontextrequest>"; we using rest web service. literal {0} in payload identifies each entity of context. example, if id of dispositivo 1111, literal {0} 1111. in other side, if code of sensor 2222, literal {0} 2222. literal {0} identification key (unique , not null).
more information,
1) first of all, insert new entity next payload. literal {0} id of entity, example, id(entity) = 30000000000002. literal {1} current value of temperature of entity id, example, temperature(entity) = 30,0.
public static string payloadinserttemplate = @"<updatecontextrequest> <contextelementlist> <contextelement> <entityid type='dispositivo' ispattern='false'> <id>{0}</id> </entityid> <contextattributelist> <contextattribute> <name>temperature</name> <type>cº</type> <contextvalue>{1}</contextvalue> </contextattribute> . . . . <contextattribute> <name>position</name> <type>coords</type> <contextvalue>{2}, {3}</contextvalue> <metadata> <contextmetadata> <name>location</name> <type>string</type> <value>wsg84</value> </contextmetadata> </metadata> </contextattribute> </contextattributelist> </contextelement> </contextelementlist> <updateaction>append</updateaction> </updatecontextrequest>"; 2) result of insertion operation follows.
<updatecontextresponse> <contextresponselist> <contextelementresponse> <contextelement> <entityid type="dispositivo" ispattern="false"> <id>30000000000002</id> </entityid> <contextattributelist> <contextattribute> <name>temperature</name> <type>cº</type> <contextvalue /> </contextattribute> . . . . <contextattribute> <name>position</name> <type>coords</type> <contextvalue /> <metadata> <contextmetadata> <name>location</name> <type>string</type> <value>wsg84</value> </contextmetadata> </metadata> </contextattribute> </contexattributelist> </contextelement> <statuscode> <code>200</code> <reasonphrase>ok</reasonphrase> </statuscode> </contextelementresponse> </contextresponselist> </updatecontextresponse> 3) create query , can check new values created payload.
<querycontextrequest> <entityidlist> <entityid type='dispositivo' ispattern='false'> <id>{0}</id> </entityid> </entityidlist> <attributelist/> </querycontextrequest> 4) getting value have introduced.
<querycontextresponse> <contextresponselist> <contextelementresponse> <contextelement> <entityid type="dispositivo" ispattern="false"> <id>30000000000002</id> </entityid> <contextattributelist> <contextattribute> <name>temperature</name> <type>cº</type> <contextvalue>30,0</contextvalue> </contextattribute> . . . . <contextattribute> <name>position</name> <type>coords</type> <contextvalue>36.723804, -4.417518</contextvalue> <metadata> <contextmetadata> <name>location</name> <type>string</type> <value>wsg84</value> </contextmetadata> </metadata> </contextattribute> </contextattributelist> </contextelement> <statuscode> <code>200</code> <reasonphrase>ok</reasonphrase> </statuscode> </contextelementresponse> </contextresponselist> 5) seek update of info have introduced correctly (how can check) , gives error.
this block means can't update value of attribute not defined @ creation time.
action:update - entity: (300000000000008, dispositivo) - offending attribute: position - location attribute has defined @ creation time, append
if location attribute not defined @ creation time should utilize append action create new attribute in entity, if entity created before.
using append instead of update able append new attributes created entity.
after sure you're replacing curly braces values.
fiware-orion
No comments:
Post a Comment