Yeni: Yapay zekâ güvenlik duvarı tüm platformu izliyor ve her olayı sade bir dille açıklıyor. Nasıl çalıştığını görün

BLE dimmer’ları ESP32 köprüsü üzerinden panodaki slider ile kısmak

BLE dimmer’ları ESP32 köprüsü üzerinden panodaki slider ile kısmak

Çözüldü 4 3

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.

♥ 0

Profilin Commands sekmesinde komut tanımladın mı? Pano sadece profilin kataloğundaki komutları gönderebiliyor, ham method kabul etmiyor.

Sahadan selamlar.
♥ 0

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.

♥ 2

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:

  1. light.set komutunu dimmer’ların profiline ekle (gateway’inkine değil), Basic tier, parametre level (Number, 0-100).
  2. 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.
  3. Current value slot’unu aynı child’ın level telemetrisine bağla, kart dimmer’ın gerçek değerini göstersin.
  4. 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ı

Kabul edilen çözüm♥ 5

Ç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ı.

♥ 0
5 yazı görüntüleniyor – 1 ile 5 arası (toplam 5)
  • Bu konuyu yanıtlamak için giriş yapmış olmalısınız.

Sohbete katılın

Soru sormak ve yanıtlamak, yararlı gönderileri beğenmek ve sorununuzu çözen yanıtı işaretlemek için oturum açın. Her katkı puan ve seviye kazandırır.

Paylaş