Spachsteuerung mit Android Alice (AIVC)

Hallo zusammen,

ich habe ein bisschen mit Alice (Sprachsteuerung für Android) herumgespielt und es geschaft eigene Befehle in Alice zu installieren welche IPS steuern. Leider hab ich dazu HTTP Links über die Retro Webfront genutzt welche wohl eine zeitlich begrenzte Session ID beinhalten.

Dadurch funktionierten die Sprachbefehle nur ein paar Minuten :frowning:

Hat jemand eine Idee wie ich das dauerhaft hinbekomme?

mfg
KH

Hallo zusammen,

habe ebenfalls die Android Sprachsteuerung von AVIC angeschaut. Das hört sich alles ganz gut an. Aber einen Befehl an IPS 3.0 zu senden habe ich ebenfalls nicht geschafft.

Müsste das denn mit der neuen JSON-RPC Schnittstelle funktionieren. Dazu gibt’s ja in der Doku unter Datenaustausch einige Infos. Ich verstehe dort aber nicht wie man einen solchen Befehl per HTTP POST absenden muss? Geht das nur über eine Software innerhalb eines Skriptes bzw. nur von einem anderen Web Server aus?

Vielleicht hat jemand ein paar Anfänger Infos, mit denen man hier ggf. weiter kommt. Vielen Dank schon mal

Grüße Helmut

Schaut mal hier: http://www.ip-symcon.de/forum/threads/20494-Openremote/page4

Dort wird schon über ein ähnliches Thema gesprochen :slight_smile:

paresy

Danke für die schnelle Info. Das OpenRemote sieht natürlich auch interessant aus.

Wenn ich das dann richtig verstanden habe, wird ein Zugriff von AVIC aus nicht möglich sein, da nur http-Links unterstütz werden und nicht die http-post Methode. Das ist aber schade das wir hier nicht weiter kommen :frowning:

Bau dir im Zweifelsfall Skripte, die du in deine webfront/user Order ablegst.

paresy

Hallo Paresy,

das war natürlich genau der richtige Hinweis den ich brauchte. Vielen Dank erstmal. Dann kam ich natürlich auf die Idee, das man dann mit der GET Methode die benötigten Parameter übergibt und diese dann im Skript entsprechend auswertet und schon hat man eine kleine Schnittstelle geschaffen.

Jetzt habe ich aber ein komisches Problem. Meine Befehle werden nicht ausgeführt und ich kann mir beim besten willen nicht erklären weshalb. Vielleicht kann mir jemand auf die Sprünge helfen.

Folgendes Skript habe ich als avic.php Datei im Ordner webfront/user abgelegt:


<?
//der folgende Link wird per avic aufgerufen und hier entsprechend ausgewertet
// http://ip:port/user/avic.php?art=1&id=123456&par=0

//die Variable "art" hat 1 für EIB-Schalten, 2 für Skript ausführen
//die Variable "id" enthält die IPS-ID (z.B. des Skriptes oder des EIB-Schlaters)
//die Variable "par" gibt den Schaltzustand an 0=aus, 1=ein

$art = $_GET["art"];
$id = $_GET["id"];
$par = $_GET["par"];

switch($art)
  {

  case 1:     //EIB-Schlaten
         echo $id.$par;
	 EIB_Switch($id, $par);
  break;

  case 2:     //Skript ausführen
         echo $id;
	 IPS_RunScript($id);
  break;

  }
?>

die Echo Befehle habe ich zum testen eingefügt diese werden auch ausgegeben.
Mit dem Link: http://ip:port/user/avic.php?art=2&id=48503&par=true kommt aber folgende Fehlermeldung:

48503
Warning: Wrong parameter type for IPS_RunScript() in E:\IP-Symcon\webfront\user\avic.php on line 23

Man sieht der Echo Befehl geht. Das Skript wird nicht gestartet. Wenn ich im Skript zum testen die Variable $id durch 48503 ersetze klappt das. Auch der EIB_Switch Befehl geht damit nicht!

Weshalb erkennt der Befehl die Variable nicht?

Vielen Dank schon mal fürs mitdenken.

Probier mal die ID per (int) auf Integer zu casten. Dann klappt alles :slight_smile:

paresy

Ja jetzt hab ich es gefunden. Als Anfänger lernt man halt nie aus. Vielen Dank für die Infos.

Hier noch mal das gesamte Skript für alle zum ausbauen…


<?
//der folgende Link wird per avic aufgerufen und hier entsprechend ausgewertet
// http://ip:port/user/avic.php?art=1&id=123456&par=0

//die Variable "art" hat 1 für EIB-Schalten, 2 für Skript ausführen
//die Variable "id" enthält die IPS-ID (z.B. des Skriptes oder des EIB-Schlaters)
//die Variable "par" gibt den Schaltzustand an 0=aus, 1=ein

//die Variablen werden geholt und richtig initialisiert
$art = $_GET["art"];
$id = $_GET["id"];
$par = $_GET["par"];

$id = (int)$id;
$par = (bool)$par;


switch($art)
  {

  case 1:     //EIB-Schalten
	 EIB_Switch($id, $par);
  break;

  case 2:     //Skript ausführen
  	 IPS_RunScript($id);
  break;

  }
?>

Jetzt geht’s ans anlegen der Sprachbefehle in AVIC. Bin gespannt ob man damit klar kommt. Die Grundlagen sind denke ich geschaffen.

Also allen die da experimentieren viel Spaß. Ich bin auf eure Ergebnisse gespannt.

