Automatische Wiederholung der Spracheingabe

Aus FHEMWiki
Version vom 6. Juni 2020, 18:45 Uhr von Pahenning (Diskussion | Beiträge) (→‎Mit Benutzeroberfläche)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Die Spracheingabe wird bei der Verwendung von AMAD über die Aktion AMAD Voice Control (Action Typ: Spracheingabe (Experimentell)) gesteuert. Dabei lassen sich zwei Modi auswählen

  • UI Modus - ohne Benutzeroberfläche
  • UI Modus - zeige Benutzeroberfläche

Ohne Benutzeroberfläche

Hier wird als einziges Signal zum Beginn der Spracheingabe ein Beep-Ton ausgegeben. Nach ca. 5 Sekunden ohne registrierte Eingabe erfolgt eine akustische Systemmeldung 'Ihre Eingabe wurde nicht verstanden'. (WORK IN PROGRESS)

Mit Benutzeroberfläche

AutoSprachWdh.jpg

Hier wird als Signal zum Beginn der Spracheingabe ein Beep-Ton ausgegeben und ein Popup-Fenster gezeigt. Nach ca. 5 Sekunden ohne registrierte Eingabe erfolgt ein weiterer Ton und das Popup-Fenster zeigt die Meldung 'Bitte sag es noch einmal'. Dummerweise verschwindet dieses Fenster nicht, sondern kann bisher nur durch Klicken des Buttons Wiederholung geschlossen werden. Mit Hilfe eines kleinen AutoMagic-Flows kann dies automatisiert werden.

Als Trigger dieses Flows wird der Start der betreffenden Activity verwendet (Trigger Typ: Activity gestartet). Als Parameter werden eingetragen

Package Name: com.google.android.googlequicksearchbox
Klassen Name: *

Die erste Aktion setzt eine Zählvariable count auf Null (Action Typ: Script)

count=0

Danach beginnt eine Schleife mit der zweiten Aktion, diese holt den Text aus dem aktiven Fenster (Action Typ: Steuere UI). Als Script wird eingetragen:

text=getTextInActiveWindow()

Eine Bedingung prüft anschließend, ob die Variable text den String Bitte sag es enthält (Condition Typ: Expression) Als Expression wird eingetragen

 contains(text,"Bitte sag es")

Die Verzweigung Nein überspringt einen ganzen Block von Aktionen, es wird eine letzte Aktion innerhalb der Schleife ausgeführt (Aktion Typ: Steuere UI). Als Script wird eingetragen:

sleep(2000)

Danach wird im Flow wieder die zweite Aktion angesprungen. Im Endeffekt prüft also AutoMagic alle 2 Sekunden auf das Vorhandensein des unerwünschten Popup-Fensters. Der Block von Aktionen, der bei der Verzweigung Ja (erfüllte Bedingung) ausgeführt wird, setzt zunächst die Zählvariable count um eins hoch (Aktion Typ: Script)

count=count+1

Optional kann man hier eine weitere Aktion einbauen, mit der die Anzahl der Wiederholungen als Benachrichtigung auf den Bildschirm ausgegeben wird (Aktion Typ: Benachrichtigung auf Bildschirm), z.B. als Text

Wiederholungsfenster {count}

(Im Bild sind hier weitere Verzweigungen je nach Anzahl der Wiederholungen eingebaut WORK IN PROGRESS).

Danach wird die eigentliche Aktion zum Wegklicken des störenden Fensters ausgeführt (Action Typ: Steuere UI), mit der Eintragung

click("Wiederholen")

Dieser Zweig wird danach wieder mit dem ersten Zweig zusammengeführt, indem im Flow wieder die letzte Aktion angesprungen wird, nämlich die Verzögerung von 2 Sekunden.

Achtung: Mit der gegenwärtigen Fassung wird diese Schleife so lange durchlaufen, bis eine Spracheingabe registriert wurde oder die Automagic Spracheingabe abstürzt. Das ist u.a. daran erkennbar, dass im (anderen) Flow VoiceControl die Aktion AMAD Voice Control nach wie vor als aktiv angezeigt wird. Gegenwärtig ist als Abhilfe nur bekannt, den Automagic Service manuell zu stoppen und neu zu starten (WORK IN PROGRESS)