ppi-template

This is a template that facilitates the implementation of the Platform Provider Interface (PPI).

More information about PPI can be found here.

[{"id":"494c1dda.d45744","type":"http in","z":"4e97a16a.36ab9","name":"","url":"/metadata","method":"post","swaggerDoc":"","x":117,"y":91,"wires":[["ebc4ef45.5d498"]]},{"id":"ebc4ef45.5d498","type":"function","z":"4e97a16a.36ab9","name":"","func":"// CHANGEME: The ID of the system.\nvar system_id = \"http://example.com\";\n\n// CHANGEME: The  name of the system.\nvar system_name = \"Sample IoT system\";\n\n// CHANGEME: The description of the system.\nvar system_description = \"This is a VITAL compliant IoT system.\";\n\n// CHANGEME: The person that operates the system.\nvar system_operator = \"http://example.com/people#john_doe\";\n\n// CHANGEME: The area that the system serves.\nvar system_service_area = \"http://dbpedia.org/page/Camden_Town\";\n\n// CHANGEME: The sensors that the system manages.\n// SEE ALSO: Get sensor metadata.\nvar sensors = [\n    \"http://example.com/sensor/monitoring\",\n    \"http://example.com/sensor/some\"\n];\n\n// CHANGEME: The IoT services that the system provides.\n// SEE ALSO: Get IoT service metadata.\nvar services = [\n    \"http://example.com/service/configuration\",\n    \"http://example.com/service/monitoring\",\n    \"http://example.com/service/observation\"\n];\n\n// CHANGEME: The current status of the system.\n// VALUES: vital:Operational, vital:StartingUp, vital:Running,\n// vital:ShuttingDown, vital:Unavailable\nvar system_status = \"vital:Running\";\n\nmsg.payload = {\n    \"@context\": \"http://vital-iot.eu/contexts/system.jsonld\",\n    \"id\": system_id,\n    \"type\": \"vital:VitalSystem\",\n    \"name\": system_name,\n    \"description\": system_description,\n    \"operator\": system_operator,\n    \"serviceArea\": system_service_area,\n    \"sensors\": sensors,\n    \"services\": services,\n    \"status\": system_status\n};\nmsg.headers = {\"Content-Type\": \"application/json\"};\nreturn msg;","outputs":1,"noerr":0,"x":295,"y":92,"wires":[["119827bd.877a08"]]},{"id":"119827bd.877a08","type":"http response","z":"4e97a16a.36ab9","name":"","x":448,"y":89,"wires":[]},{"id":"16147667.71814a","type":"comment","z":"4e97a16a.36ab9","name":"Get system metadata","info":"","x":105,"y":47,"wires":[]},{"id":"54a92da2.064a44","type":"comment","z":"4e97a16a.36ab9","name":"Get system status","info":"","x":96,"y":134,"wires":[]},{"id":"e04b60bb.b9998","type":"comment","z":"4e97a16a.36ab9","name":"Get sensor metadata","info":"","x":879.8571319580078,"y":63.857139587402344,"wires":[]},{"id":"b5d3c42b.7e8998","type":"comment","z":"4e97a16a.36ab9","name":"Get sensor status","info":"","x":859.8571319580078,"y":152.85713958740234,"wires":[]},{"id":"8679daa.c532f28","type":"comment","z":"4e97a16a.36ab9","name":"Get service metadata","info":"","x":258,"y":271.42858123779297,"wires":[]},{"id":"cdb4d701.4807a8","type":"comment","z":"4e97a16a.36ab9","name":"Get sensor data","info":"","x":858.8571319580078,"y":239.85713958740234,"wires":[]},{"id":"e98f4ce3.322d5","type":"http response","z":"4e97a16a.36ab9","name":"","x":661,"y":315.42858123779297,"wires":[]},{"id":"f377a8c8.d0f1f8","type":"http in","z":"4e97a16a.36ab9","name":"","url":"/service/metadata","method":"post","swaggerDoc":"","x":298,"y":314.42858123779297,"wires":[["492f3981.daca58"]]},{"id":"492f3981.daca58","type":"function","z":"4e97a16a.36ab9","name":"","func":"var data = msg.req.body;\n\n// The ID's of the IoT services to return metadata for.\nvar ids = data.id;\n\n// The types of the IoT services to return metadata for.\nvar types = data.type;\n\n// The configuration service.\nvar configuration_service = {\n    \"@context\": \"http://vital-iot.eu/contexts/service.jsonld\",\n    // CHANGEME: The ID of the configuration service.\n    \"id\": \"http://example.com/service/configuration\",\n    \"type\": \"vital:ConfigurationService\",\n    \"msm:hasOperation\": [\n        {\n            \"type\": \"vital:GetConfiguration\",\n            // CHANGEME: The URL for the get configuration operation.\n            \"hrest:hasAddress\": \"http://example.com/configuration\",\n            \"hrest:hasMethod\": \"hrest:GET\"\n        },\n        {\n            \"type\": \"vital:SetConfiguration\",\n            // CHANGEME: The URL for the set configuration operation.\n            \"hrest:hasAddress\": \"http://example.com/configuration\",\n            \"hrest:hasMethod\": \"hrest:POST\"\n        }\n    ]\n};\n\n// The monitoring service.\nvar monitoring_service = {\n    \"@context\": \"http://vital-iot.eu/contexts/service.jsonld\",\n    // CHANGEME: The ID of the monitoring service.\n    \"id\": \"http://example.com/service/monitoring\",\n    \"type\": \"vital:MonitoringService\",\n    \"msm:hasOperation\": [\n        {\n            \"type\": \"vital:GetSystemStatus\",\n            // CHANGEME: The URL for the get system status operation.\n            \"hrest:hasAddress\": \"http://example.com/status\",\n            \"hrest:hasMethod\": \"hrest:POST\"\n        },\n        {\n            \"type\": \"vital:GetSensorStatus\",\n            // CHANGEME: The URL for the get sensor status operation.\n            \"hrest:hasAddress\": \"http://example.com/sensor/status\",\n            \"hrest:hasMethod\": \"hrest:POST\"\n        },\n        {\n            \"type\": \"vital:GetSupportedPerformanceMetrics\",\n            // CHANGEME: The URL for the get supported performance metrics operation.\n            \"hrest:hasAddress\": \"http://example.com/performance\",\n            \"hrest:hasMethod\": \"hrest:GET\"\n        },\n        {\n          \"type\": \"vital:GetPerformanceMetrics\",\n            // CHANGEME: The URL for the get performance metrics operation.\n          \"hrest:hasAddress\": \"http://example.com/performance\",\n          \"hrest:hasMethod\": \"hrest:POST\"\n        },\n        {\n          \"type\": \"vital:GetSupportedSLAParameters\",\n            // CHANGEME: The URL for the get supported SLA parameters operation.\n          \"hrest:hasAddress\": \"http://example.com/sla\",\n          \"hrest:hasMethod\": \"hrest:GET\"\n        },\n        {\n          \"type\": \"vital:GetSLAParameters\",\n            // CHANGEME: The URL for the get SLA parameters operation.\n          \"hrest:hasAddress\": \"http://example.com/sla\",\n          \"hrest:hasMethod\": \"hrest:POST\"\n        }\n    ]\n};\n\n// The observation service.\nvar observation_service = {\n    \"@context\": \"http://vital-iot.eu/contexts/service.jsonld\",\n    // CHANGEME: The ID of the observation service.\n    \"id\": \"http://example.com/service/observation\",\n    \"type\": \"vital:ObservationService\",\n    \"msm:hasOperation\": [\n        {\n            \"type\": \"vital:GetObservations\",\n            // CHANGEME: The URL for the get observations operation.\n            \"hrest:hasAddress\": \"http://example.com/sensor/data\",\n            \"hrest:hasMethod\": \"hrest:POST\"\n        }\n    ]\n};\n\nvar services = [\n    // CHANGEME: The services that the IoT system provides.\n    monitoring_service,\n    observation_service\n].filter(function(service) {\n    return ids === undefined || ids.indexOf(service.id) >= 0;\n}).filter(function(service) {\n    return types === undefined || types.indexOf(service.type) >= 0 || types.indexOf(service.type.replace('vital:', 'http://vital-iot.eu/ontology/ns/')) >= 0;\n});\n\nmsg.payload = services;\nmsg.headers = {\"Content-Type\": \"application/json\"};\nreturn msg;","outputs":1,"noerr":0,"x":510,"y":314.42858123779297,"wires":[["e98f4ce3.322d5"]]},{"id":"6fa4304a.b7412","type":"http in","z":"4e97a16a.36ab9","name":"","url":"/status","method":"post","swaggerDoc":"","x":107,"y":177,"wires":[["22bfb19.b3b494e"]]},{"id":"552ce50.968cd1c","type":"http response","z":"4e97a16a.36ab9","name":"","x":489,"y":176,"wires":[]},{"id":"22bfb19.b3b494e","type":"function","z":"4e97a16a.36ab9","name":"","func":"// CHANGEME: The ID of the observation.\nvar observation_id = \"http://example.com/sensor/monitoring/observation/1\";\n\n// CHANGEME: The date and time when the status was observed.\nvar date_time = \"2014-08-20T16:47:32+01:00\";\n\n// CHANGEME: The ID of the system.\n// SEE ALSO: Get system metadata.\nvar system_id = \"http://example.com\";\n\n// CHANGEME: The status of the system.\n// VALUES: vital:Operational, vital:StartingUp, vital:Running,\n// vital:ShuttingDown, vital:Unavailable\nvar system_status = \"vital:Running\";\n\n// CHANGEME: The ID of the monitoring sensor.\n// SEE ALSO: Get sensor metadata.\nvar system_id = \"http://example.com/sensor/monitoring\";\n\nmsg.payload = {\n    \"@context\": \"http://vital-iot.eu/contexts/measurement.jsonld\",\n    \"id\": observation_id,\n    \"type\": \"ssn:Observation\", \n    \"ssn:observedBy\": monitoring_sensor,\n    \"ssn:observationProperty\": { \n        \"type\": \"vital:OperationalState\" \n    }, \n    \"ssn:observationResultTime\": {   \n        \"time:inXSDDateTime\": date_time \n    }, \n    \"ssn:featureOfInterest\": system_id,  \n    \"ssn:observationResult\": { \n        \"type\": \"ssn:SensorOutput\", \n        \"ssn:hasValue\": { \n            \"type\": \"ssn:ObservationValue\", \n            \"value\": system_status \n        } \n    } \n};\nmsg.headers = {\"Content-Type\": \"application/json\"};\nreturn msg;","outputs":1,"noerr":0,"x":342,"y":177,"wires":[["552ce50.968cd1c"]]},{"id":"c4f82a72.4d06e8","type":"http in","z":"4e97a16a.36ab9","name":"","url":"/sensor/metadata","method":"post","swaggerDoc":"","x":910.8571319580078,"y":107.85713958740234,"wires":[["e0036876.90f768"]]},{"id":"6ae104b0.dde71c","type":"http response","z":"4e97a16a.36ab9","name":"","x":1285.8571319580078,"y":106.85713958740234,"wires":[]},{"id":"e0036876.90f768","type":"function","z":"4e97a16a.36ab9","name":"","func":"var data = msg.req.body;\n\n// The ID's of the sensors to return metadata for.\nvar ids = data.id;\n\n// The types of the sensors to return metadata for.\nvar types = data.type;\n\n// The monitoring sensor.\nvar monitoring_sensor = {\n    \"@context\": \"http://vital-iot.eu/contexts/sensor.jsonld\",\n    // CHANGEME: The ID of the monitoring sensor.\n    \"id\": \"http://example.com/sensor/monitoring\",\n    \"type\": \"vital:MonitoringSensor\",\n    // CHANGEME: The name of the monitoring sensor.\n    \"name\": \"System Monitoring Sensor\",\n    // CHANGEME: The description of the monitoring sensor.\n    \"description\": \"A virtual sensor that monitors the operational state of the system, as well as its services and sensors.\",\n    // CHANGEME: The status of the monitoring sensor.\n    // VALUES: vital:Operational, vital:StartingUp, vital:Running,\n    // vital:ShuttingDown, vital:Unavailable\n    \"status\": \"vital:Running\",\n    // CHANGEME: The properties that the monitoring sensor observes.\n    \"ssn:observes\": [\n        {\n            // CHANGEME: The type of the observed property.\n            \"type\": \"vital:OperationalState\",\n            // CHANGEME: The ID of the observed property.\n            \"id\": \"http://example.com/sensor/monitoring/operationalState\"\n        }\n    ]\n};\n\n// Some sensor.\nvar some_sensor = {\n    \"@context\": \"http://vital-iot.eu/contexts/sensor.jsonld\",\n    // CHANGEME: The ID of some sensor.\n    \"id\": \"http://example.com/sensor/some\",\n    // CHANGEME: The name of some sensor.\n    \"name\": \"A sensor.\",\n    // CHANGEME: The type of some sensor.\n    \"type\": \"vital:VitalSensor\",\n    // CHANGEME: The description of some sensor.\n    \"description\": \"A sensor.\",\n    // CHANGEME: The last known location of some sensor.\n    \"hasLastKnownLocation\": {\n        \"type\": \"geo:Point\",\n        \"geo:lat\": 53.2719,\n        \"geo:long\": -9.0849\n    },\n    // CHANGEME: The status of some sensor.\n    \"status\": \"vital:Running\",\n    // CHANGEME: The properties that some sensor observes.\n    \"ssn:observes\": [\n        {\n            // CHANGEME: The type of the observed property.\n            \"type\": \"vital:Speed\",\n            // CHANGEME: The ID of the observed property.\n            \"id\": \"http://example.com/sensor/some/speed\"\n        }\n    ]\n};\n\nvar sensors = [\n    // CHANGEME: The sensors that the system manages.\n    monitoring_sensor,\n    some_sensor\n].filter(function(sensor) {\n    return ids === undefined || ids.indexOf(sensor.id) >= 0;\n}).filter(function(sensor) {\n    return types === undefined || types.indexOf(sensor.type) >= 0 || types.indexOf(sensor.type.replace('vital:', 'http://vital-iot.eu/ontology/ns/')) >= 0;\n});\n\nmsg.payload = sensors;\nmsg.headers = {\"Content-Type\": \"application/json\"};\nreturn msg;","outputs":1,"noerr":0,"x":1123.8571319580078,"y":104.85713958740234,"wires":[["6ae104b0.dde71c"]]},{"id":"8bc98be3.b2c4c8","type":"http in","z":"4e97a16a.36ab9","name":"","url":"/sensor/status","method":"post","swaggerDoc":"","x":898.8571319580078,"y":195.85713958740234,"wires":[["2dab5301.5714bc"]]},{"id":"2dab5301.5714bc","type":"function","z":"4e97a16a.36ab9","name":"","func":"var data = msg.req.body;\n\n// The ID's of the sensors to return their status.\nvar ids = data.id;\n\n// The types of the sensors to return their status.\nvar types = data.type;\n\n// CHANGEME: The ID of the monitoring sensor.\n// SEE ALSO: Get sensor metadata.\nvar monitoring_sensor = \"http://example.com/sensor/monitoring\";\n\nvar statuses = [\n    // CHANGEME: The sensors that the system manages.\n    // SEE ALSO: Get IoT sensor metadata.\n].filter(function(sensor) {\n    return ids === undefined || ids.indexOf(sensor.id) >= 0;\n}).filter(function(sensor) {\n    return types === undefined || types.indexOf(sensor.type) >= 0 || types.indexOf(sensor.type.replace('vital:', 'http://vital-iot.eu/ontology/ns/')) >= 0;\n}).map(function(sensor) {\n        return {\n            \"@context\": \"http://vital-iot.eu/contexts/measurement.jsonld\",\n            // CHANGEME: The ID of the observation.\n            \"id\": \"http://example.com/sensor/monitoring/observation/1\",\n            \"type\": \"ssn:Observation\",\n            \"ssn:observationProperty\": {\n                \"type\": \"vital:OperationalState\"\n            },\n            \"ssn:observationResultTime\": {\n                // CHANGEME: The date and time when the status was observed.\n                \"time:inXSDDateTime\": \"2014-08-20T16:47:32+01:00\"\n            },\n            \"ssn:featureOfInterest\": sensor.id,\n            \"ssn:observationResult\": {\n                \"type\": \"ssn:SensorOutput\",\n                \"ssn:hasValue\": {\n                    \"type\": \"ssn:ObservationValue\",\n                    // CHANGEME: The status of the sensor.\n                    // VALUES: vital:Operational, vital:StartingUp,\n                    // vital:Running, vital:ShuttingDown,\n                    // vital:Unavailable\n                    \"value\": \"vital:Running\"\n                }\n            }\n        };\n});\n\nmsg.statuses = sensors;\nmsg.headers = {\"Content-Type\": \"application/json\"};\nreturn msg;","outputs":1,"noerr":0,"x":1082.8571319580078,"y":196.85713958740234,"wires":[["cea3ce69.27a97"]]},{"id":"cea3ce69.27a97","type":"http response","z":"4e97a16a.36ab9","name":"","x":1227.8571319580078,"y":194.85713958740234,"wires":[]},{"id":"9abc781b.438198","type":"http response","z":"4e97a16a.36ab9","name":"","x":1279.8571319580078,"y":282.85713958740234,"wires":[]},{"id":"ec1a9f45.9b703","type":"http in","z":"4e97a16a.36ab9","name":"","url":"/sensor/data","method":"post","swaggerDoc":"","x":899.8571319580078,"y":281.85713958740234,"wires":[["bef13b5a.f095e8"]]},{"id":"bef13b5a.f095e8","type":"function","z":"4e97a16a.36ab9","name":"","func":"var data = msg.req.body;\n\n// The ID's of the sensors to return observations for.\nvar sensors = data.id;\n\n// The property to return observations for.\nvar property = data.property;\n\n// The beginning of the time interval to return observations for.\nvar from = data.from;\n\n// The end of the time interval to return observations for.\nvar to = data.to;\n\nvar observations = [\n    // CHANGEME: The observations to return.\n    // NOTE: Return only the last if both from and to are undefined.\n    {\n        // CHANGEME: The ID of the observation.\n        \"id\": \"http://example.com/sensor/some/observation/1\",\n        // CHANGEME: The ID of the sensor that made the observation.\n        \"sensor\": \"http://example.com/sensor/some\",\n        // CHANGEME: The property that the observation was made for.\n        \"property\": \"vital:Speed\",\n        // CHANGEME: The date and time when the observation was made.\n        \"date_time\": \"2014-08-20T16:47:32+01:00\",\n        // CHANGEME: The latitude where the observation was made.\n        \"latitude\": 55.701,\n        // CHANGEME: The longitude where the observation was made.\n        \"longitude\": 12.552,\n        // CHANGEME: The observed value.\n        \"value\": 100,\n        // CHANGEME: The unit of the observed value.\n        \"unit\": \"qudt:KilometerPerHour\"\n    }\n].filter(function(observation) {\n    return sensors === undefined || sensors.indexOf(observation.sensor) >= 0;\n}).filter(function(observation) {\n    return property === observation.property || property === observation.property.replace('vital:', 'http://vital-iot.eu/ontology/ns/');\n}).filter(function(observation) {\n    return from === undefined || new Date(from).toLocaleString() >= new Date(observation.date_time).toLocaleString();\n}).filter(function(observation) {\n    return to === undefined || new Date(to).toLocaleString() <= new Date(observation.date_time).toLocaleString();\n}).map(function(observation) {\n    return {\n        \"@context\": \"http://vital-iot.eu/contexts/measurement.jsonld\", \n        \"id\": observation.id,\n        \"type\": \"ssn:Observation\", \n        \"ssn:observedBy\": observation.sensor,\n        \"ssn:observationProperty\": {\n            \"type\": observation.property\n        }, \n        \"ssn:observationResultTime\": {\n            \"time:inXSDDateTime\": observation.date_time\n        }, \n        \"dul:hasLocation\": { \n            \"type\": \"geo:Point\", \n            \"geo:lat\": observation.latitude,\n            \"geo:lng\": observation.longitude\n        },  \n        \"ssn:observationResult\": { \n            \"type\": \"ssn:SensorOutput\", \n            \"ssn:hasValue\": { \n                \"type\": \"ssn:ObservationValue\", \n                \"value\": observation.value,\n                \"qudt:unit\": observation.unit \n            } \n        } \n    };\n});\n\nmsg.payload = observations;\nmsg.headers = {\"Content-Type\": \"application/json\"};\nreturn msg;","outputs":1,"noerr":0,"x":1131.8571319580078,"y":282.85713958740234,"wires":[["9abc781b.438198"]]},{"id":"b742f828.b6a6f8","type":"comment","z":"4e97a16a.36ab9","name":"Get configuration","info":"","x":891.5714263916016,"y":428.42856884002686,"wires":[]},{"id":"afab7fb1.b97d4","type":"comment","z":"4e97a16a.36ab9","name":"Set configuration","info":"","x":892.5714263916016,"y":510.42856884002686,"wires":[]},{"id":"7c39acfd.f26744","type":"comment","z":"4e97a16a.36ab9","name":"Get supported performance metrics","info":"","x":184.14285278320312,"y":426.42857837677,"wires":[]},{"id":"985e8815.e76208","type":"comment","z":"4e97a16a.36ab9","name":"Get performance metrics","info":"","x":157.14285278320312,"y":517.42857837677,"wires":[]},{"id":"62e43e85.69231","type":"comment","z":"4e97a16a.36ab9","name":"Get supported SLA parameters","info":"","x":637.0000305175781,"y":687.8571529388428,"wires":[]},{"id":"422a3d25.51e254","type":"comment","z":"4e97a16a.36ab9","name":"Get SLA parameters","info":"","x":598.5714950561523,"y":785.0000305175781,"wires":[]},{"id":"fbf4c0b9.6e47e","type":"http in","z":"4e97a16a.36ab9","name":"","url":"/configuration","method":"get","swaggerDoc":"","x":932.5714263916016,"y":467.42856884002686,"wires":[["deb51fa6.d019c"]]},{"id":"deb51fa6.d019c","type":"function","z":"4e97a16a.36ab9","name":"","func":"var parameters = [\n    // CHANGEME: The configuration parameters.\n    {\n        // CHANGEME: The name of the parameter.\n        \"name\": \"x\",\n        // CHANGEME: The current value of the parameter.\n        \"value\": \"42\",\n        // CHANGEME: The type of the parameter.\n        \"type\": \" http://www.w3.org/2001/XMLSchema#int\",\n        // CHANGEME: The permissions associated with the parameter.\n        // VALUES: r, rw\n        permissions: \"rw\"\n    }\n];\n  \nmsg.payload = {\"parameters\": parameters};\nmsg.headers = {\"Content-Type\": \"application/json\"};\nreturn msg;","outputs":1,"noerr":0,"x":1145.5714263916016,"y":464.42856884002686,"wires":[["db2ed20a.0eb32"]]},{"id":"db2ed20a.0eb32","type":"http response","z":"4e97a16a.36ab9","name":"","x":1301.5714263916016,"y":467.42856884002686,"wires":[]},{"id":"2addd15a.2d452e","type":"http in","z":"4e97a16a.36ab9","name":"","url":"/configuration","method":"post","swaggerDoc":"","x":932.5714263916016,"y":552.4285688400269,"wires":[["2fdcbbad.63d4d4"]]},{"id":"6dc9ee39.634ab","type":"http response","z":"4e97a16a.36ab9","name":"","x":1325.5714263916016,"y":550.4285688400269,"wires":[]},{"id":"2fdcbbad.63d4d4","type":"function","z":"4e97a16a.36ab9","name":"","func":"var data = msg.req.body;\n\n// The new configuration parameter values.\nvar new_parameters = data.parameters;\n\n// CHANGEME: The existing configuration.\nvar configuration = [\n    // CHANGEME: The configuration parameters.\n];\n\nvar existing = new_parameters.filter(function(parameter) {\n    return configuration.filter(function(p) {\n        return p.name === parameter.name;\n    }).length > 0;\n});\nif (existing.length !== new_parameters.length) {\n    msg.statusCode = 404;\n    return msg;\n}\n\nvar writable = new_parameters.filter(function(parameter) {\n    return configuration.filter(function(p) {\n        return p.name === parameter.name && p.permissions === \"rw\";\n    }).length > 0;\n});\nif (writable.length !== new_parameters.length) {\n    msg.statusCode = 403;\n    return msg;\n}\n\n// The new configuration.\nconfiguration = configuration.map(function(parameter) {\n    var new_value = new_parameters.filter(function(p) {\n        return p.name === parameter.name;\n    }).map(function(p) {\n        return p.value;\n    });\n    if (new_value !== undefined) {\n        parameter.value = new_value;\n    }\n    return parameter;\n});\n\n// CHANGEME: Save the new configuration.\n\nmsg.headers = {\"Content-Type\": \"application/json\"};\nreturn msg;","outputs":1,"noerr":0,"x":1146.5714263916016,"y":552.4285688400269,"wires":[["6dc9ee39.634ab"]]},{"id":"f31a3e92.b17d9","type":"http response","z":"4e97a16a.36ab9","name":"","x":588.6428527832031,"y":468.42857837677,"wires":[]},{"id":"6fac8863.9e6328","type":"http in","z":"4e97a16a.36ab9","name":"","url":"/performance/supported","method":"get","swaggerDoc":"","x":193.64285278320312,"y":468.42857837677,"wires":[["a7e2fde0.f8108"]]},{"id":"a7e2fde0.f8108","type":"function","z":"4e97a16a.36ab9","name":"","func":"var metrics = [\n    // CHANGEME: The performance metrics.\n    {\n        // CHANGEME: The type of the corresponding observed property.\n        \"type\": \"http://vital-iot.eu/ontology/ns/SysLoad\",\n        // CHANGEME: The ID of the corresponding observed property.\n        \"id\": \"http://example.com/sensor/monitoring/sysLoad\"\n    }\n];\n  \nmsg.payload = {\"metrics\": metrics};\nmsg.headers = {\"Content-Type\": \"application/json\"};\nreturn msg;","outputs":1,"noerr":0,"x":426.6428527832031,"y":467.42857837677,"wires":[["f31a3e92.b17d9"]]},{"id":"98d92ac4.e4d0e8","type":"http in","z":"4e97a16a.36ab9","name":"","url":"/performance","method":"get","swaggerDoc":"","x":162.64285278320312,"y":562.42857837677,"wires":[["b852cc1c.1eede"]]},{"id":"9e5e9660.95c678","type":"http response","z":"4e97a16a.36ab9","name":"","x":490.6428527832031,"y":559.42857837677,"wires":[]},{"id":"b852cc1c.1eede","type":"function","z":"4e97a16a.36ab9","name":"","func":"var data = msg.req.body;\n\n// The performance metrics to return values for.\n// SEE ALSO: Get supported performance metrics.\nvar metrics = data.metric;\n\n// CHANGEME: The ID of the system.\n// SEE ALSO: Get system metadata.\nvar system_id = \"http://example.com\";\n\n// CHANGEME: The ID of the monitoring sensor.\n// SEE ALSO: Get sensor metadata.\nvar monitoring_sensor = \"http://example.com/sensor/monitoring\";\n\nvar metric_values = [\n    // CHANGEME: The metric values to return.\n    {\n        // CHANGEME: The ID of the value.\n        \"id\": \"http://example.com/sensor/monitoring/observation/1\", \n        // CHANGEME: The property that corresponds to the metric.\n        \"metric\": \"vital:SysLoad\",\n        // CHANGEME: The date and time when the value was collected.\n        \"date_time\": \"2014-08-20T16:47:32+01:00\",\n        // CHANGEME: The value.\n        \"value\": 80,\n        // CHANGEME: The unit of the value.\n        \"unit\": \"qudt:Percent\"\n    }\n].filter(function(metric_value) {\n    return metrics === undefined || metrics.indexOf(metric_value.metric) >= 0;\n}).map(function(metric_value) {\n    return {\n        \"@context\": \"http://vital-iot.eu/contexts/measurement.jsonld\", \n        \"id\": metric_value.id,\n        \"type\": \"ssn:Observation\", \n        \"ssn:observedBy\": monitoring_sensor,\n        \"ssn:observationProperty\": {\n            \"type\": metric_value.metric\n        }, \n        \"ssn:observationResultTime\": {\n            \"time:inXSDDateTime\": metric_value.date_time\n        }, \n        \"ssn:featureOfInterest\": system_id,  \n        \"ssn:observationResult\": { \n            \"type\": \"ssn:SensorOutput\", \n            \"ssn:hasValue\": { \n                \"type\": \"ssn:ObservationValue\", \n                \"value\": metric_value.value,\n                \"qudt:unit\": metric_value.unit \n            } \n        } \n    };\n});\n\nmsg.payload = {\"metrics\": metrics};\nmsg.headers = {\"Content-Type\": \"application/json\"};\nreturn msg;","outputs":1,"noerr":0,"x":348.6428527832031,"y":560.42857837677,"wires":[["9e5e9660.95c678"]]},{"id":"773b5670.1ba968","type":"http in","z":"4e97a16a.36ab9","name":"","url":"/sla/supported","method":"get","swaggerDoc":"","x":630.7142868041992,"y":734.2857370376587,"wires":[["b1c6b0c5.77b19"]]},{"id":"8882229e.6d999","type":"http response","z":"4e97a16a.36ab9","name":"","x":1030.714340209961,"y":732.8571910858154,"wires":[]},{"id":"b1c6b0c5.77b19","type":"function","z":"4e97a16a.36ab9","name":"","func":"var parameters = [\n    // CHANGEME: The performance metrics.\n    {\n        // CHANGEME: The type of the corresponding observed property.\n        \"type\": \"http://vital-iot.eu/ontology/ns/ResponseTime\",\n        // CHANGEME: The ID of the corresponding observed property.\n        \"id\": \"http://example.com/sensor/monitoring/responseTime\"\n    }\n];\n  \nmsg.payload = {\"parameters\": parameters};\nmsg.headers = {\"Content-Type\": \"application/json\"};\nreturn msg;","outputs":1,"noerr":0,"x":842.1428337097168,"y":729.9999442100525,"wires":[["8882229e.6d999"]]},{"id":"72c31298.1dea5c","type":"http response","z":"4e97a16a.36ab9","name":"","x":1023.571403503418,"y":831.4285478591919,"wires":[]},{"id":"37a6d92.a681526","type":"http in","z":"4e97a16a.36ab9","name":"","url":"/sla","method":"get","swaggerDoc":"","x":597.8571166992188,"y":832.8571376800537,"wires":[["1ca070e2.4ba08f"]]},{"id":"1ca070e2.4ba08f","type":"function","z":"4e97a16a.36ab9","name":"","func":"var data = msg.req.body;\n\n// The SLA parameters to return values for.\n// SEE ALSO: Get supported SLA parameters.\nvar parameters = data.parameter;\n\n// CHANGEME: The ID of the system.\n// SEE ALSO: Get system metadata.\nvar system_id = \"http://example.com\";\n\n// CHANGEME: The ID of the monitoring sensor.\n// SEE ALSO: Get sensor metadata.\nvar monitoring_sensor = \"http://example.com/sensor/monitoring\";\n\nvar parameter_values = [\n    // CHANGEME: The SLA parameter values to return.\n    {\n        // CHANGEME: The ID of the value.\n        \"id\": \"http://example.com/sensor/monitoring/observation/1\", \n        // CHANGEME: The property that corresponds to the SLA parameter.\n        \"parameter\": \"vital:ResponseTime\",\n        // CHANGEME: The date and time when the value was collected.\n        \"date_time\": \"2014-08-20T16:47:32+01:00\",\n        // CHANGEME: The value.\n        \"value\": 3000,\n        // CHANGEME: The unit of the value.\n        \"unit\": \"qudt:MilliSecond\"\n    }\n].filter(function(parameter_value) {\n    return parameters === undefined || parameters.indexOf(parameter_value.parameter) >= 0;\n}).map(function(parameter_value) {\n    return {\n        \"@context\": \"http://vital-iot.eu/contexts/measurement.jsonld\", \n        \"id\": parameter_value.id,\n        \"type\": \"ssn:Observation\", \n        \"ssn:observedBy\": monitoring_sensor,\n        \"ssn:observationProperty\": {\n            \"type\": parameter_value.parameter\n        }, \n        \"ssn:observationResultTime\": {\n            \"time:inXSDDateTime\": parameter_value.date_time\n        }, \n        \"ssn:featureOfInterest\": system_id,  \n        \"ssn:observationResult\": { \n            \"type\": \"ssn:SensorOutput\", \n            \"ssn:hasValue\": { \n                \"type\": \"ssn:ObservationValue\", \n                \"value\": parameter_value.value,\n                \"qudt:unit\": parameter_value.unit \n            } \n        } \n    };\n});\n\nmsg.payload = {\"metrics\": metrics};\nmsg.headers = {\"Content-Type\": \"application/json\"};\nreturn msg;","outputs":1,"noerr":0,"x":814.9999771118164,"y":831.4285745620728,"wires":[["72c31298.1dea5c"]]}]

Flow Info

Created 7 years, 11 months ago
Rating: not yet rated

Owner

Actions

Rate:

Node Types

Core
  • comment (x12)
  • function (x12)
  • http in (x12)
  • http response (x12)

Tags

  • VITAL
  • IoT
  • PPI
Copy this flow JSON to your clipboard and then import into Node-RED using the Import From > Clipboard (Ctrl-I) menu option