Android App IPSymconVoice

Hallo Thiemo,

die Schriftgrösse einstellen geht einwandfrei :slight_smile:
Die Akkuüberwchaung habe ich auch mal eingebaut. Geht auch einwandfrei.

Besten Dank
Baldur

Freut mich zu hören. Hoffentlich komme ich die nächsten Tage jetzt dazu wieder weiter zu programmieren.
LG
Thiemo

Habe es hinbekommen, das ich über IPS eine Text 2 Speech über den Socket Server auf dem Handy machen kann…

Kann man das Time OuT, wenn das Gerät nicht erreichbar ist kurzer setzten ?

Und wäre es nicht besser einen Socket Client pro Gerät in IPS Anzulegen nicht besser ?

Wie könnte ich den Socket Server von der APP üder einen Client Socket in IPS ansprechen ?

Hier meine Funktion:

<?
//sprachausgabe ( "Der Postbote ist da !", "danny", "2");



function sprachausgabe ( $text, $geraet, $wiederholungen)
{


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

if ($geraet=="papa") $address = '192.168.0.174';

if ($geraet=="mom") $address = '192.168.0.127';
if ($geraet=="danny") $address = '192.168.0.164';
for ($i = 1; $i <= $wiederholungen ; $i++)
{


//$address = '192.168.0.127';

//hole Status

    //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 dein IP Symcon. Was kann ich für Dich tun
";
    //$in .= "StarteAppnachStandby haussteuerung
";
    //$in .= "SageohneStandby Was kann ich für Dich tun
";
    $in .= "Sage $text 
";
    //$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.

";
}
}
?>

SO ich habe es über einen Client Sockel hinbekommen :smiley:

Hier meine Funktion :

Pro Gerät einen Socket Client Anlegen und die Socket CLient Variableids austauschen :stuck_out_tongue:

<?


$text="Gute Nacht bis morgen";

$erfolg1=sprachausgabe ($text, "mom", "2");
$erfolg2=sprachausgabe ($text, "papa", "2");
$erfolg3=sprachausgabe ($text, "danny", "2");


print "$erfolg1 
 $erfolg2 
 $erfolg3 ";

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

for ($i = 1; $i <= $wiederholungen ; $i++)
{
IPS_SetProperty($socketid,"Open",true);
$socket=@IPS_ApplyChanges($socketid);

if ($socket==1)
{
$in = "";   //nicht löschen!!!
 $in .= "Sage $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;
}

?>

@drapple: Just in time!! Danke schön.

Ich hatte bisher noch keinen Klingeltrafo und hab just heute morgen nach ner Möglichkeit der Alarmierung bei Klingeln nur über IPS gesucht…

Wenn ich jetzt noch eine Funktion „force Lautstärke max“ finde, wäre das perfekt!!
Bis jetzt geben alle Android Geräte im Netz

$text=„Es klingelt an der Nebentür ,DING, DONG,klingelingeling DING, DONG,klingelingelinglongdingdong“;
aus… very funny !!!:stuck_out_tongue:
:loveips:

@Sven TJB

Das freut mich, das du etwas mit meiner Funktion anfangen kannst…

Ich habe auch schon alles mögliche auf die neue Sprachausgabe umgestellt:

  • Alarmmeldung bei schlechter Luft, wenn die Fenster über 30min offen sind…

  • Benachrichtigungen: Wenn es klingelt, wenn die Post da war, wenn Wasch und Spülmaschine fertig ist…

Wäre nur toll, wenn sowas auch mit IOS gehen würde :wink:

An Thiemo: Siehst du eine Möglichkeit, in den Tab eine Option " erzwinge maximale Lautstärke bei Benachrichtigung" einzubauen? Oder wäre das eine Einstellung,die so nichts mit Socket Server in Haussteuerung zu tun hat?

Gibt es eine Möglichkeit, den Socket Server vom Android Smartphone auf über das Mobilfunknetz zu erreichen ?

Gibt es eine Übersicht von den Befehlen, die ich über den Socket auf dem Androidgerät ausführen kann ?

Ich würde gerne das Display ausschalten können :smiley:

Was auch schön wäre, wenn einen Task von Tasker starten könnten :wink:

ich habe nur das gefunden :

//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
// Vibriere NNNN Millisekunden lässt das Android Gerät für NNNNN Millisekunden vibrieren (1000 Millisekunden = 1 Sekunde)
// 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 Das ist ein Test
";
$in .= "SageohneStandby Auch das ist ein Test
";
//$in .= "Sage Ich starte jetzt die App haussteuerung
";
//$in .= "StarteApp haussteuerung
";
//$in .= "Herunterfahren
";
//$in .= "Restart
";
//$in .= "Sage Ich starte jetzt IP-Symcon
";
//$in .= "StarteAppnachStandby ip-symcon
";
//$in .= "Vibriere 3000
";

Hallo,

App Version 2.4.3 bzw. 2.4.3.1 ist unterwegs.

a.) Was ist mit der Frage: "Socket Server vom Android Smartphone über das Mobilfunknetz zu erreichen gemeint???
b.) Display ausschalten geht nicht weil das nur Android SystemApps können aus Sicherheitsgründen. Timeout vom SocketServer sollte auf 2Sek. eingestellt sein in meiner App. Was möglich wäre ist das Display auf geringste Helligkeitsstufe runter zu regeln mit einem Befehl und wieder rauf zu regeln. Es ist aber kein echtes Display ausschalten dann.
c.) Umsetzungen von den Zitaten siehe unten

Folgende Neuerungen gibt es in Version 2.4.3:

  • Jetzt bis zu 10 Smartwatch Schnellzugriffe möglich
  • Smartwatch Schnellzugriffe jetzt als Stackview Widget auf Hauptgerät nutzbar um dort die gleichen Aktionen direkt vom Homescreen aus ausführen zu können
  • Socket Server - Spracheingabe
    Startet die Sprachsteuerung der App am Android Gerät im Hintergrund aber ohne Auslesen der Rückantwort von IP-Symcon)
  • Socket Server - SpracheingabeUndAntwort
    Startet die Sprachsteuerung der App am Android Gerät im Hintergrund inkl. Auslesen und Vorlesen der Rückantwort von IP-Symcon
  • Socket Server - ÖffneUrl
    Öffnet eine URL am Android Gerät (man kann somit auch Skype Anrufe auslösen!!! siehe Beispiel unten im Link)
  • Socket Server - Tasker xxx
    Startet den Tasker Task mit dem Namen xxx (WICHTIG: In Tasker unter Einstellungen -> Versch. -> Externen Zugriff erlauben einstellen!
  • Socket Server - Sage1 XXX
    Liest den Text XXX mit leisester Lautstärke vor
  • Socket Server - Sage2 XXX
    Liest den Text XXX mit geringer Lautstärke vor
  • Socket Server - Sage3 XXX
    Liest den Text XXX mit mittlerer Lautstärke vor
  • Socket Server - Sage4 XXX
    Liest den Text XXX mit lauter Lautstärke vor
  • Socket Server - Sage5 XXX
    Liest den Text XXX mit lautester Laustärke vor

Script ist hier aktualisiert:
Android App IPSymconVoice - Seite 10

Bei Version 2.4.3.1 wurde ein Bug behoben auf der Smartwatch. Wenn ein Schnellzugriff im Bereich von 6-10 gewählt wurde, wurde anstatt des neuen Schnellzugriffes die letzte Aktion ausgeführt.

LG
Thiemo

Danke Danke Danke :smiley:

1000000000x Danke für deine Super tolle App !!!

Und vielen vielen Dank für die Erweiterungen !!!

Zu meiner Frage:
a.) Was ist mit der Frage: "Socket Server vom Android Smartphone über das Mobilfunknetz zu erreichen gemeint???

Ist es möglich, wenn man nicht im Wlan ist, also nur über 3G/LTE eine Internetverbindung hat, auch den den Socket Server (Port 2001) irgendwie zu erreichen (Ohne VPN) ? Ich glaube das wird nicht gehen :confused: Weil man ja keine Portfreigabe quasi machen kann…

Bin auch echt begeistert! Danke Thiemo für die Wollmilchsau- App!!

Jetzt nur noch ne Menge Tipparbeit für die ganzen möglichen Befehle und es flutscht… Sogar die Frau ist begeistert „Wenn das denn immer funktioniert“ ! An KNX hab ich auch schon das meiste angepasst,nur, dass die Rollos immer nur halb runter fahren.

Ah jetzt verstehe ich es. Interessante Frage.

Das hängt vom Provider ab. Mein Telefon Provider in Österreich bietet die Möglichkeit von „Open Internet“. Das ist allerdings ein zusätzliches Sicherheitsrisiko.

Ich habe es jetzt einmal testweise freigeschaltet bei mir und WLAN deaktiviert und danach Handy neugestartet. Somit erreiche ich den SocketServer auch ohne VPN Verbindung von IP-Symcon aus. Allerdings ist das eine dynamische IP-Adresse die vergeben wird da ich jetzt eine neue habe die aber auch so zu pingen ist. Ist halt die Frage wie lange diese besteht. Auch einen Hostnamen gibt es der aber dynamisch vergeben wird mit der IP-Adresse mit drinnen (hier als Beispiel, gibt es so natürlich nicht: 178.999.999.999.wireless.dyn.drei.com)

Wenn es Sinn macht könnte ich es einbauen als zusätzliche Option bei Bedarf, dass dann regelmäßig die aktuelle IP-Adresse an IP-Symcon gesendet wird in eine einstellbare String Variable mit auch einem einstellbaren Intervall. (Verbraucht natürlich dann auch Datentarif und je nachdem wie oft auch Akku). Geht aber natürlich nur wenn man den umgekehrten Weg mit dyndns eingerichtet hat und IP-Symcon so auch immer erreichbar ist ohne VPN. - Ebenfalls ein zusätzliches Sicherheitsrisiko

