# ਇੰਟਰਨੈਟ ਰਾਹੀਂ ਆਪਣੀ ਨਾਈਟਲਾਈਟ ਨੂੰ ਕੰਟਰੋਲ ਕਰੋ - ਵਰਚੁਅਲ IoT ਹਾਰਡਵੇਅਰ ਅਤੇ ਰਾਸਪਬੈਰੀ ਪਾਈ ਇਸ ਪਾਠ ਦੇ ਇਸ ਹਿੱਸੇ ਵਿੱਚ, ਤੁਸੀਂ ਆਪਣੇ ਰਾਸਪਬੈਰੀ ਪਾਈ ਜਾਂ ਵਰਚੁਅਲ IoT ਡਿਵਾਈਸ ਲਈ MQTT ਬ੍ਰੋਕਰ ਤੋਂ ਭੇਜੇ ਗਏ ਕਮਾਂਡਾਂ ਨੂੰ ਸਬਸਕ੍ਰਾਈਬ ਕਰੋਗੇ। ## ਕਮਾਂਡਾਂ ਨੂੰ ਸਬਸਕ੍ਰਾਈਬ ਕਰੋ ਅਗਲਾ ਕਦਮ MQTT ਬ੍ਰੋਕਰ ਤੋਂ ਭੇਜੇ ਗਏ ਕਮਾਂਡਾਂ ਨੂੰ ਸਬਸਕ੍ਰਾਈਬ ਕਰਨਾ ਅਤੇ ਉਨ੍ਹਾਂ ਦਾ ਜਵਾਬ ਦੇਣਾ ਹੈ। ### ਟਾਸਕ ਕਮਾਂਡਾਂ ਨੂੰ ਸਬਸਕ੍ਰਾਈਬ ਕਰੋ। 1. VS Code ਵਿੱਚ ਨਾਈਟਲਾਈਟ ਪ੍ਰੋਜੈਕਟ ਖੋਲ੍ਹੋ। 1. ਜੇ ਤੁਸੀਂ ਵਰਚੁਅਲ IoT ਡਿਵਾਈਸ ਵਰਤ ਰਹੇ ਹੋ, ਤਾਂ ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਟਰਮੀਨਲ ਵਰਚੁਅਲ ਐਨਵਾਇਰਨਮੈਂਟ ਚਲਾ ਰਿਹਾ ਹੈ। ਜੇ ਤੁਸੀਂ ਰਾਸਪਬੈਰੀ ਪਾਈ ਵਰਤ ਰਹੇ ਹੋ ਤਾਂ ਤੁਸੀਂ ਵਰਚੁਅਲ ਐਨਵਾਇਰਨਮੈਂਟ ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕਰ ਰਹੇ ਹੋਵੋਗੇ। 1. `client_telemetry_topic` ਦੀ ਪਰਿਭਾਸ਼ਾ ਦੇ ਬਾਅਦ ਹੇਠਾਂ ਦਿੱਤਾ ਕੋਡ ਸ਼ਾਮਲ ਕਰੋ: ```python server_command_topic = id + '/commands' ``` `server_command_topic` ਉਹ MQTT ਟਾਪਿਕ ਹੈ ਜਿਸ ਨੂੰ ਡਿਵਾਈਸ LED ਕਮਾਂਡਾਂ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ ਸਬਸਕ੍ਰਾਈਬ ਕਰੇਗਾ। 1. ਮੁੱਖ ਲੂਪ ਤੋਂ ਥੋੜ੍ਹਾ ਉੱਪਰ, `mqtt_client.loop_start()` ਲਾਈਨ ਦੇ ਬਾਅਦ ਹੇਠਾਂ ਦਿੱਤਾ ਕੋਡ ਸ਼ਾਮਲ ਕਰੋ: ```python def handle_command(client, userdata, message): payload = json.loads(message.payload.decode()) print("Message received:", payload) if payload['led_on']: led.on() else: led.off() mqtt_client.subscribe(server_command_topic) mqtt_client.on_message = handle_command ``` ਇਹ ਕੋਡ ਇੱਕ ਫੰਕਸ਼ਨ, `handle_command`, ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਦਾ ਹੈ ਜੋ ਇੱਕ ਸੁਨੇਹਾ JSON ਦਸਤਾਵੇਜ਼ ਵਜੋਂ ਪੜ੍ਹਦਾ ਹੈ ਅਤੇ `led_on` ਪ੍ਰਾਪਰਟੀ ਦੀ ਵੈਲਿਊ ਨੂੰ ਲੱਭਦਾ ਹੈ। ਜੇ ਇਹ `True` ਸੈਟ ਕੀਤਾ ਗਿਆ ਹੈ ਤਾਂ LED ਚਾਲੂ ਹੋ ਜਾਂਦੀ ਹੈ, ਨਹੀਂ ਤਾਂ ਇਹ ਬੰਦ ਹੋ ਜਾਂਦੀ ਹੈ। MQTT ਕਲਾਇੰਟ ਉਸ ਟਾਪਿਕ ਨੂੰ ਸਬਸਕ੍ਰਾਈਬ ਕਰਦਾ ਹੈ ਜਿਸ 'ਤੇ ਸਰਵਰ ਸੁਨੇਹੇ ਭੇਜੇਗਾ ਅਤੇ `handle_command` ਫੰਕਸ਼ਨ ਸੈਟ ਕਰਦਾ ਹੈ ਜੋ ਸੁਨੇਹਾ ਪ੍ਰਾਪਤ ਹੋਣ 'ਤੇ ਕਾਲ ਕੀਤਾ ਜਾਵੇਗਾ। > 💁 `on_message` ਹੈਂਡਲਰ ਸਾਰੇ ਸਬਸਕ੍ਰਾਈਬ ਕੀਤੇ ਟਾਪਿਕਾਂ ਲਈ ਕਾਲ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਜੇ ਤੁਸੀਂ ਬਾਅਦ ਵਿੱਚ ਅਜਿਹਾ ਕੋਡ ਲਿਖਦੇ ਹੋ ਜੋ ਕਈ ਟਾਪਿਕਾਂ ਨੂੰ ਸੁਣਦਾ ਹੈ, ਤਾਂ ਤੁਸੀਂ ਉਸ ਟਾਪਿਕ ਨੂੰ ਪ੍ਰਾਪਤ ਕਰ ਸਕਦੇ ਹੋ ਜਿਸ 'ਤੇ ਸੁਨੇਹਾ ਭੇਜਿਆ ਗਿਆ ਸੀ `message` ਆਬਜੈਕਟ ਤੋਂ ਜੋ ਹੈਂਡਲਰ ਫੰਕਸ਼ਨ ਨੂੰ ਪਾਸ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। 1. ਪਿਛਲੇ ਅਸਾਈਨਮੈਂਟ ਦੇ ਹਿੱਸੇ ਤੋਂ ਕੋਡ ਚਲਾਉਣ ਦੇ ਸਮਾਨ ਤਰੀਕੇ ਨਾਲ ਕੋਡ ਚਲਾਓ। ਜੇ ਤੁਸੀਂ ਵਰਚੁਅਲ IoT ਡਿਵਾਈਸ ਵਰਤ ਰਹੇ ਹੋ, ਤਾਂ ਯਕੀਨੀ ਬਣਾਓ ਕਿ CounterFit ਐਪ ਚੱਲ ਰਹੀ ਹੈ ਅਤੇ ਲਾਈਟ ਸੈਂਸਰ ਅਤੇ LED ਸਹੀ ਪਿੰਸ 'ਤੇ ਬਣਾਏ ਗਏ ਹਨ। 1. ਆਪਣੇ ਭੌਤਿਕ ਜਾਂ ਵਰਚੁਅਲ ਡਿਵਾਈਸ ਦੁਆਰਾ ਪਤਾ ਲਗਾਏ ਗਏ ਲਾਈਟ ਲੈਵਲ ਨੂੰ ਅਨੁਕੂਲ ਕਰੋ। ਪ੍ਰਾਪਤ ਕੀਤੇ ਜਾ ਰਹੇ ਸੁਨੇਹੇ ਅਤੇ ਭੇਜੇ ਜਾ ਰਹੇ ਕਮਾਂਡਾਂ ਟਰਮੀਨਲ ਵਿੱਚ ਲਿਖੇ ਜਾਣਗੇ। ਲਾਈਟ ਲੈਵਲ ਦੇ ਅਨੁਸਾਰ LED ਵੀ ਚਾਲੂ ਅਤੇ ਬੰਦ ਹੋਵੇਗਾ। > 💁 ਤੁਸੀਂ ਇਹ ਕੋਡ [code-commands/virtual-device](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/virtual-device) ਫੋਲਡਰ ਜਾਂ [code-commands/pi](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/pi) ਫੋਲਡਰ ਵਿੱਚ ਲੱਭ ਸਕਦੇ ਹੋ। 😀 ਤੁਸੀਂ ਸਫਲਤਾਪੂਰਵਕ ਆਪਣੇ ਡਿਵਾਈਸ ਨੂੰ MQTT ਬ੍ਰੋਕਰ ਤੋਂ ਆਉਣ ਵਾਲੀਆਂ ਕਮਾਂਡਾਂ ਦਾ ਜਵਾਬ ਦੇਣ ਲਈ ਕੋਡ ਕੀਤਾ ਹੈ। --- **ਅਸਵੀਕਰਤੀ**: ਇਹ ਦਸਤਾਵੇਜ਼ AI ਅਨੁਵਾਦ ਸੇਵਾ [Co-op Translator](https://github.com/Azure/co-op-translator) ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅਨੁਵਾਦ ਕੀਤਾ ਗਿਆ ਹੈ। ਜਦੋਂ ਕਿ ਅਸੀਂ ਸਹੀਤਾ ਲਈ ਯਤਨਸ਼ੀਲ ਹਾਂ, ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਦਿਓ ਕਿ ਸਵੈਚਾਲਿਤ ਅਨੁਵਾਦਾਂ ਵਿੱਚ ਗਲਤੀਆਂ ਜਾਂ ਅਸੁਚਤਤਾਵਾਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਮੂਲ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਇਸਦੀ ਮੂਲ ਭਾਸ਼ਾ ਵਿੱਚ ਅਧਿਕਾਰਤ ਸਰੋਤ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਮਹੱਤਵਪੂਰਨ ਜਾਣਕਾਰੀ ਲਈ, ਪੇਸ਼ੇਵਰ ਮਨੁੱਖੀ ਅਨੁਵਾਦ ਦੀ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਸ ਅਨੁਵਾਦ ਦੀ ਵਰਤੋਂ ਤੋਂ ਪੈਦਾ ਹੋਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਗਲਤਫਹਿਮੀ ਜਾਂ ਗਲਤ ਵਿਆਖਿਆ ਲਈ ਅਸੀਂ ਜ਼ਿੰਮੇਵਾਰ ਨਹੀਂ ਹਾਂ।