Node-RED

MQTT Verisinden Node-RED E-posta Uyarısı: Eşikler, Histerezis ve Sessizlik Tespiti

MQTT değerleri bir sınırı aştığında gelen kutunuzu doldurmadan e-posta uyarıları gönderin. Bu eğitim histerezis, bekleme süresi, sessiz cihaz bekçisi ve SMTP kurulumu içeren bir Node-RED akışı oluşturuyor ve onu ConnectMQ'nun yerleşik eşik uyarı kurallarıyla karşılaştırıyor.

Bir MQTT sıcaklık değeri eşiği aştığında bildirim gönderen Node-RED e-posta uyarısı akışı
Bunu kendi MQTT broker’ınızda çalıştırınFree planla özel, yönetilen bir MQTT broker alın ve hazır kod örnekleriyle başlayın.
Ücretsiz deneyin Kod örnekleri Kart gerekmez

Node-RED e-posta uyarısı, MQTT üzerinden yayınlanan bir sensör değeri aralık dışına çıktığında haberdar olmanın en basit yollarından biridir. Bu eğitimde bir sıcaklık topic'ini izleyen, bir sınır aşıldığında e-posta gönderen, düzinelerce kopya göndermekten kaçınan ve bir cihaz yayın yapmayı tamamen bıraktığında da sizi uyaran bir akış oluşturacaksınız.

Ne Oluşturuyoruz?

Tamamlanan akış dört şey yapar:

  1. Bir MQTT broker üzerindeki bir sensör topic'ine abone olur.
  2. Bir üst sınır ve daha düşük bir sıfırlama sınırı (histerezis) kullanarak değerin alarm durumunda olup olmadığına karar verir; böylece sınırda gezinen bir değer tekrarlanan e-postaları tetiklemez.
  3. Alarm başladığında bir, temizlendiğinde bir e-posta gönderir; inip çıkan bir sensörün gelen kutunuzu doldurmaması için bir bekleme süresi uygular.
  4. On dakika boyunca hiç mesaj gelmezse ayrı bir e-posta gönderir, çünkü ölü bir sensör çoğu zaman yüksek bir okumadan daha tehlikelidir.

Örneklerde connectmq/demo/k7f3qa topic ön ekiyle broker.connectmq.com adresindeki ücretsiz herkese açık MQTT broker'ını kullanıyoruz. k7f3qa yerine kendi rastgele dizenizi seçin ve herkese açık alanın herkes tarafından okunabildiğini unutmayın.

E-posta Node'unu Kurmak

Node-RED bir e-posta node'uyla gelmez. Onu Menu → Manage palette → Install yolundan node-red-node-email arayarak ya da Node-RED kullanıcı dizininizde komut satırından kurun:

cd ~/.node-red
npm install node-red-node-email
# ardından Node-RED'i yeniden başlatın

Paket, SMTP üzerinden gönderim yapan bir e-mail çıkış node'u ve bir posta kutusunu okuyan bir e-mail giriş node'u ekler. Bize yalnızca çıkış node'u gerekiyor. Davranışı basittir: msg.payload gövde, msg.topic konu olur ve node'daki To alanı boş bırakılırsa alıcıyı msg.to belirler.

Gerçekten çalışan SMTP ayarları

Sağlayıcı Sunucu Port Güvenli bağlantı Notlar
Gmail / Google Workspace smtp.gmail.com 465 Etkin 2 adımlı doğrulama ve uygulama şifresi gerektirir
Microsoft 365 smtp.office365.com 587 Devre dışı (STARTTLS kullanır) Posta kutusu için SMTP AUTH'a izin verilmelidir
İşlemsel e-posta hizmeti (SendGrid, Mailgun, SES) Sağlayıcı sunucusu 465 veya 587 Sağlayıcıya göre Otomatik postalar için en iyi teslim edilebilirlik
Yerel aktarıcı (Postfix) localhost 25 Devre dışı Yalnızca zaten bir aktarıcı çalıştırıyorsanız

Gmail ile normal parolanızı kullanmayın. Google hesabı güvenlik ayarlarınızda bir uygulama şifresi oluşturun ve onu node'a yapıştırın. Hobi projesinin ötesindeki her şey için, doğrulanmış bir gönderen alan adına sahip işlemsel bir e-posta hizmeti daha iyi teslim edilebilirlik sağlar, çünkü kişisel bir posta kutusundan gelen otomatik uyarı postaları spam filtrelerine kolayca takılır.

