freudi_t
Zu BLU Motion kann ich derzeit mangels solcher Geräte leider nichts beitragen. Das sollten dann besser die tun, die ein Lager mit Shelly Geräten haben. Ich bin nur ein kleiner Anwender mit beschränkter Ausstattung. Meine Experimente stützen sich auf einen BLU Door Window und einen BLU H&T. In meinem bereits angeführten Thread habe ich meine Ergebnisse/Erfahrungen dargelegt und Lösungen angeboten.
Ich führe nun noch einmal das interessanteste Skript hier auf, um besser darauf eingehen zu können.
// created by eiche, 2025-05-24
// This script, running on a Shelly generation 3 or higher, sends MQTT messages with data from all BTHome sensor values of a BTHome device.
// This happens immediately after the script receives a status message from a BTHome device. Nothing further needs to be done.
// The function bths() requires a composition of sensor name and optional unit in the component name.
// Sensor name and unit must be separated by a separator containing the variable Sep, e.g. a colon.
// In function bths you may do something else with the sensor data, e.g. use the "HTTP.Get" method with an URL.
// But that method can be in an action and does not need a script.
// Have fun with it anyway!
// A small configuration
let
Topic = "versuch/bthome", // the MQTT topic
Sep = ':'; // the seperator symbol - it may be a string instead of one character
// end of configuration
// Get BTHome sensor data an send those via MQTT.
function bths(id) {
//print(id);
Shelly.call("bthomesensor.getstatus", {id:id}, function(res, errc, errm) {
if(errc) {console.log(errc, errm); return;}
//print(JSON.stringify(res));
let Sensor = {id:res.id, value:res.value, ts:res.last_updated_ts, name:"", unit:""};
Shelly.call("bthomesensor.getconfig", {id:id}, function(res, errc, errm, s) {
if(errc) {console.log(errc, errm); return;}
//print(JSON.stringify(res));
let n = res.name.split(Sep);
s.name = n[0];
if(n.length>1) s.unit = n[1];
let p = JSON.stringify(s);
//print(p);
MQTT.publish(Topic, p); // or do something else with object s respective Sensor
}, Sensor);
});
}
function bthStatus(st) {
if(st.name!=="bthomedevice") return;
//print(JSON.stringify(st));
Shelly.call("BTHomeDevice.GetKnownObjects", {id:st.id}, function(res, errc, errm) {
if(errc) {console.log(errc, errm); return;}
//print(JSON.stringify(res));
for(let i=res.objects.length-1; i>=0; --i) {
//print(res.objects[i].component);
if(res.objects[i].component!==null) bths(res.objects[i].component.split(':')[1]);
}
});
}
Shelly.addStatusHandler(bthStatus);
Alles anzeigen
Der StatusHandler bthStatus() empfängt bei Statusänderung u.a. eines BLU Gerätes eine Nachricht, die auf BTHome Device getestet wird. Wenn eine Nachricht von einem BLU Gerät vorliegt, werden dessen aktuelle component Daten iterierend selektiert und von bths() verarbeitet. Die von mir im component Name eingebettete Einheit wird für dich uninteressant sein. Da ohne den Namensteil ":<Einheit>" die unit Komponente in der Struktur "Sensor" schlicht leer bleibt, brauchst du dort nichts anzupassen.
Im StatusHandler bthStatus() oder in der Geräte bezogenen Verarbeitungsfunktion bths() kann die vorhandene Nachrichtstruktur, welche ein BLU Gerät an den Shelly Gen 3 übermittelt, analysiert werden. Wenn darin bedeutsame Werte enthalten sind, können diese leicht zielführend verarbeitet werden. Die Anpassung wird sich auf den Aufruf von MQTT.publish() beziehen, welcher für die Anwendungsziele zu ändern ist.
Orientierung zum BLU Motion ist in der API Dokumentation zu finden: https://shelly-api-docs.shelly.cloud/docs-ble/Devices/motion
Es sollte dir leicht fallen, die Nachrichtstruktur eines BLU Motion zu analysieren und die Werte geeignet zu verarbeiten.