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