Novedad: el cortafuegos de IA supervisa toda la plataforma y explica cada incidente con palabras sencillas. Vea cómo funciona

Atenuar dimmers BLE desde un slider del panel mediante un puente ESP32

Atenuar dimmers BLE desde un slider del panel mediante un puente ESP32

Resuelto 4 3

Traducido del Türkçe por IA ·

Hola. En el taller tenemos 6 dimmers LED BLE baratos. Lo bueno es que el brillo se ajusta escribiendo un único byte entre 0 y 255 en una característica GATT; lo probé con nRF Connect y funciona. Monté un ESP32 como puente: se conecta a los dimmers por BLE y a Hermetry por Wi-Fi con MQTT. Los dimmers aparecen como dispositivos hijos de la pasarela, envío su brillo con v1/gw/telemetry y los gráficos llegan bien.Ahora puse un Slider en el panel, pero la tarjeta dice «Choose a command in this widget’s settings» y me he atascado. No sé dónde definir el comando ni cómo lo recibirá el ESP32. Como los dimmers son dispositivos separados, creo que tengo que vincular el slider al dispositivo hijo.

♥ 0

Traducido del Türkçe por IA ·

¿Definiste el comando en la pestaña Commands de tu perfil? El panel solo puede enviar comandos del catálogo del perfil, no acepta métodos sin procesar.

Sahadan selamlar.
♥ 0

Traducido del Türkçe por IA ·

Lo definí. light.set, con el parámetro level. Primero cambié el Tier a Privileged, recibí el error «This command cannot be sent from a board» y luego lo pasé a Basic. Pero al seleccionar el dispositivo hijo, el comando no se envía, se queda en Sent.

♥ 2

Traducido del Türkçe por IA ·

El child recibe el comando, y el punto donde te atascas está en el lado del ESP32. Un comando enviado a un dispositivo detrás del gateway baja al gateway por v1/gw/rpc, y los cambios de atributos compartidos llegan por v1/gw/attributes. Tu código probablemente solo escucha v1/rpc/req/+, que es para los comandos propios del gateway. Por eso el comando se queda en Sent. Yo me quedé atascado exactamente en el mismo punto con las estaciones de agua.Esto es lo que hice:

  1. Añadí el comando light.set al perfil de los dimmers (no al del gateway), nivel Basic, parámetro level (Number, 0-100).
  2. En la tarjeta deslizador: Run a command: Device = child atolye-3, Command = light.set, para level The control’s value. Convierto el deslizador 0-100 a 0-255 en el lado del ESP32.
  3. Vinculé el slot Current value a la telemetría level del mismo child, para que la tarjeta muestre el valor real del dimmer.
  4. Para la luz desactivé Ask before running, para que no pida confirmación en cada desplazamiento.

En el lado del ESP32, después de cada conexión, suscríbete a v1/gw/rpc. Muestra primero el mensaje recibido en el puerto serie para ver su estructura, luego determina de ahí para qué child es y haz la escritura BLE:

mqtt.subscribe("v1/gw/rpc", 1);

void onMsg(char* topic, byte* payload, unsigned int len) {
  if (strcmp(topic, "v1/gw/rpc") == 0) {
    Serial.write(payload, len);   // önce yapıya bak
    Serial.println();
    // child adını ve level'ı çöz:
    // bleSetLevel(name, map(level, 0, 100, 0, 255));
  }
}

Las reglas de las tarjetas de control están aquí: Kontrol kartları

Solución aceptada♥ 5

Traducido del Türkçe por IA ·

Funcionó, gracias. El ESP32 en realidad no estaba suscrito a v1/gw/rpc, y yo había puesto el comando en el perfil de la gateway. Añadí 6 sliders, cada uno vinculado a su propio child. Además, el slider solo envía al soltarlo. Pensaba que enviaba en cada movimiento y me estaba preparando para escribir una cola en el ESP32, pero ya no hace falta.

♥ 0
Viendo 5 entradas – de la 1 a la 5 (de un total de 5)
  • Debes estar registrado para responder a este debate.

Únete a la conversación

Inicia sesión para preguntar y responder, dar me gusta a las publicaciones útiles y marcar la respuesta que resolvió tu problema. Cada aportación suma puntos y niveles.

Compartir