Hallo zusammen, auf der Suche nach eine schönen Integrierbarkeit von Ikea Tradfri Lampen und anderen Funk Komponenten bin ich auf das RaspBee Gateway von Dresden Elektronik gestoßen.
Dieses verfügt über einen Websocket und eine REST-API und ich versuche mich gerade mal da an der Ansteuerung.
An dieser Stelle würde ich mich über Hilfe freuen.
Was ich bisher habe:
Daten -> IPS
IPS Verbindet sich per Websocket Client mit dem Raspbee und empfängt in einer Registervariable fleißig die Daten wenn sich im Funknetz irgendwas tut.
Ein bislang ganz simples Verarbeitungs Script nimmt die Daten und trägt sie in IPS Variablen ein. Damit sehe ich schonmal ob eine Lampe aktuell AN oder AUS ist und ihre Helligkeit.
Script:
<?
// wenn das Skript von einer RegisterVariable-Instanz aus aufgerufen worden ist
if ($_IPS['SENDER'] == "RegisterVariable")
{
// bereits im Puffer der Instanz vorhandene Daten in $data kopieren
$data = RegVar_GetBuffer($_IPS['INSTANCE']);
$json=json_decode($_IPS['VALUE']);
if (( $json->r == "lights" ) && ( $json->e == "changed" )) {
if ( isset($json->state->on)) {
if ($json->state->on == 1 ) {
if ( $json->id == "1") { SetValue(30319 /*[MakiHome\Erdgeschoss\Wohnzimmer\Tradfri Lampe\Schalten]*/,true); }
} else
{ if ( $json->id == "1") { SetValue(30319 /*[MakiHome\Erdgeschoss\Wohnzimmer\Tradfri Lampe\Schalten]*/,false); }
}
}
if ( isset($json->state->bri)) {
if ( $json->id == "1") { SetValue(22239 /*[MakiHome\Erdgeschoss\Wohnzimmer\Tradfri Lampe\Helligkeit]*/,$json->state->bri); }
}
if ( isset($json->state->x)) { echo "FARBE-X: ".$json->state->x."
"; }
if ( isset($json->state->y)) { echo "FARBE-Y: ".$json->state->y."
"; }
}
/*
if ( $json->r == "lights" ) {
if ( $json->state->on ) {
//echo "Lampe mit ID: ".$json->id." wurde eingeschaltet
";
} else {
//echo "Lampe mit ID: ".$json->id." wurde ausgeschaltet
";
}
if ( $json->state->bri ) {
//echo "Lampe mit ID: ".$json->id." Helligkeit: ".$json->state->bri."
";
}
}
*/
/*
echo $json->t; //Type Of Message
echo "
";
echo $json->e; //Type of Event
echo "
";
echo $json->r; //Type of Resource
echo "
";
echo $json->id; //ID
echo "
";
echo $json->state->on; //ID
echo "
";
echo $json->state->bri; //ID
echo "
";
echo $json->state->x; //ID
echo "
";
echo $json->state->y; //ID
echo "
";
*/
// Inhalt von $data im Puffer der RegisterVariable-Instanz speichern
RegVar_SetBuffer($_IPS['INSTANCE'], $data);
}
?>
IPS → RaspBee
Ich kann über ein einfaches Script die änderung einer IPS Variable an den Raspbee senden warauf hin er z.B. das passende Licht AN oder Aus macht. Dieses Script kann einfach als Aktionsscript an eine Variable mit ~Switch Profil gehängt werden.
<?
SetValue((int)$IPS_VARIABLE,!GetValue((int)$IPS_VARIABLE));
$currentstate=GetValue((int)$IPS_VARIABLE);
if ( $currentstate == "false" ) { $data='{"on": true}'; } else { $data='{"on": false}'; }
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://192.168.1.49/api/MEINAPIKEY/lights/1/state",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => $data,
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache",
"content-type: application/json",
"x-api-key: MEINAPIKEY"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
//echo $response;
}
?>
Aktuell stellt sich mir die folgenden Fragen:
Wie erstelle ich ein „Geräteobjekt“ (Instanz) für IPS das im Prinzip die Eigenschaften einer Ikea Birne abbildert.
In der Instanz müsste die ID (Adresse der Lampe auf dem ZigBee Netz) eingetragen werden können und sie sollte folgende Eigenschaften als Statusvariablen haben: (Status (AN/AUS), Helligkeit 0-100%(intensity 255), Farbton, Sättigung) Die Farben am besten als Color Picker.
Die Lampen wollen ihre Farbangabe per CIE x,y Daten haben.
Wie bekomme ich in IPS ein Mapping der eingehenden Daten in denen ja nur die ID der Lampe enthalten ist auf eine Instanz ID oder Variablen ID hin.
Vielleicht kann mir ja hier jemand weiter helfen oder ist sogar fähig / interessiert dazu ein Modul oder sowas zu Bauen.
PHP mäßg reichts bei mir leider nur fürs nötigste.
lG Martin