Hallo Tom,
für die Anwesenheitserkennung habe ich das AddOn "Radar" in ioBroker laufen.
Sobald mein Handy in Reichweite ist, wird es somit von Radar erkannt (Bluetooth).
In Radar kann für jedes Bluetooth-Gerät bereits einen Namen vergeben werden… also z.B. "Person1", deshalb wollte ich ungern weitere Variablen (Person1-Anwesend) erstellen.
Ich habe es in JS wie folgt gelöst:
function diffArray(arr1, arr2) { return arr1.concat(arr2).filter(function (val) { if (!(arr1.includes(val) && arr2.includes(val))) return val; }); } on({id: 'radar.0.whoHere', change: "ne"}, function (obj) { console.log('+++++++++ Anwesenheit +++++++++++ '); var newState = '', oldState ='', newStateArray = [], oldStateArray = [], changedPerson = '', sayString = "", delay=0; newState = (obj.newState.val ? obj.newState.val : ""); oldState = (obj.oldState.val ? obj.oldState.val : ""); console.log('newState: ' + newState); console.log('oldState: ' + oldState); if(newState.length>0){ newStateArray = (newState.split(", ") ? newState.split(", ") : newStateArray.push(newState) ); } if(oldState.length>0){ oldStateArray = (oldState.split(", ") ? oldState.split(", ") : oldStateArray.push(oldState) ); } // console.log('newStateArray.length: ' + newStateArray.length); // console.log('oldStateArray.length: ' + oldStateArray.length); changedPerson = diffArray(newStateArray, oldStateArray).toString(); changedPerson = changedPerson.replace(',',' und '); console.log('changedPerson: ' + changedPerson); if (newStateArray.length > oldStateArray.length){ // Person neu hinzugekommen sayString = "Willkommen zuhause " +changedPerson; delay =5000; } else { // Person hat den Bereich verlassen sayString = "Tschüss " + changedPerson; delay =0; } //Alexa ansteuern setState("alexa2.0.Echo-Devices.G000Jxxx.Commands.speak-volume"/*volume*/, 35); setStateDelayed("alexa2.0.Echo-Devices.G000xxx.Commands.speak"/*controlNext*/, sayString, delay, false); });Grüße
Markus
Edit: code angepasst