modbus master mqtt gateway

27
Modbus Master MQTT Gateway Konfigürasyon Uygulaması Kullanım Kılavuzu v1.0

Upload: others

Post on 01-Apr-2022

27 views

Category:

Documents


0 download

TRANSCRIPT

Modbus Master MQTT Gateway

Konfigürasyon Uygulaması Kullanım Kılavuzu

v1.0

2

İçindekiler 1- ModBus – MQTT Çevirici Tag Bazlı Çalışma ..................................................................................... 3

1.1. APN Ayarları............................................................................................................................. 5

1.2. Mqtt Broker Ayarları ................................................................................................................ 5

1.3. Seri Haberleşme Ayarları ......................................................................................................... 7

1.4. Modbus Okuma Ayarları .......................................................................................................... 9

1.5. ModBus Yazma Ayarları ......................................................................................................... 12

2. ModBus – MQTT Çevirici JSON Bazlı Çalışma ................................................................................ 13

2.1. APN Ayarları........................................................................................................................... 14

2.2. Mqtt Broker Ayarları .............................................................................................................. 14

2.3. Seri haberleşme Ayarları ....................................................................................................... 14

2.4. ModBus Okuma Ayarları........................................................................................................ 14

2.5. ModBus Yazma Ayarları ......................................................................................................... 17

2.6. ModBus Arşiv Okuma Ayarları ............................................................................................... 19

2.7. JSON Bazlı Çalışma Detayları ................................................................................................. 24

3. Konfigürasyon Verilerinin Gateway’e yüklenmesi......................................................................... 24

3.1. Eclipse Gateway için XML konfigürasyon yükleme................................................................ 24

3.2. Gemalto Gateway için XML konfigürasyon yükleme ............................................................. 25

4. ModBus Mqtt Gateway Testleri .................................................................................................... 27

3

Konfigürasyon Uygulaması Kullanım Kılavuzu

ModBus MQTT çevrimi 2 farklı firmware üzerinden yapılabilmektedir. Temel olarak 2 firmware aynı

işlevi gerçekleştirmektedir. Aralarındaki fark ModBus sorgulama şeklinden ve okunan verinin Broker’a

gönderim veri formatından kaynaklanmaktadır.

MqttGateway masaüstü konfigürasyon yazılımı her iki firmware için de konfigürasyon yapılmasını

sağlamaktadır.

Uygulama açıldığından ilk olarak firmware seçilmesi gerekmektedir.

1- ModBus – MQTT Çevirici Tag Bazlı Çalışma

Firmware seçimi ekranında “Working Tag Based” seçeneği seçildikten sonra alttaki şekilde uygulama

açılmaktadır.

Konfigürasyona başlamadan önce ilk olarak yazılıma satın alınan gateway’lerle ilgili lisans dosyası

yükleme yapılmalıdır.

4

Lisans yükleme için “License” menüsüne gelinir.

Menüde bulunan License File Location’a tıklanarak açılan pencere aracılığıyla satın alma sonrasında

üretici tarafından gönderilen Lisans XML dosyası seçilir.

İşlem sonrasında Üreticiden satın alınan Gateway’lere ait IMEI numaraları IMEI alanına yüklenecektir.

Lisans yükleme işlemi tamamlanmıştır. Bundan sonraki adımlarda konfigüre edilmek istenen cihazın

IMEI numarası seçilerek devam edilmelidir. Yapılan tüm ayarlar kaydet butonuna basıldığında çalışma

5

yapılan bilgisayarda kaydedilecektir. Yapılan ayarların cihazlara yüklenebilmesi dokümanın sonunda

anlatılacaktır.

1.1. APN Ayarları

MQTT protokolünde tüm bağlantılar Broker’a yapılmaktadır. Broker Server modundan çalışarak

belirlenen portu(1883, 8883, 8884, vb.) sürekli olarak dinlemektedir.

Önemli Not: Broker’a bağlantı için gateway’lere ait sim kartların statik ip almalarına gerek yoktur. Mqtt

Gateway cihazının dışarıdan bağlantı kabul edeceği herhangi bir portu yoktur. Bu sebeple cihaz dinamik

ip ile çalışabilir ve güvenlik konusunda arka kapısı bulunmamaktadır.

APN ayarları sekmesinde Gateway’in mobil şebekeye bağlanabilmesi için gerekli olan parametreler

belirlenir.

APN Name: Sim kartın mobil şebekede bulunacağı APN ismidir. Şirket için özel bir APN kullanılmıyorsa

“internet” APN’i kullanılmaktadır. Mobil Operatör aracılığıyla oluşturulmuş şirkete özgü APN mevcutsa

bu APN adı bu alana girilir.

User Name / Password: APN’e dahil olabilmek için gerekli olan kullanıcı adı ve şifre parametreleridir.

Önemli Not: Gateway’e takılan sim kart için PIN kilidi kaldırılmış olması gereklidir.

1.2. Mqtt Broker Ayarları

Mqtt protokolünde birçok protokolde bulunan Master/Slave kavramı yoktur. Ölçüm yapan sensörler,

enerji sayaçları, RTU’lar, PLC’ler, gateway’ler, sunucu yazılımları, vb. tüm cihazlar/sistemler, Client

olarak adlandırılır. Bu Client’lar arasında veri trafiğini yöneten ise Broker yazılımıdır. Bu sebeple tüm

Client’ların veri gönderip aldığı tek uygulama Broker yazılımıdır. Broker yazılımlarına örnek olarak

Mosquitto, HiveMQ, vb. verilebilir. Birçok broker yazılımı hem Windows sunucularda hem de Linux

sunucularda çalışabilmektedir. Yine birçoğu hem ücretsiz olup open source olarak kaynak kodlarına

ulaşılabilmektedir. Buna ilave olarak Mosquitto broker’ına ait internet üzerinde tüm geliştiricilerin

testlerini yapabilmesi için test.mosquitto.org domain’inde çalışan bir sunucu bulunmaktadır.

Bu sekmede ModBus MQTT Gateway’in Broker’a bağlantı yapabilmesi için gerekli olan ayarlar

bulunmaktadır.

6

Broker URL: Bağlantı yapılan broker’ın domain adı veya ip adresidir.

