Android App IPSymconVoice

Ich hatte das Thema schon einmal untersucht in den Winter Monaten. Siehe hier im Thread auch. Leider gibt es da derzeit nur Bastel Lösungen aber nichts was von Haus aus von Google direkt mit Android per offizieller API möglich ist um die zusätzliche Hardware die bei den moderneren Devices verbaut ist vernünftig zu verwenden.

zB: dieser Thread hier:
Integrate Google Voice Recognition in Android app - Stack Overflow

Im Prinzip stoßt man immer wieder auf cmusphinx/pocketsphinx-android · GitHub die eine permanente Offline Spracherkennung unterstützen aber mit der Sprache Deutsch noch keine vernünftige Integration haben für den kompletten Wortschatz (da gibt es Wörterbücher die angelegt werden wie man es spricht in einer speziellen Syntax und auf dieser Basis findet dann die Spracherkennung statt). Auf der einen Seite wird die App dann aber ziemlich groß auch wenn nur ein paar hundert Wörter dann unterstützt werden durch bereits fertige Spracherkennungswörterbücher. Google Spracherkennung geht derzeit leider noch immer nicht permanent, sondern nur mit Interaktion mit dem Benutzer, weil dort nach ca. 7 Sekunden ohne Geräusch die Verbindung beendet wird. Die Auswertung lauft dort ja immer online auf den Google Servern und da wird es vermutlich ein Performance Thema sein warum das Google nicht permanent zulässt. Finde ich persönlich auch nicht ganz vertrauenswürdig wenn alles gesprochene permanent an ein „fremdes“ Unternehmen übertragen wird.

Momentan habe ich leider nicht so viel Zeit. Das nächste Feature (arbeite ich jetzt schon länger dran) wird Bluetooth Support sein weil ich hier auch schon Anfragen hatte dies zu integrieren (zB: für Auto; oder so wenn man gerade ein Bluetooth Headset angesteckt hat)

Was mich persönlich noch bei einem anderen Thema stört, dass Android Wear für Smartwatches aktuell keine vollwertige NFC Unterstützung hat, so wie es bei Smartphones der Fall ist und somit auch noch kein Hersteller der auf Android Wear setzt entsprechend in der Lage ist, direkt NFC Tags zu lesen und diese so zu verarbeiten wie bei Smartphones bzw. die „Aktion“ dann mit dem Smartphone zu machen geht da auch nicht. NFC Unterstützung bei Android Wear bedeutet derzeit nur die Smartwatch mit dem Smartphone via Bluetooth komfortable verbinden zu können, indem man beide Geräte nahe zusammen hält (NFC). Meine Vision ist einen NFC Tag einfach wo hinkleben anstatt einem Funkschalter und die Smartwatch hinhalten und schon wird eine Aktion in IP-Symcon über meine App und das Script ausgeführt. Das scheint momentan nur bei Smartwatches mit Tizen oder WebOS bzgl. NFC Hardwareunterstützung möglich zu sein sofern es dort für „externe“ Entwickler überhaupt verwendbar ist, ich will das Feature aber unbedingt in nächster Zeit für Android Wear.

LG
Thiemo

Nun da muss ich im wesentlichen widersprechen.

Es ist ohne weiteres möglich die Spracherkennung offline zu benutzen.
Damit hat man weder Performance Probleme (siehe zB AIVC oder ähnliche Apps),
noch Datenvolume Tarife (ist eh egal im eigenen WLAN),
noch Bedenken, dass Google mithört.

Ich habe nun mal angefangen selber eine einfache Version zu basteln.

Eigentlich soll das Teil nur eine WebSeite von IPS anzeigen
und im Hintergrund auf Sprachkommandos reagieren, und ggf, was sagen.

Nun, nach dem heutigen Tag bin ich einen Schritt weiter.

Leider kenne ich mich mit Java nur gar nicht aus, geschweige denn mit der Android Programmierung
und Zeit zur Entwicklung fehlt mir auch, aber der heutige Tag war frei :wink:

