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
Hat jemand eine Idee wie ich das dauerhaft hinbekomme?
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
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
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!
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.
Super. So hab ichs dann auch mit Homeatic Komponenten hinbekommen
<?
//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
<?
//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;
}
?>
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
<?
//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;
}
?>