Örnek olarak: test.mosquitto.org, test.mosquitto.org:1883, test.mosquitto.org:8883 şeklinde bilgi

girişi yapılabilir.

Port bilgisi girilmediği takdirde varsayılan port 1883 olarak belirlenir.

Broker’a bağlantı 2 farklı şekilde gerçekleşmektedir.

1- Güvenliksiz haberleşme

2- TLS/SSL üzerinden güvenlikli haberleşme

Her iki seçenek için de kullanıcı adı ve şifre kullanılabilir veya kullanılmayabilmektedir. Bu sebeple

toplamda 4 farklı seçenek ortaya çıkmaktadır.

Güvenliksiz haberleşme (Kullanıcı adı ve şifre olmadan)

Güvenliksiz haberleşme (Kullanıcı adı ve şifre ile)

TLS/SSL üzerinden güvenlikli haberleşme (Kullanıcı adı ve şifre olmadan)

TLS/SSL üzerinden güvenlikli haberleşme (Kullanıcı adı ve şifre ile)

MqttGateway cihazları tüm haberleşme güvenlik seçeneklerini desteklemektedir.

Sadece 2G(GPRS) üzerinden haberleşme yapılan Eclipse ECL-BGS5 ve Gemalto BGS5T cihazları TLS/SSL

güvenlik seçeneğini desteklememektedir.

Genel olarak güvenliksiz haberleşme kullanan Broker’lara bağlantı 1883 üzerinden yapılırken TLS/SSL

güvenlik seçeneğini kullanan Broker’lara bağlantı 8883 veya 8884 portlarından sağlanmaktadır.

User Name / Password: Broker’a kullanıcı adı ve şifre ile bağlantı yapılması gerektiği durumda

belirlenmesi gereken alanlardır.

Client Id: Broker’a bağlantı için kullanılan Client Id’nin ön ek değeridir. Modbus MQTT gateway her

bağlantı için bu ön eki kullanıp rastgele bir Client Id üretmektedir.

7

“MqttGateway” ön eki için örnek Client Id, “MqttGateway_1564321” şeklinde olabilir. Her yeni

bağlantıda rastgele bir sayı ile bağlantı yapılır.

Önemli Bilgi: Broker’a yapılan bağlantıların Client Id bazında tekil olma zorunluluğu vardır.

Mqtt Protocol: Güvenlik seçenekleri için seçilmesi gereken bilgidir.

“Mqtt/TCP” seçilmesi durumunda güvenliksiz haberleşme geçerli olacaktır.

“Server Authentication” seçilmesi durumunda Gateway’e sunucu güvenlik sertifikası(CA certificate)

yüklenir ve TLS/SSL üzerinden bağlantı yapılır.

Mqtt Version: Mqtt protokolünün versiyon bilgisidir.

Default: Broker’ın desteklediği Mqtt protokol versiyonu kullanılır.

“Mqtt 3.1”: Mqtt versiyon 3.1 kullanılır.

“Mqtt 3.1.1”: Mqtt versiyon 3.1.1 kullanılır.

TLS/SSL Version: TLS/SSL güvenlik seçeneği üzerinden Broker’a bağlantı yapılması durumunda

kullanılan TLS/SSL versiyonu seçilir. Varsayılan olarak TLSv1.2 seçilebilir.

Keep Alive: Saniye bazında Broker’a bağlantıda kullanılan canlı kalma süresidir. Varsayılan olarak 120

saniye olarak belirlenebilir.

Clean Session: Her yeni bağlantı içi önceki oturum bilgilerinin temizlenmesi seçeneğidir. Varsayılan

olarak “OFF” seçilebilir.

1.3. Seri Haberleşme Ayarları

RS232 veya RS485 hattı üzerinden Modbus protokolü ile verilerin alınabilmesi için seri haberleşme

ayarlarının yapılması gerekmektedir.

8

Baud Rate: Seri haberleşme üzerinden haberleşme yapılacak cihazların bulunduğu haberleşme hızıdır.

Seçenekler; 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400 şeklindedir.

Genel Bilgi: Baud Rate arttıkça haberleşme hızı artmaktadır. Fakat hattaki parazitlerden etkilenme

oranı artacağından dolayı veri bozulmaları yaşanabilir.

Önemli Not: Gemalto gateway’ler 1200 Baud Rate - 230400 Baud Rate aralığını desteklemektedir.

Eclipse gateway’ler ise 300 Baud Rate - 230400 Baud Rate aralığını desteklemektedir.

Parity: None, Odd ve Even Parite kullanılabilmektedir.

Stop Bit: 1 ve 2 stop bit kullanılabilmektedir.

Data Bit: 7 ve 8 data bit kullanılabilmektedir.

Timeout (ms): ModBus sorguları sonucunda seri hattan cevap gelmesi için beklenecek maksimum

süredir.

Önemli Not: Timeout süresi Baud Rate değerine uygun olarak seçilmelidir.

Delay Between Polls (ms): İki ModBus sorgusu arasında beklenecek süre anlamına gelmektedir. Bazı

cihazlar bekleme yapılmadığında çok hızlı sorgulamalara cevap verememektedir. Bu durumda bu süreyi

sıfırdan büyük belirlemekte fayda vardır. Örnek olarak 100 milisaniye belirlenebilir.

Port: Gateway’in kullanılacak seri portudur.

Eclipse Gateway’ler için COM0 => RS232, COM1 => RS485’i ifade etmektedir.

Gemalto Gateway’lerde tek seri haberleşme desteği bulunduğu sadece COM0 geçerlidir.

9

Önemli Not: Eclipse gateway’ler için RS232 bağlantısı Tx, Rx ve GND uçlarından yapılmaktadır.

Gemalto Terminallerde ise RS232 bağlantısı 9 Pin (D-Sub) üzerinden yapılmaktadır. Flow Control

mümkündür.

Önemli Not: Eclipse gateway’ler için RS232 ve RS485 portları aynı anda kullanılmamaktadır. Ayardan

COM0 seçimi yapılırsa sadece RS232 portu, COM1 seçimi yapılırsa RS485 portu kullanılabilmektedir.

1.4. Modbus Okuma Ayarları

Modbus Protokolü üzerinden okunacak register’ların belirlendiği sekmedir.

10

Slave Id: Okuma yapılacak olan Slave’in adres bilgisidir.

