Siri @home

Hi.
Habe einiges wieder gelöscht und verändert.Das ist mein Ist-Stand.
Ich bin aber anscheinend auf einem Holzpfad unterwegs.

SiriProxy-IPS.rb

#Temperatur Wohnzimmer
listen_for (/(Wohnzimmer) auf ([0-9,]*[0-9])° (einstellen|stellen|einschalten)/i) do |temp|
       temp = temp.strip
    result = HTTParty.get("http://192.168.1.3:90/user/siri/siri.php?type=SETTEMP&id=46404&temp=#{temp}")
    say "Das Wohnzimmer wurde auf #{temp}° eingestellt!"
    request_completed #always complete your request! Otherwise the phone will "spin" at the user!
  end 

Siri.php

$id = intval($_GET['id']);
$type = $_GET['type'];

// HOMEMATIC
if ($type == "HM")
{
$state = $_GET['state'];
if ($state == 1)
{
HM_WriteValueBoolean($id, "STATE", true);
}
elseif ($state == 0)
{
HM_WriteValueBoolean($id, "STATE", false);
}
}

// Fenster
if ($type == "FENSTER")
{
$var = GetValue($id);
if ($var == FALSE)
{
echo "geschlossen";
}
elseif ($var == TRUE)
{
echo "geoeffnet";
}
}


// Variable setzen
if ($type == "SETVAR")
{
$state = $_GET['state'];
SetValue($id, $state);
}

// Variable auslesen
if ($type == "READVAR")
{
$Var = GetValue($id);
echo $Var;
}

// Skript starten
if ($type == "RUNSCRIPT")
{
IPS_RunScript($id);
} 

// Tür
if ($type == "TUER")
{
$var = GetValueInteger($id);
if ($var == 1)
{
echo "verriegelt";
}
elseif ($var == 2)
{
echo "entriegelt";
}
}


if ($type == "SETTEMP") 
{
$temp = $_GET['temp'];
HM_WriteValueFloat($id, "SETPOINT", $temp); 
}  

Hallo Robert,

prüfe doch mal, was überhaupt vom Siriproxy ankommt. Das kannst Du z.B. machen, indem Du eine StringVariable im IPS anlegst und den Wert

$temp = $_GET['temp'];

dieser Variablen zuweist:

SetValueString(VarID, $temp );

Manchmal liegt es ja nur am Zahlenformat (z.B. ein „.“ statt „,“) oder daran, dass es durch führende oder folgende Leerzeichen nicht als Float erkannt wird…

Joachim

Danke dir schonmal.

Nach ein paar Umstellungen bekomme ich nun in die String-Variable den angesagten Wert und die korrekte Siri Rückmeldung.
Ist schon mal ein Schritt weiter.Jetzt muss ich diese nur String-Variable in die Float-Variable bekommen.

Soweit ich weiß,muss das bei Homematic über die Instanz gemacht werden,da die Variable „nur lesen“ ist.
Da werd ich mal schauen was sich da finden lässt.

…schau Dir doch mal floatval an…

Joachim

Habe es endlich hinbekommen.

//WZ Temp
if ($type == "SETTEMP") 
{
$temp = $_GET['temp'];
SetValue(46456, $temp);
}  

//WZ Stehlampe
if ($type == "HMDIMMER") 
{
    $level = $_GET['level'];
    $level = $level / 100;
    var_dump($level);
//$level = $_GET['level'];
SetValue(56531, $level);
}  

?>

Einfach eine Float-Variable mit passendem Profil angelegt und befüllt mit SetValue.
SetValueFloat ging bei mir irgendwie nicht.So werden die Werte von Siri geschrieben.

<?
$temp = GetValue(46456 /*[Essbereich	emp]*/);
HM_WriteValueFloat(46404 /*[Essbereich\Wandthermostat Soll]*/, "SETPOINT", $temp);
?>

Dann einfach per Timer bei Variablenänderung der $temp das Script ausgeführt.
Vielleicht etwas unkonventionell aber es geht.

Das gleiche System habe ich beim Dimmer gemacht.Nur musste man da den Wert durch 100 teilen,damit das dort passt
100% sind bei Homematic nämlich 1,0

Hauptsache es geht und ich kann das System jetzt bei den anderen Räumen verwenden.

Gruß
Robert

Hallo,

weiß jmd, ob sich mit iOS7 eigene Befehle leichter integrieren lassen?
Wäre ja mal interessant.

Gruß Thomas