Ankündigung

Einklappen
Keine Ankündigung bisher.

Sprachsteuerung unter Android

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Sprachsteuerung unter Android

    Hallo,

    in der Kombination Android+Tasker+Autovoice ist es endlich recht gut möglich Spracherkennung mit einer gewissen sprachlichen Toleranz hinzubekommen und über Regular Expressions auszuwerten.

    Wenn ich nun z.B. "ein ODER einschalten ODER an" als Schlüselwort definiere, kann ich auf die anderern gesprochenen Begriffe als Variablen zugreifen und diese in einem http-Request verwenden.

    Das Kommando "Flurlicht einschalten" würde mich also in die Lage versetzen, einen GET-Request abzusetzen und "Flurlicht" als Variable zu übergeben.

    Gibt es die Möglichkeit, einen openHAB-Script direkt über eine URL aufzurufen?
    Gibt es dann die Möglichkeit, eine Variable in der URL zu übergeben, die ich in der Funktion auswerten kann?

    Michael

    #2
    Hi Michael,

    es wäre ja möglich, je Sprachkommando weitere Items anzulegen (hier "Flurlicht") für die Du wiederum Rules hinterlegst, um dort zu entscheiden was tatsächlich zu tun ist bzw. welche GA geschaltet werden soll. Dann könntest Du mit den Sprachkommandos die Web-UI emulieren.
    Also zB: GET ../CMD?Flurlicht=ON

    So könntest Du also Alias für Deine GAs verwenden, ohne direkt an die GAs gebunden zu sein. Das wäre natürlich nur ein Umweg... Ich habe jedoch bisher auch noch keine Möglichkeit gefunden, eine generische Funktion mit Parametern zu schreiben... aber eventuell wissen die Profis wie solch eine Funktion zu schreiben wäre?

    Gruß 40m in den Süden ;-)
    Julian

    Kommentar


      #3
      Zitat von csharper Beitrag anzeigen
      es wäre ja möglich, je Sprachkommando weitere Items anzulegen
      Ja, das ist im Prinzip zur Zeit der einzige Weg, da man weder Scripts noch Rules direkt per REST-API antriggern kann.

      Zitat von csharper Beitrag anzeigen
      Ich habe jedoch bisher auch noch keine Möglichkeit gefunden, eine generische Funktion mit Parametern zu schreiben... aber eventuell wissen die Profis wie solch eine Funktion zu schreiben wäre?
      Nein, mehr als die parameterlosen Scripts ist momentan nicht möglich. Davor bin ich noch zurückgeschreckt, denn mit der Einführung von Parametern hat man auch schnell Return-Values, Generics, Arrays etc. an der Backe - und damit die ganze Komplexität einer echten Programmiersprache...

      Grüße,
      Kai

      Kommentar


        #4
        Ich denke, ich versuche es zunächst mal mit solchen Switches wie bei Szenen, bei denen ich durch das Mapping unterschiedliche Aktionen auslösen kann.
        Dann hau ich mir nicht alles voller neuer Items und kann es in einer Rule erledigen...
        Wenn es klappt, geb ich Bescheid.

        Michael

        Kommentar


          #5
          Sprachsteuerung mit android-scripting

          Ich experimentiere auch gerade an einer Sprachsteuerung mit Android.

          Ich habe mich von Experiments in Home Automation and Other Random Stuff: Using SL4A and Android Speech Recognition for Home Automation inspirieren lassen. Nach der Installation von android-scripting ( android-scripting - Scripting Layer for Android brings scripting languages to Android. - Google Project Hosting ) auf meinem Smartphone musste ich noch das Modul PythonForAndroid laden.

          Und schon konnte ich loslegen mit Spracherkennung und Sprachausgabe!

          Folgendes kleines Python-Skript aktiviert die Spracherkennung, blendet den erkannten Satz auf dem Bildschirm ein, und gibt ihn mit der Sprachausgabe wieder aus.

          Code:
          import android
          droid = android.Android()
          
          speech = droid.recognizeSpeech("Talk Now", None, None)
          
          droid.makeToast(speech[1])
          
          droid.ttsSpeak(speech[1])
          Coole Sache, nicht wahr?

          Rasch war das erste Openhab-Python-Spracherkennungs-Skript geschrieben. Einzige kleine Schwierigkeit war, daß das Python-Modul "requests", mit dem ich die HTTP-Abfragen abschicken wollte, noch nicht installiert war. Dies konnte ich nachholen, indem ich das Modul als TAR-Archiv manuell heruntergeladen habe und in den Ordner /mnt/sdcard/com.googlecode.pythonforandroid/extras/python/site-packages/requests des Smartphones entpackt habe. Der Befehl sys.path.append im Skript sorgt dafür, daß das Modul auch eingebunden werden kann.

          Mit diesem Skript kann ich nun bequem per Sprache eine Lampe ein und ausschalten:
          Code:
          import android
          import sys
          import re
          sys.path.append('/mnt/sdcard/com.googlecode.pythonforandroid/extras/python/site-packages/requests')
          import requests
          
          droid = android.Android()
          speech = droid.recognizeSpeech("Talk Now", None, None)
          print speech[1]
          droid.makeToast(speech[1])
          
          if re.search(r".*[Ll]icht.*an.*", speech[1]):
            print 'Regel Licht an erkannt!'
            payload = 'ON'
            headers = {'content-type': 'text/plain'}
            r = requests.put("http://192.168.178.42:8080/rest/items/Licht_Wohnzimmer/state", data=payload, headers=headers)
            print r.text
            droid.ttsSpeak('Sehr gerne, ich schalte das Licht jetzt an.')
          
          if re.search(r".*[Ll]icht.*aus.*", speech[1]):
            print 'Regel Licht aus erkannt!'
            payload = 'OFF'
            headers = {'content-type': 'text/plain'}
            r = requests.put("http://192.168.178.42:8080/rest/items/Licht_Wohnzimmer/state", data=payload, headers=headers)
            print r.text
            droid.ttsSpeak('Sehr gerne, ich schalte das Licht jetzt aus.')
          Folgende Sätze erkennt dieses erste Beispiel-Skript:
          Licht an.
          Schalte bitte das Licht aus denn ich will ins Bett gehen.
          Kannst Du das Wohnzimmerlicht ausschalten?

          Das Skript funktioniert wunderbar, ich bin total begeistert!
          Ich habe ein Icon auf meinem Homescreen hinterlegt, den muß ich nur antippen und schon gehorcht mir Openhab aufs Wort.

          Als nächstes werde ich das Skript ausbauen, mehrere Lampen und Rollladen integrieren. Die regulären Ausdrücke der zu erkennenden Sätze werde ich wohl in einer Datenbank speichern, die dann vom Pythonskript durchgesucht wird. Über Fortschritte werde ich hier berichten.

          Kommentar


            #6
            Hi,

            Zitat von kesthal Beitrag anzeigen
            Coole Sache, nicht wahr?
            in der Tat, cool 8-)

            Und das Script läuft auf Deinem Handy? Python ist dem Fall nur eine Sprache, mit der das Script implementiert wurde, weil Du keine native Android schreiben wolltest, die das für Dich macht, richtig?

            Gruß,

            Thomas E.-E.
            Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

            Kommentar


              #7
              Das Skript läuft direkt auf dem Handy und spricht über das Netzwerk die REST-API von Openhab an.
              An native Android-Programmierung habe ich mich noch nicht rangewagt, die Skriptsprache Python ist dagegen kein Problem, sie ist weit verbreitet, zum Beispiel auch auf dem Raspberry Pi. Mit wenigen Zeilen Code kann man viele tolle Sachen machen.
              Dank dem Paket android-scripting kann man Python-Skripte auch auf dem Smartphone ausführen.

              Kommentar


                #8
                Zitat von kesthal Beitrag anzeigen
                Das Skript läuft direkt auf dem Handy und spricht über das Netzwerk die REST-API von Openhab an.
                sehr nett :-)
                Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

                Kommentar

                Lädt...
                X