Node-RED E-posta Uyarısı Akışını Oluşturmak

Akış şöyledir: mqtt in → function (alarm mantığı) → e-mail, ayrıca sessizlik tespiti için bir trigger node dalı. Daha önce MQTT node'larını bağlamadıysanız, Node-RED MQTT eğitimi broker yapılandırma node'unu ayrıntılı olarak ele alıyor.

Adım 1: Sensöre abone olun

Şu ayarlarla bir mqtt in node'u ekleyin:

  • Sunucu: broker.connectmq.com, port 1883, nr-alerts-k7f3qa gibi benzersiz bir client ID
  • Topic: connectmq/demo/k7f3qa/greenhouse/temperature
  • Çıktı: otomatik algılama (ayrıştırılmış JSON nesnesi veya dize)

Adım 2: Alarm mantığı

payload > 30 kontrolü yapan düz bir switch node'u, 30'un üzerindeki her okuma için bir e-posta gönderir. Sensör her on saniyede bir rapor veriyorsa bu saatte 360 e-posta demektir. Bunun yerine durumu node context'inde takip edin ve yalnızca geçişlerde çıktı verin. Bunu bir function node'una koyun:

const HIGH = 30;          // bu değerde veya üstünde alarm ver
const RESET = 28;         // bu değerde veya altında alarmı temizle
const COOLDOWN_MS = 15 * 60 * 1000;  // e-postalar arası minimum süre

let value = msg.payload;
if (typeof value === "object" && value !== null) value = value.value;
value = Number(value);
if (isNaN(value)) return null;

const inAlarm = context.get("inAlarm") || false;
const lastSent = context.get("lastSent") || 0;
const now = Date.now();

let event = null;
if (!inAlarm && value >= HIGH) event = "raised";
if (inAlarm && value <= RESET) event = "cleared";
if (!event) return null;

context.set("inAlarm", event === "raised");

// Temizlenmeyi her zaman bildir, ama yeni alarmları hız sınırla
if (event === "raised" && now - lastSent < COOLDOWN_MS) {
    node.status({ fill: "yellow", shape: "ring", text: "alarm suppressed (cooldown)" });
    return null;
}
context.set("lastSent", now);

node.status({
    fill: event === "raised" ? "red" : "green",
    shape: "dot",
    text: event + " at " + value
});

msg.topic = event === "raised"
    ? `ALARM: greenhouse temperature ${value} C`
    : `Cleared: greenhouse temperature back to ${value} C`;

msg.payload =
    `Greenhouse temperature ${event}.\n\n` +
    `Current value: ${value} C\n` +
    `Alarm limit: ${HIGH} C, reset limit: ${RESET} C\n` +
    `Time: ${new Date(now).toISOString()}\n` +
    `Source topic: connectmq/demo/k7f3qa/greenhouse/temperature\n`;

return msg;

HIGH ile RESET arasındaki boşluk histerezis bandıdır. 29,8 ile 30,2 arasında gidip gelen bir değer bir kez tetiklenir ve gerçekten 28'e düşene kadar alarmda kalır.

Adım 3: E-mail node'unu yapılandırın

Function çıkışını bir e-mail node'una bağlayın. Alıcıyı, sunucuyu, portu, güvenli bağlantıyı, kullanıcı kimliğini ve parolayı yukarıdaki tablodan doldurun. Deploy edin; ilk mesaj geçtiğinde node durumu SMTP oturum açmanın başarılı olup olmadığını gösterir.

Adım 4: Sessiz cihazları tespit edin

mqtt in node'undan, şu şekilde yapılandırılmış bir trigger node'una ikinci bir bağlantı ekleyin:

  • Send: nothing
  • Then: wait for 10 dakika, extend delay if new message arrives işaretli
  • Then send: No data from greenhouse sensor for 10 minutes gibi bir dize

Gelen her okuma zamanlayıcıyı yeniden başlatır; böylece trigger yalnızca sensör sustuğunda tetiklenir. Çıkışını msg.topic değerini bir konu satırına ayarlayan bir change node'una, ardından aynı e-mail node'una besleyin.

