Android App IPSymconVoice

Kennt sich wer mit LCN hier aus?

Für die SetValueUniversal Funktion habe ich mal folgendes drinnen:

case "LCN Unit":
                  if($VariableType == 0) return LCN_SwitchRelay($ParentID, $Value);
                  break;

Ich verstehe folgendes nicht:
Unterschied bei LCN zwischen dem LCN_SwitchRelay und LCN_SwitchMode und LCN_SwitchMemory

Kann man irgendwie Abfragen welcher von den 3 zu wählen ist?

Danke
LG
Thiemo

Die 3 verschiedenen Möglichkeiten des LCN ;).

Ohne dimmen musst du zwischen Relais und Ausgängen unterscheiden.

Ich vermute mal wie folgt, habe es aber nicht getestet.

  • [li]LCN_SwitchRelay[/li]ist ja eigentlich klar, schaltet ein Relais um

    [li] LCN_SwitchMode[/li]schaltet einen (Dimmer-)Ausgang um, mit entsprechender Rampe

    [li]LCN_SwitchMemory[/li]schaltet einen (Dimmer-)Ausgang um und merkt sich die Helligkeit

Mein „Universal Script“, zu der Zeit gab es noch nicht alle oben beschriebenen Kommandos.

<?
// Skript mit einem Button/ExecImage verknüpfen (OnClick) und die InstanzID in die SYMID eintragen

 $id = (int)$_IPS['COMPONENT'];
 if(LCN_GetUnit($id) == 0)
 {
     $current = IPS_GetObjectIDByIdent('Intensity', $id);
     $current = GetValue($current);
     if($current == 0)
     {
      $current = 100;
     } else {
      $current = 0;
     }
     LCN_SetIntensity($id, $current, 3);
 } else {
     $current = IPS_GetObjectIDByIdent('Status', $id);
     $current = !GetValue($current);

     LCN_SwitchRelay($id, $current);
 }

?>

Hi Thiemo,

tolles App … und cool das du da viel Zeit Investierst.
Bin heute erstmal dazu gekommen das auszuprobieren.

Ich steig allerdings nicht durch ( auch nach mehrmaligen Lesen dieses Threads ) wie ich z.b. ein einfaches Scipt starten kann.
Wäre es möglich das du das kurz in einem Video darstellst wie man z.b. eine einfache Bool Variable von True auf False schalten kann.

LG
Flobo

Werde bei Gelegenheit in den nächsten Tagen ein Video machen bzgl. der App Konfiguration mit IP Symcon.

Hallo,

eine neue Version 2.3.1 ist unterwegs.

Neu ist jetzt der Webfront Support. Man kann den Button „Zeige Webfront“ am Homescreen der App entsprechend ausblenden über die App Einstellungen wenn man das Feature nicht nutzen will. Ansonsten nach dem Klicken auf den Button wird das Webfront im Vollbildschirm dargestellt!

Folgende Informationen bzgl. Webfront.
a.) Es funktioniert derzeit nur wenn man in IP-Symcon im WebFront Configurator unter Darstellung den Skin „Standard“ einstellt
Standard_Skin.jpg
b.) Unter Sicherheit kann man bei Bedarf bei Erfordere Passwort die Option "Erfordere Passwort nur bei externem Zugriff (Internet) auswählen um nicht jedes Mal das Passwort eingeben zu müssen. Da es sich hier um eine WebView handelt und die Authentifizierung speziell gemacht wird kann ich es nicht per App mit übergeben aus Einstellungen
Sicherheit_Einstellung.jpg
c.) Bei dem Uhrzeit Widget im WebFront von IP-Symcon empfiehlt sich das Datumsformat „Kurz“ und Zeitformat „Kurz“ einzustellen wenn man es am Handy nutzen will


d.) Ebenso ist es von Vorteil bei Handy Nutzung das Root Element in IP-Symcon im WebFront mit einem möglichst kurzen Untertitel zu hinterlegen (z.B: nur IPS)

Die beiden Buttons in meiner App (Zurück und Spracherkennung) während der Anzeige des Webfronts lassen sich per Drag&Drop entsprechend verschieben um nicht hinderlich zu sein für auslösende Klicks. Dazu einfach lange auf den Button drücken und drückt gehalten und dann an eine andere Position verschieben und dort auslassen.
In einer Version 2.3.2 werde ich es noch so einbauen, dass die Position gemerkt wird und nicht jedes Mal neu eingestellt werden muss.

