İçeriğe geç

MQTT cihazları (LED, gong, saat, Home Assistant)

Panelde MQTT cihazları sayfasından bir cihaz eklersin; PushBell’in MQTT sunucusu bildirimleri o cihaza iletir. Bir satış geldiğinde dükkândaki gong çalar, LED şerit yanar, saat ekranında yazı akar. MQTT cihazları Pro paketten itibaren var; cihaz sayısı pakete göre sınırlıdır. Cihazlar kişi sayılmaz, kotadan düşmez.

Adres mqtt.pushbell.app
TLS (önerilen) 8883
TLS’siz 1883 (WLED ve Ulanzi TC001 TLS desteklemez)
WebSocket wss://mqtt-ws.pushbell.app

Her cihazın kendi kullanıcı adı ve şifresi var. Kullanıcı adı aynı zamanda cihazın konu kodu; cihaz sadece kendi konularını görür. Şifre bir kez gösterilir, unutursan Yeni şifre ile değiştirirsin (eski şifre hemen geçersiz olur).

TLS’siz bağlantıda şifre ağda okunabilir. Bu yüzden cihaz butonuyla acil bildirim onayı varsayılan olarak kapalı; ağına güveniyorsan cihazın ayarlarından aç.

Her cihazda bildirimin nasıl görüneceğini seçersin:

  • Renk, efekt (WLED), süre: süre bitince cihaz eski haline döner. WLED kapanır ya da seçtiğin ön ayara geçer.
  • Röle ve bip sayısı (Tasmota), melodi (AWTRIX NG, RTTTL).
  • Tiplere göre: bildirim tipinin anahtarına göre farklı görünüm. Örneğin sale altın renk ve havai fişek, refund kırmızı. Gösterme ile o tip bu cihazda hiç görünmez.
  • Acil bildirimde: varsayılanı kırmızı ve onaylanana kadar. Onaylanınca (uygulamadan, panelden, kanaldan ya da cihazın butonuyla) cihazdaki uyarı kapanır; onaylanmadan süresi dolarsa da kapanır.

Projeler ile cihazın hangi projelerin bildirimlerini alacağını seçersin. Uçtan uca şifreli bildirimler cihazlara gitmez.

Deneme göster cihazda bir deneme bildirimi gösterir. Liste cihazın çevrimiçi olup olmadığını da gösterir (WLED, Tasmota ve AWTRIX NG kendiliğinden bildirir). Çevrimdışı uyarısı verirsen cihaz o kadar dakika bağlanmazsa sana bildirim gelir, tekrar bağlanınca da haber verilir.

  1. Tasmota yüklü bir akıllı priz ya da röle al, ona bir zil ya da döner lamba bağla. (LED şerit istersen WLED.)
  2. Panelde MQTT cihazları → Cihaz ekle → Tasmota röle / siren. Ad ver; Süre’yi 2 saniye yap. Tiplere göre bölümünde satış tipini ekle; diğer bildirimlerde çalmasın istiyorsan Görünüm’de Sadece aşağıdaki tipleri göster’i seç.
  3. Açılan kurulum penceresindeki Backlog komutunu kopyala, Tasmota’nın web arayüzünde Console’a yapıştır ve Enter’a bas. Cihaz yeniden bağlanır.
  4. Deneme göster’e bas: gong çalar. Artık her satış bildiriminde çalacak.

WLED’de Config → Sync Interfaces → MQTT:

  1. Enable MQTT’yi aç.
  2. Broker mqtt.pushbell.app, Port 1883, kurulum penceresindeki Username ve Password.
  3. Device Topic’e kurulumdaki konuyu (pb/…) yaz.
  4. Butonla onay istiyorsan Publish on button press’i aç.
  5. Save, sonra cihazı yeniden başlat.

WLED TLS desteklemez (sadece 1883). Süre sonunda ön ayara dönmesini istersen o ön ayarı WLED’de kaydet ve numarasını görünüme yaz.

Kurulum penceresindeki komut hepsini bir kerede yapar:

Backlog MqttHost mqtt.pushbell.app; MqttPort 8883; MqttUser pb…; MqttPassword …; Topic pb…; FullTopic %prefix%/%topic%/; SetOption103 1
  • TLS (SetOption103 1, port 8883) sadece tasmota32 (ESP32) sürümlerinde var. ESP8266’da TLS’siz kullan: MqttPort 1883 ve SetOption103 olmadan.
  • Röle Power1 ON; Delay; Power1 OFF ile süre kadar açılır. Buzzer GPIO’su tanımlıysa bip sayısı kadar öter. Acil bildirimde onaylanana kadar açık kalır.
  • Butonla onay: SetOption73 1 (buton röleden ayrılır, basış PushBell’e gider) ve cihazın ayarlarında Cihazın butonu acil bildirimi onaylar’ı aç.