Sıcak Hava Dalgasını Beklemeden Test Etmek

Bir terminalden test değerleri yayınlayın:

# normal
mosquitto_pub -h broker.connectmq.com -p 1883 -i test-k7f3qa -t "connectmq/demo/k7f3qa/greenhouse/temperature" -m "24.5"
# alarm ver
mosquitto_pub -h broker.connectmq.com -p 1883 -i test-k7f3qa -t "connectmq/demo/k7f3qa/greenhouse/temperature" -m "31.2"
# hâlâ yüksek, yeni e-posta yok
mosquitto_pub -h broker.connectmq.com -p 1883 -i test-k7f3qa -t "connectmq/demo/k7f3qa/greenhouse/temperature" -m "30.4"
# temizle
mosquitto_pub -h broker.connectmq.com -p 1883 -i test-k7f3qa -t "connectmq/demo/k7f3qa/greenhouse/temperature" -m "27.0"

Tam olarak iki e-posta almalısınız. Test ederken COOLDOWN_MS değerini ve trigger gecikmesini geçici olarak düşürün ve e-mail node'una paralel bir debug node'u koyun; böylece her seferinde SMTP sunucusuna gitmeden neyin gönderileceğini görebilirsiniz.

E-posta Teslimatında Sorun Giderme

Sorun Neyi kontrol etmeli
Node "Invalid login" gösteriyor Gmail için uygulama şifresi kullanın; Microsoft 365 posta kutuları için SMTP AUTH'un etkin olduğunu kontrol edin
Bağlantı zaman aşımı Bazı ISS'ler ve bulut sağlayıcıları 25 portunu, bazen de 465/587'yi engeller; diğer portu ya da işlemsel bir hizmeti deneyin
"Self signed certificate" hatası Yanlış port ve güvenli bağlantı kombinasyonu, örneğin 587'de güvenli bağlantının etkin olması
E-postalar spam'e düşüyor SPF ve DKIM yapılandırılmış bir alan adından gönderin, tamamı büyük harf konulardan kaçının
Her okuma için e-posta Function node'u durumu tutmuyor; geçiş olmadığında null döndürdüğünüzden emin olun
Değer yüksekken yeniden başlatmadan sonra e-posta yok Context varsayılan olarak bellektedir; bu beklenen bir durumdur, sonraki okuma durumu yeniden değerlendirir

Alarm durumunun bir Node-RED yeniden başlatmasından sağ çıkması gerekiyorsa, settings.js içinde kalıcı bir context deposunu etkinleştirin ve context.get("inAlarm", "file") kullanın. Node-RED context rehberi seçenekleri açıklıyor.

Node-RED E-posta Uyarıları ve ConnectMQ Eşik Uyarı Kuralları

Cihazlarınız bir ConnectMQ broker'a yayın yapıyorsa, zaten ikinci bir seçeneğiniz var. Portalı eşik uyarı kuralları ve bir uyarı günlüğü içerir: bir topic seçersiniz, bir sınır belirlersiniz ve her aşım, ek bir yazılım çalıştırmadan sizin ve ekibinizin inceleyebileceği bir yere kaydedilir.

İki yaklaşım birbirini tamamlar:

İhtiyaç Portal uyarı kuralları Node-RED e-posta akışı
Bir topic üzerinde basit eşik Evet, portalda yapılandırılır Evet
Uyarı geçmişinin tek bir yerde olması Portaldaki uyarı günlüğü Siz oluşturursunuz, örneğin Node-RED ve MySQL ile
Özel mantık (histerezis, birleşik koşullar, zamanlamalar) Yalnızca eşik kuralları JavaScript ile yazabileceğiniz her şey
Gelen kutusuna, sohbete veya SMS'e teslimat Uyarı günlüğünün amacı değildir E-mail node'u, ayrıca Telegram veya diğer bildirim node'ları
Bakımı yapılacak ek sunucu yok Evet Bir Node-RED örneği gerekir

Yaygın bir desen, görünürlük ve denetim için portalda eşik kurallarını yapılandırmak ve gece birinin telefonuna ulaşması gereken birkaç koşul için yanında küçük bir Node-RED akışı çalıştırmaktır. Node-RED de sıradan bir MQTT istemcisi olduğundan, ikisi de aynı broker'dan aynı topic'leri okur. Bu, tam yönetilen bir MQTT hizmetiyle yapılan entegrasyonların genel şeklidir: broker mesajları güvenilir şekilde taşır, harici araçlar abone olup onlara göre hareket eder.