Roadmap für weitere Features:

  • Version 2.3.2: obiger Punkt und Vorbereitungen für Android 6.0
  • Version 2.3.3: Bessere Möglichkeiten bzgl. Standorttracking in Verbindung mit WLAN Ein-/Austritt
  • Version 2.4: Möglichkeit der permanenten offline Spracherkennung mit Schlüsselwort offline;
  • Version 3.0: Android TV Support

LG
Thiemo

Hallo,

habe soeben die Version 2.3.1.1 hochgeladen

  • Webfront Anzeige ist jetzt 100% komplett Fullscreen (Softwarebuttons werden ausgeblendet, durch kurzes Wischen von unten nach oben oder oben nach unten werden die Softwarebuttons kurzfristig ein paar Sekunden eingeblendet)
  • Die eigenen halbtransparenten Buttons Zurück und Spracherkennung können jetzt verschoben werden und die Position wird gemerkt. Also wenn man Webfront schließt und wieder öffnet werden die Buttons wieder an der gleichen Stelle angezeigt bei denen diese vor dem Beenden waren
  • Die Spracherkennung im Webfront führte noch zum Beenden der App. Dieser Bug ist jetzt behoben.
  • Erste Vorbereitungen für Android 6.0 wurden getroffen. Der Support für Android Version 4.1 ist allerdings jetzt nicht mehr gegeben da ich bzgl. Webfront Funktionen nutze die erst ab Android Version 4.2 eingeführt wurden.

Ich überlege noch für die Version 2.3.2 meiner App Haussteuerung in den Einstellungen der App die Möglichkeit zu schaffen den Zurück Button und Spracherkennungsbutton ausblenden zu lassen wenn Bedarf besteht und man diese Funktion so nicht nutzen will.

LG
Thiemo

Hallo Thiemo,

da ich ja nun auch ins Handy sprechend mit den Ding durchs Haus laufe sehne ich Version 2.4 herbei um dann an “strategischen“ Punkten Devices an die wand zu schrauben :slight_smile:

Die App ist echt genial, nach Wort so.

Gruß Cubus

Hey, echt klasse die App in Verbindung mit NVIDIA Shield TV und Kodi. Einfach in die Fernbedienung oder den Controller sprechen. Super!
Unter Kodi ein Menü mit Verknüpfung auf die App angelegt :+1:t2:

Hallo,

Version 2.3.2 der App „Haussteuerung“ ist unterwegs mit der Offline Spracherkennung. Habe das vorgezogen vor dem Thema Location Tracking WLAN. Da Google selbst da ja nichts vernünftiges anbietet wurde CMUSphinx/Pocketsphinx integriert. Dadurch wächst die App allerdings von rund 5MB auf 25MB da die Offline Spracherkennungslibrary und das Wörterbuch mit integriert wird (auf Deutsch und Englisch).

Hier sind die deutschen Wörter die man als Schlüsselwörter einstellen kann (egal bzgl. Klein-/Großschreibung) wobei sich nach 2 Wochen Tests nicht alle gleich gut eignen. Man kann auch 2 oder mehr Wörter einstellen in der App wobei die Erkennungsrate nicht immer 100% zufriedenstellend ist bei mehreren Wörtern. Ich verwende derzeit als Schlüsselwort nur „Computer“ mit Schwellwert „37“.
https://dl.dropboxusercontent.com/u/32562665/cmudict-de-de.txt

Bzgl. den Einstellungen die im Reiter „Sprechen“ mit dem Mikrofonsymbol zu finden sind:

