07-11-2018, Saat: 13:38
Sayfalar: 1 2
07-11-2018, Saat: 14:57
(07-11-2018, Saat: 13:38)arsl01 Adlı Kullanıcıdan Alıntı: [ -> ]Bende suan hazirliyorum paylasacaklarimi yakinda paylasacam
MQTT konusunda çalışmanız varsa, bunuda paylaşımlarınıza ekleyebilirsiniz.
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.
07-11-2018, Saat: 15:07
@pro_imaj calismalarim var ins onlarida paylasacam. MQTT konusu biraz geniştir
07-11-2018, Saat: 15:17
(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.
Paylaşımları sabırsızlıkla bekliyoruz.
İyi çalışmalar.
07-11-2018, Saat: 15:36
(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.![]()
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.
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);07-11-2018, Saat: 17:52
@Fesih ARSLAN hocam yine döktürmüssünüz super elinize saglik
13-10-2019, Saat: 17:07
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.
13-10-2019, Saat: 18:42
(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
Sayfalar: 1 2