Mejorando ON/OFF de enchufe Orvibo desde el plugin de Jeedom
- Descripción del problema y solución:
- Problema: Los enchufes Orvibo S20 permiten encendido/apagado a través de wifi. Este proceso se hace con paquetes UDP, esto lleva a que en ocasiones, si la conexión no es muy buena se pierdan estos paquetes y no respondan a las ordenes.
- Solución: Se va a modificar el codigo del plugin para modificar la politica de reintentos en el comando ON/OFF.
- Punto de partida
- Una Raspberry pi model B,
- Jeedom
- Plugin Orvibo para Jeedom instalado
- Procedimiento
- La clase donde debemos escribir la politica de reintentos que queramos es:
- Directorio:
- /usr/share/nginx/www/jeedom/plugins/orvibo/core/class
- o en
- /var/www/html/plugins/orvibo/core/class/
- Fichero: orvibo.class.php
- Metodo de envío UDP:
- public static function SendMessage($msg, $mac)
- El codigo que envia el paquete UDP es
- socket_sendto($sock, $msg , strlen($msg) , 0 , $ip , '10000')
- Anidar el código dentro de un bucle con el numero de reintentos que queremos establecer como estrategia mas un usleep entre reintentos.
- Ejemplo:
for ($cont=0;$cont< 5; $cont++)
{
// Actually write the data and send it off
if( ! socket_sendto($sock, $msg , strlen($msg) , 0 , $ip , '10000'))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not send data: [$errorcode] $errormsg \n");
log::add('orvibo', 'error', 'Envoi impossible : ' . $errorcode . ', avec message ' . $errormsg);
}
else
{
log::add('orvibo', 'debug', 'Envoi ok');
}
//Se duerme 10 milisegundos
usleep(10000);
}
No hay comentarios:
Publicar un comentario