[ul]
[li]Offline Spracherkennung: Hier schaltet man die Offline Spracherkennung ein bzw. aus. ACHTUNG: Es kann 10-15 Sekunden dauern (bei ganz alten Devices auch 30 Sekunden) bis die Offline Spracherkennung gestartet ist. Es wird mit einem kurzen einblenden einer Nachricht angezeigt. ACHTUNG: Nachdem die Nachricht eingeblendet wurde kann es nochmal die gleiche Zeit dauern bis die Erkennung tatsächlich funktioniert. Damit Änderungen der Einstellungen von unten wirksam werden muss die Offline Spracherkennung gestoppt und gestartet werden.[/li]
[li]Schlüsselwort Offlineerk.: Hier wird das oder die Schlüsselwörter eingetragen. Eine Liste siehe oben im Link.[/li]
[li]Schwellwert Off.erk.: je niedriger der Wert desto exakter muss man sprechen, aber dafür gibt es auch weniger oder gar keine Falscherkennungen. Je höher der Wert ist desto ungenauer muss man sprechen allerdings steigen dort die Falscherkennungen. Es ist ein wenig ein probieren notwendig da [/li]
[li]Start Offlineerk. Booten: Hiermit kann man es so einstellen, dass die Offline Spracherkennung bereits mit gestartet wird wenn das Android Gerät neu gebootet wird[/li]
[li]Off.erk. nur Display an: Diese Einstellung bedeutet wenn aktiviert, dass die Offline Spracherkennung nur stattfindet wenn das Display bereits angeschaltet ist. Ich verwende das bei mir im Tablet im Vorzimmer bei dem durch einen Bewegungsmelder das Display sowieso eingeschaltet wird und ich somit Akku sparen kann wenn die Offline Spracherkennung nur stattfindet wenn das Display angeschaltet ist.[/li]
[li]Off.erk. schalte Display: Diese Einstellung bedeutet wenn aktiviert, dass bei Erkennung des Schlüsselwortes(-wörter) der Offline Spracherkennung auch das Display mit eingeschaltet wird.[/li][/ul]

ACHTUNG: Generell wenn das Schlüsselwort erkannt wurde und der Piepston kommt, nochmal so ca. 3 Sek warten bevor man zu Sprechen beginnt. Ansonsten wird der Anfang entsprechend „verschluckt“ und nur ein Teil an IP-Symcon übertragen

LG
Thiemo

Hallo Thiemo,

lang ersehnt, endlich ist es da :slight_smile:
Habe mal getestet, allerdings trotz unterschiedlicher Einstellungen nur zwei Glückstreffer gelandet. Lässt sich auch mit dem gleichen Befehl nicht wiederholen.

Kannst du mir verraten wie du die Sache mit dem Bewegungsmelder gelöst hast? Habe auch sowas vor.

LG
Cubus

Das mit dem Bewegungsmelder habe ich so gelöst.

Habe einen Homematic Bewegungsmelder.

In meiner App auf dem Tablet habe ich den SocketServer gestartet.

Das Script „AktiviereTablet“ schaut so aus:


<?

/* Den Port vom Android Device. Default 2001. Kann in der App Haussteuerung verändert werden! */
$service_port = 2001;

/* Die  IP-Adresse des Zielrechners ermitteln. */
//$address = gethostbyname('android-6f94f5f5290b2696.home');
//oder so fix setzen bei Static IP
$address = '10.0.0.44';

//hole Status
$status = GetValueBoolean(30824 /*[BM Vorzimmer oben\MOTION]*/);

