Tüm Platformlar için Hızlı Uygulama Geliştirme Kitabı... Delphi
Ön Sipariş Talebinde Bulunan Üyelerimiz
Sipariş Talebinde Bulunan Üyelerimiz

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Delphi ile Arduino & Raspberry PI gibi Cihazlarla İletişim Kurmak
#11
Bende suan hazirliyorum paylasacaklarimi yakinda paylasacam Smile
Cevapla
#12
(07-11-2018, Saat: 13:38)arsl01 Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlBende suan hazirliyorum paylasacaklarimi yakinda paylasacam Smile

MQTT konusunda çalışmanız varsa, bunuda paylaşımlarınıza ekleyebilirsiniz.  Smile

Bu Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol Delphi proje örnekleri sayfası açılmıyor. Bu konularda, C# üzerine bir projeler paylaşmışlar inanılır gibi değil. Delphi tarafında paylaşım yok denecek kadar az malesef.
Cevapla
#13
@pro_imaj calismalarim var ins onlarida paylasacam. MQTT konusu biraz geniştir
Cevapla
#14
(07-11-2018, Saat: 15:07)arsl01 Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol@pro_imaj calismalarim var ins onlarida paylasacam. MQTT konusu biraz geniştir

"Derin olan kuyu değil kısa olan iptir." Yani benim için deniz derya ama işin mantığını çözen için; Faz nötr al götür.  Smile

Paylaşımları sabırsızlıkla bekliyoruz. 

İyi çalışmalar.
Cevapla
#15
(07-11-2018, Saat: 14:57)pro_imaj Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMQTT konusunda çalışmanız varsa, bunuda paylaşımlarınıza ekleyebilirsiniz.  Smile  
Bu Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol Delphi proje örnekleri sayfası açılmıyor. Bu konularda, C# üzerine bir projeler paylaşmışlar inanılır gibi değil. Delphi tarafında paylaşım yok denecek kadar az malesef.

Delphi için bu teknoloji yeni sayılır ondandır. En doğru ve en yeni teknolojileri dönüp dolaşıp DelphiCan'da bulacaksınız.  Wink
MQTT konusunda açık kaynak kod kullanmadım. Yalnızca Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol bileşen setini kullandım. Bu konuda Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol bileşenini de tavsiye ederim.

