NEWS
Anwesenheit mit Begrüßungen individuell gestalten
-
Hallo
Ich versuche folgendes zu erreichen.
Ich möchte gerne wenn jemand nachhause kommt er begrüßt wird. Das funktioniert schon sehr gut.
Jetzt möchte ich aber das, wenn zwei Personen gleichzeitig nachhause kommen auch beide begrüßt werden.
Genauso soll erkannt werden wer schon zuhause ist und wer oder wie viele Personen nun Nachhause kommen damit diese zusammen begrüßt werden jedoch nicht derjenige der schon zuhause war.Zur Anwesenheit Erkennung benutze ich den Ping Adapter und den Life 360 Adapter diese Kombination funktioniert zu 90% sehr gut ,habe damit nur sehr selten Fehlmeldungen.
Eigene Datenpunkte sind folgende schon Vorhanden :
Für jede Person (3 Personen) den Zeitpunkt wann da und wann nicht da,
Gesamtanzahl der Anwesenden Personen,
Entfernung zur Wohnung für jede Person.
Diese Datenpunkte Arbeiten schon sehr gut.Jetzt fehlt mir aber die Logik dahinter wie ich dies in Blockly umsetzen kann damit das alles funktioniert.
Mein Problem dabei ist das wenn eine Person schon zuhause ist und nun weitere Personen nachhause Kommen ich dies nicht richtig erfassen kann.
Habe es schon damit versucht die Anwesenheit mit Nummern zu realisieren die dann zusammen gezählt werden wenn eine Person dazukommt und anhand des Ergebnisses dann eine ansage zu starten .
Dabei ist aber das Problem das der wert sich schon sehr Früh ändert und ich es nicht hin bekomme das nur Die neuen Personen Begrüßt werden.Hat da Jemand vielleicht einen Vorschlag wie sowas Umgesetzt werden Kann?
oder ein Beispiel wo sich dann für mich abändern Liese?
Vielen dank schon mal im voraus. -
Ich habe das zwar mit Radar2 und Javascript gelöst, aber es klappt super. Wobei ich für jede Person extra einen Begrüßungstext individualisiert habe und auch aus mehr als 10 Varianten mittels Zufallszahl auswählen lasse. Jede Person hat eigene Datenpunkte in denen die Abwesenheit oder Anwesenheit vermerkt ist. Wenn sich dieser Datenpunkt auf "true" stellt, wird das für diese Person entsprechend angelegtes Script ausgelöst, dass dann den individuellen Begrüßungstext spricht. Nachdem ich auch vermerke in welchem Raum gerade die Anwesenheit aktuell ist, lasse ich auch noch die entsprechende Alexa den Text sprechen. (Kann bei mehreren Personen die sich in verschiedenen Räumen aufhalten etwas schwierig werden.) Weiters habe ich einen Datenpunkt angelegt, in dem vermerkt wird, ob eine allgemeine Präsenz existiert. Je nach Anzahl der Personen die berücksichtigt werden sollen, lasse ich diese Zahl aufwärts oder abwärts zählen. Bei 0 ist die allgemeine Anwesenheit negativ und es befindet sich also niemand mehr in der Wohnung. (Entsprechend lasse ich alle Lichter und/oder Steckdosen ausschalten!) Script kann ich Dir am Abend zukommen lassen, wenn Du das möchtest!
-
@Mauflo
Oh sehr schön
Ja klar hätte ich an dein Script Interesse, kann ja nur dazu lernen.
Laut deiner Beschreibung ist es ungefähr so wie ich angefangen habe das Script aufzusetzen, mich aber anscheinend irgendwohin verrannt habe und nun Sehe ich vor lauter bäumen keinen Wald mehr -
ich habe auch Interesse hört sich gut an wo gibt es diesen Blokly oder das Skript
-
@SILVERSTONE69 - Hier also mein Script:
Kurz zur Erklärung:
-
Der eigentliche Algorithmus findet ab Zeile 42 statt. Hier werden je nach Uhrzeit verschiedene Zufallszahlen errechnet und die entsprechende Ansage (const ansage) ausgewählt.
-
Die Funktion begruessung überprüft erstens ob es nicht mitten in der Nacht ist (zwischen 3 und 7 Uhr soll keine Begrüßung stattfinden) und zweitens in welchem Raum gerade eine Anwesenheit existiert. (Da ich derzeit allein lebe, erreicht mich so also die Begrüßung immer in jenem Raum in dem ich mich befinde)
-
Der Aufruf der Funktion begruessung findet in Zeile 50 mit einem Timeout von 12 sec. statt. Dies aus zwei Gründen: 1. Um eine Zufallszahl errechnen zu können bevor die Funktion aufgerufen wird (dazu würde zugegebener Maßen auch nur 1 sec. genügen) 2. aber damit die Präsenz im Raum erkannt wird. Hier gibt es Verzögerungen weil ich in einem anderen Script die Anwesenheit dadurch überprüfe, in welchem Raum sich die letzte Bewegung abgespielt hat. Um das genau festzustellen benötigt dieses System (mit Hue Bewegungsmeldern) ein paar Sekunden um eine stabile Präsenz in einem Raum festzustellen. Das liegt daran, dass ich ein 5 sec. Polling bei meiner Hue-Bridge eingestellt habe. Nach ca 10 sec. gibt es also nur mehr einen Raum in dem ein aktuelles "movement" eindeutig festgestellt werden kann.
Hoffe es hilft Euch weiter:
var value; const ansage = ['<speak><emphasis level="reduced">"Hallo NamePerson"</emphasis>," willkommen. Ich "<emphasis level="strong">"freue"</emphasis>" mich, dass Du wieder zu Hause bist!"</speak>', '<speak>"Willkommen zu "<emphasis level="reduced">" Hause NamePerson!"</emphasis></speak>', '<speak><emphasis level="reduced">" Hallo NamePerson."</emphasis>" Willkommen zurück."</speak>', '<speak>"Hallo NamePerson."<emphasis level="strong">" Endlich "</emphasis>" wieder zu Hause!"</speak>', '<speak>"Willkommen daheim. "<emphasis level="reduced">"NamePerson"</emphasis >", ich hoffe Du hattest einen angenehmen Tag!"</speak>', '<speak><emphasis level="reduced">"Guten Abend NamePerson."</emphasis>"Dein Tag war hoffentlich nicht zu hart!</speak>', '<speak><emphasis level="reduced">"Hallo, NamePerson."</emphasis>"Ist heute wieder einmal später geworden.</speak>', '<speak>"Einen schönen guten Abend, lieber NamePerson."<emphasis level="reduced">"Ich habe schon auf Dich gewartet."</emphasis></speak>', '<speak><emphasis level="reduced">"NamePerson,"</emphasis>" du kommst spät."<emphasis level="reduced">"Ich hoffe Du hast nicht zu hart arbeiten müssen"</emphasis></speak>', '<speak>"Ich freue mich NamePerson, dass Du endlich da bist."<emphasis level="reduced">"Ist ganz schön spät geworden heute!"</emphasis></speak>', '<speak>NamePerson es ist aber heute ganz schön spät geworden."<emphasis level="reduced">"Hauptsache Du bist endlich zu Hause. Ruh Dich aus, schließlich mußt Du bald wieder raus!"</emphasis></speak>']; function begruessung(value){ console.log('NamePerson ist gerade zu Hause angekommen. Ansagetext: ' + value); if ((value>0) && compareTime("07:00", "03:00", "between")){ if (getState('javascript.0.Bewegungsmelder.Bad.presence').val == true){ setState('alexa2.0.Echo-Devices.BADEZIMMER.Commands.ssml'/*Bad*/, ansage[value]); console.log('Begrüßung im Bad'); } if (getState('javascript.0.Bewegungsmelder.Kueche.Commands.presence').val == true){ setState('alexa2.0.Echo-Devices.KÜCHE.Commands.ssml'/*Kueche*/, ansage[value]); console.log('Begrüßung in der Küche'); } if (getState('javascript.0.Bewegungsmelder.Schlafzimmer.Commands.presence').val == true){ setState('alexa2.0.Echo-Devices.SCHLAFZIMMER.Commands.ssml'/*Echo Show 5*/, ansage[value]); console.log('Begrüßung im Schlafzimmer'); } if (getState('javascript.0.Bewegungsmelder.Vorzimmer.Commands.presence').val == true){ setState('alexa2.0.Echo-Devices.VORZIMMER.Commands.ssml'/*Vorzimmer*/, ansage[value]); console.log('Begrüßung im Vorzimmer'); } if (getState('javascript.0.Bewegungsmelder.Wohnzimmer.Commands.presence').val == true){ setState('alexa2.0.Echo-Devices.WOHNZIMMER.Commands.ssml'/*Wohnzimmer*/, ansage[value]); console.log('Begrüßung im Wohnzimmer'); } } else { setState('alexa2.0.Echo-Devices.WOHNZIMMER.Commands.ssml'/*Wohnzimmer*/, ansage[value]); } } on({id:'radar2.0.NamePerson_XperiaXP_UserDevice._here', change: "gt"}, function (obj) { if (compareTime("21:00", "null", "<")) { value = Math.round((Math.random() * (5 - 1) + 1));//Ganzzahlige Zufallszahl zwischen 1 und 5 } else if (compareTime("21:01", "null", ">") && compareTime("22:00", "null", "<")) { value = Math.round((Math.random() * (8 - 5) + 5));//Ganzzahlige Zufallszahl zwischen 6 und 7 } else if (compareTime("22:01", "null", ">") && compareTime("23:59", "null", "<")) { value = Math.round((Math.random() * (11 - 9) + 9));//Ganzzahlige Zufallszahl zwischen 8 und 10 } setTimeout( begruessung,12000,value); //Verzögere, damit Zufallszahl auch errechnet werden kann und Value nicht undefiniert bleibt });
-