Nun verfüge ich über eine App, die in der Lage ist:
a) Das Webfrontend anzuzeigen und zu bedienen
b) Im Hintergrund auf Sprachbefehle zu warten
c) Nur bei einem Schlüsselwort (serverseitig, also IPS gesteuert) Kommandos auszuführen
d) Rückmeldungen von IPS anzusagen

Und es läuft sogar offline :wink:

Also wo ist das Problem ?

Ich denke, ich steige hier aus dem Thread aus, wenn Interesse an der App und der Sprachsteuerung besteht, lasst es mich wissen, ich verschicke die dann oder pack die in den Store, wenn’s genügend Leute sind (Und sobald ich die Einstellungen Seite fertig habe :wink:

Das mit Java und Android Programmierung trifft genau so auf mich zu. Ich habe wie ich mit der App Haussteuerung angefangen habe letzten Jahres zuvor auch nichts gewusst in dieser Richtung und mich von Thema zu Thema einfach eingelesen. Schade dass Du aus dem Thread hier aussteigst. Wäre für die gesamte Community viel besser wenn Du mir mitteilen würdest wie Du es jetzt im Detail gelöst hattest. Dann könnte ich es entsprechend mit aufnehmen.

Hallo,

eine neue Version 1.3 mit Bluetooth Support habe ich soeben in die Google Android Developer Console hochgeladen. Sollte in kürze Verfügbar sein.

Wenn man einen Bluetooth Lautsprecher aktiv verbunden hat und die Einstellungen unter Bluetooth für den Lautsprecher bzgl. „Media-Audio“ aktiviert hat, dann wird entsprechend eine aktive Musik gestoppt, Sprachausgabe/-aufnahme erfolgt und danach wird eine aktive Musik wieder fortgesetzt.

In den Einstellungen bzgl. Spracheinstellungen kann man das Bluetooth Headset auswählen welches verwendet werden soll (zuvor natürlich Bluetooth aktivieren notwendig). Wenn man mehrere Bluetooth Headsets hat kann man dort entsprechend hinterlegen für welches dann die Sprachausgabe-/aufnahme mit meiner App erfolgt.

Ein bekanntes Problem gibt es wenn man gleichzeitig ein BluetoothHeadset und einen BluetoothLautsprecher unter Android aktiv verbunden hat (also tatsächlich auf einem Bluetooth Lautsprecher Musik hören will und gleichzeitig auf einem BluetoothHeadset telefonieren etc… will). Da habe ich noch keine Lösung. Das führt entsprechend zu einer „Deadlock“ Situation.

Sollte der Bedarf für die ein oder andere zusätzliche Option sein (mit Ein/Ausschaltbar) entsprechend einfach hier rein schreiben.

LG
Thiemo

Hi Thiemo,
habe das neue Bluetooth Feature gleich an meiner Freisprechanlage getestet.
Funktioniert soweit ganz gut jedoch habe ein Problem und eine Verbesserung anzumerken.

  1. Die Spracheingabe funktioniert nicht immer zuverlässig. Der Verbindungsaufbau (Smartphone => Freisprecheinrichtung) benötigt einige Sekunden und gelegentlich kommt es vor daß der Timer der Spracherkennung am Smartphone ausläuft. Die Spracherkennung müsste etwa 3-5 Sekunden länger auf eine Spracheingabe warten bevor der Abbruch erfolgt.
  2. Die Bluetooth Verbindung wird nach der Sprachausgabe nicht automatisch getrennt. Ich muß die Verbindung manuell trennen. Es wäre gut wenn die App die Bluetooth Verbindung nach der Sprachausgabe (evtl. einige Sekunden später) von selbst trennt.

Das Bluetooth Feature ist aber wirklich Top Genial für’s Auto. Danke!
Fehlt jetzt nur noch die Android Wear Unterstützung. :wink:

Gruß
Christian

Hallo Thiemo,

ganz raus bin ja auch noch nicht :wink:

Schön dass sich hier noch jemand durch die Java Welt quält.
Ich bin eigentlich in der MS Welt zu Hause (C++, C#)
Nachdem ich nun endlich mein Git auf meinem TFS zu Hause am Laufen habe, kann
ich mich nun wieder der Entwicklung in meiner spärlichen Freizeit widmen.

Da Du Deinen Post geändert hast, kann ich Dir Deine Fragen nur aus dem Kopf heraus beantworten.

a) Wie habe ich das mit dem Kommando gelöst ?
Ganz einfach, ich lasse meine App immer zuhören. Wenn diese eines von den Schlüsselwörtern „hört“ wechselt sie in den Kommando Modus, wo sie dann die Sprache entweder intern in Kommandos umwandelt oder aber an IPS weiterleitet.

b) Wie habe ich das Offline hinbekommen ?
Total simpel und kompliziert :wink:
Einfach gesagt, Du musst „nur“ auf dem Tablet dafür sorgen, dass

  1. keine, aber GAR keine andere Spracherkennung als die von Google läuft
  2. Diese kannst Du mit Offline Sprachdateien ausstatten, und voila es läuft aus dem Stehgreif offline

