MQTT sürücüsü
Bir MQTT sunucusuna (broker) MQTT 3.1.1 ya da 5.0 ile bağlanıp konulara abone olarak tag değeri almak, tag yazmayı konuya yayın (publish) olarak göndermek; TLS, istemci sertifikası, kullanıcı / şifre, QoS ve JSON alan adresleri.
Ne zaman kullanılır
MQTT sürücüsü, Live'ı bir MQTT 3.1.1 ya da MQTT 5.0 istemcisi yapar. Live sunucuya (broker) bağlanır, tag'lerin konularına abone olur; konuya gelen son yayın o tag'in değeri olur. Tag'e yazmak, değeri konuya yayınlamaktır. Cihazlar, ağ geçitleri ve IoT sistemleri veriyi genellikle bu yolla paylaşır. Demo Projesi'nde MQTT bağlantısı yoktur.
Sunucu tarafında ön koşullar
- MQTT sunucusu Live bilgisayarından erişilebilir olmalı (varsayılan port
1883, TLS ile genellikle8883). - Kimlik doğrulama kullanılıyorsa sunucuda kullanıcı tanımlı olmalı ve kullanıcının okuma / yazma izni bulunmalı. İzin yoksa sunucu aboneliği reddeder.
- Sunucu istemci sertifikası istiyorsa (karşılıklı TLS) Live için bir istemci sertifikası (özel anahtarıyla) hazırlayın.
- Cihazların yayınladığı konu adlarını ve yük (payload) biçimini (düz değer ya da JSON) bilin.
Bağlantı kurma
- Bağlantı ekleyin
Bağlantılar bölümünde Ekle, sürücü MQTT; sunucunun adresini yazın, port
1883gelir. TLS kullanıyorsanız portu8883yapın ya da adresimqtts://sunucu:8883biçiminde yapıştırın (güvenlik TLS'e geçer). - Parametreleri girin
123456MQTT 5.0, TLS ve PFX dosyasıyla istemci sertifikası seçilmiş bir bağlantı; Hedef kartı mqtts://adresini gösterir.- MQTT sürümü — 3.1.1 ya da 5.0.
- Güvenlik — istemci sertifikası yalnızca TLS ile kullanılır.
- İstemci sertifikası — Yok, PFX dosyası ya da Windows sertifika deposu.
- PFX dosyası — Live bilgisayarındaki tam yol; parolası Live'da girilir.
- Sertifika parmak izi — depodaki sertifika için (40 onaltılık karakter).
- Hedef — TLS seçiliyse mqtts://.
- MQTT sürümü
- MQTT 3.1.1 (varsayılan) ya da MQTT 5.0 (aşağıda).
- Güvenlik
- Yok (şifrelenmemiş), TLS (sunucu sertifikası doğrulanır) ya da TLS (sertifika doğrulanmaz). TLS 1.2 kullanılır.
- İstemci sertifikası
- Yok (varsayılan), PFX dosyası ya da Windows sertifika deposu. Yalnız TLS ile kullanılır (aşağıda).
- PFX dosyası
- Live bilgisayarındaki tam yol (ör.
C:\Sertifikalar\istemci.pfx). Parolası Live'da girilir. - Sertifika parmak izi
- Windows sertifika deposundaki sertifikanın parmak izi (40 onaltılık karakter; boşluk ve
:yazılabilir). - Kimlik doğrulama
- Anonim ya da Kullanıcı adı ve şifre. İstemci sertifikasıyla birlikte de kullanılabilir.
- Kullanıcı adı
- Şifre proje dosyasına yazılmaz; Live'da girilir (Bağlantı güvenliği).
- İstemci kimliği
- Boşsa
fv-<bilgisayar>-<bağlantı>biçiminde otomatik üretilir. Aynı kimlikle bağlanan iki istemciden eskisi sunucu tarafından atılır. - Abonelik kalitesi (QoS)
- QoS 0 — en çok bir kez (varsayılan) ya da QoS 1 — en az bir kez.
- Yazma kalitesi (QoS)
- QoS 0 — yanıt beklenmez ya da QoS 1 — sunucunun onayı beklenir (varsayılan).
- Yazılanı sunucuda tut (retain)
- Açıksa yazılan mesaj sunucuda saklanır ve sonradan abone olanlara hemen gönderilir. Varsayılan kapalı.
- Bool yazma biçimi
true / false(varsayılan),1 / 0ya daON / OFF.- Canlı tutma süresi (sn)
- 0 – 3600, varsayılan
30. Sessiz kalan bağlantıda bu aralıkla sunucuya ping gider; 1,5 katı süre hiçbir şey gelmezse bağlantı kopmuş sayılır.0= kapalı.
- Tag ekleyin
Tag'in adresine konu adını yazın (Tag adresleri).
Konu adresleri
| Adres | Anlamı |
|---|---|
fabrika/hat1/sicaklik | Yükün tamamı tag'in değeridir (sayı, true / false, on / off, metin, ISO tarih). |
hat1/durum#motor.hiz | Yük JSON belgesidir; tag belgenin içindeki değerdir (# konu ile JSON yolunu ayırır). |
hat1/olcumler#deger[2] | JSON dizisinin elemanı (sıra 0'dan başlar). |
cihaz/role/durum|cihaz/role/komut | Okuma ve yazma ayrı konularda (| ile ayrılır). |
- Konu joker karakter (
+,#) içermez; tag tek bir konunun değeridir. Konu ve JSON yolu büyük / küçük harfe duyarlıdır. Yazma konusu$ile başlayamaz. - JSON yolu nokta ile ayrılmış alan adları ve dizi sıralarıdır (
motor.hiz,dizi[0].alan); başındaki$.isteğe bağlıdır; en çok 16 adım.
Okuma ve yazma davranışı
- Okuma: sürücü her konuya bir kez abone olur. Sunucu tutulan (retained) mesajı aboneliğe hemen gönderir. Henüz hiç yayın gelmemiş konunun tag'i hata vermez; değer gelene kadar bekler (kalitesiz görünür).
- Değer çevirme:
Booliçintrue/false/1/0/on/off/yes/nookunur. Tag tipine sığmayan değer kırpılmaz, tag hata alır.DateTimeiçin ISO 8601 ya da unix saniye / milisaniye kabul edilir. Yük UTF-8 metindir; 1 MB'tan büyük yük okunmaz. - Yazma: değer, tag'in yazma konusuna yayınlanır. Okuma konusuyla aynıysa değer, sunucudan dönmesi beklenmeden tag'e de işlenir. Bağlantı kopmuşsa yazma reddedilir.
- JSON alanı yazma: konuya son gelen belgenin yalnızca ilgili alanı değiştirilir, diğer alanlar korunur. Konuda henüz belge yoksa ya da yazma konusu ayrıysa ve önceki belge bilinmiyorsa yalnızca o alanı içeren yeni bir belge yayınlanır.
MQTT 5.0
MQTT sürümü MQTT 5.0 seçilince konu adresleri, QoS ve yazma davranışı aynı kalır. Farklar:
- Anlaşılır red iletileri. Sunucunun bağlantı, abonelik ve yayın reddindeki neden kodu Türkçe bir iletiye çevrilir (ör. MQTT sunucusu bu konuya aboneliği reddetti (yetki yok): hat1/durum). Sunucu bir açıklama metni de gönderirse iletinin sonuna Sunucu iletisi: "…" olarak eklenir. Tanınmayan kod onaltılık olarak yazılır (
0xA5gibi). - Sunucunun sınırları uygulanır. Sunucu kendi canlı tutma süresini bildirirse o kullanılır; en yüksek QoS'u 0 ise yazmalar QoS 0 ile gider. Sunucu tutulan mesajı desteklemiyorsa Yazılanı sunucuda tut açık bağlantının yazmaları reddedilir; sunucunun paket sınırını aşan yayın gönderilmez.
- Yönlendirme izlenmez. Sunucu bağlantıyı başka bir sunucuya yönlendirirse ileti yeni adresi söyler; bağlantının adresini siz değiştirirsiniz.
- Sunucu MQTT 5.0'ı desteklemiyorsa bağlantı MQTT sunucusu MQTT 5.0'ı desteklemiyor. Bağlantı parametrelerinde MQTT sürümü olarak 3.1.1 seçin. iletisiyle kurulmaz.
İstemci sertifikası (karşılıklı TLS)
Bazı sunucular bağlanan istemciden bir sertifika ister. Sertifika TLS bağlantısında verilir; MQTT 3.1.1 ve 5.0 ile kullanılabilir. Güvenlik Yok iken seçilen sertifika kullanılmaz ve Studio Sorunlar'da uyarır.
| Seçenek | Nasıl hazırlanır |
|---|---|
| PFX dosyası | Sertifikayı özel anahtarıyla birlikte .pfx / .p12 dosyası olarak Live bilgisayarına koyun, PFX dosyası'na tam yolunu yazın. Dosyanın parolasını Live'da sistem menüsü › Bağlantılar › Şifre gir ile girin; parola proje dosyasına yazılmaz (Bağlantı güvenliği). |
| Windows sertifika deposu | Sertifikayı özel anahtarıyla Kişisel depoya alın ve Sertifika parmak izi'ne parmak izini yazın. Önce Live'ı çalıştıran kullanıcının, sonra yerel bilgisayarın Kişisel deposuna bakılır. Bu kullanıcının özel anahtarı okuma izni olmalıdır. |
Yedekli sunucu çiftinde PFX dosyası iki bilgisayarda aynı yolda bulunmalı ve parola ikisinde de girilmelidir.
Sürücü başvurusu
MQTT
MQTT 3.1.1 / 5.0 istemcisi: Live sunucuya (broker) bağlanır, tag'lerin konularına abone olur ve gelen son yayını tag değeri yapar; yazma konuya yayın (publish) olarak gider. Adres bir konudur (ör. fabrika/hat1/sicaklik); yük JSON ise "konu#yol" ile içindeki alan seçilir; okuma ve yazma konuları ayrıysa "okuma|yazma" yazılır.
- Sürücü kimliği
mqtt(proje dosyasındaki ad)- Bağlantı
- IP adresi / bilgisayar adı ve port gerekir (varsayılan port
1883) - Veri tipleri
BoolByteSIntIntUIntDIntUDIntRealLRealStringDateTime- Aynı adres
- Aynı adrese birden çok bağlantı tanımlanabilir.
Bağlantı parametreleri
Bağlantı seçiliyken Denetçi penceresinde görünür.
| Parametre | Tür | Varsayılan | Açıklama |
|---|---|---|---|
| MQTT sürümü | seçim | MQTT 3.1.1 | MQTT 3.1.1 · MQTT 5.0 |
| Güvenlik | seçim | Yok (şifrelenmemiş) | TLS için port genellikle 8883'tür. Kendinden imzalı sertifika kullanan sunucularda sertifikayı Windows'a güvenilen olarak ekleyin; "doğrulanmaz" yalnızca kapalı ağlarda kullanılmalıdır. Yok (şifrelenmemiş) · TLS (sunucu sertifikası doğrulanır) · TLS (sertifika doğrulanmaz) |
| İstemci sertifikası | seçim | Yok | Sunucu istemci sertifikası istiyorsa (karşılıklı TLS). Yalnızca TLS ile kullanılır. Yok · PFX dosyası · Windows sertifika deposu |
| PFX dosyası | metin | — | Live bilgisayarındaki tam yol (ör. C:\Sertifikalar\istemci.pfx). Parolası proje dosyasına yazılmaz; Live bilgisayarında girilir. |
| Sertifika parmak izi | metin | — | Windows sertifika deposundaki sertifikanın parmak izi (40 onaltılık karakter). Önce geçerli kullanıcının, sonra yerel bilgisayarın Kişisel deposunda aranır; sertifikanın özel anahtarı olmalıdır. |
| Kimlik doğrulama | seçim | Anonim | Anonim · Kullanıcı adı ve şifre |
| Kullanıcı adı | metin | — | Şifre proje dosyasına yazılmaz; Live bilgisayarında girilir. |
| İstemci kimliği | metin | — | Boşsa otomatik üretilir (fv-bilgisayar-bağlantı). Aynı kimlikle bağlanan iki istemciden eskisi sunucu tarafından atılır. |
| Abonelik kalitesi (QoS) | seçim | QoS 0 — en çok bir kez | QoS 0 — en çok bir kez · QoS 1 — en az bir kez |
| Yazma kalitesi (QoS) | seçim | QoS 1 — sunucunun onayı beklenir | QoS 0 — yanıt beklenmez · QoS 1 — sunucunun onayı beklenir |
| Yazılanı sunucuda tut (retain) | açma / kapama | kapalı | Yazılan mesaj sunucuda saklanır ve sonradan abone olanlara hemen gönderilir. |
| Bool yazma biçimi | seçim | true / false | true / false · 1 / 0 · ON / OFF |
| Canlı tutma süresi (sn) | sayı (0 – 3600) | 30 | Sessiz kalan bağlantıda bu aralıkla sunucuya ping gider; 1,5 katı süre hiçbir şey gelmezse bağlantı kopmuş sayılır. 0 = kapalı. |
| Hakem adresi (Int) | metin | — | Yedekli sunucu çiftinde master bu adrese her saniye artan bir sayaç yazar. PLC programında başka işte kullanılmayan, yazılabilir bir Int adresi olmalı. Boş = bu PLC hakem değil. |
Adres biçimleri
| Biçim | Anlamı |
|---|---|
topic | Yükün tamamı tag'in değeridir (sayı, true / false, on / off, metin, ISO tarih) |
topic#alan.altalan | Yük JSON belgesidir; tag belgenin içindeki değerdir |
topic#dizi[2].alan | JSON dizisinin elemanı (sıra 0'dan başlar) |
readTopic|writeTopic | Okuma ve yazma ayrı konularda (ör. durum | komut) |
Örnek adresler
| Veri tipi | Örnekler |
|---|---|
Bool | cihaz/role/durum cihaz/role/durum|cihaz/role/komut hat1/durum#motor.calisiyor |
String | hat1/urun hat1/durum#ad |
| Diğer tipler | fabrika/hat1/sicaklik hat1/durum#motor.hiz hat1/olcumler#deger[2] |
Sık hatalar
Her satırın başındaki işaret, iletinin Live'da nerede görüneceğini söyler: [bağlantı] sistem menüsünün Bağlantılar bölümünde; [yazma] yazmayı yapan operatöre bildirim penceresinde; [Studio] Studio'daki adres hücresinde ya da Sorunlar listesinde görünür. [tag] okuma sırasındaki tag hatasıdır: tag kalitesiz kalır, iletinin metni bu sürümde Live'da gösterilmez (Tag hataları); metni nedeni anlamak için okuyun.
| İleti | Neden ve çözüm |
|---|---|
[bağlantı] MQTT sunucusu 2000 ms içinde yanıt vermedi (…). Adresi, portu ve ağ bağlantısını kontrol edin. | Sunucuya ulaşılamıyor. |
[bağlantı] MQTT sunucusu kullanıcı adını ya da şifreyi reddetti. Kullanıcı adını bağlantı parametrelerinden, şifreyi Live'daki bağlantı şifresi penceresinden kontrol edin. | Kullanıcı ya da şifre yanlış; şifre Live'da girilmemiş olabilir. |
[bağlantı] MQTT sunucusu bu istemcinin bağlanmasına izin vermedi (yetkisiz). … | Sunucuda bu kullanıcı ya da istemci için erişim tanımı yok. |
[bağlantı] MQTT sunucusu istemci kimliğini reddetti (kimlik geçersiz ya da başka bir istemci aynı kimlikle bağlı). … | İstemci kimliği'ni değiştirin. |
[bağlantı] MQTT sunucusu MQTT 5.0'ı desteklemiyor. … | MQTT sürümü'nü 3.1.1 yapın. |
[bağlantı] MQTT sunucusu bağlantıyı kapattı: aynı istemci kimliğiyle başka bir istemci bağlandı (oturum devralındı). … | MQTT 5: başka bir istemci aynı kimliği kullanıyor; İstemci kimliği'ni değiştirin. |
[tag] MQTT sunucusu bu konuya aboneliği reddetti (kullanıcının bu konuyu okuma yetkisi olmayabilir): konu | Kullanıcının o konuyu okuma izni yok. MQTT 5'te parantez içinde sunucunun nedeni yazar. |
[bağlantı] Sunucu sertifikasına bu bilgisayar güvenmiyor (kendinden imzalı ya da bilinmeyen sertifika otoritesi). … | Sertifikayı Windows'a güvenilen olarak ekleyin; yalnızca kapalı ağlarda TLS (sertifika doğrulanmaz) seçin. |
[bağlantı] Sunucu sertifikasının adı "…" ile uyuşmuyor (adres olarak IP yerine sertifikadaki bilgisayar adını yazın …). | Adrese sertifikadaki adı yazın. |
[bağlantı] … (Sunucu istemci sertifikası istiyor: bağlantı parametrelerinde "İstemci sertifikası" seçin.) | Sunucu karşılıklı TLS istiyor; istemci sertifikası tanımlayın. |
[bağlantı] … (Sunucu istemci sertifikasını kabul etmedi: sertifikayı veren otorite sunucuda güvenilen olarak tanımlı olmalı.) | Sertifikanın otoritesi sunucuda tanımlı değil; süresi dolmuşsa ileti tarihi söyler. |
[bağlantı] PFX dosyası parola istiyor ama parola girilmemiş. … · PFX dosyasının parolası yanlış. … | Parolayı Live'da sistem menüsü › Bağlantılar › Şifre gir ile girin. |
[bağlantı] İstemci sertifikasının PFX dosyası bulunamadı: … · PFX dosyasının tam yolu yazılmalı (ör. C:\Sertifikalar\istemci.pfx): … | Yol yanlış ya da dosya bu bilgisayarda yok. |
[bağlantı] PFX dosyasında özel anahtarlı sertifika yok: … | Sertifikayı özel anahtarıyla birlikte dışa aktarın. |
[bağlantı] Windows sertifika deposunda bu parmak izli sertifika bulunamadı (…): … · Windows sertifika deposundaki sertifikanın özel anahtarı yok (…). | Parmak izini ve deponun (Kişisel) doğru olduğunu denetleyin; sertifikayı PFX olarak özel anahtarıyla içe aktarın. |
[bağlantı] İstemci sertifikasının özel anahtarına erişilemiyor (Live'ı çalıştıran Windows kullanıcısının anahtarı okuma izni olmalı): … | Sertifikanın özel anahtar izinlerine Live'ı çalıştıran kullanıcıyı ekleyin. |
[tag] "…" Bool olarak okunamıyor (true / false, 1 / 0, on / off, yes / no beklenir). · "…" bir sayı değil; Int olarak okunamıyor. | Yükün biçimi tag tipine uymuyor. |
[tag] Yük geçerli bir JSON belgesi değil (…). Adreste "#yol" yazdıysanız yük JSON olmalıdır. · JSON yolu "…" yükte bulunamadı (… alanı yok). | Yük JSON değil ya da yol belgede yok. |
[yazma] MQTT sunucusu yayını onaylamadı (PUBACK gelmedi). | Yazma kalitesi QoS 1 iken sunucu yayını onaylamadı. |
[yazma] MQTT sunucusu tutulan mesajı (retain) desteklemiyor: … | MQTT 5 sunucusu retain kabul etmiyor; Yazılanı sunucuda tut'u kapatın. |
[Studio] İstemci sertifikası seçilmiş ama güvenlik "Yok": sertifika yalnızca TLS ile kullanılır. | Uyarı: Güvenlik'i TLS yapın ya da sertifikayı Yok yapın. |