AWTRIX NG’de System → MQTT: adres, port, kullanıcı adı, şifre ve Prefix olarak kurulumdaki konu. Kaydet ve yeniden başlat. Bildirim başlık ve metinle, seçtiğin renkte akar; acil bildirim onaylanana kadar ekranda kalır. Orta buton (açıksa) onaylar.

  • TC001’de TLS yok (1883); TC002 TLS kullanabilir (8883).
  • AWTRIX NG’nin lisansı (PolyForm Noncommercial) ticari kullanıma kapalı: dükkânda ya da işte kullanmak için yazarından izin gerekir. İşletmeler için WLED ya da Tasmota öneriyoruz.

Home Assistant’ta PushBell cihazı üç parçayla görünür: Bildirim olayı (notification, emergency, acknowledged), Son bildirim sensörü (başlık; özniteliklerde metin, proje, öncelik) ve Gördüm butonu (acil bildirimi onaylar). Otomasyonlarını bunlarla kurarsın.

Doğrudan: Ayarlar → Cihazlar ve servisler → MQTT ekle (ya da yapılandır): adres mqtt.pushbell.app, port 8883, TLS açık, kurulumdaki kullanıcı adı ve şifre. MQTT seçeneklerinde keşif öneki pb/…/ha ve doğum mesajı konusu pb/…/ha/status (kurulum penceresinde yazıyor).

Yerel Mosquitto’nla (köprü): Home Assistant zaten kendi Mosquitto eklentini kullanıyorsa, eklentiye bir köprü ekle:

connection pushbell
address mqtt.pushbell.app:8883
bridge_capath /etc/ssl/certs
remote_username pb…
remote_password …
remote_clientid pb…
topic pb/pb…/# both 1

Home Assistant’ta keşif önekini yine pb/…/ha yap.

Kodun pb/<kullanıcı adı>/notify konusuna abone olur; bildirim JSON olarak gelir:

{"event_type": "notification", "id": "0199f…", "project": "Mağaza", "type": "sale", "title": "Yeni satış",
"message": "1.250 TL", "priority": 0, "color": "#ffd700", "duration": 5, "timestamp": 1793000000}

Acil bildirimde "event_type": "emergency" ve receipt gelir; onaylanınca pb/<kullanıcı adı>/dismiss konusuna {"receipt": "…"} gelir. Cihazın butonuyla onaylamak için pb/<kullanıcı adı>/ack konusuna {"receipt": "…"} yayınla. pb/<kullanıcı adı>/state konusuna online / offline (son vasiyet) yayınlarsan panelde durumu görünür.

PubSubClient 2.8, ArduinoJson 7 ve arduino-esp32 3.x ile örnek:

#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
const char* WIFI_SSID = "…";
const char* WIFI_PASS = "…";
const char* MQTT_USER = "pb…"; // panel → MQTT cihazları → Kurulum
const char* MQTT_PASS = "…";
// ISRG Root X1: https://letsencrypt.org/certs/isrgrootx1.pem dosyasının içeriği
const char* ROOT_CA = R"(-----BEGIN CERTIFICATE-----
…
-----END CERTIFICATE-----)";
const int LED = 2, BUTTON = 0;
WiFiClientSecure net;
PubSubClient mqtt(net);
String base = String("pb/") + MQTT_USER;
String receipt;
void onMessage(char* topic, byte* payload, unsigned int len) {
JsonDocument doc;
if (deserializeJson(doc, payload, len)) return;
String t = topic;
if (t == base + "/notify") {
digitalWrite(LED, HIGH); // doc["title"], doc["message"], doc["color"], doc["duration"]
receipt = doc["receipt"] | "";
} else if (t == base + "/dismiss") {
digitalWrite(LED, LOW);
receipt = "";
}
}
void connect() {
while (!mqtt.connected()) {
// Bağlantı koparsa sunucu "offline" yayınlar (son vasiyet).
if (mqtt.connect(MQTT_USER, MQTT_USER, MQTT_PASS, (base + "/state").c_str(), 1, true, "offline")) {
mqtt.publish((base + "/state").c_str(), "online", true);
mqtt.subscribe((base + "/notify").c_str(), 1);
mqtt.subscribe((base + "/dismiss").c_str(), 1);
} else {
delay(5000);
}
}
}
void setup() {
pinMode(LED, OUTPUT);
pinMode(BUTTON, INPUT_PULLUP);
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) delay(500);
net.setCACert(ROOT_CA);
mqtt.setServer("mqtt.pushbell.app", 8883);
mqtt.setBufferSize(2048);
mqtt.setCallback(onMessage);
}
void loop() {
if (!mqtt.connected()) connect();
mqtt.loop();
if (digitalRead(BUTTON) == LOW && receipt != "") { // butonla acil bildirimi onayla
mqtt.publish((base + "/ack").c_str(), ("{\"receipt\":\"" + receipt + "\"}").c_str());
receipt = "";
delay(500);
}
}

Diğer (JSON) türü ESP32 ile aynı konuları ve JSON’u kullanır; Node-RED, kendi sunucun ya da başka bir yazılım bağlanabilir.

Bildirimleri PushBell’in sunucusuna değil kendi MQTT sunucuna göndermek istersen Kanallar → Kendi MQTT sunucum (Kanallar): her bildirim verdiğin konuya JSON olarak yayınlanır.