Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly, Radar, Alexa und Anwesenheitserkennung

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Blockly, Radar, Alexa und Anwesenheitserkennung

    This topic has been deleted. Only users with topic management privileges can see it.
    • Messiahs
      Messiahs last edited by

      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

      1 Reply Last reply Reply Quote 0
      • TomT
        TomT last edited by

        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

        1 Reply Last reply Reply Quote 0
        • Messiahs
          Messiahs last edited by

          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

          1 Reply Last reply Reply Quote 0
          • First post
            Last post

          Support us

          ioBroker
          Community Adapters
          Donate

          410
          Online

          31.9k
          Users

          80.2k
          Topics

          1.3m
          Posts

          2
          3
          2141
          Loading More Posts
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes
          Reply
          • Reply as topic
          Log in to reply
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
          The ioBroker Community 2014-2023
          logo