SemBeacon, OpenHPS and the bridge between

Exactly one year ago we have released the first version of the POSO ontology together with the OpenHPS module @openhps/rdf that provides serialization between OpenHPS data and models to/from RDF. Since then, we have continued our work towards interoperable positioning systems by means of finding new methods to make applications aware about the presence of positioning systems within a building.

Screenshot for SemBeacon android app showing a map with beacons Screenshot for SemBeacon android app showing a list of detected beacons Screenshot for SemBeacon android app showing details of detected SemBeacon

We are proud to say that one of our solutions to this problem called "SemBeacon" will be presented on the 8th of November at the 13th International Conference on the Internet of Things in Nagoya, Japan. SemBeacon is a Bluetooth Low Energy specification and linked data solution that advertises a namespace and instance identifier along with a semantic resource URI and several flags. Together with the POSO ontology, this allows scanners to detect environments, beacons and positioning systems used inside. In addition to the desription of the beacons, these environments can also describe other smart devices or other non-SemBeacon beacons that can aid in the positioning.

For our Android application that enables the capabilities of SemBeacon, we have used OpenHPS together with the @openhps/rdf module and Capacitor nodes for Bluetooth scanning and signal propagation. A dedicated OpenHPS module for parsing and handling SemBeacon will be available in the near future. However, the Android application created using Ionic Capacitor is already open source here.

Our author version of the paper can already be found here. The Android application can be downloaded on the Google Play Store. In the future, this application will be expanded alongside new features within POSO. We hope that SemBeacon can help in creating interoperable positioning systems that require zero knowledge on the environment before entering the building.

SemBeacon, OpenHPS and POSO are three projects that are created by PhD candidate Maxim Van de Wynckel under the supervision of Prof. Dr. Beat Signer in the Web & Information Systems Engineering Lab (Vrije Universiteit Brussel)

Example Resource

turtle
@prefix : <http://sembeacon.org/example.ttl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix ssn: <http://www.w3.org/ns/ssn/> .
@prefix ogc: <http://www.opengis.net/ont/geosparql#> .
@prefix hardware: <http://w3id.org/devops-infra/hardware#> .
@prefix poso: <http://purl.org/poso/> .
@prefix posoc: <http://purl.org/poso/common/> .
@prefix sembeacon: <http://purl.org/sembeacon/> .
@prefix qudt: <http://qudt.org/schema/qudt/> .
@prefix unit: <http://qudt.org/vocab/unit/> .
:building_a a ssn:Deployment ;
rdfs:label "Building A" ;
sembeacon:namespaceId "e19c5e1ed6a14d698b3115451c3add71"^^xsd:hexBinary .
:room_a1_2 a sembeacon:SemBeacon ;
rdfs:label "SemBeacon Room A1.2"@en ;
rdfs:isDefinedBy <http://sembeacon.org/example.ttl#> ;
sembeacon:namespace :building_a ;
sembeacon:instanceId "beac0101"^^xsd:hexBinary ;
hardware:mac "00:11:22:33:44:55" ;
posoc:referenceRSSI [ # Reference RSSI is a ...
# ... factory calibrated signal strength
poso:hasRSS [ qudt:unit unit:DeciB_M ; qudt:numericValue -56 ] ;
# ... measured at a specific distance
poso:hasRelativeDistance [ unit:Meter ; qudt:value "1.0"^^xsd:double ] .
] ;
poso:hasPosition [ a poso:AbsolutePosition ;
poso:hasAccuracy [ ] ;
poso:xAxisValue [ ] ;
poso:yAxisValue [ ] ;
poso:zAxisValue [ ] ] .
:room_a1_3 a posoc:iBeacon ;
rdfs:label "iBeacon Room A1.3"@en ;
rdfs:isDefinedBy <http://sembeacon.org/example.ttl#> ;
sembeacon:namespace :building_a ;
hardware:mac "00:55:44:33:22:11" ;
posoc:major 11115 ;
posoc:minor 12015 ;
posoc:referenceRSSI [
poso:hasRSS [ qudt:unit unit:DeciB_M ; qudt:numericValue -56 ] ;
poso:hasRelativeDistance [ unit:Meter ; qudt:value "1.0"^^xsd:double ] .
] ;
poso:hasPosition [ a poso:AbsolutePosition ;
poso:hasAccuracy [ ] ;
poso:xAxisValue [ ] ;
poso:yAxisValue [ ] ;
poso:zAxisValue [ ] ] .

RDFModelSerializer

One of our additions to @openhps/rdf is the creation of a serializer for OpenHPS models that converts them to sosa:Procedures. More information about the serializer can be found here.

BLEBeaconClassifierNode

During our development, we have also expanded the capabilities of @openhps/rf to facilitate the development of use cases such as ours. One of our additions is a processing node that can classify the beacon type based on raw advertisement data. After providing a list of the different beacon types that can be detected, the node will match the beacon that matches first.

ts
import {
ModelBuilder,
DataFrame,
CallbackSinkNode,
} from '@openhps/core';
import {
BLEBeaconClassifierNode,
RelativeRSSIProcessing,
PropagationModel,
BLEAltBeacon,
BLEiBeacon,
BLEEddystoneURL,
BLEEddystoneUID,
BLEEddystoneTLM,
} from '@openhps/rf';
import { BLESourceNode } from '@openhps/capacitor-bluetooth';
 
ModelBuilder.create()
.from(new BLESourceNode({
uid: "ble"
}))
.via(new BLEBeaconClassifierNode({
resetUID: true,
types: [
BLEAltBeacon,
BLEiBeacon,
BLEEddystoneURL,
BLEEddystoneUID,
BLEEddystoneTLM,
]
}))
.via(new RelativeRSSIProcessing({
environmentFactor: 2.0,
propagationModel: PropagationModel.LOG_DISTANCE
}))
.to(new CallbackSinkNode((frame: DataFrame) => {
 
}));