Grüße Helmut

Hallo,

sehe ich das richtig, daß ich mit AIVC keine Rückmeldungen erhalten kann?

z.B. Frage: „Wie ist die Zimmertemperatur“ --> AIVC antwortet „Die Zimmertemperatur ist 21,3 Grad Celsius“

Hallo,

ja, leider siehst du das richtig. Die Befehle gehen nur in eine Richtung.

Super. So hab ichs dann auch mit Homeatic Komponenten hinbekommen :slight_smile:

<?
//der folgende Link wird per avic aufgerufen und hier entsprechend ausgewertet
// http://ip:port/user/avic.php?art=1&id=123456&par=0

//die Variable "art" hat 1 für EIB-Schalten, 2 für Skript ausführen
//die Variable "id" enthält die IPS-ID (z.B. des Skriptes oder des EIB-Schlaters)
//die Variable "par" gibt den Schaltzustand an 0=aus, 1=ein


//die Variablen werden geholt und richtig initialisiert
$art = $_GET["art"];
$id = $_GET["id"];
$par = $_GET["par"];

$id = (int)$id;
$par = (bool)$par;


switch($art)
  {

  case 1:     //HM-Schalten
     HM_WriteValueBoolean($id, "STATE", $par);
  break;

  case 2:     //Skript ausführen
       IPS_RunScript($id);
  break;

  }
?> 

Kann mir jetzt vieleicht noch jemand sagen wie ich das beim Dimmer hinbekomme? Par=0.5 geht nicht :frowning:

Gruß
Karsten

ich würde es mal so versuchen (ungetestet)


<?
//der folgende Link wird per avic aufgerufen und hier entsprechend ausgewertet
// http://ip:port/user/avic.php?art=1&id=123456&par=0

//die Variable "art" hat 1 für EIB-Schalten, 2 für Skript ausführen, 3 für HM-Dimmen
//die Variable "id" enthält die IPS-ID (z.B. des Skriptes oder des EIB-Schlaters)
//die Variable "par" gibt den Schaltzustand an 0=aus, 1=ein, oder Dimmwert 0.5-100


//die Variablen werden geholt und richtig initialisiert
$art = $_GET["art"];
$id = $_GET["id"];
$par = $_GET["par"];

$id = (int)$id;
$par = (float)$par;


switch($art)
  {

  case 1:     //HM-Schalten
$par_bool = (boolean)$par;

     HM_WriteValueBoolean($id, "STATE", $par_bool);
  break;

  case 2:     //Skript ausführen
       IPS_RunScript($id);
  break;

  case 3:
       HM_WriteValueFloat($id, "LEVEL", $par); //Gerät dimmen 
  break;
  }
?>

Hallo,

ich versuche mich auch gerade an der Sprachsteuerung, habe aber ein kleines Problem.

Das einschalten einer Lampe klappt, aber das ausschalten nicht. :frowning:

wenn ich diesen Befehl im Browser zum testen eingebe geht die Lampe an.

http://...:82/user/avic.php?art=4&id=23512&par=true

wenn ich diesen Befehl eingebe:

http://...:82/user/avic.php?art=4&id=23512&par=false

geht die Lampe auch an :mad:

Hat da jemand einen Tip woran es liegen könnte?

Hi, ich denke das liegt an deinem Skript Avic.PHP. da wird dann wohl der Parameter nicht richtig ausgewertet. Kannst ja mal das skipt Posten…
Gruß Helmut

Hallo,

hier mein Script:

<?
//der folgende Link wird per avic aufgerufen und hier entsprechend ausgewertet
// http://ip:port/user/avic.php?art=1&id=123456&par=0

//die Variable "art" hat 1 für EIB-Schalten, 2 für Skript ausführen, 3 für HM-Dimmen
//die Variable "id" enthält die IPS-ID (z.B. des Skriptes oder des EIB-Schlaters)
//die Variable "par" gibt den Schaltzustand an 0=aus, 1=ein, oder Dimmwert 0.5-100


//die Variablen werden geholt und richtig initialisiert
$art = $_GET["art"];
$id = $_GET["id"];
$par = $_GET["par"];
$par_bool = $_GET["par_bool"];

$id = (int)$id;
$par = (float)$par;
$par_bool = (bool)$par_bool;


switch($art)
  {

  case 1:     //HM-Schalten
$par_bool = (boolean)$par;

     HM_WriteValueBoolean($id, "STATE", $par_bool);
  break;

  case 2:     //Skript ausführen
       IPS_RunScript($id);
  break;

  case 3:
       HM_WriteValueFloat($id, "LEVEL", $par); //Gerät dimmen 
  break;
  
    case 4:
	   FS20_SwitchMode($id, $par_bool);  //Gerät schalten
  break;
  }
?>

Hi, im case4 wird der Parameter par_bool verwendet. Damit musst du in deinem link auch &par_bool=false angeben… Dann sollte es klappen

Frohe Ostern

Habe den Fehler gefunden:

dieses fehlte:

$par_bool = (boolean)$par;

Ja, sorry hatte ich beim Kopieren der Links nicht richtig gemacht:

wird so aufgerufen:

http://ehome.homeip.net:82/user/avic.php?art=4&id=23512&par=false&par_bool=false

Trotzdem geht das Licht damit an.

OK. Dann passt das ja.

Es muss (boolean) statt (bool) heißen.

Nee, das war es auch nicht.
Jetzt wird nur ausgeschaltet. :o