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

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

Bu linkteki 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
WWW
Cevapla
#14
(07-11-2018, Saat: 15:07)arsl01 Adlı Kullanıcıdan Alıntı: @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ı: MQTT konusunda çalışmanız varsa, bunuda paylaşımlarınıza ekleyebilirsiniz.  Smile  
Bu linkteki 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 TMS MQTT bileşen setini kullandım. Bu konuda IP*Works! IoT MQTT 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);
DelphiCan'dır!
Cevapla
#16
@Fesih ARSLAN hocam yine döktürmüssünüz super elinize saglik
WWW
Cevapla
#17
Turbo Power AsyncPro 'nun xe7 için olan paketi varmı internettten araştırdım bulamadım.Teraziyi comport3 üzerinden haberleştirmeye çalışıyorum.Ama beceremedim.
Cevapla
#18
(13-10-2019, Saat: 17:07)glagher Adlı Kullanıcıdan Alıntı: Turbo Power AsyncPro 'nun xe7 için olan paketi varmı internettten araştırdım bulamadım.Teraziyi comport3 üzerinden haberleştirmeye çalışıyorum.Ama beceremedim.

Merhaba, 
Aşağıdaki linkten indirebilirsiniz.
TurboPower Async pro XE7 
DelphiCan'dır!
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi RabbitMq 3ddark 8 4.187 21-11-2022, Saat: 18:26
Son Yorum: 3ddark
  Raspberry Pi, MQTT ve Delphi SimaWB 15 12.085 26-01-2022, Saat: 15:08
Son Yorum: Jakarta2
  Nodemcu ile Delphi json haberleşme arsl01 10 9.863 24-12-2021, Saat: 09:25
Son Yorum: arsl01
  Şu Arduino nedir? Ne değildir bir bakalım. esistem 35 46.924 21-06-2021, Saat: 12:42
Son Yorum: esistem
  OpenAI GPT3 Nedir? Delphi ile Kullanımı Tan Ay 1 2.022 07-05-2021, Saat: 15:40
Son Yorum: mrmarman



Konuyu Okuyanlar: 1 Ziyaretçi