TMS MQTT kodlamadaki püf noktalar:
1- Client (Mobil) uygulama ön ve arka plan durumları için; 
Uygulama arka plana alındığında (özellikle iOS'ta yoğun arka plan işlemleri istenmiyor, bu amaçla) TApplicationEvent.EnteredBackground olayında MQTT ve buna bağlı iletişimler varsa uygulama ön plana alınıncaya kadar devre dışı bırakılmalıdır. 
Örneğin;
    TApplicationEvent.EnteredBackground:
     begin
       if frmAGSSinyal.swcSinyalAGS.IsChecked = True then //burada iletişim kullanıcı kontrolünde, yani kullanıcı dilerse iletişimi kapatabiliyor
       begin
         Dm.TMSMQTTClient1.Disconnect;
         frmAGSSinyal.swcSinyalAGS.IsChecked := False;
       end;
     end;
Ön plana alınacağı anda;
TApplicationEvent.BecameActive:
     begin
         if intVarMi then
         begin
           frmAGSSinyal.swcSinyalAGS.IsChecked := True;
           Dm.TMSMQTTClient1.Connect;
         end;
     end;
2- İlk bağlantı için
  try
   with Dm.TMSMQTTClient1 do
   begin
     BrokerHostName := formAna.AGS.Ayarlar.SunucuIP;
     BrokerPort := formAna.AGS.Ayarlar.SunucuPort.ToInteger;
     Credentials.Username := strMQTTKullanici;
     Credentials.Password := strMQTTSifre;
     KeepAliveSettings.AutoReconnect := True;
     KeepAliveSettings.AutoReconnectInterval := 15;
     KeepAliveSettings.KeepConnectionAlive := True;
     KeepAliveSettings.KeepAliveInterval := 60;
     Connect();
     TThread.Synchronize(Nil,
       procedure()
       begin
         formAna.AGS.Sunucu.Hata := False;
         formAna.AGS.Sunucu.HataAciklama := '';
         formAna.AGS.Sunucu.HataKodu := '-1';
       end);
   end;
 except
   formAna.AGS.Sunucu.Hata := True;
   formAna.AGS.Sunucu.HataAciklama := 'Sunucu yanıt vermiyor';
   formAna.AGS.Sunucu.HataKodu := '-1';
 end;
3- Uygulama kapatılmadan önce MQTT bağlantısını mutlaka kesin
procedure TformAna.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 if Dm.TMSMQTTClient1.IsConnected then
   Dm.TMSMQTTClient1.Disconnect;
end;
4- Bağlantı durumuna duyarlı olun (TMSMQTTClient nesnesinin OnConnectedStatusChanged olayı)
    case AStatus of
     csNotConnected:
       ;
     { Sunucu kaynaklı hatalar }
     { MQTT protokol versiyon uyuşmazlığı var }
     csConnectionRejected_InvalidProtocolVersion:
       ;
     { Sunucu tanımlama hatası }
     csConnectionRejected_InvalidIdentifier:
       ;
     { Sunucuya ulaşılamıyor }
     csConnectionRejected_ServerUnavailable:
       ;
     { Kimlik Bilgileri hatası }
     csConnectionRejected_InvalidCredentials:
       ;
     { Yetkili değil }
     csConnectionRejected_ClientNotAuthorized:
       ;
     { Bağlantı sunucu tarafından reddedildi }
     csConnectionLost:
       ;
     { Sunucu ile bağlantı koptu }
     csConnecting:
       ;
     { Sunucu ile yeniden bağlantı sağlanıyor }
     csReconnecting:
       ;
     // csConnected: ;
   end;

5- MQTT sunucusundan gelen verileri OnPublishReceived olayında yakalayabilir ve okuyabilirsiniz.
var
 msg, ClientID, msgOK, IstekteBulunanId, str: string;
 vp: integer;
 KendiMesajimmi: Boolean;
 Lokasyon: Variant;
begin
 msg := TEncoding.UTF8.getString(APayload); //Gelen veri
 vp := pos(strOzel, msg); //Güvenlik amacıyla yerleştirdiğimiz bir anahtar kelime var
 if vp > 0 then //mesaj bize ait ise
 begin
   ClientID := copy(msg, 1, vp - 1); //MQTT cihaz (herhangi bir IoT cihaz) Id'sini alıyoruz.
   KendiMesajimmi := ClientID = formAna.AGS.Personel.CihazId; //Kendi mesajını da dinleyebilir ve loglama amaçlı kayıt altına alabiliri.
   msg := copy(msg, vp + strOzel.Length, Length(msg)); //Güvenlik anahtarı ve Id'lerden arındırılmış mesaj
   msgOK := copy(msg, 1, 2); //komut gerçekleştirilecek mi?
   if msgOK = strOK then
   begin
     IstekteBulunanId := copy(msg, 3, msg.Length); //IoT Cihaz Id veya Bir Mobile Cihaz Id
     if IstekteBulunanId = formAna.AGS.Personel.CihazId then
     begin {veri tabanı ve SQL işlemlerini yapıyoruz}
       str := GetArsInsertJSON('sp_insert_loggecis',
         ['cihazid', 'personelId', 'LokasyonId', 'AltLokasyonId', 'KapiId',
          'strSonuc'], [formAna.AGS.Personel.CihazId,
          formAna.AGS.Personel.PersonelId, formAna.AGS.Gecis.LokasyonId,
          formAna.AGS.Gecis.LokasyonAltId, formAna.AGS.Gecis.KapiId,
          strSonucOK]);
       GetArsRESTRequest('akmega/ags/DbInsert', 'DbInsert', str); //REST sunucu URI'lerini set ediyoruz.
       AddMessage( { ClientID+ } 'AGS: ' + strSonucOKLocal { msg } , KendiMesajimmi); //Mobil uygulamada kullanıcı paneline mesajı yazıyoruz.
     end;
     SetArsBildirimGonderLokal('Giriş işlemi','"' + Lokasyon[3] + '" açıldı.', 'N1'); //Son kullanıcıya işlem sonucu ile ilgili bir bilgi iletiyoruz.
   end;
 end;
end;
6- Mobil uygulamadan (MQTT sunucu üzerinden) bir komut veya mesaj göndermek için Publish metodu kullanılır.
Dm.TMSMQTTClient1.Publish(strSubPubAkMega + AItem.Detail { KANAL bilgisi } , formAna.AGS.Personel.CihazId + strOzel + strMQTTAc);
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#16
@Fesih ARSLAN hocam yine döktürmüssünüz super elinize saglik
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Şu Arduino nedir? Ne değildir bir bakalım. esistem 30 12.262 09-07-2018, Saat: 15:00
Son Yorum: SercanTEK
  Raspberry Pi3 Lunix Server Tarzı kullanma nguzeller 12 938 29-03-2018, Saat: 22:44
Son Yorum: nguzeller
  Raspberry Pi Genel Sorular pro_imaj 11 1.428 02-01-2018, Saat: 10:01
Son Yorum: pro_imaj
  Delphi ve PLC Haberleşmesi hk. Abdullah ILGAZ 11 1.274 06-12-2017, Saat: 22:26
Son Yorum: Abdullah ILGAZ
  Arduino simülator sadettinpolat 1 888 13-02-2017, Saat: 09:25
Son Yorum: SimaWB



Konuyu Okuyanlar: 1 Ziyaretçi