💫Socket.IO

Retrieve observation from Kligo synchronously using Socket.IO client.

Kligo embeds a Socket.IO server. It can accessed on port 63336 on the user's computer. You can register a client to this server in order to receive the observations when they are created.

Here is an example for listening to data points using a javascript Socket.IO client:

 var socket = io('http://localhost:63336');
  socket.on('fhir', function (data) {
    console.log(data);
  });

A working version of this example can be found here.

Socket.IO clients have been implemented in most languages and can be easily integrated to any project.

Emitting events

There are one type of event emitted from this socket:

  • 'fhir' : this event is emitted every time an observation is created in Kligo. There are two types of Observation that can be received : simple and multiple. This dpends on the the measurement that gets the device.

Simple FHIR Observation

The type of observation you can get when you use a simple device like weight scale or thermometer.

{
  "category": [{
    "coding": [{
      "code": "vital-signs",
      "display": "Vital Signs",
      "system": "http://hl7.org/fhir/observation-category"
    }],
    "text": "Vital Signs"
  }],
  "code": {
    "coding": [{
      "code": "",
      "display": "body_weight",
      "system": "http://loinc.org"
    }],
    "text": "Poids"
  },
  "context": {
    "reference": "ac8f39cc-f5eb-450e-a354..."
  },
  "device": {
    "display": "weight_scale",
    "reference": "5da0709..."
  },
  "resourceType": "Observation",
  "effectiveDateTime": "2019-12-09T14:19:44Z",
  "status": "final",
  "valueQuantity": {
    "code": "kg"
    "system": "http://unitsofmeasure.org",
    "unit": "kg",
    "value": 50.4
  }
}

For more details on the observation format, please refer to the Observation of FHIR model.

Multiple FHIR Observation

When you are using a pulse oximeter or a blood pressure monitor, you get two or three measurement. We decide to gather the observations and put them in the component section.

{
  "category": [{
    "coding": [{
      "code": "vital-signs",
      "display": "Vital Signs",
      "system": "http://hl7.org/fhir/observation-category"
    }],
    "text": "Vital Signs"
  }],
  "code": {
    "coding": [{
      "code": "",
      "display": "oxygen_saturation",
      "system": "http://loinc.org"
    }],
    "text": "Saturation pulsée"
  },
  "component": [{
    "code": {
      "coding": [{
        "code": 131329,
        "display": "0",
        "system": "http://www.pchalliance.org/"
      }]
    },
    "valueQuantity": {
      "type": "0",
      "unit": "bpm",
      "value": 86
    }
  }, {
    "code": {
      "coding": [{
        "code": 131329,
        "display": "1",
        "system": "http://www.pchalliance.org/"
      }]
    },
    "valueQuantity": {
      "type": "0",
      "unit": "%",
      "value": 99
    }
  }],
  "context": {
    "reference": "ac8f39cc-f5eb-450e-a354..."
  },
  "device": {
    "display": "pulse_oxymeter",
    "reference": "5da0709..."
  },
  "resourceType": "Observation",
  "effectiveDateTime": "2019-12-09T14:19:44Z",
  "status": "final"
} 

Receiving events

The socket is able to receive events from a client.

There are two types of events that the socket can receive :

  • 'ekuoreStartRecording' : this event triggers the recording. Kligo expects you to pass the SSID of the device when firing this event.

  • 'ekuoreStopRecording' : this event stopping the recording

here is an example for starting the recording from the client.

 var socket = io('http://localhost:63336');
 
<button onClick="socket.emit('ekuoreStartRecording', {ssid:'ekuorePro_xxxxx'})">Start record</button>
// Emit Ekuore
const emit = (emitMessage) => { 
 socket.emit(emitMessage)
}

See an example code here.

Last updated