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
