-
Notifications
You must be signed in to change notification settings - Fork 162
WIP Asyncio Program Flow
Ellis Percival edited this page Jan 24, 2021
·
7 revisions
- Set output
- Set output for x ms
- Digital input value changed and published (polling)
- Initialise sensor input
- Sensor value read and published
_handle_mqtt_message():
- MQTT message received to
<topic_prefix>/output/<output_name>/set - Output name parsed from topic
- GPIO module object, output config and payload added to the module's output queue
digital_output_loop():
- Queue entry picked up
- Payload checked to ensure it matches configured on or off payloads
-
set_digital_output()called to set the output
set_digital_output():
- Output set to desired logic level
-
DigitalOutputChangedEventevent fired with details of the change
EventBus.fire():
- Task added to task loop for
publish_callback()
publish_callback():
- MQTT message published to
<topic_prefix>/output/<output_name>to confirm output change
_handle_mqtt_message():
- MQTT message received to
<topic_prefix>/output/<output_name>/set_on_ms(or/set_off_ms) - Output name parsed from topic
- Async closure function created to handle the toggling of the output with the delay in the middle (
set_ms()) -
set_ms()task added to the task loop
set_ms():
- Interval time parsed from payload (milliseconds)
-
set_digital_output()called to set the output
set_digital_output():
- Digital output set to the desired value (on or off)
-
DigitalOutputChangedEventevent fired with details of the change
EventBus.fire():
- Task added to task loop for
publish_callback()
publish_callback():
- MQTT message published to
<topic_prefix>/output/<output_name>to confirm output change
set_ms():
-
Task paused for specified interval
-
set_digital_output()called to set the output
set_digital_output():
- Digital output set to the desired value (off or on)
-
DigitalOutputChangedEventevent fired with details of the change
EventBus.fire():
- Task added to task loop for
publish_callback()
publish_callback():
- MQTT message published to
<topic_prefix>/output/<output_name>to confirm output change
digital_input_poller():
- Input change recognised
-
DigitalInputChangedEventevent fired with details of the change
EventBus.fire():
- Task added to task loop for
publish_callback()
publish_callback():
- MQTT message published to
<topic_prefix>/input/<input_name>with payload set according to the input's new value
_init_sensor_inputs():
- Async closure function created to publish results of sensor reads (
publish_sensor_callback()) -
SensorReadEventevent subscribed to withpublish_sensor_callback() - Sensor input config validated and normalised
- Sensor module's
setup_sensor()method called - Async closure function created to loop forever and poll the sensor at the configured interval (
poll_sensor()) - Task added to task loop for
poll_sensor()
poll_sensor():
- Sensor module used to get value of sensor
- Sensor value rounded to desired number of digits
-
SensorReadEventevent fired with details of read value
EventBus.fire():
- Task added to task loop for
publish_sensor_callback()
publish_sensor_callback():
- MQTT message published to
<topic_prefix>/sensor/<sensor_name>with read sensor value