Hi Shakila,

Since we are looking at quite a lot of parameters, you can use script
mediator for this purpose.

Jusy have a single variable inside the script mediator for this

Similar sample can be found in [1]

[1]
https://github.com/wso2-dev/esb-connectors/blob/master/freshbook/freshbooks-connector/freshbooks-connector-1.0.0/org.wso2.carbon.connector/src/main/resources/freshbooks-client/listClients.xml

Best Regards,
Malaka

On Thu, Nov 27, 2014 at 2:44 PM, Shakila Sivagnanarajah <[email protected]>
wrote:

> Hi All,
>
> I am developing connector for Nest API. Nest Thermostat API is organized
> in a single data object and every data element is addressable by a URL
> called data location.
>
> *Data model:*
>
> {
> "devices": {
>
> "thermostats": {
> "peyiJNo0IldT2YlIVtYaGQ": {
> "device_id": "peyiJNo0IldT2YlIVtYaGQ" ,
> "locale": "en-US" ,
> "software_version": "4.0" ,
> "structure_id": "VqFabWH21nwVyd4RWgJgNb292wa7hG_dUwo2i2SG7j3-BOLY0BA4sw" ,
> "name": "Hallway (upstairs)" ,
> "name_long": "Hallway Thermostat (upstairs)" ,
> "last_connection": "2014-10-31T23:59:59.000Z" ,
> "is_online": true ,
> "can_cool": true ,
> "can_heat": true ,
> "is_using_emergency_heat": true ,
> "has_fan": true ,
> "fan_timer_active": true ,
> "fan_timer_timeout": "2014-10-31T23:59:59.000Z" ,
> "has_leaf": true ,
> "temperature_scale": "C" ,
> "target_temperature_f": 72 ,
> "target_temperature_c": 21.5 ,
> "target_temperature_high_f": 72 ,
> "target_temperature_high_c": 21.5 ,
> "target_temperature_low_f": 64 ,
> "target_temperature_low_c": 17.5 ,
> "away_temperature_high_f": 72 ,
> "away_temperature_high_c": 21.5 ,
> "away_temperature_low_f": 64 ,
> "away_temperature_low_c": 17.5 ,
> "hvac_mode": "heat" ,
> "ambient_temperature_f": 72 ,
> "ambient_temperature_c": 21.5 ,
> "humidity": 40
> }
> }
> ,
> "smoke_co_alarms": {
> "RTMTKxsQTCxzVcsySOHPxKoF4OyCifrs": {
> "device_id": "RTMTKxsQTCxzVcsySOHPxKoF4OyCifrs" ,
> "locale": "en-US" ,
> "software_version": "1.01" ,
> "structure_id": "VqFabWH21nwVyd4RWgJgNb292wa7hG_dUwo2i2SG7j3-BOLY0BA4sw" ,
> "name": "Hallway (upstairs)" ,
> "name_long": "Hallway Protect (upstairs)" ,
> "last_connection": "2014-10-31T23:59:59.000Z" ,
> "is_online": true ,
> "battery_health": "ok" ,
> "co_alarm_state": "ok" ,
> "smoke_alarm_state": "ok" ,
> "is_manual_test_active": true ,
> "last_manual_test_time": "2014-10-31T23:59:59.000Z" ,
> "ui_color_state": "gray"
> }
> }
>
> } ,
> "structures": {
> "VqFabWH21nwVyd4RWgJgNb292wa7hG_dUwo2i2SG7j3-BOLY0BA4sw": {
> "structure_id": "VqFabWH21nwVyd4RWgJgNb292wa7hG_dUwo2i2SG7j3-BOLY0BA4sw" ,
> "thermostats": [ "peyiJNo0IldT2YlIVtYaGQ", ... ] ,
> "smoke_co_alarms": [ "RTMTKxsQTCxzVcsySOHPxKoF4OyCifrs", ... ] ,
> "away": "home" ,
> "name": "Home" ,
> "country_code": "US" ,
> "postal_code": "94304" ,
> "peak_period_start_time": "2014-10-31T23:59:59.000Z" ,
> "peak_period_end_time": "2014-10-31T23:59:59.000Z" ,
> "time_zone": "America/Los_Angeles" ,
> "eta": {
> "trip_id": "myTripHome1024" ,
> "estimated_arrival_window_begin": "2014-10-31T22:42:59.000Z" ,
> "estimated_arrival_window_end": "2014-10-31T23:59:59.000Z"
> }
> }
> }
> }
>
> *Endpoints:*
> To get whole object: https://developer-api.nest.com?auth=<token>
> To get all device objects: https://developer-api.nest.com/devices?auth=
> <token>
> To get all thermostat device objects:
> https://developer-api.nest.com/devices/thermostats?auth=<token>
> To get a particular thermostat device object:
> https://developer-api.nest.com/devices/thermostats/<device
> id>?auth=<token>
> To get target temperature value of a particular thermostat device:
> https://developer-api.nest.com/devices/thermostats/<device
> id>/target_temperature_f?auth=<token>
>
>
> To view whole structure object (all devices in home, away status etc):
> https://developer-api.nest.com/structures?auth=<token>
> To view a list of thermostat devices in home:
> https://developer-api.nest.com/structures/<structure
> id>/thermostats?auth=<token>
>
> So I am planning to do this using switch mediator in a single
> configuration as written below. In the proxy service, I have to define all
> parameters. Is this a correct way or do I want to write each methods
> separately?
>
>
> <?xml version="1.0" encoding="UTF-8"?>
> <template name="getServices" xmlns="http://ws.apache.org/ns/synapse";>
>
>     <parameter name="category" description="Category" />
>
>
>     <!-- For devices -->
>     <parameter name="device" description="Type of device" />
>     <parameter name="deviceId" description="Id of device" />
>
>     <!-- For structures -->
>     <parameter name="structureId" description="Id of structure" />
>
>     <!-- For both devices and structures -->
>     <parameter name="field" description="Field of a thermostat" />  <!--
> It can be last_connection, is_online, can_cool, can_heat etc for devices
> and thermostats, smoke_co_alarms, away, country_code for structures -->
>
>     <sequence>
>         <property name="uri.var.category" expression="$func:category" />
>         <property name="uri.var.device" expression="$func:device" />
>         <property name="uri.var.deviceId" expression="$func:deviceId" />
>         <property name="uri.var.structureId"
> expression="$func:structureId" />
>         <property name="uri.var.field" expression="$func:field" />
>
>         <switch source="get-property('uri.var.category')">
>             <case regex="devices">
>                 <property name="uri.var.param" value="devices"/>
>
>                 <filter xpath="(not(get-property('uri.var.deviceId') = ''
> or (not(string(get-property('uri.var.deviceId'))))))">
>                     <then>
>                         <property name="uri.var.param"
>
> expression="fn:concat(get-property('uri.var.param'),'/thermostats/',get-property('uri.var.deviceId'))"/>
>
>                         <filter xpath="(not(get-property('uri.var.field')
> = '' or (not(string(get-property('uri.var.field'))))))">
>                             <then>
>
>                                 <switch
> source="get-property('uri.var.field')">
>                                     <case
> regex="humidity|last_connection|is_online|can_cool|can_heat">
>                                     <property name="uri.var.param"
>
> expression="fn:concat(get-property('uri.var.param'),'/',get-property('uri.var.field'))"/>
>                                     </case>
>                                     <default/>
>                                 </switch>
>
>                             </then>
>                         </filter>
>
>                     </then>
>                 </filter>
>
>             </case>
>             <case regex="structures">
>                 <property name="uri.var.param" value="structures"/>
>             </case>
>             <default/>
>         </switch>
>
>         <property name="Content-Type" value="application/json"/>
>
>          <call>
>             <endpoint>
>                 <http method="get"
>
> uri-template="{uri.var.apiUrl}/{uri.var.param}?auth={uri.var.token}" />
>             </endpoint>
>         </call>
>     </sequence>
> </template>
>
> I appreciate the thoughts on performance implications.
>
> Thank you.
> --
> Shakila Sivagnanarajah
> Associate Software Engineer
> Mobile :+94 (0) 770 760240
> [email protected]
>
> _______________________________________________
> Dev mailing list
> [email protected]
> http://wso2.org/cgi-bin/mailman/listinfo/dev
>
>


-- 

Best Regards,

Malaka Silva
Senior Tech Lead
M: +94 777 219 791
Tel : 94 11 214 5345
Fax :94 11 2145300
Skype : malaka.sampath.silva
LinkedIn : http://www.linkedin.com/pub/malaka-silva/6/33/77
Blog : http://mrmalakasilva.blogspot.com/

WSO2, Inc.
lean . enterprise . middleware
http://www.wso2.com/
http://www.wso2.com/about/team/malaka-silva/
<http://wso2.com/about/team/malaka-silva/>

Save a tree -Conserve nature & Save the world for your future. Print this
email only if it is absolutely necessary.
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to