Traduit de Türkçe par IA ·
La commande arrive bien au child, et le point bloquant se situe côté ESP32. Une commande destinée à un appareil derrière la passerelle descend vers la passerelle via v1/gw/rpc, et les changements d’attributs partagés passent par v1/gw/attributes. Ton code n’écoute probablement que v1/rpc/req/+, qui concerne les commandes propres à la passerelle. C’est pour ça que la commande reste à Sent. Je suis tombé exactement sur le même problème avec les stations d’eau.Voici ce que j’ai fait :
- Ajouté la commande light.set au profil des dimmers (et non à celui de la passerelle), niveau Basic, paramètre level (Number, 0-100).
- Sur la carte curseur : Run a command : Device = child atolye-3, Command = light.set, pour level La valeur du contrôle (The control’s value). Je convertis le curseur 0-100 en 0-255 côté ESP32.
- Lié le slot Current value à la télémétrie level de ce même child, pour que la carte affiche la vraie valeur du dimmer.
- Pour la lumière, j’ai désactivé Ask before running, pour ne pas demander de confirmation à chaque glissement.
Côté ESP32, après chaque connexion, abonne-toi à v1/gw/rpc. Affiche d’abord le message reçu sur le port série pour examiner sa structure, puis déduis-en pour quel child il est destiné et effectue l’écriture 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));
}
}
Les règles des cartes de contrôle sont ici : 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ı

