دریافت و تنظیم زمان دقیق توسط GSM Modem
و نحوه استفاده پروتکل NTP
زمان دقیق موضوع مهمی ست که به محض مطرح شدن میتواند ساختار طراحی را تا حدی دستخوش تغییر کند.
با مطرح شدن بحث اینترنت چیزها ( اینترنت اشیاء) IOT نیز واژه زمان اهمیت بیشتری پیدا نموده است.
زمان میتواند ساختار و قابلیتهای دستگاه را بسیار سودمندتر کند و میتوان گفت برای برخی از گجتها امری حیاتی و اجتناب ناپذیر است.
راهکارهای داشتن زمان دقیق شامل موارد اصلی زیر میتواند باشد:
- استفاده از RTC و تنظیم آن بصورت دستی
- استفاده از ماژولهای موقعیت یاب شبیه GPS
- استفاده از GSM Modem ها و شبکه های همراه
البته مبتنی بر نوع پروژه و نیازها میتواند ساختار بالا حتی مجتمع هم گردند و از ساختار موازی برای داشتن زمان دقیق برای همیشه استفاده نمود./
در این پست قصد داریم نحوه گرفتن زمان مبتنی بر GSM Modem را در ایران متناسب با خدمات ارائه دهنده توسط اپراتورهای همراه در ایران تشریح کنیم.
دو راهکار و پروتکل مهم در GSM Modem ها جهت گرفتن زمان وجود دارد:
- NITZ- Network Identity and Time Zone
- NTP- Network Time Protocol
پروتکل NITZ چیست؟
این پروتکل جهت گرفتن زمان از بستر اپراتورهای همراه استفاده میشود به عبارتی بعد از کانکت شدن به شبکه اپراتور همراه بدون اینکه شما لزومی به وصل شدن به سرور و یا ساختار دیگه ای باشه میتونید زمان را از BTS های اپراتو همراه دریافت نمایید.
برای نمونه مثال زیر جهت استفاده از پروتکل NITZ مخصوص GSM Modem های کویکتل (Quectel) استفاده میشود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | AT+CTZU Automatic Time Zone Update AT+CTZU? +CTZU: 0 OK AT+CTZU=? +CTZU: (0,1) OK AT+CTZU=1 OK AT+CTZU? +CTZU: 1 AT+CTZR Time Zone Reporting AT+CTZR=2 OK AT+CTZR? +CTZR: 2 OK +CTZE: “+32”,0,“2013/08/23,06:51:13” |
متاسفانه این سرویس در ساختار اپراتورهای همراه ایران از جمله ایرانسل و همراه اول پشتیبانی نمیشود و طبق ایمیلی که به ایرانسل ارسال شد آنها نیز ضمن تایید این مسئله از ما خواستند از پروتکل NTP به جای پروتکل NITZ استفاده کنیم.
پروتکل NTP چیست؟
این پروتکل توانایی آپدیت زمان از بستر GPRS بین یک سرور NTP و دیوایسهای متصل به شبکه از جمله GSM Modem ها را دارد.
NTP یکی از قدیمیٰترین پروتکلهای اینترنت است که از سال 1985 به الان استفاده میگردد.
جهت اطلاعات تکمیلی میتوانید از این صفحه بازدید داشته باشید.
یکی از محسنات این پروتکل محاسبهی زمان حدودی بین سرور و GSM Modem شما و اعمال آن است که میتواند باعث دقیقتر شدن این زمان گردد.
تا اینجا متوجه شدیم که برای سنکرون کردن زمان توسط GSM Modem میتوان از پروتکل NTP استفاده نمود و جهت استفاده از این پروتکل لازم است:
- اولاً GPRS جی اس ام مودم شما فعال شود.
- ثانیاً ارتباط با یک NTP Server نیز بهعنوان مرجع زمان شما برقرار شود.
با توجه به NTP Server های زیادی که بصورت رایگان به شما پشتیبانی میدهند لزومی به تجهیز این سرور توسط شما وجود ندارد و اگر احیاناً در یک شبکه APN داخلی قصد دارید از این پروتکل استفاده کنید میتوانید خود شما نیز NTP Server را راهاندازی نمایید.
یکی از سرورهای NTP در ایران، سرور وب سایت time.day.ir است که این خدمت به رایگان، توسط آدرس ntp.day.ir قابلاستفاده است.
در زیر نیز میتوانید نحوهی کانِکت شدن به سرور NTP توسط ماژول GSM Modem Sim800 Or Sim900 را مشاهده نمایید:
نکته: پورت پیشفرض NTP پورت 123 است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | AT+SAPBR=3,1, "Contype","GPRS" OK AT+SAPBR=3,1, "APN","CMNET" OK // Configure bearer profile 1 AT+SAPBR=1,1 OK //To open a GPRS context. AT+CNTPCID=1 OK AT+CNTP="3.asia.pool.ntp.org",32 OK //Set NTP service url and local time zone //Note: Here's 32 actually represent //32/4=8, which means that eight East //region, Beijing. AT+CNTP OK +CNTP: 1 // Start Sync Network Time AT+CCLK? +CCLK: "13/09/11,20:23:25+32" OK //Query local time// //Here’s timezone may different with that// //in CNTP setting. // |
همچنین در زیر، مثال تست شده با ماژول UC20 , UC15 شرکت کویکتل را هم قرار دادهایم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | [2017-07-01 13:29:52:572_S:] AT+QICSGP=1,1,"UNINET","mtnirancell","",0 [2017-07-01 13:29:52:577_R:] AT+QICSGP=1,1,"UNINET","mtnirancell","",0 [2017-07-01 13:29:52:661_R:] OK [2017-07-01 13:29:53:831_S:] AT+QIACT=1 [2017-07-01 13:29:53:838_R:] AT+QIACT=1 [2017-07-01 13:29:56:477_R:] OK [2017-07-01 13:29:57:129_S:] AT+QIACT? [2017-07-01 13:29:57:132_R:] AT+QIACT? [2017-07-01 13:29:57:134_R:] +QIACT: 1,1,1,"100.81.67.15" [2017-07-01 13:29:57:134_R:] OK [2017-07-01 13:30:01:416_S:] AT+CCLK? [2017-07-01 13:30:01:432_R:] AT+CCLK? [2017-07-01 13:30:01:450_R:] +CCLK: "80/01/06,00:00:32+00" [2017-07-01 13:30:01:450_R:] OK [2017-07-01 13:30:03:325_S:] AT+QNTP=1,"ntp.day.ir",123,1 [2017-07-01 13:30:03:334_R:] AT+QNTP=1,"ntp.day.ir",123,1 [2017-07-01 13:30:03:487_R:] OK [2017-07-01 13:30:04:293_R:] +QNTP: 0,"2017/07/01,09:00:08+00" [2017-07-01 13:30:06:584_S:] AT+CCLK? [2017-07-01 13:30:06:594_R:] AT+CCLK? [2017-07-01 13:30:06:615_R:] +CCLK: "17/07/01,09:00:10+00" [2017-07-01 13:30:06:615_R:] OK |
همانطور که در مثال میبنید بعد از اتمام سنکرون کردن زمان, زمان RTC ماژول GSM بصورت اتوماتیک آپدیت گردیده است و لازم است بدانید زمان گرفته شده زمان UTC میباشد.
با سلام. کدهایی که برای ماژول Qectel گذاشتید برای ماژول M66 جواب نمیده و ERROR میده. میشه راهنمایی کنید؟
دقیقا کدام دستور خطا میده ؟
سلام لیست سرورهای NTP فعال، اولی ایرانیه :
عدد بعد از ادرس سرور مشخص کننده تایم زون هست که برای ایران در شش ماه اول سال 18 و شش ماه دوم سال 14 باید ارسال شود. بهتر است لیست سرورها در برنامه ذخیره شود و اگر هر کدام خطا داد از بعدی امتحان شود تا جواب +CNTP: 1 برگرداند.
ntp.day.ir
ir.pool.ntp.org
server 0.asia.pool.ntp.org
server 1.asia.pool.ntp.org
server 2.asia.pool.ntp.org
server 3.asia.pool.ntp.org
server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org
server 3.pool.ntp.org
time-a-g.nist.gov
time-b-g.nist.gov
time-c-g.nist.gov
time-d-g.nist.gov
time-d-g.nist.gov
time-e-g.nist.gov
time-e-g.nist.gov
time-a-wwv.nist.gov
time-b-wwv.nist.gov
time-c-wwv.nist.gov
time-d-wwv.nist.gov
time-d-wwv.nist.gov
time-e-wwv.nist.gov
time-e-wwv.nist.gov
time-a-b.nist.gov
time-b-b.nist.gov
time-c-b.nist.gov
time-d-b.nist.gov
time-d-b.nist.gov
time-e-b.nist.gov
time-e-b.nist.gov
time.nist.gov
utcnist.colorado.edu
utcnist2.colorado.edu
سلام سپاسگذار از شما جناب پور خلیلی عزیز
سلام.من با sim800l کار میکنم.دستور AT+CNTP عدد 1 رو نمیده و بجاش عدد 62 میده. لطفا راهنمایی کنید.از همه ntp هاهم استفاده کردم اما نشد
سلام دوست عزیز
در دیتاشت کدهای برگشتی رو نوشته و خطای ۶۲ مربوط به خطای dns هست یعنی dns رو روی ماژول تنظیم نکردید – دو تا راه دارید اول این که دی ان اس رو تنظیم کنید دوم این که از آیپی به جای دامنه استفاده کنید.
سلام . ای پی استفاده کردم نشد. میشه بگید چه dns باید تنظیم کنم؟
سلام
من دستورات بالا رو چک کردم ولی ساعت و تاریخ ایران بهم نداد!
امکانش هست راهنمایی کنید باید چیکار کنم
ماژولم sim800l هست.
سلام دوست عزیز
ببینید وقتی داریم زمان رو از منایع جهانی میخونیم یعتی داریم زمان رو utc دریافت میکنیم و برای این که به زمان ایران تبدیل کنید باید خودتون تایم زون رو روش اعمال کنیم :/
فکر کنم البته ماژول های gsm قادر باشند تایم زون رو اعمال کنند ولی باید قبلش تایم زون رو بهش بدید
سلام
من با سیم 800c کار میکنم و خواستم تجربه ام را با شما به اشتراک بگذارم. اول نتیجه را میگم و اون اینکه سیم کارت ایرانسل تاریخ و زمان صحیحی را نمیده ولی همراه اول کاملاً دقیق کار میکنه و تغییر ساعت 6 ماهه را هم اعمال کرده. اما برای استفاده از این ویژگی، از دستور CLTS استفاده میکنیم که من در حد دانشم توضیحاتی میدم.
دستور CLTS در دیتاشیت sim800_Series_At_Commands تحت عنوان دریافت زمان محلی درج شده
1- گام اول: بررسی تنظیمات با دستور
AT+CLTS? اگر پاسخ 0 باشد یعنی تنظیم خودکار زمان محل غیر فعال است و اگر یک باشد یعنی تنظیم خودکار فعال است.
2- گام دوم: قرار دادن ماژول روی تنظیم خودکار (دریافت و تنظیم ساعت به صورت خودکار) با دستور
AT+CLTS=1 اگر پاسخ OK باشد یعنی تنظیم انجام شده و در غیر اینصورت با پیام ERROR مواجه هستیم که میتواند دلایل مختلفی داشته باشد
3- گام سوم: ذخیره تنظیم صورت گرفته با استفاده از دستور AT&W
4- گام چهارم: ریست کردن ماژول و بررسی ذخیره شدن تنظیمات
5- گام پنجم: دریافت ساعت و تاریخ محلی با دستور AT+CCLK?
نکته: خروجی دستور آخر، تاریخ و ساعت است که در انتهای آن نیز وضعیت تغییر 6 ماهه را نیز میتوان ملاحظه کرد. این وضعیت که dst نام دارد با یکی از اعداد 0، 1، 2و یا reserved مشخص شده که بر عهده اپراتور است. عدد صفر یعنی تغییر ساعت انجام نمیشود و 1 یعنی تغییر ساعت به میزان 1 ساعت انجام میشود و 2 یعنی تغییر ساعت شش ماهه به مقدار 2 ساعت انجام میشود (برای برخی کشورها کاربرد دارد)
امیدوارم مفید بوده باشد
دوست عزیز ممنون از اطلاعات خودتون که اینجا با همه به اشتراک گذاشتید مطمئنا مفبد خواهد بود
سلام
من در دستور AT+CNTP=”3.asia.pool.ntp.org”,32 عدد 32 را برابر 14 قرار دادم که قبل از عید ساعت به طور دقیق نشان میداد ولی با توجه به اینکه ساعت به یک ساعت جلو کشیده شد که با این دستور ساعت را یک ساعت عقب بعد از عید نشان میدهد مشکل چیست؟؟
سلام تا جایی که یادم هست ساعت بر اساس GMT تنظیم میشه که با توجه به سناریو کشورها شما میتونید تو قسمت لوکال ساعت GSM یک ساعت جلو یا عقب برید تا درست بشه ساعتتون
با سلام اگه میخواین ساعت دقیق داشته باشین بهتره از یکی از سرور های داخل ایران استفاده کنید همیشه ساعت دقیق و دارین اینطوری
من خودم واسه همچین کاری اول از یه جای مثل YJCیا سایت بانک ها یا همچین جایی PING گرفتم بعد IP که دریافت کردم و جایگزین ادرس بالا کردم و ساعت دقیق و دریافت کردم
AT+CNTP=”94.182.146.12″,14
امیدوارم مفید بوده باشه برا دوستانی که بعدا استفاده می کنند
با سلام.
من با گوگل کردن مطلبی در مورد جی اس ام سایت شما را اتفاقی پیدا کردم.چون دیدم توضیحاتتون خیلی پخته شده و دقیق هست چند تا موضوع دیگر را هم مطالعه کردم و با کمال خوشبختی دیدم که اونها هم به همین شکل از نظر محتوا و نگارشی عالی هستند.خیلی ممنون که موضوع های جدید و کاربردی را با این نگارش قوی و اون هم بصورت رایگان ارائه میکنید.گرافیک سایت،عنوان مطالب،عکس ها،توضیح مطلب،شخصیت و ادب شما در پاسخ دادن به نظرات و در کل این سایت باعث افتخار بچه های الکترونیک هست.من مطمئنم شما پیشرفت های زیادی خواهید کرد –لطفا با همین ساختار ادامه بدید– در مورد نظر آقای “میثم راسته زاده” در مورد اضافه شدن لینک کمک مالی برای پشتیبانی از سایت موافقم(مثل سایت آردویینو که نرم افزار را رایگان ارائه میده ولی هر کس بخواد میتونه اندازه وسعش پرداخت داشته باشه 🙂 خیلی خیلی از بابت زحماتتون متشکرم
سلام
ممنون بابت نظر لطفتون و همین تعاریف هست که انرژی زیادی به ما جهت انرژی میده
در مورد دونیت هم به نظر باید بزودی این قضیه را برخلاف میل باطنی فعال کنم 🙂
وقت بخیر
طبق تست های بنده وقتی سیم کارت های جدید گمراه اول رو روی گوشی (هر مدلی) قرار بدیم اتومات ساعت تنظیم میشه.در حالی که با سیم کارت های قدیمی تر این اتفاق نمیفته.
در ضمن در سیم کارت های ایراسل هم تنظیم ساعت انجام نمیشه
شما هم تست کنید
با سپاس
متشکر از اطلاعات شما
به محض تست حتما نتیجه را خواهیم گذاشت
عالی میشه اگر دوستانی هم چنین تستی را انجام دادند فیدبکشون را جهت اشتراک بزارن
سلام خسته نباشید. در خصوص گرفتن شبکه time از شبکه GSM از طریق NITZ یه سری تست با sim800 انجام دادم. ماژول های sim800 دارای یک RTC داخلی هستند. توسط دستوری این RTC اپدیت شود. و با استفاده از دستور CCLK مقدار را ساعت را از RTC خواند. تست هایی که برای بار اول انجام میدادم موفق نبود. و مقدار ساعت 0:0 برام برمیگرداند. اما با یه سری تغییرات در کد بعضا مقدار ساعت درست اپدیت میشد. چندین روز این سیستم درست کار میکرد. ولی هنگامی که دستگاه برای نصب بردیم متوجه شدیم دستگاه ساعتش اپدیت نمیشود. و 0:0 برمیگردد. اما دوباره درست شد. اما باز مشکل دارد. کدی که استفاده میکردم:
دستور های اولیه AT:
AT+CPIN?\r\n
AT&W+CLTS=1\r\n
AT+CLTS=1\r\n
AT+CLTS=?\r\n
AT+CMGF=1\r\n
AT+CSCS=\”GSM\”\r\n
AT+CSDH=1\r\n
AT+CSMP=17,167,0,17\r\n
AT+CMGDA=\”DEL ALL\”\r\n
داخل loop برنامه هم از دستور زیر برای گرفتن ساعت استفاده میکنم:
AT+CCLK?\r\n
ممنون میشم راهنمایی کنید. مشکل از کجا میتونه باشه. اینکه اپراتور های داخلی این سیستم را پشتبیانی نمیکنند، ولی تو تست ها بعضا این جواب داده. در حال حاضر برای پروژه مدنظر از NTP نمیشه استفاده کرد.
تشکر
با بررسی های انجام شده ، مشخص شد که سرور ntp.day.ir از دسترس خارج شده و برای رفع این مشکل می توانید از سرور آسیا به آدرس
3.asia.pool.ntp.org
یا
0.asia.pool.ntp.org
استفاده کنید
سلام خسته نباشید، داخل وبسایت pool.ntp.org مطالعه کردم. ظاهراً چهار تا dns برای ntpدارد.
server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org
server 3.pool.ntp.org
یه قسمت دیگر هم گفته:
The 0, 1, 2 and 3.pool.ntp.org names point to a random set of servers that will change every hour. Make sure your computer’s clock is set to something sensible (within a few minutes of the ‘true’ time) –
سوالم این هست آیا سرویس آن ها روی یک dns ثابت نبست؟ و ممکن هست سوییچ شود؟ داخل sim800فقط میتونیم یک سرور معرفی میکنم. آیا جایگزینی stableتر وجود دارد؟
تشکر
سلام
شما یک سرور تعیین میکنید
و با توجه به DNS سرورها آی پی مشخصا برای شما بصورت اوتوماتیک گرفته میشه و لزومی نداره شما DNS Server ها را بررسی نمایید
پس شما ادرس NTP را که مشخص کردید همه موارد برای کانکت شدن بصورت اوتوماتیک انجام میشه و اگر DNS صفر جواب نده اتوماتیک میره سراغ دومین مورد DNS سرور
الان حتی یه گوشی نوکیا1100 هم موقع روشن شدن ساعتش اتوماتیک تنظیم میشه شما چطور میگید اپراتورها این امکانو ندارن؟؟؟؟
دوست عزیز بنده گوشی 1100 داشتم هر وقت روشن میشد لازم میدید که ساعت را داخلش تنظیم کرد شاید گوشی شما کمی هوشمند تر هست
ولی به هر حال این دو پروتکل و حتی نامه نگاری با ایرانسل هم برای این موضوع داخل متن گذاشته شده و در صورتی که شما فکر میکنید پروتکلی غیر از این ها هم میتونه ممنون میشم پیشنهاد بدید تا ما هم استفاده کنیم
میشه را جه به دستوراتی که برا SIM800/900 نوشتید یکم بییشتر توضیح بدید؟استفاده از این دستورات شارژ سیم کارت رو هم کم میکنه؟
برای مشادهده جزییات هر دستور می توانید به منوال SIM900/800 مراجعه کنید ، اگر دستور خاصی مد نظرتون هست بگید که توضیح بدیم .
در خصوص کم شدن شارژ باید عرض کنم که بله ، چون این NTP از بستر شبکه انجام میشه نیاز به دیتا داره و فعال کردن GPRS هزینه بر است ، البته هزینش بسیار ناچیزه .
بسیار عالی و خوب بود بهش نیاز داشتم. سایتتون بسیار عالی و توضیحات کاملا کاربردی هستند برخلاف سایتهای دیگر که فقط مطالب خارجی را کپی میکنند و در عمل نیاز به تغییرات فراوان دارد تا عملی شود. حتما در اولین فرصت اطلاعات و تجربیات خود را با افتخار دراختیار شما قرار خواهم داد. دست مریزاد و خسته نباشید.
نکته دیگر اینکه لینکی هم جهت پرداخت آنلاین و کمک به سایت در سایت قرار دهید تا اگر اطلاعات برای کسی مفید بود درصورت تمایل بتواند به سایت کمک کند.
متشکر از حسن توجه شما
بسیار خوشحال هستیم که میشنویم مطالب برای شما کاربردی بوده است و مهمتر اینکه شما هم قراره عضوی از تیم سیسوگ باشید.
حتما در مورد پیشنهادتون هم فکر خواهیم کرد 🙂