Variateur de BLE depuis un curseur du tableau de bord via un pont ESP32
Traduit de Türkçe par IA ·
Salut. Nous avons 6 variateurs LED BLE bon marché à l’atelier. Le bon côté, c’est que la luminosité se règle en écrivant un seul octet entre 0 et 255 dans une seule caractéristique GATT ; je l’ai testé avec nRF Connect et ça fonctionne. J’ai fait un pont avec un ESP32 : il se connecte aux variateurs en BLE et à Hermetry en Wi-Fi via MQTT. Les variateurs apparaissent comme des périphériques enfants de la passerelle, j’envoie leur luminosité avec v1/gw/telemetry, et les graphiques arrivent.J’ai maintenant placé un Slider sur le tableau de bord, mais la carte affiche « Choose a command in this widget’s settings » et je suis bloqué. Je ne sais pas où définir la commande ni comment l’ESP32 la recevra. Comme les variateurs sont des appareils séparés, je pense qu’il faut que je rattache le slider au périphérique enfant.
Selam. Atölyede 6 tane ucuz BLE LED dimmer var. Güzel tarafı, parlaklık tek bir GATT karakteristiğine 0-255 arası tek bayt yazılarak ayarlanıyor, nRF Connect ile denedim çalışıyor. Bir ESP32’yi köprü yaptım: BLE’den dimmer’lara bağlanıyor, Wi-Fi’dan MQTT ile Hermetry’ye bağlı. Dimmer’lar gateway’in child cihazları olarak görünüyor, v1/gw/telemetry ile parlaklıklarını gönderiyorum, grafikleri geliyor.
Şimdi panoya bir Slider koydum ama kartta « Choose a command in this widget’s settings » yazıyor ve takıldım. Komutu nereye tanımlayacağımı ve ESP32’nin bunu nasıl alacağını bilmiyorum. Dimmer’lar ayrı ayrı cihaz olduğu için slider’ı child cihaza bağlamam gerekir diye düşündüm.
Traduit de Türkçe par IA ·
As-tu défini la commande dans l’onglet Commands de ton profil ? Le tableau de bord ne peut envoyer que les commandes présentes dans le catalogue du profil ; il n’accepte pas les méthodes brutes.
Profilin Commands sekmesinde komut tanımladın mı? Pano sadece profilin kataloğundaki komutları gönderebiliyor, ham method kabul etmiyor.
Traduit de Türkçe par IA ·
Je l’ai défini. light.set, avec le paramètre level. J’ai d’abord passé le Tier en Privileged, j’ai obtenu l’erreur « This command cannot be sent from a board », puis je l’ai remis en Basic. Mais quand je sélectionne l’appareil enfant, la commande ne part pas, elle reste en Sent.
Tanımladım. light.set diye, parametre level. Tier’ı Privileged yaptım önce, « This command cannot be sent from a board » hatası aldım, Basic’e çektim. Ama child cihazı seçince komut gitmiyor, Sent’te kalıyor.
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ı
Traduit de Türkçe par IA ·
Ça marche, merci. L’ESP32 n’était en fait pas abonné à v1/gw/rpc, et j’avais mis la commande dans le profil de la gateway. J’ai ajouté 6 sliders, chacun lié à son propre child. Par ailleurs, le slider n’envoie qu’au relâchement. Je pensais qu’il envoyait à chaque mouvement et je me préparais à écrire une file d’attente sur l’ESP32, mais ce n’est plus nécessaire.
Çalıştı, sağ olun. ESP32 gerçekten v1/gw/rpc’ye abone değilmiş, komutu da gateway’in profiline koymuşum. 6 slider koydum, her biri kendi child’ına bağlı. Bir de slider sadece bırakınca gönderiyor, ben her harekette gidiyor sanıp ESP32’de kuyruk yazmaya hazırlanıyordum, gerek kalmadı.
- Vous devez être connecté pour répondre à ce sujet.
Rejoignez la discussion
Connectez-vous pour poser et répondre à des questions, aimer les messages utiles et marquer la réponse qui a résolu votre problème. Chaque contribution rapporte des points et des niveaux.

