# টাইমার সেট করুন - ভার্চুয়াল IoT হার্ডওয়্যার এবং রাস্পবেরি পাই এই পাঠের এই অংশে, আপনি আপনার সার্ভারলেস কোড কল করবেন যাতে বক্তৃতা বোঝা যায় এবং ফলাফলের ভিত্তিতে আপনার ভার্চুয়াল IoT ডিভাইস বা রাস্পবেরি পাই-এ একটি টাইমার সেট করা যায়। ## টাইমার সেট করুন বক্তৃতা থেকে টেক্সট কলের মাধ্যমে ফিরে আসা টেক্সটটি আপনার সার্ভারলেস কোডে পাঠানো প্রয়োজন, যা LUIS দ্বারা প্রক্রিয়াকৃত হবে এবং টাইমারের জন্য সেকেন্ডের সংখ্যা ফেরত দেবে। এই সেকেন্ডের সংখ্যা টাইমার সেট করতে ব্যবহার করা যেতে পারে। টাইমার Python এর `threading.Timer` ক্লাস ব্যবহার করে সেট করা যেতে পারে। এই ক্লাসটি একটি বিলম্ব সময় এবং একটি ফাংশন নেয়, এবং বিলম্ব সময়ের পরে, ফাংশনটি কার্যকর হয়। ### কাজ - টেক্সটটি সার্ভারলেস ফাংশনে পাঠান 1. VS Code-এ `smart-timer` প্রকল্পটি খুলুন এবং নিশ্চিত করুন যে ভার্চুয়াল IoT ডিভাইস ব্যবহার করলে টার্মিনালে ভার্চুয়াল পরিবেশ লোড করা আছে। 1. `process_text` ফাংশনের উপরে, একটি ফাংশন ঘোষণা করুন যার নাম `get_timer_time`, যা আপনি তৈরি করা REST এন্ডপয়েন্ট কল করবে: ```python def get_timer_time(text): ``` 1. এই ফাংশনে নিম্নলিখিত কোড যোগ করুন যাতে কল করার URL নির্ধারণ করা যায়: ```python url = '' ``` ``-এর জায়গায় আপনার শেষ পাঠে তৈরি করা REST এন্ডপয়েন্টের URL দিন, যা হয় আপনার কম্পিউটারে বা ক্লাউডে। 1. টেক্সটকে JSON হিসেবে কলের প্রপার্টি হিসেবে পাঠানোর জন্য নিম্নলিখিত কোড যোগ করুন: ```python body = { 'text': text } response = requests.post(url, json=body) ``` 1. এর নিচে, রেসপন্স পে-লোড থেকে `seconds` পুনরুদ্ধার করুন, এবং কল ব্যর্থ হলে 0 ফেরত দিন: ```python if response.status_code != 200: return 0 payload = response.json() return payload['seconds'] ``` সফল HTTP কলগুলি 200 রেঞ্জে একটি স্ট্যাটাস কোড ফেরত দেয়, এবং আপনার সার্ভারলেস কোড 200 ফেরত দেয় যদি টেক্সট প্রক্রিয়াকৃত হয় এবং সেট টাইমার ইন্টেন্ট হিসেবে স্বীকৃত হয়। ### কাজ - ব্যাকগ্রাউন্ড থ্রেডে টাইমার সেট করুন 1. ফাইলের শীর্ষে নিম্নলিখিত ইমপোর্ট স্টেটমেন্ট যোগ করুন যাতে threading Python লাইব্রেরি ইমপোর্ট করা যায়: ```python import threading ``` 1. `process_text` ফাংশনের উপরে, একটি ফাংশন যোগ করুন যা একটি রেসপন্স বলবে। আপাতত এটি কেবল কনসোলে লিখবে, তবে এই পাঠের পরে এটি টেক্সটটি বলবে। ```python def say(text): print(text) ``` 1. এর নিচে একটি ফাংশন যোগ করুন যা টাইমার সম্পূর্ণ হওয়ার ঘোষণা দেবে: ```python def announce_timer(minutes, seconds): announcement = 'Times up on your ' if minutes > 0: announcement += f'{minutes} minute ' if seconds > 0: announcement += f'{seconds} second ' announcement += 'timer.' say(announcement) ``` এই ফাংশন টাইমারের জন্য মিনিট এবং সেকেন্ডের সংখ্যা নেয় এবং একটি বাক্য তৈরি করে যা বলে টাইমার সম্পূর্ণ হয়েছে। এটি মিনিট এবং সেকেন্ডের সংখ্যা পরীক্ষা করে এবং শুধুমাত্র সেই সময় ইউনিট অন্তর্ভুক্ত করে যার একটি সংখ্যা আছে। উদাহরণস্বরূপ, যদি মিনিটের সংখ্যা 0 হয় তবে শুধুমাত্র সেকেন্ড বার্তায় অন্তর্ভুক্ত করা হয়। এই বাক্যটি `say` ফাংশনে পাঠানো হয়। 1. এর নিচে, টাইমার তৈরি করার জন্য নিম্নলিখিত `create_timer` ফাংশন যোগ করুন: ```python def create_timer(total_seconds): minutes, seconds = divmod(total_seconds, 60) threading.Timer(total_seconds, announce_timer, args=[minutes, seconds]).start() ``` এই ফাংশন টাইমারের জন্য মোট সেকেন্ড নেয় যা কমান্ডে পাঠানো হবে এবং এটি মিনিট এবং সেকেন্ডে রূপান্তর করে। এটি মোট সেকেন্ড ব্যবহার করে একটি টাইমার অবজেক্ট তৈরি এবং শুরু করে, `announce_timer` ফাংশন এবং একটি তালিকা পাস করে যাতে মিনিট এবং সেকেন্ড থাকে। যখন টাইমার শেষ হয়, এটি `announce_timer` ফাংশন কল করবে এবং এই তালিকার বিষয়বস্তু প্যারামিটার হিসেবে পাস করবে - তাই তালিকার প্রথম আইটেম `minutes` প্যারামিটার হিসেবে পাস হয় এবং দ্বিতীয় আইটেম `seconds` প্যারামিটার হিসেবে পাস হয়। 1. `create_timer` ফাংশনের শেষে কিছু কোড যোগ করুন যা ব্যবহারকারীকে টাইমার শুরু হওয়ার ঘোষণা দেওয়ার জন্য একটি বার্তা তৈরি করবে: ```python announcement = '' if minutes > 0: announcement += f'{minutes} minute ' if seconds > 0: announcement += f'{seconds} second ' announcement += 'timer started.' say(announcement) ``` আবার, এটি শুধুমাত্র সেই সময় ইউনিট অন্তর্ভুক্ত করে যার একটি মান আছে। এই বাক্যটি `say` ফাংশনে পাঠানো হয়। 1. `process_text` ফাংশনের শেষে নিম্নলিখিত যোগ করুন যাতে টেক্সট থেকে টাইমারের সময় পাওয়া যায়, তারপর টাইমার তৈরি করা যায়: ```python seconds = get_timer_time(text) if seconds > 0: create_timer(seconds) ``` টাইমার শুধুমাত্র তৈরি হয় যদি সেকেন্ডের সংখ্যা 0-এর বেশি হয়। 1. অ্যাপটি চালান এবং নিশ্চিত করুন যে ফাংশন অ্যাপটিও চালু আছে। কিছু টাইমার সেট করুন এবং আউটপুট দেখাবে যে টাইমার সেট করা হয়েছে এবং তারপর দেখাবে যখন এটি শেষ হয়: ```output pi@raspberrypi:~/smart-timer $ python3 app.py Set a two minute 27 second timer. 2 minute 27 second timer started. Times up on your 2 minute 27 second timer. ``` > 💁 আপনি এই কোডটি [code-timer/pi](../../../../../6-consumer/lessons/3-spoken-feedback/code-timer/pi) অথবা [code-timer/virtual-iot-device](../../../../../6-consumer/lessons/3-spoken-feedback/code-timer/virtual-iot-device) ফোল্ডারে খুঁজে পেতে পারেন। 😀 আপনার টাইমার প্রোগ্রাম সফল হয়েছে! --- **অস্বীকৃতি**: এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসাধ্য সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না।