title: CoreBluetooth and Omron Evolv Blood Pressure Monitor
body: <p>I have been working on trying to support the Omron Evolv Blood Pressure Monitor (BPM) in my app, via CoreBluetooth. Using the Bluetooth SIG documentation about BPM’s (<a href="https://www.bluetooth.com/specifications/specs/" rel="nofollow noreferrer">https://www.bluetooth.com/specifications/specs/</a> and then BLP and BLS) I could connect with the monitor.</p>
  <p>I used the following characteristics:</p>
  <ul>
  <li>Blood pressure measurement, <strong>2A35</strong></li>
  <li>Blood pressure feature, <strong>2A49</strong></li>
  </ul>
  <p>Page 10 in the BLS documentation states that the Blood Pressure Measurement is the property <em>Indicate</em>, which to my knowledge behaves similar to the Notify property.</p>
  <p>To clarify some code I call in the delegate methods of <em>CBPeripheralDelegate</em>:</p>
  <pre><code>func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
          print(&quot;connected!&quot;)
          bloodPressurePeripheral.discoverServices([bloodPressureService])
      }
  
   func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
          guard let services = peripheral.services else { return }
          
          services.forEach { service in
              print(&quot;discovered service: \(service) \n&quot;)
              peripheral.discoverCharacteristics(nil, for: service)
          }
      }
  </code></pre>
  <p>In the <em>didDiscoverCharacteristicsFor</em> function I simply loop through the characteristics and check their property.</p>
  <pre><code> if char.properties.contains(.read) {
                print(&quot;\(char.uuid): properties contains .read&quot;)
                peripheral.readValue(for: char)
              }
              if char.properties.contains(.indicate) {
                  print(&quot;\(char.uuid): properties contains .indicate&quot;)
                  peripheral.setNotifyValue(true, for: char)
              }
              if char.properties.contains(.notify) {
                  print(&quot;\(char.uuid): properties contains .notify&quot;)
                  peripheral.setNotifyValue(false, for: char)
              
  </code></pre>
  <p>I tried both readValue and setNotifyValue for indicate both I still get the following result:</p>
  <pre><code>&lt;CBCharacteristic: 0x2829880c0, UUID = 2A35, properties = 0x20, value = (null), notifying = NO&gt;
  2A35: properties contains .indicate
  &lt;CBCharacteristic: 0x282988180, UUID = 2A49, properties = 0x2, value = {length = 2, bytes = 0x2700}, notifying = NO&gt;
  2A49: properties contains .read
  </code></pre>
  <p>I don't really understand why the value of 2A35 is null. I know there are values because with the Omron application I can get the measurements.</p>
  <p>My actual questions is: Has anyone has any experience in connecting with (Omron) BPM's using CoreBluetooth and what am I overlooking?</p>
  <p>Thanks for answering!</p>