You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
2.0 KiB
61 lines
2.0 KiB
# Control your nightlight over the Internet - Virtual IoT Hardware and Raspberry Pi
|
|
|
|
In this part of the lesson, you will send telemetry with light levels from your Raspberry Pi or virtual IoT device to an MQTT broker.
|
|
|
|
## Publish telemetry
|
|
|
|
The next step is to create a JSON document with telemetry and send it to the MQTT broker.
|
|
|
|
### Task
|
|
|
|
Publish telemetry to the MQTT broker.
|
|
|
|
1. Open the nightlight project in VS Code.
|
|
|
|
1. If you are using a virtual IoT device, ensure the terminal is running the virtual environment
|
|
|
|
1. Add the following import to the top of the `app.py` file:
|
|
|
|
```python
|
|
import json
|
|
```
|
|
|
|
The `json` library is used to encode the telemetry as a JSON document.
|
|
|
|
1. Add the following after the `client_name` declaration:
|
|
|
|
```python
|
|
client_telemetry_topic = id + '/telemetry'
|
|
```
|
|
|
|
The `client_telemetry_topic` is the MQTT topic the device will publish light levels to.
|
|
|
|
1. Replace the contents of the `while True:` loop at the end of the file with the following:
|
|
|
|
```python
|
|
while True:
|
|
light = light_sensor.light
|
|
telemetry = json.dumps({'light' : light})
|
|
|
|
print("Sending telemetry ", telemetry)
|
|
|
|
mqtt_client.publish(client_telemetry_topic, telemetry)
|
|
|
|
time.sleep(5)
|
|
```
|
|
|
|
This code packages the light level into a JSON document and publishes it to the MQTT broker. It then sleeps to reduce the frequency that messages are sent.
|
|
|
|
1. Run the code in the same way as you ran the code from the previous part of the assignment. If you are using a virtual IoT device, then make sure the CounterFit app is running and the light sensor and LED have been created on the correct pins.
|
|
|
|
```output
|
|
(.venv) ➜ nightlight python app.py
|
|
MQTT connected!
|
|
Sending telemetry {"light": 0}
|
|
Sending telemetry {"light": 0}
|
|
```
|
|
|
|
> 💁 You can find this code in the [code-telemetry/virtual-device](code-telemetry/virtual-device) folder or the [code-telemetry/pi](code-telemetry/pi) folder.
|
|
|
|
😀 You have successfully sent telemetry from your device.
|