Leider klappt dieses im Moment bei mir nur bei meinen Asis Import Tablet. Auf meinen anderen
(Samsung) will das leider nicht, ich vermute hier irgendwas mit deren Tools die mit installiert sind.
Für mich ist das aber egal, da ich eh immer Online bin.

c) Die Klasse die Du benutzt verwende ich auch.
Sie hat allerdings (mindestens) drei Nachteile

  1. Sie blendet das Google Fenster ein, ok , das kann man leicht unterdrücken
  2. Sie „piepst“ zu Beginn der Spracherkennung. Hier arbeite ich noch daran. Das auszuschalten ist einfach, nur ist dann auch die Sprachausgabe weg. Das muss ich noch synchronisieren.
  3. Sie stürzt ab, irgendwann, irgendwie, unregelmäßig. Das löse ich im Moment über einen zusätzlichen Überwachungsthread.

So ich glaube das waren alle Fragen.

Viele Grüße

Hallo Thiemo.

Vielen Dank für die geniale Entwicklung.

Installiert, ein wenig eingelesen und funktioniert.

Habe auch Heimgeists Auswertelogik genutzt da mir die auf die schnelle einfacher zu bestücken war.

Freue mich schon auf eine Wear-Anbindung um erst garnicht das Telefon in die Hand nehmen zu müssen.

Weiter so ihr 2.

Hallo,

ich habe soeben die Version 2.0.0 in den App Store geladen. Es wird jetzt Android Wear unterstützt.
Derzeit wird sofort mit der Spracherkennung gestartet sobald die App auf dem Wearable Device aufgerufen wird und danach das Ergebnis aus IP-Symcon angezeigt. Das kann unter Umständen bei meinen Tests schon mal so bis zu 5 Sekunden dauern. Nach der Anzeige kann man auf das Mikrofon-Icon klicken um eine neue Spracheingabe zu tätigen. Ich habe nur eine eckige Smartwatch. Bitte um Feedback ob auf runder das Design soweit passt und lesbar ist. Momentan wird auch die App automatisch beendet bei längerer Inaktivität oder wie sonst auch bei Wearable Apps einfach nach rechts wischen.

Die App kann auch so gestartet werden auf dem Wearable Device: „Ok Google“, „Starte Haussteuerung“ (das dauert allerdings ein paar Sekunden)