ModBus Function: Gönderilecek ModBus sorgusu için geçerli olan fonksiyon numarasıdır.

Desteklenen fonksiyonlar alttaki gibidir.

Read Coils (0X),

Read Discrete Inputs(1X),

Read Holding Registers(4X),

Read Input Registers(3X).

Modbus Address: Tanımlanan verinin register adresidir. Adres alanı 0-65535 arasında olmak

zorundadır. Her fonksiyon için adres 0’dan başlanacak şekilde düşünülmelidir.

Data Type: Veri tipi bilgisidir.

Desteklenen veri tipleri alttaki gibidir.

Integer 32 Bit

Float 32 Bit

Integer 64 Bit (Long)

Float 64 Bit (Double)

Integer 16 Bit

Float 16 Bit

Unsigned Integer 32 Bit

Unsigned Integer 64 Bit

Unsigned Integer 16 Bit

Unix Time

Time 3 Registers(year/month, day/hour, minute/second)

Byte Order: Verinin Byte sıralamasıdır. Seçenekler alttaki gibidir.

Big Endian

Little Endian

Big Endian Byte Swap

Little Endian Byte Swap

Reading Period: Verinin okuma periyodudur. Okuma periyodu olarak alttaki 4 seçenek bulunmaktadır.

Dakikada bir okuma

11

5 dakikada bir okuma

15 dakikada bir okuma

60 dakikada bir okuma

Gateway enerjilendiği anda zaman bilgisi “2004-01-01 00:00:00” olarak ilerlemeye başlar.

Gateway’lerde pil bulunmadığı için güncel zaman bilgisi bulunmamaktadır. Varsayılan zaman bilgisinin

ilerlemesine göre okumalar periyodu geldiğinde gerçekleşecektir. Örnek olarak 60 dakikada bir okuma

seçeneği saat başlarında gerçekleşmektedir. 15 dakikalık okumalar 0, 15, 30 ve 45. dakikalarda

gerçekleşmektedir.

Live Mode: Canlı mod verinin sürekli olarak sorgulanması ve Broker’a gönderilmek istenmesi

durumunda kullanılır. Canlı modda ayarlanan veriler 2. önem derecesinde okunmaktadır. 1. önem

derecesinde bulunan veriler canlı modda olmayıp Reading Period bilgisine göre okunan verilerdir.

QoS: Mqtt Protokolü için geçerli olan Quality of Service parametresidir. Mqtt mesajının bir

parametresidir.

QoS 0, this service level guarantees a best-effort delivery. There is no guarantee of delivery. The recipient does not

acknowledge receipt of the message and the message is not stored and re-transmitted by the sender. QoS level 0 is often

called “fire and forget” and provides the same guarantee as the underlying TCP protocol.

QoS level 1 guarantees that a message is delivered at least one time to the receiver. The sender stores the message until it

gets a PUBACK packet from the receiver that acknowledges receipt of the message. It is possible for a message to be sent or

delivered multiple times.

QoS 2 is the highest level of service in MQTT. This level guarantees that each message is received only once by the intended

recipients. QoS 2 is the safest and slowest quality of service level. The guarantee is provided by at least two request/response

flows (a four-part handshake) between the sender and the receiver. The sender and receiver use the packet identifier of the

original PUBLISH message to coordinate delivery of the message.

Kaynak: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels/

Retain: Mqtt mesajının bir parametresidir. Retain olarak Broker’a gönderilen bir mesaj Broker’da

tutulur ve bu mesaja abone olan client’lara her abonelik sonrasında gönderilir.

Topic Name: Modbus üzerinden okunup ilgili veri tipine dönüştürülen veri ile hazırlanan Mqtt

mesajının konu bilgisidir.

Topic Name Konusunda Tavsiyeler:

1- Topic’ler belirlenirken her ModBus cihazın bir kimliği olmasına dikkat edilmelidir. Bu kimlik

cihazın seri numarası olabilir.

2- Topic belirlenirken ilk olarak cihazın model tipi belirlenmesinde fayda vardır. Örnek olarak bir

sıcaklık sensöründen veri alınacaksa Topic, “Sensor/Temperature/…” şeklinde başlayabilir.

Önemli Bilgi: Modbus MQTT Çeviricinin Tag Bazlı Çalışma Mantığı

Tag Bazlı çalışma prensibinde her ModBus register’ı kendi başına okuma yapılır ve okuma sonrasında

veri Broker’a gönderilir.

12

Üstteki ekran görüntüsü üzerinden örnek verilirse çalışma sırası alttaki gibi olacaktır.

İşlem 1: ModBus Slave Id’si 1 olan cihaza 0 adresinden 2 register sorgulama yap. Gelen cevabı float’a çevir.

İşlem 2: Çevrim yapılan veriyi Mqtt Mesajının payload’u olarak belirle. Alttaki topic ismiyle ve QoS/Retain bilgileriyle Broker’a gönder.

“EnergyAnalyzer/12345678/InstantMeasurement/VoltageAverage”

İşlem 3: ModBus Slave Id’si 1 olan cihaza 2 adresinden 2 register sorgulama yap. Gelen cevabı float’a çevir.

İşlem 4: Çevrim yapılan veriyi Mqtt Mesajının payload’u olarak belirle. Alttaki topic ismiyle ve QoS/Retain bilgileriyle Broker’a gönder.

“EnergyAnalyzer/12345678/InstantMeasurement/CurrentTotal”

İşlem 5: ModBus Slave Id’si 1 olan cihaza 4 adresinden 2 register sorgulama yap. Gelen cevabı float’a çevir.

İşlem 6: Çevrim yapılan veriyi Mqtt Mesajının payload’u olarak belirle. Alttaki topic ismiyle ve QoS/Retain bilgileriyle Broker’a gönder.

“EnergyAnalyzer/12345678/InstantMeasurement/ActivePowerTotal”

Örnekten anlaşılacağı üzere her bir register için bir ModBus sorgusu gönderilir ve alınan veri Broker’a

herhangi bir formata(JSON, XML, vb.) dönüştürülmeden text olarak gönderilir.

Broker’a gelen örnek veriler alttaki şekilde olacaktır.

Mesaj 1 Topic: EnergyAnalyzer/12345678/InstantMeasurement/VoltageAverage