Üretim Kontrol Listesi

  1. Herkese açık broker'dan, 8883 portunda TLS ile kendi kimlik bilgilerinize (YOUR_USERNAME, YOUR_PASSWORD, YOUR_CLIENT_ID) geçin.
  2. SMTP parolalarını node kimlik bilgilerinde saklayın; asla bir function node'unda ya da git'e gönderdiğiniz bir akış dosyasında tutmayın.
  3. Kısa bir bağlantı kopması sınırı aşan okumayı sessizce düşürmesin diye abonelikte QoS 1 kullanın.
  4. Sessizlik bekçisini koruyun; biten pilleri, Wi-Fi kesintilerini ve çöken ağ geçitlerini yakalar.
  5. Tek bir kişi yerine bir grup adresine ya da dağıtım listesine gönderin.
  6. Sahte bir yüksek değer yayınlayarak tüm zinciri her ay test edin.

ConnectMQ ile Başlayın

Uyarılar, okumaları teslim eden broker kadar güvenilirdir. ConnectMQ size TLS, MQTT 5 ve portal tarafında eşik uyarıları sunan barındırılan bir MQTT broker sağlar; Node-RED akışlarınız ona diğer herhangi bir istemci gibi bağlanır. app.connectmq.com adresinde kredi kartı gerektirmeden ücretsiz bir Serverless broker oluşturun; bu akışı birkaç dakika içinde herkese açık test broker'ından özel kimlik bilgilerine taşıyabilirsiniz.

Sık Sorulan Sorular

Hangi Node-RED node'u e-posta gönderir?

node-red-node-email paketindeki e-mail çıkış node'u. Onu palet yöneticisinden kurun, ardından gövde için msg.payload, konu için msg.topic ayarlayın.

Node-RED'in her okuma için e-posta göndermesini nasıl engellerim?

Alarm durumunu context'te takip edin ve yalnızca geçişlerde gönderin, histerezis için alarm sınırının altına bir sıfırlama sınırı ekleyin ve yukarıdaki function node'unda gösterildiği gibi alarm e-postaları arasında bir bekleme süresi uygulayın.

E-postayı Node-RED yerine ConnectMQ gönderebilir mi?

Portal, eşik uyarı kuralları ve bir uyarı günlüğü sunar. Bildirimleri bir gelen kutusuna teslim etmek için broker'a abone olup e-postayı gönderen Node-RED gibi bir istemci çalıştırın.

Gmail neden Node-RED oturum açma isteğimi reddediyor?

Google, uygulamalardan gelen SMTP için normal parolaları engeller. 2 adımlı doğrulamayı etkinleştirin, bir uygulama şifresi oluşturun ve onu e-mail node'unda smtp.gmail.com, 465 portu ve güvenli bağlantıyla kullanın.

İlgili yazılar

ISA-95 Topic'leriyle Node-RED OPC UA İstemcisinden MQTT'ye

Bir PLC veya simülasyon sunucusundaki OPC UA değişkenlerine node-red-contrib-opcua ile abone olun, node ID'lerini ISA-95 tarzı MQTT topic'lerine eşleyin ve değerleri kalite bilgisi ve zaman damgalarıyla yayınlayın.

8 dk okuma

Node-RED Grafik Geçmişi: MQTT Grafik Verisini Yeniden Başlatmalarda Koruyun

Dashboard grafikleri Node-RED yeniden başladığında her şeyi unutur. Bu rehber, MQTT verisi için Node-RED grafik geçmişini korumanın iki güvenilir yolunu gösteriyor: dosya tabanlı context depolama ve küçük bir SQLite tablosu; ikisi de başlangıçta Dashboard 2.0'a yeniden oynatılır.

7 dk okuma

Tüm yazılar →

Özel MQTT broker’ınız birkaç tık uzağınızda

Hesabınızı oluşturun, broker kimlik bilgilerinizi alın ve ilk cihazınızı bağlayın — kurulacak, yamalanacak ya da ölçeklendirilecek sunucu yok.