Introducción
En esta guía detallada utilizaremos el script Shelly RPC BLE Client para interactuar con dispositivos IoT Shelly mediante Bluetooth Low Energy (BLE). Los dispositivos Shelly son conocidos por su versatilidad y facilidad de integración en ecosistemas de home inteligente. Esta guía tiene como objetivo enseñar a los usuarios a utilizar un script de Python para buscar dispositivos Shelly, ejecutar llamadas a procedimientos remotos (RPC) y gestionar configuraciones de dispositivos sin complicaciones. Este script es fácil de usar e incluye opciones para seleccionar dispositivos y comandos predefinidos, así como para ejecutar comandos RPC personalizados. Si quieres un script más sencillo que solo ejecute el comando RPC personalizado, consulta esta versión del script.
Requisitos previos
Antes de empezar a utilizar el script, asegúrate de tener lo siguiente:
-
Una máquina Linux que utilice Ubuntu u otra distribución de Linux.
-
Python 3.8 o superior instalado en tu sistema.
-
compatibilidad con Bluetooth Low Energy (BLE) en tu máquina.
-
Paquetes de Python: Instala los paquetes necesarios mediante el comando:
pip install -r requirements.txt El requirements.txt debe incluir:
-
asyncio
-
bleak
-
colorama
-
prettytable
-
yaspin
-
tener instalada la utilidad jq para dar formato a JSON (opcional, pero recomendable).
Descripción del script
El script Shelly RPC BLE Client es un programa de Python diseñado para:
-
Buscar dispositivos IoT Shelly cercanos mediante BLE.
-
Enumerar los dispositivos detectados con indicadores de intensidad de señal.
-
Conectarse a un dispositivo seleccionado.
-
Ejecutar métodos RPC en el dispositivo para obtener información o cambiar la configuración.
-
Gestionar errores correctamente y proporcionar registros informativos.
Funciones clave
-
CLI interactiva: Interfaz de línea de comandos fácil de usar con salidas codificadas por colores.
-
Registro: Se mantienen registros detallados en shelly_rpc.log para la resolución de problemas.
-
Personalización: Posibilidad de introducir métodos y parámetros RPC personalizados.
-
Mecanismo de reintento: Implementa reintentos y una espera progresiva para garantizar una comunicación fiable.
Instalación y configuración
Instalar
-
Clonar el repositorio
git clone https://github.com/ALLTERCO/Utilities.git cd shelly-ble-rpc
-
Instalar dependencias
Asegúrate de tener pip instalado y luego ejecuta:
pip install -r requirements.txt
-
Instalar jq (opcional)
jq se utiliza para dar formato legible a las respuestas JSON.
-
En Ubuntu/Debian:
sudo apt-get install jq
-
En macOS (con Homebrew):
brew install jq
Ejecución del script
Ejecuta el script con:
python3 shelly-ble-rpc.py Argumentos de la línea de comandos
-
--scan-duration: Duración (en segundos) de la búsqueda de dispositivos BLE. El valor predeterminado es de 5 segundos.
-
--log-level: Establece el nivel de registro (DEBUG, INFO, WARNING, ERROR, CRITICAL).
python3 shelly-ble-rpc.py --scan-duration 10 --log-level DEBUG
Navegación por la interfaz de usuario
Al ejecutar el script, se te guiará por varios pasos:
-
Búsqueda de dispositivos
-
El script busca dispositivos Shelly cercanos.
-
Los dispositivos detectados se muestran con su Nombre, Dirección y RSSI (intensidad de la señal).
-
Selección de un dispositivo
-
Introduce el número correspondiente al dispositivo con el que deseas interactuar.
-
Opciones:
-
Introduce el número de un dispositivo para seleccionarlo.
-
Introduce r para volver a buscar dispositivos.
-
Introduce q para salir del script.
-
-
Selección de comandos
-
Después de seleccionar un dispositivo, se muestra una lista de los comandos disponibles.
-
Los comandos incluyen:
-
Shelly.ListMethods
-
Shelly.GetDeviceInfo
-
Shelly.GetStatus
-
Shelly.GetConfig
-
WiFi.SetConfig
-
WiFi.GetStatus
-
Eth.GetConfig
-
Eth.SetConfig
-
Switch.Toggle
-
Comando personalizado
-
-
Opciones:
-
Introduce el número de un comando para ejecutarlo.
-
Introduce r para volver a la selección de dispositivos.
-
Introduce q para salir del script.
-
Ejecución de comandos
-
Shelly.GetDeviceInfo
-
Obtiene información detallada sobre el dispositivo.
-
Uso: Selecciona el comando; no se requieren parámetros adicionales.
-
Shelly.GetStatus
-
Obtiene el estado actual del dispositivo.
-
Uso: Selecciona el comando; no se requieren parámetros adicionales.
-
WiFi.SetConfig
-
Configura los ajustes Wi-Fi del dispositivo.
-
Parámetros:
-
SSID: El nombre de la red Wi-Fi.
-
Contraseña: La contraseña de la red.
-
IP estática: Opcionalmente, configura una dirección IP estática, una máscara de red, un gateway y un servidor de nombres.
-
Ejemplo:
Introduce el SSID: MyWiFiNetwork Introduce la contraseña: mypassword ¿Quieres configurar una dirección IP estática? (y/n): y Introduce la dirección IP estática: 192.168.1.50 Introduce la máscara de red: 255.255.255.0 Introduce el gateway: 192.168.1.1 Introduce el servidor de nombres: 8.8.8.8
-
Switch.Toggle
-
Cambia el estado de un interruptor (por ejemplo, enciende o apaga una luz).
-
Parámetros:
-
ID: El ID del interruptor (el valor predeterminado es 0). Si tienes un dispositivo con más canales o ID, puedes seleccionar uno.
-
-
Comando personalizado
-
Permite ejecutar cualquier método RPC compatible con el dispositivo.
-
Uso:
-
Introduce el nombre del método RPC.
-
Proporciona los parámetros como una cadena JSON.
-
Ejemplo:
Introduce el nombre del método RPC: Light.SetConfig Introduce los parámetros como una cadena JSON (o déjalo vacío si no hay ninguno): {"id":0,"config":{"brightness":50}}
Uso avanzado
Niveles de registro
-
DEBUG: Información detallada, normalmente de interés solo al diagnosticar problemas.
-
INFO: Confirma que todo funciona según lo esperado.
-
WARNING: Indica que ha ocurrido algo inesperado.
-
ERROR: Debido a un problema más grave, el software no ha podido ejecutar alguna función.
Establecer el nivel de log:
python3 shelly-ble-rpc.py --log-level DEBUG Gestión de tiempos de espera y reintentos
-
El script vuelve a intentar automáticamente las llamadas RPC fallidas con una espera exponencial.
-
Personalización:
-
Modifica el parámetro retries en el método call_rpc si es necesario.
Modificar el script
-
El script es modular, con una separación clara de responsabilidades.
-
No dudes en ampliar la funcionalidad, por ejemplo, añadiendo nuevos comandos o mejorando el manejo de errores.
Solución de problemas
Problemas comunes
-
No se encontraron dispositivos:
-
Asegúrate de que tu dispositivo Shelly esté encendido y dentro del alcance.
-
Comprueba que tu adaptador BLE funcione correctamente.
-
No se pudo conectar con el dispositivo:
-
Es posible que el dispositivo esté conectado a otro cliente.
-
Vuelve a intentar conectarte después de unos momentos.
-
Método RPC no disponible:
-
Es posible que el firmware del dispositivo no admita el método.
-
Usa Shelly.ListMethods para consultar los métodos disponibles.
-
Argumentos no válidos:
-
Comprueba dos veces los parámetros proporcionados para el método RPC.
-
Asegúrate de que las cadenas JSON tengan el formato correcto.
Log
-
Consulta shelly_rpc.log para ver mensajes de error detallados.
-
Los log incluyen marcas de tiempo y detalles de los errores para facilitar la depuración.
¡Valoramos tus comentarios!
¡Gracias por tomarte el tiempo de leer nuestro artículo! ¿Te resultó útil o interesante?
Tus comentarios pueden ayudarnos a mejorar. Agradeceríamos cualquier opinión. Si tienes un momento,
compártelo con nosotros en el siguiente correo electrónico:

