Actualizar
Pude controlar Niko HC con la ayuda de @wouter.
He instalado un emulador de Android en mi mac. Luego, con Wireshark pude oler la comunicación.
Una vez que encuentre la IP del controlador, es relativamente simple:
Primero debe enviar un comando TCP: {"cmd": "startevents"}
. Esto le permite obtener retroalimentación del controlador (para verificar si la luz se encendió o falló)
Luego puedes enviar un nuevo comando TCP: {"cmd": "listactions"}
. Esto le da una visión general de las "acciones" disponibles y su estado (luces, acciones, ...)
Si desea saber qué habitaciones están disponibles, necesitará el siguiente comando: {"cmd":"listlocations"}
(Gracias a @Wim Deblauwe)
Si desea controlar una acción, necesitará el siguiente comando:
{"cmd": "executeactions", id="{ID}", "value1" = "{VALUE}"}
Las personas con el módulo de energía pueden usar el siguiente comando TCP: {"cmd": "listenergy"}
. Esto debería darle una descripción general del consumo de energía (no soy el propietario de este módulo, por lo que no estoy 100% seguro).
Si desea información sobre el sistema, puede usar el siguiente comando TCP: {"cmd": "systeminfo"}
. Esto le proporciona información como idioma, moneda, versión api, ...
Con Laravel, he creado una pequeña API que me permite llamar a una URL simple para controlar las luces:
/api/lights/{LIGHT}/{VALUE}
Esto llama a la siguiente función:
Route::get('/api/lights/{light}/{value}', function($light, $value){
$service_port = 8000;
$address = '192.168.0.233';
/* Create a TCP/IP socket. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
return "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
}
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
return "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
}
$in = json_encode(array(
'cmd' => 'executeactions',
'id' => intval($light),
'value1' => intval($value)
));
socket_write($socket, $in, strlen($in));
$message = socket_read($socket,1000000);
socket_close($socket);
return $message;
});
Luego he creado una pequeña interfaz para encender / apagar las luces fácilmente:
Pasos siguientes
- una 'simulación de presencia' personalizada.
- agrega más 'datos de casa' con la ayuda de Arduino (estado del nivel del agua, estación meteorológica, ...)
- ...
Nuevamente, ¡gracias a @wouter por la información proporcionada!