Mesaj 1 Payload: 225.476

Mesaj 2 Topic: EnergyAnalyzer/12345678/InstantMeasurement/CurrentTotal

Mesaj 2 Payload: 26.47

Mesaj 3 Topic: EnergyAnalyzer/12345678/InstantMeasurement/ActivePowerTotal

Mesaj 3 Payload: 45.467

1.5. ModBus Yazma Ayarları

Gateway, ModBus üzerinden okuma yapıp bu verileri Broker’a gönderebildiği gibi Broker’dan

kendisiyle ilgili gelen verileri alıp ModBus cihazlara yazma yapabilmektedir.

Gateway üzerinden ModBus cihazlara yazma yapabilmek için tüm yazılabilir bilgilerin bu sekmede

belirtilmiş olması gerekmektedir.

Slave Id: Yazma yapılacak olan Slave’in adres bilgisidir.

ModBus Function: Yazma yapılacak olan ModBus fonksiyonudur.

13

Tag Bazlı çalışan ModBus Mqtt gateway için geçerli olan Modbus fonksiyonlar alttaki gibidir.

Write Single Register(06)

Write Multiple Registers (16)

Write Single Coil (05)

Tag Bazlı çalışan Modbus MQTT gateway için Int32, Float32, Int64, Float64 gibi veriler birden fazla

register olduğu için Write Multiple Registers fonksiyonu da desteklenmektedir. Fakat, Coil değerleri

sadece 1 bit olduğu ve her veri bir anlam ifade ettiği için Write Multiple Coils desteklenmemektedir.

Modbus Address: Yazma yapılacak olan verinin register adresidir.

Data Type: Yazma yapılacak olan verinin tip bilgisidir.

Byte Order: Yazma yapılacak olan register’ın byte sıralamasıdır.

Topic Name: Yazma yapılacak olan register için broker’a abone olunan topic’tir.

Gateway enerjilendiğinde Broker’a bağlantı sağlandıktan sonra yazma topic’lerine abonelik

yapılmaktadır. Broker’a herhangi bir kaynaktan gönderilen bir Mqtt mesajının topic bilgisi, yazma

topic’leri arasında bulunursa bu mesaj otomatik olarak Broker’dan gateway’e gönderilir. Mesajı alan

gateway bu yazma talebini yazma kuyruğuna ekler.

Sonrasında gateway okuma ve yazma kuyruğuna göre işlemleri gerçekleştirir. Yazma kuyruğunun

önceliği okuma kuyruğundan daha yüksektir. Eğer yazma kuyruğunda bir istek varsa önce bu istek

gerçekleştirilir. Sonrasında okuma kuyruğundaki işlemler gerçekleşir.

Önemli Not: Gateway hiçbir zaman ModBus için aynı anda 2 sorgulama yapmaz.

Dikkat Edilmesi Gereken Nokta:

1- Okuma topic’leri ve yazma topic’leri birbiriyle aynı olması halinde, okunan veri Broker’a

gönderildikten sonra Broker tarafından gateway’e geri iletilir. Bu veri gateway tarafından

cihaza yazmaya çalışılır. Bu durum, mantık hatasına sebep olur.

2- Yazma topic’lerine “+” ve “#” gibi ifadeler eklenmemelidir. Bu ifadelerin geçtiği yazma

register’larına ModBus yazma yapılmaz.

2. ModBus – MQTT Çevirici JSON Bazlı Çalışma

Firmware seçimi ekranında “Working JSON Based” seçeneği seçildikten sonra alttaki şekilde uygulama

açılmaktadır.

14

Konfigürasyona başlamadan önce ilk olarak yazılıma satın alınan gateway’lerle ilgili lisans dosyası

yükleme yapılmalıdır.

Bu işlem “Tag Bazlı Çalışma”daki işlemle birebir aynıdır.

2.1. APN Ayarları

Bu kısım “1.1. APN Ayarları” kısmı ile benzer şekilde konfigüre edilir.

2.2. Mqtt Broker Ayarları

Bu kısım “1.2. Mqtt Broker Ayarları” kısmı ile benzer şekilde konfigüre edilir.

2.3. Seri haberleşme Ayarları

Bu kısım “1.3. Seri Haberleşme Ayarları” kısmı ile benzer şekilde konfigüre edilir.

2.4. ModBus Okuma Ayarları

Modbus Protokolü üzerinden okunacak register’ların belirlendiği sekmedir.

Grid’de ilk satırın Edit butonuna basıldığında alttaki pencere karşımıza çıkar.

15

Önemli Bilgi: Modbus MQTT Çeviricinin JSON Bazlı Çalışma Mantığı

JSON Bazlı çalışma prensibinde Modbus üzerinden veriler okunduktan sonra veri grubu şeklinde JSON

formatında Broker’a gönderim yapılır. Broker’a veri gönderim ve verilerin okunması grup bazında

yapılmaktadır.

Gruba ait parametreler alttaki gibidir.

Slave Id: Okuma yapılacak olan Slave’in adres bilgisidir.

Reading Period: Verinin okuma periyodudur. Okuma periyodu olarak alttaki 4 seçenek bulunmaktadır.

Dakikada bir okuma

5 dakikada bir okuma

15 dakikada bir okuma

60 dakikada bir okuma

Live Mode: Canlı mod grup verilerinin sürekli olarak sorgulanması ve Broker’a gönderilmek istenmesi

durumunda kullanılır. Canlı modda okunacak veriler 2 önem derecesinde okunmaktadır. 1. önem

derecesinde bulunan gruplar canlı modda olmayıp Reading Period bilgisine göre okunan verilerdir.

QoS: Mqtt Protokolü için geçerli olan Quality of Service parametresidir. Mqtt mesajının bir

parametresidir.

QoS 0, this service level guarantees a best-effort delivery. There is no guarantee of delivery. The recipient does not

acknowledge receipt of the message and the message is not stored and re-transmitted by the sender. QoS level 0 is often

called “fire and forget” and provides the same guarantee as the underlying TCP protocol.

QoS level 1 guarantees that a message is delivered at least one time to the receiver. The sender stores the message until it

gets a PUBACK packet from the receiver that acknowledges receipt of the message. It is possible for a message to be sent or

delivered multiple times.

