Signatur
Beschreibung
Die schreibgeschützte Eigenschaft y der Schnittstelle Magnetometer gibt die zuletzt gemessene Stärke des Magnetfelds entlang der y-Achse des Geräts zurück. Der Wert wird in Mikrotesla (µT) angegeben. Bei einem Smartphone im Hochformat zeigt die y-Achse in der Regel zum oberen Bildschirmrand.
Zusammen mit Magnetometer.x und Magnetometer.z ergibt sich ein dreidimensionaler Feldvektor. Damit lassen sich z. B. Kompass-Anwendungen, Metalldetektoren oder Magnet-Gesten umsetzen. Für eine Himmelsrichtung wird der Winkel meist aus x und y berechnet (Math.atan2(y, x)), sofern das Gerät flach liegt.
Solange der Sensor nicht über start() aktiviert wurde oder noch keine Messung vorliegt, ist der Wert null. Neue Werte liest man am besten im reading-Event aus, das bei jeder neuen Messung ausgelöst wird. Die Achsen beziehen sich standardmäßig auf das Gerät; über die Option referenceFrame: "screen" im Konstruktor kann man sie an der Bildschirmausrichtung ausrichten.
Rückgabewert
null, wenn noch keine Messung vorliegt.Beispiele
y-Wert bei jeder Messung ausgeben
if ('Magnetometer' in window) {
const sensor = new Magnetometer({ frequency: 10 });
sensor.addEventListener('reading', () => {
console.log(`Magnetfeld Y: ${sensor.y.toFixed(2)} µT`);
});
sensor.addEventListener('error', (event) => {
console.error('Sensorfehler:', event.error.name, event.error.message);
});
sensor.start();
} else {
console.warn('Magnetometer wird nicht unterstützt.');
}
Einfacher Kompass aus x und y
const sensor = new Magnetometer({ frequency: 5, referenceFrame: 'screen' });
sensor.onreading = () => {
const { x, y } = sensor;
// Winkel in Grad, auf 0–360 normalisiert (Gerät flach liegend)
let heading = Math.atan2(y, x) * (180 / Math.PI);
heading = (heading + 360) % 360;
console.log(`Richtung: ${Math.round(heading)}°`);
};
sensor.start();
Berechtigung prüfen und Magnet in der Nähe erkennen
const startDetector = async () => {
const { state } = await navigator.permissions.query({ name: 'magnetometer' });
if (state === 'denied') {
console.warn('Zugriff auf Magnetometer verweigert.');
return;
}
const sensor = new Magnetometer({ frequency: 20 });
sensor.addEventListener('reading', () => {
const staerke = Math.hypot(sensor.x, sensor.y, sensor.z);
if (staerke > 200) {
console.log(`Starkes Feld! y = ${sensor.y.toFixed(1)} µT`);
}
});
sensor.start();
};
startDetector();
// Wichtig · Fallstricke
- Experimentell: Das
Magnetometerist nur in Chromium-basierten Browsern verfügbar und dort meist hinter dem Flag#enable-generic-sensor-extra-classes. Firefox und Safari unterstützen es nicht – immer mit'Magnetometer' in windowprüfen. - Erfordert einen sicheren Kontext (HTTPS) und kann per
Permissions-Policy: magnetometerfür Iframes gesperrt sein. Fehler wieNotAllowedErroroderNotReadableErrortreten imerror-Event auf. - Vor dem ersten
reading-Event istynull– Zugriff auftoFixed()o. Ä. vorher führt zu einemTypeError. - Die Rohwerte sind unkalibriert gegenüber Störungen durch Metall oder Elektronik in der Nähe; das Erdmagnetfeld liegt typischerweise nur bei 25–65 µT. Für eine präzise Ausrichtung ist oft
AbsoluteOrientationSensordie bessere Wahl. - Hohe Frequenzen erhöhen den Akkuverbrauch – Sensor mit
stop()beenden, wenn er nicht gebraucht wird.