Folgende Road-Map für weitere Entwicklungen/Bugfixes:

  • a.) Bereinigungen für „depracted“ Apache Umfänge mit der Android API Version 22 die nicht mehr weiter unterstützt werden (Version 2.0.1)
  • b.) Bereinigung bzgl. Bluetooth und Funktion um über Settings eine Wartezeit einzubauen (damit nicht die Spracherkennung bereits wieder abbricht obwohl noch keine Verbindung aufgebaut wurde) (Version 2.1)
  • c.) Zusätzliche Einstellungen für Wearable (kein sofortiger Start der Spracherkennung beim ersten Aufruf der App, bei klick auf das Mikrofon-Icon wahlweise den vorigen Text löschen oder mit anzeigen, wahlweise Always-On App Feature mit Ambient Mode oder Auto-Exit) (Version 2.2)
  • d.) Feature mit permanenter Spracherkennung am Android Gerät als Einstellung auswählbar (nicht Wearable) (Version 2.3)
  • e.) Positions Tracking des Android Gerätes für jene die permanent IP Symcon über das Web erreichen können (mit einstellbarem Zeitintervall und Tracking über Google Play Services oder direkt GPS Signal) (Version 2.4)
  • f.) normales Web-Frontend als Full Screen Activity mit einblenden (Version 2.5) - für Tablets

LG
Thiemo

Hi Thiemo,
super daß es mit der Wear Unterstützung so schnell geklappt hat. :smiley:

Nur leider funktioniert die Sprachsteuerung über meine Wear Watch (Sony Smartwatch 3) nicht.
Meine Android Wear hat die Version 5.1.1.

Fehlerbeschreibung:
Ich starte die „Haussteuerung“ App auf der Wear Watch und kann dann die Spracheingabe durch ein tippen auf das Mikrofon-Icon starten (Blauer Bildschirm wechselt auf Google Spracheingabe mit der Überschrift „Haussteuerung Erkennung“). Das Gesprochene wird auch richtig erkannt und als Text auf der Wear Watch angezeigt. Allerdings wird auf der Wear Watch keine Rückbestätigung angezeigt (kein Ausgabetext beim blauen Screen). In der IPS Console kann ich sehen daß der gesprochene Eingabetext nicht in der „AndroidReceive“ Variable ankommt.

Muß ich in der App, am Smartphone oder im IPS Skript noch irgend etwas für den Wear Support einstellen oder scheint das ein Fehler zu sein? Reboot von Wear und Smartphone haben auch nichts gebracht. :wink:

Danke schon mal für die Super geniale App mit Wear. Das wird super genial.

Zur Roadmap (Respekt, das ist echte Entwickler Qualität) !!!
e) => GPS Tracking … Jaaaaaaaaaaa! Neben Wear das von mir am meisten gewünschte Feature welches enorm viele Möglichkeiten für die Hausautomation bringen wird. Hier würde ich mir zwei Variablen/Optionen wünschen. Position_GPS => genaue Positionsdaten per GPS (hoher Batterieverbrauch), Position_Net => ungenauere Positionsdaten per Mobilfunknetz (geringer Batterieverbrauch, da diese Daten dem Smartphone ohnehin immer zur Verfügung stehen. Meist liegt die Genauigkeit bei kleiner 100m was meist schon ausreichend ist). Am besten von Tasker inspirieren lassen.

Neue Idee für Wear => Super wäre es wenn es in der Wear App auch möglich wäre ein Skript zu starten. Könnte mir zur Realisierung vorstellen daß man in den Optionen die ID’s zu Skripten eingeben kann welche in der App dann unter dem Mikrofon angezeigt werden. (3-4 Skripte wären für die meisten Fälle ausreichend). Über den Skript Name könnte die App den Zustand bzw. die Funktion darstellen und somit müsste zur Realisierung nur der Skript-Name (ohne Icon, type of variable bin/string/int…, variable value) ausgewertet werden. Einfache und schlichte Realisierung wäre ausreichend.

Hallo Christian,

danke für das Testen. Welches Smartphone oder Tablet verwendest Du in Verbindung mit der Smartwatch? Ich habe die Sony Smartwatch 3 mit 5.1.1. und bei mir funktioniert es soweit mit meinen Tests. Ich bin allerdings mit Bluetooth verbunden. Hast Du die Smartwatch mit Bluetooth oder WLAN verbunden und wenn mit WLAN bist Du im gleichen WLAN Netzwerk oder eventuell einem anderen? Wäre ein wertvoller Hinweis für weitere Tests meinerseits warum es nicht funktioniert.
Das bzgl. den IDs von Scripten habe ich mir auch schon überlegt in einem weiteren Bildschirm um diese dann einfach per Touch auszuwählen und in einem zusätzlichen Bildschirm zB: fix hinterlegte Texte die man dann einfach per Touch ausführen kann für die wichtigsten Umfänge die man am häufigsten so bentutzt. zB: immer nur max. 5 Einträge oder so.