if ($status == true) {
	//Befehle für Android Gerät (je nach Bedarf Zeilen deaktivieren/verändern)
	// $in = ""; als erste Zeile immer stehen lassen
	// DeaktiviereStandby          Schaltet das Display ein, ein Lcokscreen/PIN/etc... wird aber nicht übergangen!!!
	// SagenachStandby XXX         wird nur ausgefüht wenn das Android Gerät im Standby Modus war und der Bildschirm aktiviert wurde
	// SageohneStandby XXX         wird nur ausgefüht wenn das Android Gerät nicht im Standby Modus ist, also der Bildschirm schon sichtbar ist
	// Sage XXX                    einfach nach Sage einen Text konfigurieren der dann immer ausgegeben wird am Android Gerät im Hintergrund; Egoal ob Display im Standbymodus ist oder nicht!
	// Warte NNNN Millisekunden    1000 Millisekunden = 1 Sekunde (Während Wartezeit wird ein transparenter Screen angezeigt wenn das Device an ist!)
	// StarteApp XXX               (App Name immer in Kleinbuchstaben, vorhergehendes Warte hat hier keine Auswirkung!!!)
	// StarteAppnachStandby        (App Name wird nur gestartet wenn das Android Gerät im Standby Modus war und der Bildschirm aktiviert wurde
	// Herunterfahren              (benötigt ein Android Gerät mit root Rechten und der App Zugriff auf Superuser Rechte (rooted device))
	// Restart                     (benötigt ein Android Gerät mit root Rechten und der App Zugriff auf Superuser Rechte (rooted device))
	// WICHTIG immer mit 
 abschließen und $in mit .= erweitern!!!
	$in = "";   //nicht löschen!!!
	$in .= "DeaktiviereStandby
";
	$in .= "Warte 50
";
	//$in .= "SagenachStandby Hallo hier spricht Susi. Was kann ich für Dich tun
";
	//$in .= "StarteAppnachStandby haussteuerung
";
	//$in .= "SageohneStandby Was kann ich für Dich tun
";
	//$in .= "Sage Ich starte jetzt die App haussteuerung
";
	//$in .= "Herunterfahren
";
	//$in .= "Restart
";
	//$in .= "Sage Ich starte jetzt IP-Symcon
";
	//$in .= "StarteApp ip-symcon
";


	//ab hier jetzt nichts mehr verändern!!!
	$in .= "
";
	$in = mb_convert_encoding($in, "UTF-8");
	error_reporting(E_ALL);

	echo "<h2>TCP/IP-Verbindung</h2>
";

	/* Einen TCP/IP-Socket erzeugen. */
	$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
	if ($socket === false) {
	    echo "socket_create() fehlgeschlagen: Grund: " . socket_strerror(socket_last_error()) . "
";
	} else {
	    echo "OK.
";
	}

	echo "Versuche, zu '$address' auf Port '$service_port' zu verbinden ...";
	$result = socket_connect($socket, $address, $service_port);
	if ($result === false) {
	    echo "socket_connect() fehlgeschlagen.
Grund: ($result) " . socket_strerror(socket_last_error($socket)) . "
";
	} else {
	    echo "OK.
";
	}

	$out = '';

	echo "HTTP request senden ...";
	socket_write($socket, $in, strlen($in));
	echo "OK.
";

	echo "Serverantwort lesen:
";
	while ($out = socket_read($socket, 2048)) {
	    echo $out;
	}

	echo "
Socket schließen ...";
	socket_close($socket);
	echo "OK.

";
}

?>

Wie gesagt bzgl. Spracherkennung funktioniert bei mir das Wort Computer mit einem Schwellwert nahe 37 recht gut. Man muss allerdings dazu sagen dass ich einen Österreichischen Akzent habe (Oberösterreich) und es somit eventuell Zufall ist dass bei mir Computer so gut geht. Wenn es mit Deutsch überhaupt nicht ordentlich klappt könnte ich überlegen generell nur Englisch zuzulassen als Schlüsselwörter da ja Computer auch ein Englischer Begriff ist. Du könntest ja mal versuchen die Spracheinstellung in der App auf Englisch zu stellen und dann schauen ob die Erkennungsrate besser wird bei Dir wenn Du englische Schlüsselwörter verwendest. Allerdings ist dann auch die Google Spracherkennung auf Englisch sobald die Sprache in der App auf Englisch gestellt wird und wenn ich sage als Test nachdem das Schlüsselwort erkannt wurde „Wie spät ist es“, dann kommt in IP-Symcon an „we speed is this“ :smiley:

LG
Thiemo

Ja ich hatte auch schon lustige Übersetzungen :slight_smile: . Computer versteht er immer, da das Display angeht. Die folgenden Sätze allerdings nicht, bzw. nur sehr, sehr selten. Habe es mit hohen und niedrigen Erkennungswerten versucht, auch auf englisch. Leider ohne Erfolg. Werde es mal auf einen anderen Device probieren. Wie hast du deinen Lockscreen eingestellt? Bei mir kann ich per Wischgeste entsperren, hat es vielleicht damit zu tun?

LG
Cubus

Im kodi kommt bei mir “keine Treffer für ihre Suche in unserem Katalog“ obwohl er den Text exakt versteht und mir drei Vorschläge macht, wenn ich dann einen auswähle kommt die Meldung.

Grüße
Cubus