QoS 2 is the highest level of service in MQTT. This level guarantees that each message is received only once by the intended

recipients. QoS 2 is the safest and slowest quality of service level. The guarantee is provided by at least two request/response

flows (a four-part handshake) between the sender and the receiver. The sender and receiver use the packet identifier of the

original PUBLISH message to coordinate delivery of the message.

Kaynak: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels/

Retain: Mqtt mesajının bir parametresidir. Retain olarak Broker’a gönderilen bir mesaj Broker’da

tutulur ve bu mesaja abone olan client’lara her abonelik sonrasında gönderilir.

Topic Name: Modbus üzerinden okunup ilgili veri tipine dönüştürülen grup verileri ile hazırlanan Mqtt

mesajının konu bilgisidir. Topic Name grup için geçerlidir.

Block Read: Grup için, Modbus okumalarının tek tek mi yoksa bir sorguda birden fazla verinin

okunabileceğini belirleyen parametredir. Seçenek eğer seçilmezse her veri için bir Modbus sorgusu

gönderilir.

16

Seçenek seçilmesi durumunda üstteki konfigürasyon için alttaki Modbus sorguları gönderilir.

Modbus Sorgu 1: 0 adresinden 20 Register oku.

Modbus Sorgu 2: 2000 adresinden 4 Register oku.

Modbus Sorgu 3: 2016 adresinden 2 Register oku.

Bir grubun içindeki parametrelerin açıklaması alttaki gibidir.

Address: Tanımlanan Register’ın adresidir. Adres alanı 0-65535 arasında olmak zorundadır. Her

fonksiyon için adres 0’dan başlanacak şekilde düşünülmelidir.

ModBus Function: Gönderilecek ModBus sorgusu için geçerli olan fonksiyon numarasıdır.

Desteklenen fonksiyonlar alttaki gibidir.

Read Coils (0X),

Read Discrete Inputs(1X),

Read Holding Registers(4X),

Read Input Registers(3X).

Byte Order: Verinin Byte sıralamasıdır. Seçenekler alttaki gibidir.

Big Endian

Little Endian

Big Endian Byte Swap

Little Endian Byte Swap

Data Type: Veri tipi bilgisidir.

Desteklenen veri tipleri alttaki gibidir.

Integer 32 Bit

Float 32 Bit

Integer 64 Bit (Long)

Float 64 Bit (Double)

Integer 16 Bit

Float 16 Bit

Unsigned Integer 32 Bit

Unsigned Integer 64 Bit

Unsigned Integer 16 Bit

Unix Time

Time 3 Registers(year/month, day/hour, minute/second)

Register Description: Okunan verinin JSON formatındaki etiketidir.

17

Grup için geçerli olan örnek JSON formatındaki Mqtt Mesajı:

Topic: EnergyAnalyzer/12345678/InstantValue

Payload:

{

"PowerFactorAverage" : 4.123,

"VoltagePhase1Phase2" : 380.545,

"VoltagePhase2Phase3" : 356.488,

"VoltagePhase3Phase1" : 298.564,

"VoltageAverage" : 225.544,

"CurrentTotal" : 36.455,

"ActivePowerTotal" : 46.44,

"ReactivePowerTotal" : 5.54,

"ApperantPowerTotal" : 1.121,

"CosPhiAverage" : 0.998,

"CurrentTransformerRatio" : 8.0,

"VoltageTransformerRatio" : 1,

"DayStart" : 0

}

2.5. ModBus Yazma Ayarları

Gateway, ModBus üzerinden gruplar için okuma yapıp bu verileri Broker’a gönderebildiği gibi

Broker’dan kendisiyle ilgili gelen grup verilerini alıp ModBus cihazlara yazma yapabilmektedir.

Grid’de ilk satırın Edit butonuna basıldığında alttaki pencere karşımıza çıkar.

18

Gateway üzerinden ModBus cihazlara yazma yapabilmek için tüm yazılabilir bilgilerin bu sekmede

belirtilmiş olması gerekmektedir.

Yazma grubu için geçerli parametreler alttaki gibidir.

Slave Id: Yazma yapılacak olan Slave’in adres bilgisidir.

Block Write: ModBus yazmaların tek tek mi yoksa mümkün olması durumunda birden fazla verinin aynı

yazılması şeklinde mi gönderileceği bu seçenek ile belirlenir.

Topic Name: Yazma yapılacak olan grup için broker’a abone olunan topic’tir.

Gateway enerjilendiğinde Broker’a bağlantı sağlandıktan sonra yazma topic’lerine abonelik

yapılmaktadır. Broker’a herhangi bir kaynaktan gönderilen bir Mqtt mesajının topic bilgisi, yazma

topic’leri arasında bulunursa bu mesaj otomatik olarak Broker’dan gateway’e gönderilir. Mesajı alan

gateway bu yazma talebini yazma kuyruğuna ekler.

Sonrasında gateway okuma ve yazma kuyruğuna göre işlemleri gerçekleştirir. Yazma kuyruğunun

önceliği okuma kuyruğundan daha yüksektir. Eğer yazma kuyruğunda bir istek varsa önce bu istek

gerçekleştirilir. Sonrasında okuma kuyruğundaki işlemler gerçekleşir.

Önemli Not: Gateway hiçbir zaman ModBus için aynı anda 2 sorgulama yapmaz.

Dikkat Edilmesi Gereken Nokta:

1- Okuma topic’leri ve yazma topic’leri birbiriyle aynı olması halinde, okunan veri Broker’a

gönderildikten sonra Broker tarafından gateway’e geri iletilir. Bu veri gateway tarafından

cihaza yazmaya çalışılır. Bu durum, mantık hatasına sebep olur.

2- Yazma topic’lerine “+” ve “#” gibi ifadeler eklenmemelidir. Bu ifadelerin geçtiği yazma

register’larına ModBus yazma yapılmaz.

Tanımlanan bir yazma grubunun içerisinde bulunan parametreler alttaki gibidir.

Modbus Address: Yazma yapılacak olan verinin register adresidir.

ModBus Function: Yazma yapılacak olan ModBus fonksiyonudur.

JSON Bazlı çalışan ModBus Mqtt gateway için geçerli olan Modbus fonksiyonlar alttaki gibidir.

Write Single Register(06)

Write Multiple Registers (16)

