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:
- Añadí el comando light.set al perfil de los dimmers (no al del gateway), nivel Basic, parámetro level (Number, 0-100).
- 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.
- Vinculé el slot Current value a la telemetría level del mismo child, para que la tarjeta muestre el valor real del dimmer.
- 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ı
Child’a komut gidiyor, takıldığın yer ESP32 tarafı. Gateway arkasındaki bir cihaza gönderilen komut gateway’e v1/gw/rpc üzerinden iniyor, shared attribute değişiklikleri de v1/gw/attributes üzerinden. Senin kod büyük ihtimalle sadece v1/rpc/req/+ dinliyor, o da gateway’in kendi komutları için. Komut o yüzden Sent’te kalıyor. Ben de su istasyonlarında aynı yerde takılmıştım.
Yaptığım şey şöyle:
- light.set komutunu dimmer’ların profiline ekle (gateway’inkine değil), Basic tier, parametre level (Number, 0-100).
- Slider kartında Run a command: Device = atolye-3 child’ı, Command = light.set, level için The control’s value. 0-100 slider’ı ESP32 tarafında 0-255’e çeviriyorum.
- Current value slot’unu aynı child’ın level telemetrisine bağla, kart dimmer’ın gerçek değerini göstersin.
- Işık için Ask before running’i kapattım, her kaydırmada onay sormasın.
ESP32 tarafında her bağlantıdan sonra v1/gw/rpc‘ye abone ol. Gelen mesajı önce seri porta bastırıp yapısına bak, hangi child için geldiğini oradan çözüp BLE yazmasını yaparsın:
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));
}
}
Kontrol kartlarının kuralları burada: Kontrol kartları

