Android App IPSymconVoice

Moin!

Probier es mal so:

$zustand = GetValueFloat($variablea);
$tsay .= $aussprache." ".$zustand." KWh";

Und dann probier mal den „.“ durch ein „,“ zu ersetzen, dann sollte er lesen „vierzehn komma drei zwei fünf“.

Wenn du noch Probleme hast, kannst du ja mal mit „var_dump($variable);“ dir ausgeben lassen was in der Variable steht. Sollte ja dann ein String sein und kein Float.

Steht in $zustand überhaupt etwas drin? Vielleicht einfach nur eine falsche ID eingetragen oder so von der Variable?

Grüße,
Chris

Guten Morgen Bayaro,

meine Variablen Luftfeuchtigkeit und Temperatur sowie kwh sind Float Werte.

und ja es sind die richtigen ID`s in der App sowie in der SendVariable ist der Wert zu sehen er wird nur nicht vorgelesen bzw bei denen wo gelesen wird ist mein Float halt Tausende grad…

z.b. frage ich wie ist der Stromzähler stand. Kommt die Antwort als Text. „Der aktuelle Zählerstand ist 9895.556 kWh“

Google liest aber vor. "Der aktuelle Zählerstand ist " und lässt einfach den „$zustand kWh“ weg. Muss ich vielleicht den Float Wert erst in einen String konvertieren damit die App das lesen kann ?

Wenn du es so machst, wie ich es geschrieben hab, dann sollte da automatisch ein String draus werden. Und deshalb hab ich auch das mit „var_dump…“ geschrieben, da siehst du dann auch in welchem „Format“ was ist. Einfach mal probieren was ich geschrieben hab und dann nochmal melden :slight_smile:
Oft bringt es nur wenig bis nichts, wenn man sich die Finger wund schreibt…lieber mal ein wenig probiert und damit kommt man schneller ans Ziel und lernt auch was dabei :wink:

Grüße,
Chris

Vielen Dank.

Ich habe nun alles so wie beschrieben umgesetzt.

Allerdings kommt die Sprachausgabe immer noch nicht komplett.

zb. frage ich wie ist der Stromzähler stand. Kommt die Antwort als Text. „Der aktuelle Zählerstand ist 9895,556 KWh“

Google spricht aber nur bis. "Der aktuelle Zählerstand ist " und lässt einfach „9895,556 KWh“ weg.

Was gibt das Skript denn aus, wenn du es damit laufen lässt:

case "Zählerstand" :
                              $zustand = GetValueFloat($variablea);
                              var_dump($zustand);
                              $tsay .= " $aussprache $zustand KWh";
                              var_dump($tsay);
                              break;

Und was passiert, wenn du es zum Test mal damit laufen lässt:

case "Zählerstand" :
                              $zustand = GetValueFloat($variablea);
                              $tsay = "Der aktuelle Zählerstand ist 9895,556 KWh";
                              break;

Die Ausgabe vom 1. Test bitte mal hier posten.

Grüße,
Chris

26.02.2016 12:08:33*| ExecuteThreadID #10*| [Benutzer Instanzen\Sprachsteuerung\AndroidVoice] = --------------Input - Variable -----------
wie ist der strom zählerstand

-----------Input - ausgewertet -----------
Typ: Zählerstand
Aktion: frage
Raum: Strom
Detail:
Richtung:
Art:
Zahl: 1

Variable: 58561
Continue1: 1
Continue2: 1
float(9917.256)
string(45) " Der aktuelle Zählerstand lautet 9917.256 KWh"
------------------Output------------------
Der aktuelle Zählerstand lautet 9917.256 KWh
Script Laufzeit 0.00099992752075195 Sekunden

Hmmm…also der String wird korrekt geschrieben wie du siehst

string(45) " Der aktuelle Zählerstand lautet 9917.256 KWh"

Hat er beim 2. Skript, wo alles schon im String steht, alles vorgelesen?

-Chris-

Moin.
Ich bräuchte mal nen Tipp von Euch.

Ich habe im Wohn-Esszimmerbereich 2 Lampengruppen, die ich über KNX schalte.
Ein kurzer Tastendruck beschreibt eine BoolVariable und ein Skript wertet diese aus.
Dadurch wird von einer Gruppe (2Lampen) auf die zweite oder auf „Beide Gruppen an“ umgeschaltet.

Wenn ich jetzt länger drücke, wird EINE ANDERE Variable beschrieben und durch das selbe Skript zum Ausschalten ausgewertet.

Das UMschalten (kurzer Druck) krieg ich per Sprache jetzt hin, aber wie formuliere ich in Androidvoice den Befehl, um die Lampen AUS zuschalten?

Im Androidvoice steht für das UMschalten folgendes;

//Balkenlichter
"Balken1" => array("Typ" => "Licht", "Variable" =>29265,"Aussprache" => "Die Balkenlampen sind" ),

Hier wird ja nur das „schalten“ ausgewertet aber „ein“ oder „aus“ geht ja mit dieser Variable nicht… Jemand ne Idee??

Welche Smartwatch hast Du? Benutzt Du eine Bluetooth oder WLAN Kopplung? Funktioniert die Spracherkennung von Android selber noch auch bei ausgeschaltetem Display des Telefons, also wird das gesprochene nach der Spracherknnung noch angezeigt in der App auf dem Smartwatch?
Ich habe bei meiner Sony Smartwatch 3 keine Probleme in dieser Hinsicht (gekoppelt mittels Bluetooth)

Ich habe auch die Sony SmartWatch 3 und benutze Bluetooth und WLAN Kopplung.
Bei „Jetzt sprechen“ kommt immer „Verbindung zum Telefon nicht möglich“ - „Schnellzugriff“ funktioniert.

MST

Hallo Chris,

nei wenn ich im den Text vorgebe liest sie nur bis „Der aktuelle Zählerstand ist“ dann nix mehr .

Lasse ich die Zahl weg liest sie auch kwh. Schreibe ich ein Zahl rein nicht mehr.

Hallo Jens,

ist bei mir auch so. Das scheint ein Bug von der Android Google Sprachausgabe zu sein mit dem KWh hinten

$tsay = "Der aktuelle Zählerstand lautet 9917.256 KWh";

Habe testweise einfach obiges fix eingetragen und die Zahl inkl. KWh wird nicht ausgegeben.

So auch nicht:

$tsay = "Der aktuelle Zählerstand lautet 9917.256 KWh";
$tsay = str_replace(".", ",", $tsay);

Auch nicht wenn ich auf 2 Nachkommastellen reduziere. Oder eine ganze Zahl verwende.

Mache ich es aber folgendermaßen ohne KWh dann klappt es:

$tsay = "Der aktuelle Zählerstand lautet 9917.256";
$tsay = str_replace(".", ",", $tsay);

Schreibe ich kwh klein, dann klappt es auch :slight_smile:

$tsay = "Der aktuelle Zählerstand lautet 9917.256 kwh";
$tsay = str_replace(".", ",", $tsay);

Schreibe ich das K groß und den rest klein, dann klappt es auch :slight_smile:

$tsay = "Der aktuelle Zählerstand lautet 9917.256 Kwh";
$tsay = str_replace(".", ",", $tsay);

Das ist sehr eigenartig. Das scheint irgendwie an deinem Handy zu liegen. Geht bei Dir die normale Spracheingabe am Handy? Wenn Du zB: die Google Suchleiste per Sprache verwendest?

Denn vom Coding her in der App mache ich da nichts besonderes. So wird in Java der Spracheingabe Dialog gestartet:

    private void displaySpeechRecognizer() {
        statusOnCreate=0;
        Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    // Start the activity, the intent will be populated with the speech text
        intent.putExtra(RecognizerIntent.EXTRA_PROMPT, getString(R.string.voice_input_prompt));
        startActivityForResult(intent, SPEECH_REQUEST_CODE);
    }

Hi.

Ich möchte das Skript mit den Sprachausgabebefehlen von anderen Skripten aus aufrufen, also inkluden…

Dazu habe ich in einem anderen Skript

include(IPS_GetScriptFile(29869 /*[Eigene Skripte usw\TTS_Handyfunktionen]*/ ));

eingegeben und versuche über

sprachausgabe($Text,"HTC_alt");

eine Ausgabe von hier aus zu erreichen… Dabei schmiert das Skript ständig ab…
In $Text steht "blaba
"…
Im eigentlichen TTS Skript hab ich das ganze als Funktion umgebaut;

function sprachausgabe ($befehl,$geraet)

also später;

$in = "";   //nicht löschen!!!

$in .= $befehl ; 

Was mache ich falsch??

So habe meine Funktion für Sprachausgabe nochmal verfeinert :eek:

Habe eine Pingabfrage davorgesetzt, das der Socket nicht ins leere läuft…

function sprachausgabe ($text, $geraet, $wiederholungen)
{
if ($geraet=="mom") $socketid=12441 /*[Android TabletClient Socket]*/;
if ($geraet=="papa") $socketid=16874 /*[Android papa Client Socket]*/;
if ($geraet=="danny") $socketid=24159 /*[Android danny Client Socket]*/;
if ($geraet=="klingel") $socketid=37259 /*[Android klingel Client Socket]*/;

if ($geraet=="mom") $address = '192.168.0.120';
if ($geraet=="papa") $address = '192.168.0.174';
if ($geraet=="danny") $address = '192.168.0.164';
if ($geraet=="klingel") $address = '192.168.0.136';

$ping=Sys_Ping($address,1000);

if ($ping==1)
{
IPS_SetProperty($socketid,"Open",true);
$socket=@IPS_ApplyChanges($socketid);

if ($socket==1)
{
$in = "";   //nicht löschen!!!
for ($i = 1; $i <= $wiederholungen ; $i++)
{
 $in .= "Sage5 $text
";
}
  $in .= "
";
    $in = mb_convert_encoding($in, "UTF-8");
    error_reporting(E_ALL);

CSCK_SendText($socketid, $in);
IPS_SetProperty($socketid,"Open","false");
IPS_ApplyChanges($socketid);
}
else $socket="Fehler, es konnte keine Verbundung aufgebaut werden :-(";

return $socket;
}
else
{
$betreff="ihome";
$meldung="Sprachausgabe konnte nichte auf $geraet ausgegeben werden !";

WFC_PushNotification(26356 /*[Objekt #26356 existiert nicht]*/   , $betreff, $meldung, "Speaker", 0) ;
}
}

Feine Sache deine Funktion :slight_smile:

Übrigens unter IP Symcon 4.0 musste ich folgenden Befehl (auch bei meinen anderen Scripten aus dem Thread für den Socketserver) rausnehmen damit die Umlaute usw… funktionieren. Das habe ich auch bei meinen anderen Scripten hier aus dem Thread jetzt so angepasst.

Vorher:

$in = mb_convert_encoding($in, "UTF-8"); 

Nachher:

$version = IPS_GetKernelVersion();
if ($version < "4.00") {
   $in = mb_convert_encoding($in, "UTF-8");
}

Hi thiemo.

Ich habe jetzt die letzten zwei Tage vergeblich versucht, mein altes Handy als Bewegungsmelder einzusetzen. Dafür möchte ich per terremote eine meldung an ips…

Deine App schickt ja offensichtlich schon zu ips(und funktioniert bei mir)… Wäre es da moglich , eine Funktion zu implementieren um die App eine Meldung bei events von anderen Apps(zBTasker) senden zu lassen?

Somit würde man deine Wollmilchsau auch noch eierlegend machen…

Ich weiß zwar nicht wie, aber du kannst mit Tasker direkt über die JSon Schnittstelle mit Ips sprechen

Ich habe ein blödes Problem mit einem Android 4.4 Tablet:

Nach x Stunden schließt sich der Socket von der Haussteuerungsapp :eek: und in der APP steht aber das er eingeschaltet ist…

Ich stoppe den Socket, starte ihn wieder und dann läuft er wieder ein paar Stunden :confused:

Es handelt sich um ein Huawai MediaPad T1 10" mit Android 4.4

Energiesparfunktionen sind aus, die App läuft auch im Hintergrund weiter…

Ich weis nicht woran es liegen könnte…:banghead:

Auf meinem Samsung S3 mit Android 4.4 habe ich das Problem nicht, das läuft seit 2 Wochen einwandfrei

Das muss ich mir mal genauer anschauen … Der Status besagt eigentlich nur dass der Service lauft, denn der SocketServer lauft in einem eigenen Thread und wird vom Service überwacht. Eventuell funktioniert da was nicht mit der Selbstüberwachung damit er bei Bedarf automatisch neu gestartet wird.

Version 2.4.4 der App ist unterwegs:

  • Neu: Zu Material Design gewechselt (noch nicht alle Bereiche 100% umgestellt)
  • Bugfix: Auswahl Dialog funktioniert jetzt unter Android 6
  • Bugfix: SSL Zertifikatsabfrage

Bzgl. Zertifikatsabfrage:
a.) Ich bin von Google angeschrieben worden dass meine App bzgl. dem aufrufen des Webfronts mit dem SSL Zertifikat eine Sicherheitslücke hat weil ich alle Zertifikatsfehler bisher ignoriert habe.
b.) Wenn man das WebFront mit dem IP Symcon Standard Zertifikat benutzt prüfe ich in der App jetzt entsprechend ob das Zertifikat von IP Symcon kommt und lasse es durch.
c.) Wenn ein Zertifikat geblockt wird, dann wird es beim Aufrufen des Webfronts entsprechend angezeigt mit den Informationen zu dem Zertifikat.
d.) Wenn man das Webfront mit einem eigenem Zertifikat benutzt welches generelle Gültigkeit hat (also nicht selbstsigniert ist) und dieses Zertifikat auf das Android Gerät hochlädt sollte man auch keine Probleme haben bzgl. Webfront da es dann als gültig betrachtet wird.
e.) Ansonsten gibt es die neue Einstellung unter „Einstellungen IP-Symcon“ mit bei dem Text „Text Zertifikat Check“ bei dem man entsprechend als Text Filter einen Auszug des eigenen Zertifikats eintragen kann. Desto mehr man dann vom Zertifikat einträgt, desto sicherer ist man unterwegs. Wenn das Zertifikat dem Text Filter entspricht wird das Webfront entsprechend aufgerufen

LG
Thiemo