Write Single Coil (05)

Write Multiple Coil (15)

Byte Order: Yazma yapılacak olan verinin’ın byte sıralamasıdır.

Data Type: Yazma yapılacak olan verinin tip bilgisidir.

Register Description: Grup yazma için Broker’dan alınan JSON formatındaki veride bulunan register

için açıklama bilgisidir.

19

Örnek olarak üstteki grup yazma konfigürasyonu için Broker’dan alttaki şekilde JSON formatında veri

gelebilir.

Topic: EnergyAnalyzer/12345678/ConfigSet

Payload:

{

“CurrentTransformerRatio”: 10,

“VoltageTransformerRatio”: 1,

“DayStart”: 0,

“MonthStart”: 1,

}

Bu mesaj Gateway’e ulaştıktan sonra grup için belirlenen 4 veri cihaza yazılmaya çalışılır.

Eğer mesaj alttaki şekilde gelirse sadece gelen veri ModBus üzerinden cihaza yazılmaya çalışılacaktır.

Topic: EnergyAnalyzer/12345678/ConfigSet

Payload:

{

“CurrentTransformerRatio”: 10

}

2.6. ModBus Arşiv Okuma Ayarları

Arşiv verileri, ModBus protokolü ile haberleşme yapılan cihazın dâhili hafızasında tutulan geçmişe

yönelik verilerdir.

Örnek olarak dâhili arşivi olan bir cihazda sıcaklık ölçümü, nem ölçümü ve pulse sayım işlevinin

bulunduğunu düşünelim. Bu cihazın alttaki şekilde ModBus tablosu olsun.

Data Function Address Data Type Byte Order

Instant Temperature Read Holding Register 0 Float32 Big Endian

Instant Humidity Read Holding Register 2 Float32 Big Endian

Instant Total Pulse Index Read Holding Register 4 Int32 Big Endian

Bu cihazın saatlik olarak ölçüm ve sayım verilerini hafızasında alttaki şekilde tutabilir. Cihazın

hafızasında 1920 adet saatlik(80 gün) arşiv verisi tutabildiği varsayılmıştır.

Data Function Address Data Type Byte Order

Minimum Temperature of 1 hour ago Read Holding Register 1000 Float32 Big Endian

Average Temperature of 1 hour ago Read Holding Register 1002 Float32 Big Endian

Maximum Temperature of 1 hour ago Read Holding Register 1004 Float32 Big Endian

Minimum Humidity of 1 hour ago Read Holding Register 1006 Float32 Big Endian

Average Humidity of 1 hour ago Read Holding Register 1008 Float32 Big Endian

Maximum Humidity of 1 hour ago Read Holding Register 1010 Float32 Big Endian

Pulse Count of 1 hour ago Read Holding Register 1012 Int32 Big Endian

Minimum Temperature of 2 hours ago Read Holding Register 1014 Float32 Big Endian

20

Üstteki örnekte gösterilen Modbus arşiv verileri JSON bazlı çalışan firmware ile okunabilmektedir.

Arşivin tipi; ölçüm ve sayım yapan cihazın kabiliyetine göre saatlik olabileceği gibi günlük ve aylık da

olabilir. Günlük olarak bulunması durumunda veriler bir önceki gün, iki önceki gün, …, 180 önceki gün,

vb. şekilde Modbus arşiv tablosunda bulunacaktır. Aylık olarak bulunması durumunda veriler bir önceki

ay, iki önceki ay, …., 36 önceki ay, vb. şekilde Modbus arşiv tablosunda bulunacaktır.

Gateway üzerinden arşiv verilerinin okunabilmesi için sadece birinci arşiv verisinin tanımlanması

yeterlidir.

Üstte bulunan saatlik arşiv verileri alttaki şekilde konfigürasyon yazılımının ModBus Arşiv sekmesine

tanımlanmalıdır.

Bilgilerin açıklaması alttaki gibidir.

Slave Id: Arşiv okuma yapılacak olan Slave’in adres bilgisidir.

Average Temperature of 2 hours ago Read Holding Register 1016 Float32 Big Endian

Maximum Temperature of 2 hours ago Read Holding Register 1018 Float32 Big Endian

Minimum Humidity of 2 hours ago Read Holding Register 1020 Float32 Big Endian

Average Humidity of 2 hours ago Read Holding Register 1022 Float32 Big Endian

Maximum Humidity of 2 hours ago Read Holding Register 1024 Float32 Big Endian

Pulse Count of 2 hours ago Read Holding Register 1026 Int32 Big Endian

Minimum Temperature of 3 hours ago Read Holding Register 1028 Float32 Big Endian

Average Temperature of 3 hours ago Read Holding Register 1030 Float32 Big Endian

Maximum Temperature of 3 hours ago Read Holding Register 1032 Float32 Big Endian

Minimum Humidity of 3 hours ago Read Holding Register 1034 Float32 Big Endian

Average Humidity of 3 hours ago Read Holding Register 1036 Float32 Big Endian

Maximum Humidity of 3 hours ago Read Holding Register 1038 Float32 Big Endian

Pulse Count of 3 hours ago Read Holding Register 1040 Int32 Big Endian

… … … … …

Minimum Temperature of 1920 hours ago Read Holding Register 26866 Float32 Big Endian

Average Temperature of 1920 hours ago Read Holding Register 26868 Float32 Big Endian

Maximum Temperature of 1920 hours ago Read Holding Register 26870 Float32 Big Endian

Minimum Humidity of 1920 hours ago Read Holding Register 26872 Float32 Big Endian

Average Humidity of 1920 hours ago Read Holding Register 26874 Float32 Big Endian

Maximum Humidity of 1920 hours ago Read Holding Register 26876 Float32 Big Endian

Pulse Count of 1920 hours ago Read Holding Register 26878 Int32 Big Endian

21

ModBus Function: Gönderilecek ModBus sorgusu için geçerli olan fonksiyon numarasıdır.

Desteklenen fonksiyonlar alttaki gibidir.

Read Coils (0X),

Read Discrete Inputs(1X),

Read Holding Registers(4X),

Read Input Registers(3X).

Archive Type: Arşiv verisinin zaman periyodudur. Saatlik, günlük ve aylık arşiv veri tipleri seçilebilir.