Bzgl. GPS an genau so eine Unterstützung habe ich auch gedacht um es dynamisch halten zu können und bei Bedarf die Batterie zu schonen.

Danke
LG
Thiemo

Habe die Sony Smartwatch 3 (auch mit 5.1.1) an meinem Samsung Galaxy S5 (Stock Android 5.0).
Verbindung normalerweise mit Bluetooth aber auch mit WLAN versucht … beides funktioniert nicht.
Woran kann es liegen daß es nicht funktioniert? Irgendwelche Logs/Debugs welche ich liefern kann?
Kann ich die Verbindung Watch <=> Smartphone <=> IPS irgendwie testen um zu sehen woran es liegt daß die Receive Variable nicht über Wear aktualisiert wird???

Wegen der Tastenbedienung hört sich Dein Vorschlag ganz gut an. Denke auch daß max.5 Einträge ausreichend sind.
Ich persönlich würde es gut finden wenn die Button Bezeichnung dem Skript-Text entnommen werden könnte (z.B. 10 Sekunden Aktualisierungsintervall). Somit könnte auch der aktuelle Status angezeigt werden (z.B. Licht einschalten/ Licht ausschalten, Garage auf / Garage zu, …) => Einfach aber effektiv.

Hallo Christian,

danke für das Feedback bzgl. Wearable als private Nachricht. Vom Konzept her wird von den Google Entwicklungsrichtlinien stark empfohlen IO auf das Smartphone auszulagern mit wesentlich höherer Akku Kapazität und so ist es momentan umgesetzt. Eventuell wäre es aber eine Option sofern überhaupt alle Möglichkeiten bzgl. JSON usw… am Wearable gehen das über eine zusätzliche Einstellung am Wearable Device zu fahren. Also mit einem Wisch nach Links auf der Smartwatch will ich ja zukünftig Einstellungen machen können und dann eventuell die Option „Offline Modus“ wenn es technisch soweit geht damit auch der intensivere IO bzgl. IP-Symcon Kommunikation dann auf der Smartwatch gemacht wird wenn Offline Modus aktiv ist.

Ich werde mich in den nächsten Tagen damit beschäftigen ob das zu lösen ist.

LG
Thiemo

@ Thiemo
Danke hiermit nochmals für die Top App und die Wear Unterstützung. Nach dem Deaktivieren der Cloud Unterstützung funktioniert die Wear App jetzt perfekt. Einfach der Hammer!!! Komme mir jetzt vor wie bei Night Rider damals … in die Uhr sprechend „Kit bitte kommen“.

Als Android Wear Kommunikation gibt es folgende Optionen:

  1. Bluetooth Verbindung zwischen Wear Watch und Smartphone => hier funktioniert die Haussteuerung App perfekt !!!
  2. Ohne Bluetooth, mit aktivierter Cloud-Sync via WLAN (Wear Watch <=WLAN=> Google <=WLANoder2G/3G/4G=> Smartphone) => hier funktioniert die App nicht (zumindest bei mir nicht). Evtl. kann das gefixt werden???
  3. IDEE: Ohne Bluetooth, mit WLAN: Ob dies möglich ist kann ich nicht sagen jedoch könnte ich mir vorstellen daß es funktioniert. Evtl. muß die App via Sideload auf der Wear Watch installiert werden??? Idee ist die Kommunikation komplett ohne Smartphone, also Wear Watch <=> IPS laufen zu lassen. Komplette Unabhängigkeit vom Smartphone wäre natürlich die non-plus-ultra Lösung. Wäre mal interessant das APK der Haussteuerung’s App per sideload direkt auf der Wear Watch zu installieren ob dann die direkte Kommunikation funktioniert. Ein Versuch wäre es sicherlich wert. Basierend der Info aus dem Netz sind sehr viele normale Android APK’s auch auf der Wear lauffähig.

