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:
- Bir MQTT broker üzerindeki bir sensör topic'ine abone olur.
- 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.
- 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.
- 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, port1883,nr-alerts-k7f3qagibi 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 minutesgibi 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
- Herkese açık broker'dan, 8883 portunda TLS ile kendi kimlik bilgilerinize (
YOUR_USERNAME,YOUR_PASSWORD,YOUR_CLIENT_ID) geçin. - 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.
- Kısa bir bağlantı kopması sınırı aşan okumayı sessizce düşürmesin diye abonelikte QoS 1 kullanın.
- Sessizlik bekçisini koruyun; biten pilleri, Wi-Fi kesintilerini ve çöken ağ geçitlerini yakalar.
- Tek bir kişi yerine bir grup adresine ya da dağıtım listesine gönderin.
- 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.



