Von Türkçe mit KI übersetzt ·
Der Child-Device bekommt den Befehl, und die Stelle, an der du hängst, ist die ESP32-Seite. Ein Befehl an ein Gerät hinter dem Gateway kommt über v1/gw/rpc beim Gateway an, Änderungen an Shared Attributes kommen über v1/gw/attributes. Dein Code hört wahrscheinlich nur auf v1/rpc/req/+, und das gilt für die eigenen Befehle des Gateways. Deshalb bleibt der Befehl im Status Sent. Bei den Wasserstationen bin ich genau an derselben Stelle hängengeblieben.Das habe ich gemacht:
- Den Befehl light.set zum Profil der Dimmer hinzugefügt (nicht zu dem des Gateways), Basic Tier, Parameter level (Number, 0-100).
- In der Slider-Karte: Run a command: Device = atolye-3 Child, Command = light.set, für level The control’s value. Den Slider 0-100 wandle ich auf der ESP32-Seite in 0-255 um.
- Den Slot Current value mit der Level-Telemetrie desselben Child verbunden, damit die Karte den echten Wert des Dimmers anzeigt.
- Für das Licht habe ich Ask before running ausgeschaltet, damit bei jedem Verschieben keine Bestätigung abgefragt wird.
Auf der ESP32-Seite abonnierst du nach jeder Verbindung v1/gw/rpc. Gib die eingehende Nachricht zuerst auf der seriellen Schnittstelle aus und schau dir ihre Struktur an. Daraus bestimmst du, für welches Child sie gedacht ist, und schreibst dann per 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));
}
}
Die Regeln für Kontrollkarten findest du hier: 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ı