Day – Hour – Minute: 3 parametre arşiv verisinin ne zaman okunacağını belirlemektedir.

Aylık arşiv okumaları için; Gün parametresi arşivin okunacağını günü, Saat parametresi arşivin

okunacağı saati, Dakika parametresi de arşivin okunacağı dakikayı belirlemeyi sağlar.

Day: 1, Hour: 0, Minute: 15 şeklinde belirlenirse; ayın ilk gününün ilk saatin 15. dakikasında arşiv verileri

okunmaya başlanacaktır.

Day: 1, Hour: 8, Minute: 15 şeklinde belirlenirse; ayın ilk gününün 8. saatin 15. dakikasında arşiv verileri

okunmaya başlanacaktır.

Günlük arşiv okumaları için; Saat parametresi arşivin okunacağı saati, Dakika parametresi de arşivin

okunacağı dakikayı belirlemeyi sağlar. Bu arşiv tipi için Gün parametresi kullanılmamaktadır.

Hour: 8, Minute: 15 şeklinde belirlenirse; günün 8. saatin 15. dakikasında arşiv verileri okunmaya

başlanacaktır.

Saatlik arşiv okumaları için; Dakika parametresi de arşivin okunacağı dakikayı belirlemeyi sağlar. Bu

arşiv tipi için Gün ve Saat parametresi kullanılmamaktadır.

Minute: 15 şeklinde belirlenirse; saatin 15. dakikasında arşiv verileri okunmaya başlanacaktır.

Üstteki örnek için saatlik arşiv okumasının gerçekleşme zamanı saatin 10. dakikası olarak belirlenmiştir.

Bu parametre ile günün alttaki zamanlarında saatlik arşiv okuması başlatılacaktır.

00:10, 01:10, 02:10, 03:10, 04:10, 05:10, 06:10, 07:10, 08:10, 09:10, 10:10, 11:10,

12:10, 13:10, 14:10, 15:10, 16:10, 17:10, 18:10, 19:10, 20:10, 21:10, 22:10, 23:10,

Archive Count: Arşiv okuması zamanı geldiği durumda kaç adet arşivin okunup broker’a

gönderileceğinin belirlendiği parametredir. Üstteki örnek için bu parametre 24 olarak belirlenmiştir.

Her arşiv okuma zamanı geldiğinde geçmişe yönelik son 24 saate ait arşiv tek tek okunup broker’a

gönderim sağlanacaktır.

Start Address – Register Count: ModBus arşiv okumaları için her arşiv okuması bir ModBus sorgusu ile

yapılmaktadır. Bu iki ayar ilk Modbus arşivinin hangi adresten başladığını ve arşivin ne kadar register’da

tutulduğu bilgisini içermektedir.

Bu bilgilere göre Arşiv büyüklüğü 125 register’da büyük olamaz. Çünkü ModBus protokolünün

standardına göre bir sorguda maksimum 125 register sorgulanabilmektedir.

Bazı durumlarda arşiv verileri içindeki tüm bilgiler alınmak istenmeyebilir. Verilen örnekte arşivdeki son

veri olan Pulse Count alınmak istenmemesi durumunda Register Count azaltılmamalıdır. Azaltılması

durumunda 2. arşiv verisinin başlangıç adresi yanlış hesaplanır.

22

Verilen örnekte bir arşiv okuması toplam 14 register’da tutulduğu için Register Count 14 olarak

belirlenmiştir.

QoS: Mqtt Protokolü için geçerli olan Quality of Service parametresidir. Mqtt mesajının bir

parametresidir. Detay içim 2.4. bölümüne bakılabilir.

Retain: Mqtt mesajının bir parametresidir. Retain olarak Broker’a gönderilen bir mesaj Broker’da

tutulur ve bu mesaja abone olan client’lara her abonelik sonrasında gönderilir.

Topic Name: Okunan arşiv verisinin broker’a gönderildiği Mqtt mesajının konu bilgisidir. Topic Name

arşiv için geçerlidir.

Bir arşiv okumanın detay bilgileri alttaki gibidir.

Address: Arşiv için geçerli olan adres bilgisidir. Bu bilgi cihazın Modbus tablosunda bulunan adres

değildir. Arşivin içinde bulunduğu register sırasıdır. Örnek için “Minimum Temperature of x hour(s) ago

register”ı 0 adresinde tanımlanmıştır.

Byte Order: Verinin Byte sıralamasıdır. Seçenekler alttaki gibidir.

Big Endian

Little Endian

Big Endian Byte Swap

Little Endian Byte Swap

Data Type: Veri tipi bilgisidir.

Desteklenen veri tipleri alttaki gibidir.

Integer 32 Bit

Float 32 Bit

Integer 64 Bit (Long)

Float 64 Bit (Double)

Integer 16 Bit

Float 16 Bit

Unsigned Integer 32 Bit

23

Unsigned Integer 64 Bit

Unsigned Integer 16 Bit

Unix Time

Time 3 Registers(year/month, day/hour, minute/second)

Register Description: Okunan arşiv verisinin JSON formatındaki etiketidir.

Bu bilgilere göre örnek için broker’a gönderilen Mqtt mesajı alttaki gibi olabilir.

Topic: Sensor/2546546/HourlyArchive

Payload:

{

"ArchiveIndex" : 1

, "CurrentDateTime" : "2019-06-01 16:10:24"

, "MinimumTemperature" : 24.144

, "AverageTemperature" : 31.648

, "MaximumTemperature" : 41.456

, "MinimumHumidity" : 49.154

, "AverageHumidity" : 53.145

, "MaximumHumidity" : 55.987

, "PulseCount" : 545

}

ArchiveIndex değeri bu verinin hangi arşive karşılık geldiğini ifade eder. Örnek payload’da 1 olarak

görülmesi bunun 1 saat önceki saatlik arşiv verisi olduğunu göstermektedir.

CurrentDateTime parametresi okumanın yapıldığı zaman bilgisidir. Verilen örnekte çalışma dakika

parametresi “10” olarak belirlenmişti. Örnek Payload’da verinin 16. saatin 10. dakikasında arşiv

okumanın yapıldığı görülmektedir. Bu bilgiye ve ArchiveIndex değerine göre Payload’da bulunan arşiv