Schöner wäre es natürlich wenn man das ganze mit Push Nachricht lösen könnte in meiner App und aus dieser Push Nachricht dann 1:1 das gleiche macht was sonst der SocketServer im WLAN leistet, aber soweit ich das sehe geht das nicht ohne einem zentralen Server der managed wer welche Push Nachricht erhalten muss mit Registrierungen usw… damit man das pflegen könnte.
https://developers.google.com/cloud-messaging/gcm
Aber wahrscheinlich müsste ich mich da mal näher einlesen ob es nicht möglich wäre IP-Symcon hier als Server einsetzen zu können mit Server API Key und Sender ID und trotzdem individuell nur die eigenen Geräte anzusteuern. Schließlich sollen ja nicht alle Geräte auch von fremden Personen die meine App installiert haben dann eine Push Nachricht erhalten :smiley:

LG
Thiemo

PS: Was ich gerade festgestellt habe, wenn das Handy länger aus ist (Sony Xperia Z3 Compact), dann ist auch das Gerät nicht mehr pingbar und auch der SocketServer nicht nutzbar. Ich glaube das liegt an dem besonderen Stamina Modus von Sony den ich aktiviert habe um die Akku Laufzeit zu verlängern, obwohl ich meine App in der Ausnahmeliste habe.

Oh :eek: In Österreich seit Ihr viel weiter als in Deutschland :rolleyes: Wir können sowas nicht dazu buchen :confused:

Aber spar dir deine kostbare Zeit, das war nur eine generelle Frage… braucht man nicht :cool:

Aber vielen Dank für deine ausführliche Erklärung :slight_smile:

In Deutschland funktioniert das nicht. Man kann nicht über das Internet auf z.B. ein Handy zugreifen. Die Provider routen nur vom Endgerät ins Internet, aber nicht andersrum. Wenn man mit UMTS an der FritzBox als Backup arbeitet, kann man da auch lustige Dinge erleben…da braucht es dann einen anderen APN und selbst dann gibt es je nach Anbieter noch Routingprobleme :rolleyes:

Also spar dir das Feature, das wird in Deutschland in den nächsten 50 Jahren nichts :smiley:

Grüße,
Chris

Hi Thiemo.
Gibt es eigentlich irgendwo eine zusammen hängende Doku für die ganzen Funktionen bzw. die Voraussetzungen innerhalb von IPS ?Hab grad alle hinteren Posts durchforstet,um das Skript für das Tracking zu finden…

Hi Sven,

Ich versuche auf der aller ersten Seite im ersten Posting alles zusammen zu halten. Wenn Du dort unter Features die Links anklickst, solltest Du entsprechend gleich immer auf den konkreten Beitrag kommen. Ich wollte ja eigentlich auch einmal eine Video Reihe starten, dazu fehlt mir allerdings leider momentan die Zeit.

LG
Thiemo

Auch von mir ein Lob super gemacht.

ich habe auch schon das Script etwas an meine Bedürfnisse angepasst.
Da ich eine Wago SPS im Einsatz habe und meine Verbraucher per Taster angeschlossen habe, muss ich ein Script zum schalten ansteuern, klappt aber wunderbar.

DANKE:D

Hallo Thiemo,

auch von den IPS-Team vielen Dank für deine Arbeit!

Soweit klappt alles gut - jedoch habe ich ein Problem mit meiner Smartwatch:
Die Schnellzugriffe funktionieren einwandfrei aber die Spracherkennung nur bei eingeschaltetem Display des Telefons.
Hast du vielleicht eine Idee?

MST

Hallo nochmal, ich hab ein komisches Phänomen.

Ich habe das Script erweitert um einen Stromzähler abzufragen.

"Strom" => array("Typ" => "Verbrauch", "Variable" => 13052 , "Aussprache" => "Der aktuelle Verbrauch ist" ),
"Strom1" => array("Typ" => "Zählerstand", "Variable" => 51994 , "Aussprache" => "Der aktuelle Zählerstand ist" ),
.
.
.
 case (preg_match("/verbrauch|leistung|watt/i", $input) ? true : false) :
              $typ = "Verbrauch";
              break;
 case (preg_match("/zählerstand|zähler|stand/i", $input) ? true : false) :
              $typ = "Zählerstand";
              break;
.
.
.
.

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


Es klappt die Variable wird gefüllt. Jedoch liest mir das Programm nur die Aussprache vor danach nix mehr.

Hat jemand eine Idee.

Des weiteren habe ich das Problem wenn ich ein Float lese bekomme ich zb. 14.325 °C als 14 Tausend 325 Grad Celsius gesagt.

Danke.