Weiter so. Hammer App !!!

Hallo,

also erstmal vielen Dank an Thiemo für die Idee und Umsetzung. Ich find’s genial und arbeite gerade daran meinen Wecker im Schlafzimmer per Voice zu stellen, aktivieren und zu deaktivieren.

Beim ersten Versuch bin ich allerdings gescheitert. Mein IPS läuft auf Version 4.0 (BETA) auf dem Raspberry und die APP Haussteuerung meldet immer einen Parse error 32700. Wenn ich die Url über Linux und Curl absetze (Beispiel aus dem ersten Post) dann klappt die Kommunikation. Wenn ich gegen mein altes IPS auf W7 laufe, dann klappt auch die App Haussteuerung. Mit der alten App IPSymconVoice funktioniert es seltsamerweise auch mit der neuen IPS Version. Natürlich würde ich gerne die neue App und mein aktuelles IPS (4.0) benutzen. Gibt es da einen Bug oder mach ich ggf. noch etwas falsch?

Danke
Klaus

Hallo Gemeinde,

ich spiele auch seit ein paar stunden damit rum und bin begeistert :slight_smile:

Nur meine Uhr bekomme ich noch nicht dazu mitzuspielen.

Ich habe eine Samsung Gear S

Ich finde keine App im Playstore für die Uhr…oder denke ich hier ganz falsch ?
Ein kurzes „how to“ wäre ganz lieb…

LG
Sascha

EIN RICHTIG RICHTIG GEILES PRORGRAMM!!! :D:D:D:D
Klappt perfekt mit meiner LG GWatchR. Diese ist Rund und es wird in den seltensten Fällen etwas vom Text abgeschnitten.

Habe bei mir alle Lichter über IPS Light eingebunden. Damit habe ich dann auch keine Probleme welche Hardware am Ende dahinter steckt.

Hier mal ein Anfang für das Script. Man kann damit einzelne Lichter oder ganze Gruppen schalten.

<?
// Einbinden der IPS Light Befehle
IPSUtils_Include ('IPSLight.inc.php', 'IPSLibrary::app::modules::IPSLight');

// IDs der Voice Befehle
$SpeechInputID  = 31383 /*[AAA Neue Module\IPS Voice\voice in]*/;
$SpeechOutputID = 57967 /*[AAA Neue Module\IPS Voice\voice out]*/;

