Automatische Wiederholung der Spracheingabe: Unterschied zwischen den Versionen

Aus FHEMWiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
Beim Absenden von Sprachdaten an Google kann es bei Android-Geräten dazu kommen, dass Google keine Erkennung durchführen kann. Das geschieht auch, wenn keine Audiodaten erhalten wurden (beispielsweise, wenn der Benutzer erst nachdenken muss, was er sagen will). In diesem Falle erscheint ein störendes Popup-Fenster, dass normalerweise durch drücken des Buttons ''Wiederholung'' geschlossen werden muss. Mit Hilfe eines kleinen AutoMagic-Scripts kann dies automatisiert werden.
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 ==
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 ein beliebiger Befehl angesehen, der von FHEM an das Gerät geschickt wird. Das ist nötig, damit dieser Flow immer aktiv bleibt (Trigger Typ: HTTP Request)
Als Trigger dieses Flows wird der Start der betreffenden Activity verwendet (Trigger Typ: Activity gestartet). Als Parameter werden eingetragen
Als HTTP Request wird eingetragen:
Package Name: com.google.android.googlequicksearchbox
  /fhem-amad/setCommands/*
  Klassen Name: *


Die erste Aktion holt den Text aus dem aktiven Fenster (Action Typ: Steuere UI).
Die erste Aktion setzt eine Zählvariable <code>count</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:
Als Script wird eingetragen:
  text=getTextInActiveWindow()
  text=getTextInActiveWindow()
Zeile 13: Zeile 22:
   contains(text,"Bitte sag es")
   contains(text,"Bitte sag es")


Die Verzweigung ''Ja'' (erfüllte Bedingung) sorgt für die Ausführung einer weiteren Aktion (Action Typ: Steuere UI).
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:
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}
Danach wird die eigentliche Aktion zum Wegklicken des störenden Fensters ausgeführt (Action Typ: Steuere UI), mit der Eintragung
  click("Wiederholen")
  click("Wiederholen")


Die Verzweigung ''Nein'' überspringt diese Klick-Aktion, die beiden Zweige werden also danach wieder zusammengeführt und eine
Dieser Zweig wird danach wieder mit dem ersten Zweig zusammengeführt, indem im Flow wieder die zweite Aktion angesprungen wird.
letzte Aktion innerhalb der Schleife ausgeführt (Aktion Typ: Steuere UI).
Als Script wird eingetragen:
sleep(2000)


Danach wird im Flow wieder die erste Aktion angesprungen. Im Endeffekt prüft also AutoMagic alle 2 Sekunden auf das Vorhandensein des unerwünschten Popup-Fensters und klickt es ggf. weg.
'''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)


[[Kategorie:AutoMagic]]
[[Kategorie:AutoMagic]]

Version vom 6. Juni 2020, 19:33 Uhr

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

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</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}

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 zweite Aktion angesprungen wird.

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)