zurück zum Artikel

Features von übermorgen: die Generic Sensor API

Philip Ackermann

Das Einbeziehen von Sensorinformationen wird auch bei der Entwicklung von Webanwendungen immer wichtiger.

Das Einbeziehen von Sensorinformationen wird auch bei der Entwicklung von Webanwendungen immer wichtiger.

In den vergangenen Jahren haben sich beim W3C verschiedene Spezifikationen angesammelt, in denen Schnittstellen zu bestimmten Arten von Sensoren beschrieben werden, beispielsweise die Device Orientation API [1], die Geolocation API [2], die Proximity Events API [3] oder die Ambient Light Sensor API [4].

Leider liegt den genannten APIs keine gemeinsame Schnittstellenbeschreibung zugrunde, sodass die Verwendung von API zu API unterschiedlich ist. Das ist genau der Punkt, an dem die vor kurzem von der Device and Sensors Working Group [5] als Working Draft veröffentlichte Generic Sensor API [6] ansetzt: Sie hat das Ziel, eine einheitliche, generische Schnittstelle für Sensoren aller Art zu definieren.

Dazu definiert die Generic Sensor API folgende Interfaces:

Für das Starten und Stoppen der Ausleseprozesse an einem Sensors stehen am Interface Sensor die Methoden start() und stop() zur Verfügung. Insgesamt kann ein Sensor während seines Lebenszyklus einen der Zustände „idle“, „activating“, „active“ und „errored“ einnehmen (der aktuelle Zustand ist in der Eigenschaft state hinterlegt). Über den Event-Handler onstatechange kann auf Zustandsänderungen reagiert werden, über den Event-Handler onerror auf Fehler und über den Event-Handler onchange auf Änderungen der Sensorwerte. Letztere sind am Sensorobjekt über die Eigenschaft reading beziehungsweise das darin hinterlegte Objekt vom Typ SensorReading hinterlegt.

Die Ambient Light Sensor API ist die einzige der genannten APIs, die bereits auf der Generic SensorAPI basiert. Es definiert die beiden Interfaces AmbientLightSensor und AmbientLightSensorReading, welche entsprechend von den allgemeinen Interfaces Sensor beziehungsweise SensorReading ableiten. Folgendes Listing zeigt ein Beispiel für die Verwendung der APIs (allerdings wird das API momentan lediglich von Firefox unterstützt).

let sensor = new AmbientLightSensor();
sensor.onchange = (event) => {
console.log(event.reading.illuminance);
};
sensor.onerror = (event) => {
console.error(event.error.name, event.error.message);
};
sensor.start();

Die Device Orientation API, welche den Zugriff auf Informationen bezüglich der Orientierung eines Endgeräts definiert, basiert momentan dagegen nicht auf der Generic Sensor API. Um die Orientierung eines Endgeräts festzustellen, würde man daher wie folgt vorgehen und einen Event-Listener für das deviceorientation-Event registrieren:

window.addEventListener('deviceorientation', (event) => {
console.log(event.alpha);
console.log(event.beta);
console.log(event.gamma);
}, true);

Würde sich diese API in Zukunft an der Generic Sensor API orientieren, sähe die Verwendung dagegen wie folgt aus:

let sensorOptions = { /* Hier sensorspezifische Optionen */ };
let sensor = new DeviceOrientationSensor(sensorOptions);
sensor.onchange = (event) => {
// Sensorspezifische Werte
let reading = event.reading;
console.log(reading.alpha);
console.log(reading.beta);
console.log(reading.gamma);
}
sensor.onerror = (event) => {
console.error(event.error.name, event.error.message);
}
sensor.onstatechange = (state) => {
console.log(state);
}
sensor.start();
// Später: sensor.stop();

Die Generic Sensor API definiert eine generische Schnittstelle für das Arbeiten mit Sensoren. Die einzige API, die momentan von ihr ableitet, ist die Ambient Light Sensor API. Andere, etwa die Proximity Events API, sollen in Zukunft entsprechend angepasst werden. Den aktuellen Stand der Dinge sowie die Roadmap der Arbeitsgruppe beim W3C lässt sich unter https://www.w3.org/2009/dap/ [7] einsehen. ( [8])


URL dieses Artikels:
https://www.heise.de/-3209540

Links in diesem Artikel:
[1] https://www.w3.org/TR/orientation-event/
[2] https://www.w3.org/TR/geolocation-API/
[3] https://www.w3.org/TR/proximity/
[4] https://www.w3.org/TR/ambient-light/
[5] https://www.w3.org/2009/dap/
[6] https://www.w3.org/TR/generic-sensor/
[7] https://www.w3.org/2009/dap/
[8] mailto:philip.ackermann@fit.fraunhofer.de