verilerinin “2019-06-01 15:00:00” ile “2019-06-01 16:00:00” arasına ait olduğu söylenebilir.

ArchiveIndex 2 olması durumunda verilerin “2019-06-01 14:00:00” ile “2019-06-01 15:00:00” arasına

ait olduğu söylenebilir.

ArchiveIndex ve CurrentDateTime parametreleri arşiv verilerinin anlaşılabilmesi için gerekli olan

gateway tarafından belirlenen değerlerdir.

Verilen örnek için Archive Count değeri 24 olarak belirlenmesi ile her saat bu şekilde 24 adet arşiv

verisinin okunup Broker’a gönderileceği yorumu yapılabilir.

Önemli Not: Arşiv verilerinin Gateway üzerinden okunabilmesi için cihazdaki arşiv verilerinin yapısının

en yeni arşivin ModBus tablosunda ilk sırada olması zorunludur.

Önemli Not: Bir cihazın arşiv yapısını desteklemesi için dâhili hafızasının bulunmasına ilave olarak

gerçek zaman saatinin de bulunması gerekmektedir.

Tavsiye: Cihaz ve gateway’in zaman bilgilerinin küçük miktarda sapma durumları olması durumu için

okuma dakikası parametresinin 1 dakika üzeri belirlenmesinde fayda vardır.

24

2.7. JSON Bazlı Çalışma Detayları

Cihazın açıldıktan sonra broker’a bağlanmadan önce zaman senkronizasyonu gerçekleştirilmektedir.

Zaman senkronizasyonu GSM baz istasyonu üzerinden gerçekleşir. Baz istasyonundan alınan zaman

bilgisi UTC formatındaki zaman bilgisi ve baz istasyonunun bulunduğu zaman dilimidir. Bu bilgilere göre

local zaman hesaplanıp zaman senkronizasyonu yapılarak cihazın işlevlerinin ilgili zamanlarda

gerçekleştirilmesi sağlanır.

Zaman senkronizasyonu Tag bazlı çalışma için gerçekleşmemektedir. JSON bazlı çalışma için Modbus

arşiv okuma için zaman bilgisine ihtiyaç olduğu için bu çalışmada senkronizasyon zorunlu kılınmıştır.

3. Konfigürasyon Verilerinin Gateway’e yüklenmesi

1 ve 2. bölümde anlatılan konfigürasyonlar XML formatında bulunan bir text dosya ile Gateway’e

aktarılmaktadır.

Tag Bazlı firmware için örnek gateway XML konfigürasyon dosyası alttaki gibidir.

Konfigürasyon dosyasının cihaza yüklenebilmesi Eclipse ve Gemalto terminalleri için ayrı ayrı

anlatılacaktır.

3.1. Eclipse Gateway için XML konfigürasyon yükleme

Eclipse gateway’lere XML konfügrasyon dosyası RS485 üzerinden yüklenmektedir. Bu yükleme işlemi

için USB-RS485 çeviriciye ihtiyacımız bulunmaktadır.

Gateway enerjilendikten sonra 60 saniye boyunca boot modunda kalmaktadır. 60 saniye boot modu

tamamlandıktan sonra Modbus Mqtt gateway olarak görev yapmaya devam etmektedir. Cihaza enerji

vermeden önce USB-RS485 çevirici gateway’ın RS485 portuna USB portu da PC’ye bağlı olmalıdır.

Gateway, PC’ye ilk defa bağlanmışsa alttaki ayar yapılmalıdır.

Adım 1: Bilgisayarım açılır. Adım 2: Module’e sağ tıklanıp Özellikler’e tıklanır.

25

Adım 3: Açılan pencereden port sekmesine gelinip çeviriciyle ilgili COM Port seçimi yapılır ve OK

butonuna basılır.

Gateway’e XML dosyasının yüklenmesi için alttaki adımlar takip edilmelidir.

XML dosyası, C:\\Program Files(x86)’nın içinde “MQTTGateway\MqttGateway\Data\Device”

klasöründen konfigüre edilecek gateway’in IMEI numarasına göre tespit edilir.

Tespit sonrasında cihaz enerjilenir ve XML dosyasını alttaki dizine kopyalanır. Eski dosyanın üzerine

yazılması sağlanmalıdır.

İşlem sonrasında konfigürasyon yükleme işlemi tamamlanmış olur.

3.2. Gemalto Gateway için XML konfigürasyon yükleme

Gemalto terminallerde RS232 ve RS485 portuna ilave olarak USB portu bulunmaktadır. PC üzerinden

USB portuna bağlantı yapabilmek için elimizde USB Type-B kablosuna ihtiyaç vardır.

26

Bu kabloyu PC’ye ve gateway’e bağladığımızda bilgisayar gateway’in driver’ını otomatik olarak

bulmalıdır.

Not: Driver problemi yaşamanız durumunda destek ekibiyle iletişime geçebilirsiniz.

Gateway, PC’ye ilk defa bağlanmışsa alttaki ayar yapılmalıdır.

Adım 1: Bilgisayarım açılır. Adım 2: Module’e sağ tıklanıp Özellikler’e tıklanır.

Adım 3: Açılan pencereden port sekmesine gelinip ilgili COM Port seçimi yapılır ve OK butonuna basılır.

Gateway’e XML dosyasının yüklenmesi için alttaki adımlar takip edilmelidir.

XML dosyası, C:\\Program Files(x86)’nın içinde “MQTTGateway\MqttGateway\Data\Device”

klasöründen konfigüre edilecek gateway’in IMEI numarasına göre tespit edilir. Bu XML dosyasını alttaki

dizine kopyalanır. Eski dosyanın üzerine yazılması sağlanmalıdır.

27

İşlem sonrasında cihaz yeniden başlatılarak konfigürasyon yükleme işlemi tamamlanmış olur.

4. ModBus Mqtt Gateway Testleri

Gateway ile testlerin yapılması için test.mosquitto.org sunucusu ile MQTT.Spy veya MQTT.Fx gibi

uygulamalar MQTT Client uygulaması kullanılabilir.

MQTT.Spy uygulaması alttaki linkten indirilebilir.

https://github.com/eclipse/paho.mqtt-spy/wiki/Downloads

MQTT.Fx uygulaması alttaki linkten indirilebilir.

https://mqttfx.jensd.de/