Meinst Du hiermit nachdem das Display angeht und das Keyword bereits erkannt wurde? Hier verwende ich dann weiter ganz normal die Google Spracherkennung. Entweder Online wenn eine Verbindung ins Internet besteht oder sonst die Offline Spracherkennung von Google. Hier wird nicht weiter über PocketShpinx die Erkennung gemacht da dort der Wortschatz stark begrenzt ist. Wobei ich sagen muss, dass die Offline Spracherkennung von Google auch nicht das gelbe vom Ei ist. Für die Google Offline Spracherkennung muss man allerdings auch Dateien herunterladen.

Bei mir:
Android 4.4.4: nichts gefunden für Offline Spracherkennung von Google um die Datei herunterzuladen

Android 5.1.1: Einstellungen -> Sprache & Eingabe -> Spracheingabe --> Verbesserte Google-Dienste aktivieren und auf Einstellungssymbol
Dann auf Offline-Spracherkennung --> Deutsch(Deutschland) muss installiert sein (wenn nicht unter Alle gehen und installieren)

Und ich habe auch eine Wischgeste zum entsperren auf dem Handy mit 5.1.1. Auf dem Tablet an der Wand nichts zum entsperren eingestellt (Cyanogenmod). Bei meinem Testhandy auch eine Wischgeste.

LG
Thiemo

Hallo Thiemo,

es ist so. Mit „Computer“ geht das Display an und der Lockscreen erscheint. Die Anweisung wird aber nicht umgesetzt. wenn ich im WebFront in der Ausgabedatei nachsehe was IPSymconVoice verstanden hat stehen da ganz komische Dinge:confused:. Online ist das Handy (Android 5.1) immer.

Liebe Grüße

Cubus

Das ist gut. Denn das ist der Part von PocketSphinx mit der Offlinespracherkennung und dem Schlüsselwort

Das verstehe ich nicht weil ich hier nichts anderes mache als sonst bei meiner App Haussteuerung. Bei Dir funktioniert es aber normal wenn Du in der App auf Sprachsteuerung klickst oder? Denn ich mache hier nichts anderes nachden das Schlüsselwort Computer erkannt wurde und das Display an geht. Pocketsphinx wird hier pausiert damit dann die normale Google Spracherkennung genutzt wird mit Senden/Empfangen an IP-Symcon und dann wird Pocketsphinx Offline Erkennung fortgesetzt.

Bei mir funktioniert es ohne Probleme auf Samsung Galaxy S1, Asus TF300T, Sony Xperiza Z3 Compact

LG
Thiemo

Hallo Thiemo,

wird es die Tage mal auf Huawei und Galaxy Tabs testen. Melde mich dann.

Gruß

Bruno

So, gestern Abend nochmal mit Handy probiert. Nun habe ich mal etwas länger zwischen „Computer“ und der Spracheingabe gewartet, das hat den Durchbruch gebracht, scheinbar habe ich zu schnell gesprochen und die Google Spracherkennung hat nur noch die Hälfte mitbekommen. Ich nutze Schwellenwert 40 und hatte den Eindruck, dass man sich etwas herantasten muß wie die Engine einen versteht.

@ Thiemo, hast du Erfahrungen gemacht bis auf welche Entfernung das so klappt? Unser Wohn-/Ess-/Kochbereich ist ein großer Raum 80qm und mehrere Tablets an der wand machen wahrscheinlich auch keinen Sinn, da sonst evtl. zwei den gleichen Befehl ausführen. Noch eine Frage. Mit welcher Schnittstelle kann ich denn ins IPS wenn ich den Homematik Bewegungsmelder benutzen will?

Gruß
Bruno

Hallo Bruno,

bzgl. Entfernung funktioniert es bei meinem Tablet nicht recht weit (bei Tests ca. 0,5-1Meter). Bzgl. Homematik Bewegungsmelder brauchst Du eine CCU oder CCU2 oder ein LanGateway um damit ins IPS zu kommen.

LG
Thiemo

Hallo,

Version 2.3.2.1 ist unterwegs mit einem Bugfix bzgl. IP Symcon 4.0 Version (Parse Error -32700)
Details siehe hier https://www.symcon.de/forum/threads/29371-android-json-code-32700-mit-4-0

LG
Thiemo