# ਟਾਈਮਰ ਸੈਟ ਕਰੋ - ਵਰਚੁਅਲ 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. ਫਾਇਲ ਦੇ ਉੱਪਰ ਹੇਠਾਂ ਦਿੱਤਾ ਇਮਪੋਰਟ ਸਟੇਟਮੈਂਟ ਸ਼ਾਮਲ ਕਰੋ ਤਾਂ ਜੋ Python ਲਾਇਬ੍ਰੇਰੀ `threading` ਨੂੰ ਇਮਪੋਰਟ ਕੀਤਾ ਜਾ ਸਕੇ: ```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) ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅਨੁਵਾਦ ਕੀਤਾ ਗਿਆ ਹੈ। ਜਦੋਂ ਕਿ ਅਸੀਂ ਸਹੀਤਾ ਲਈ ਯਤਨਸ਼ੀਲ ਹਾਂ, ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਦਿਓ ਕਿ ਸਵੈਚਾਲਿਤ ਅਨੁਵਾਦਾਂ ਵਿੱਚ ਗਲਤੀਆਂ ਜਾਂ ਅਸੁੱਤੀਆਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਮੂਲ ਦਸਤਾਵੇਜ਼, ਜੋ ਇਸਦੀ ਮੂਲ ਭਾਸ਼ਾ ਵਿੱਚ ਹੈ, ਨੂੰ ਅਧਿਕਾਰਤ ਸਰੋਤ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਮਹੱਤਵਪੂਰਨ ਜਾਣਕਾਰੀ ਲਈ, ਪੇਸ਼ੇਵਰ ਮਨੁੱਖੀ ਅਨੁਵਾਦ ਦੀ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਸ ਅਨੁਵਾਦ ਦੀ ਵਰਤੋਂ ਤੋਂ ਪੈਦਾ ਹੋਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਗਲਤਫਹਿਮੀ ਜਾਂ ਗਲਤ ਵਿਆਖਿਆ ਲਈ ਅਸੀਂ ਜ਼ਿੰਮੇਵਾਰ ਨਹੀਂ ਹਾਂ।