Da fängt es doch schon an. Anforderung war doch nur Bewegung. Und nicht noch:
"battery", "temperature","humidity", "illuminance",, "window", "button", "rotation",
Das soll ja nichts schlechtgeredet werden. Ist kein meckern, nur Interesse. Ich finde es nur ein wenig umfangreich. Lasse mich gerne belehren.
Ist es nicht möglich, nur den Wert zu lesen, den ich benötige? So wie ich es z.B. in einem Pythonskript machen kann, wenn ich nur einen einzigen Wert aus einem json-string extrahieren will? Das geht mit einem 10-Zeiler. Etwa apower(gesamt) von einem 3EM.
Was sagt denn Kumpel KI, wenn man nach einer Vereinfachung fragt. Ich kann es nicht testen, sonst würde ich es tun. Habe keinen Blu Motion.
Das wäre so ein Beispielergebnis:
Keine Ahnung, was da herauskommt. Das was ich mir bisher da an Beispielen (die ich auch getestet habe)herausgeholt habe war etwas knapper gehalten.
// Konfiguration
let CONFIG = {
mac: "38:39:8f:ab:4e:ff", // MAC-Adresse des Geräts
motionUrl: "http://xxx.xxx.xxx.xxx/cs?c2=37&c1=RFCode%20%23001155",
noMotionUrl: "http://xxx.xxx.xxx.xxx/cs?c2=39&c1=RFCode%20%23001150",
};
// BLE-Scanner Callback
function bleScanCallback(event, result) {
if (event === BLE.Scanner.SCAN_RESULT && result.addr === CONFIG.mac) {
let motion = result.service_data?.motion; // Extrahiert Bewegungsstatus
let url = motion === 1 ? CONFIG.motionUrl : CONFIG.noMotionUrl;
Shelly.call("HTTP.GET", { url });
console.log(`Aufruf: ${url}`);
}
}
// Initialisierung
function init() {
if (!Shelly.getComponentConfig("ble").enable) {
console.log("Bluetooth nicht aktiviert. Bitte in den Einstellungen aktivieren.");
return;
}
BLE.Scanner.Start({ duration_ms: BLE.Scanner.INFINITE_SCAN, active: false });
BLE.Scanner.Subscribe(bleScanCallback);
}
init();
Alles anzeigen