// Sprachauswertung
$config = array(

// Allgemeine Befehle
// ##################################################################################################
    array(	'REGEX1' => 'wie spät',
            'COMMAND1' => array(	'REGEX' 	=> 'wie spät',
	               					'CODE' 	=> '$result = date("H")." Uhr ".date("i");',
               						'SAY' 	=> 'Die aktuelle Uhrzeit ist $result')),
// GRUPPEN Schalten
// ##################################################################################################
    array(	'REGEX1' => 'Alles Aus',
            'COMMAND1' => array(	'REGEX' 	=> 'Alles Aus',
	               					'CODE' 	=> '$resultcode = IPSLight_SetGroup(31006 /*[Program\IPSLibrary\data\modules\IPSLight\Groups\All]*/, false); ',
               						'SAY' 	=> 'Es wurde alles ausgeschalten')),


// Wohnzimmer
// ##################################################################################################
    array(	'REGEX1' => ' Wohnzimmer | Wohnzimmerschrank | Wohn',
        		'REGEX2' => ' Stehlampe | Steh ',
            'COMMAND1' => array(	'REGEX'  => 'an | ein | einschalten',
						               'CODE' 	=> '$resultcode = IPSLight_SetSwitch(54585 /*[Program\IPSLibrary\data\modules\IPSLight\Switches\Stehlampe]*/, true); ',
                						'SAY'  	=> 'Wohnzimmer Stehlampe Eingeschaltet'),
            'COMMAND2' => array( 'REGEX'  => 'aus | ausschalten',
					                	'CODE' 	=> '$resultcode = IPSLight_SetSwitch(54585 /*[Program\IPSLibrary\data\modules\IPSLight\Switches\Stehlampe]*/, false); ',
                						'SAY'  	=> 'Wohnzimmer Stehlampe Ausgeschaltet'),),


    array(	'REGEX1' => ' Wohnzimmer | Wohnzimmerschrank | Wohn',
        		'REGEX2' => ' Schranklampe | Wohnzimmerschrank | schrank ',
            'COMMAND1' => array(	'REGEX'  => 'an | ein | einschalten',
						               'CODE' 	=> '$resultcode = IPSLight_SetSwitch(35842 /*[Program\IPSLibrary\data\modules\IPSLight\Switches\Schrankbeleuchtung]*/, true); ',
                						'SAY'  	=> 'Wohnzimmer Schranklampe Eingeschaltet'),
            'COMMAND2' => array( 'REGEX'  => 'aus | ausschalten',
					                	'CODE' 	=> '$resultcode = IPSLight_SetSwitch(35842 /*[Program\IPSLibrary\data\modules\IPSLight\Switches\Schrankbeleuchtung]*/, false); ',
                						'SAY'  	=> 'Wohnzimmer Schranklampe Ausgeschaltet'),),


          





// ##################################################################################################
// Ab hier nichts mehr ändern. (Version 1.11)
// ##################################################################################################
);

$SpeechInput = GetValueString($SpeechInputID);
SetValueString($SpeechOutputID, "");  // lösche Outputstring um bei Timingproblemen keine alten Antworten zu erhalten
IPS_LogMessage("Sprachsteuerung", 'SpeechInput=" '.$SpeechInput.' "');

// Alle Nummern aus dem InputString ermitteln. Liefert ein Array $numbers
// mit allen gefundenen Zahlen als Float-Werte oder false.
$minusspeech = array(" Minus ", " minus ", "- ");
preg_match_all("/-?\d+(,|\.)?\d*/", str_replace($minusspeech, "-",$SpeechInput), $numbers);
if(isset($numbers[0][0])) {
    $numbers = $numbers[0];
   for ($i = 0; $i < count($numbers); $i++) {
       $numbers[$i] = floatval(str_replace(',', '.' , $numbers[$i]));
       IPS_LogMessage("Sprachsteuerung", '  $numbers['.$i.']='.$numbers[$i]);
    }
}else {
    $numbers = false;
      IPS_LogMessage("Sprachsteuerung", '  $numbers=false');
}

