NEWS
Blockly, Radar, Alexa und Anwesenheitserkennung
-
Hallo zusammen,
zurzeit habe ich "Radar" und "Alexa2" laufen.
Mein Wunsch wäre eine persönliche Begrüßung über Alexa, wenn Radar erkennt, dass eine neue Person in Reichweite ist.
Beispiel:
"Person2" ist bereits "anwesend", "Person1" kommt nach Hause und soll über ein Script entsprechend per Namen(also "Willkommen Person1") begrüßt werden.
"Radar" reagiert wie folgt:
Variable "allHere" = "Person1, Person2" (alphabetische Sortierung)
Variable "countHere" = "2"
Person2.count =32
Person1.count = 1
Gerne würde ich nun Alexa über Blockly beibringen, dass ein Begrüßungstext, wie "Willkommen Person1" ausgegeben wird.
Leider bietet Radar keinen Timestamp oder ähnliches an, so dass ich es nicht hin bekomme, die "neue" Person im Haus zu ermitteln.
Aktuell habe ich zwei Probleme:
a.) müsste die richtige Person ermittelt werden (Idee wäre ggf. über eine Hilfsvariable zu gehen (dann Vergleich alter und neuer Wert von "allHere") oder über eine eine Funktion "Ermittle Personennamen zu min(PersonX.count)" )
b.) über die Zeischenkette "allHere"den Namen zu extrahieren (falls mit einer Hilfsvariablen gearbeitet wird) und diesen dann als ein "say"-Command an Alexa2 zu übergeben.
Vielleicht hat ja jemand einen Lösungsansatz… oder ist Blockly hier sowieso nicht der richtige Ansatz ?
Besten Dank
Markus
-
Hallo,
wie erkennst du denn überhaupt, welche Person nach Hause kommt, bzw. das Haus verlässt?
Über BT Tags oder WLAn& Handy kannst du der Person doch einfach eine Variable "Person1-Anwesend" zuordnen.
Bei 2 oder 3 Personen legst du halt für jede Person eine Variable an.
Dann hast du den Namen und kannst auf Änderung dieser Variable dann per Blockly eine Begrüßung triggern.
Wenn "PersonX-Anwesend" bei Änderung auf "True", dann SAY Alexa "Willkommen PersonX"….
Nur mal so als Lösungsansatz
Grüße
Tom
-
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