// Alle Einträge des $config Arrays werden auf Übereinstimmung mit dem Speech-Satz geprüft
$config_count = 0;
foreach ($config as $element) {
    $config_count++;
    $check_command = true;
    $answer = "";
    IPS_LogMessage("Sprachsteuerung", 'CONFIG'.$config_count);
   // Prüfe REGEX1 - REGEXxx auf Übereinstimmung
   for ($i = 1; $i < 100; $i++) {
        @$RegEx = $element['REGEX'.$i];
      if(empty($RegEx)) {
            break; // Abbruch da REGEXx Eintrag nicht vorhanden ist
        } else {
           if(preg_match('/'.$RegEx.'/i', ' '.$SpeechInput.' ')) {
                IPS_LogMessage("Sprachsteuerung", '  REGEX'.$i.'['.$RegEx.']=true');
            } else {
                IPS_LogMessage("Sprachsteuerung", '  REGEX'.$i.'['.$RegEx.']=false');
            // Ein REGEXx Eintrag wurde nicht gefunden. Prüfung auf COMMAND wird nicht durchgeführt
                $check_command = false;
            }
      }
    }

    if($check_command == true) {
        // Alle REGEX wurden gefunden, suche jetzt nach den COMMAND Ausdrücken
      for ($i = 1; $i < 100; $i++) {
            @$RegEx = $element['COMMAND'.$i]['REGEX'];
            if(empty($RegEx)) {
                break; // Abbruch da COMMANDx Eintrag nicht vorhanden
            } else {
                if(preg_match('/'.$RegEx.'/i', ' '.$SpeechInput.' ')) {
                    IPS_LogMessage("Sprachsteuerung", '    COMMAND'.$i.' REGEX['.$RegEx.']=true');
                    $code = $element['COMMAND'.$i]['CODE'];
                    $say = $element['COMMAND'.$i]['SAY'];
                    IPS_LogMessage("Sprachsteuerung", '      Execute CODE :'.$code);
               // Script in CODE ausführen...
               eval($code);
               // Variablen in SAY auflösen...
                    eval("\$say = \"$say\";");
                    IPS_LogMessage("Sprachsteuerung", '      SAY : '.$say);
                    $answer = $say;
                } else {
                    IPS_LogMessage("Sprachsteuerung", '    COMMAND'.$i.' REGEX['.$RegEx.']=false');
                }
         }
        }
    }
    if($answer != "") break; // Abbruch da passendes Element aus Config gefunden wurde
}
// Leerer Anwortstring bedeutet nichts passendes gefunden.
if($answer == "") $answer = 'Ich weis nicht was du willst';
IPS_LogMessage("Sprachsteuerung", 'SpeechOutput="'.$answer.'"');
SetValueString($SpeechOutputID, $answer);

?>

Hallo Klaus, das muss ich mir ansehen. Wo kann man denn die aktuelle Version 4.0 (BETA) herbekommen? Finde die nicht. Die JSON Meldungen besagen hier folgendes.

code message meaning
-32700 Parse error Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text.
-32600 Invalid Request The JSON sent is not a valid Request object.
-32601 Method not found The method does not exist / is not available.
-32602 Invalid params Invalid method parameter(s).
-32603 Internal error Internal JSON-RPC error.
-32000 to -32099 Server error Reserved for implementation-defined server-errors.

Die Samsung Gear S lauft ja mit dem Betriebssystem Tizen und nicht mit Android Wear soweit ich informiert bin. Die App gibt es nur für Android Wear und installiert sich automatisch auf dem Wearable Device mit sobald man die App auf dem Hauptgerät installiert mit dem das Wearable Device verknüpft ist.

LG
Thiemo

PS:
Habe soeben übrigens die Version 2.1 der App Haussteuerung auf den Play Store geladen. Sollte in den nächsten Stunden verfügbar sein. Bluetooth Verbesserungen wie angekündigt.

Hallo Thiemo,

die 4.0 ist zur Zeit für die Linux Versionen verfügbar. Ich stelle meine Frage daher zurück bis die 4.0er Version offiziell rauskommt. Vielleicht ist es ja auch noch ein Bug in IPS.

Gruß
Klaus

Hallo Zusammen,

vielleicht hat jemand eine Rat für mich. Die Funktion „DeaktiviereStandby“ funktioniert bei meinem Tablet nicht. Das Skript meldet zwar zurück, dass alles ok ist, aber der Bildschirm wird nicht hell. Die Sprachausgabefunktion geht einwandfrei. Kombiniere ich das Deaktivieren und die Sprachausgabe in einem Sendevorgang, so kommt nur die Sprachausgabe.

...
$in = "";   //nicht löschen!!!
$in .= "DeaktiviereStandby
";
$in .= "Warte 50
";
$in .= "Sage Hallo hier spricht IPS
";
...

Hier das Log vom IPS:

TCP/IP-Verbindung
OK.
Versuche, zu '192.168.0.115' auf Port '2001' zu verbinden ...OK.
HTTP request senden ...OK.
Serverantwort lesen:
Hello from Android, you are #23
Socket schließen ...OK.

Tablet ist ein HANNspree
Android 4.4.2

Irgendwelche Ratschläge?

Gruß
Erich