.. zephyr:code-sample:: zbus-remote-mock :name: Remote mock sample :relevant-api: zbus_apis Publish to a zbus instance using UART as a bridge. Overview ******** This application demonstrates how a host script can publish to the zbus in an embedded device using the UART as a bridge. The device sends information to the script running on a computer host. Then, the script sends back information when it would simulate a publish to some channel. Finally, the script decodes the data exchanged and prints it to the stdout. With this approach, developers can implement tests using any language on a computer to talk directly via channels with threads running on a device. Furthermore, it gives the tests more controllability and observability since we can control and access what is sent and received by the script. Building and Running ******************** This project outputs to the console. It can be built and executed on :ref:`native_sim ` as follows: .. zephyr-app-commands:: :zephyr-app: samples/subsys/zbus/remote_mock :host-os: unix :board: native_sim :goals: run Sample Output ============= .. code-block:: console -- west build: running target run [0/1] cd /.../zephyr/build/zephyr/zephyr.exe uart_1 connected to pseudotty: /dev/pts/2 uart connected to pseudotty: /dev/pts/3 *** Booting Zephyr OS build zephyr-v3.1.0 *** D: [Mock Proxy] Started. D: [Mock Proxy RX] Started. D: [Mock Proxy RX] Found sentence D: Channel start_measurement claimed D: Channel start_measurement finished D: Publishing channel start_measurement D: START processing channel start_measurement change D: Channel start_measurement claimed D: discard loopback event (channel start_measurement) D: Channel start_measurement finished D: FINISH processing channel start_measurement change D: START processing channel sensor_data change D: Channel sensor_data claimed D: sending message to host (channel sensor_data) D: Channel sensor_data finished D: FINISH processing channel sensor_data change D: sending sensor data err = 0 Exit execution by pressing :kbd:`CTRL+C`. The :file:`remote_mock.py` script can be executed using the following command: .. code-block:: bash python3.8 samples/subsys/zbus/remote_mock/remote_mock.py /dev/pts/2 Note the run command above prints the value of pts port because it is running in :ref:`native_sim `. Look at the line indicating ``uart_1 connected to pseudotty: /dev/pts/2``. It can be different in your case. If you are using a board, read the documentation to get the correct port destination (in Linux is something like ``/dev/tty...`` or in Windows ``COM...``). From the remote mock (Python script), you would see something like this: .. code-block:: shell Proxy PUB [start_measurement] -> start measurement Proxy NOTIFY: [sensor_data] -> sensor value 1 Proxy PUB [start_measurement] -> start measurement Proxy NOTIFY: [sensor_data] -> sensor value 2 Proxy PUB [start_measurement] -> start measurement Proxy NOTIFY: [sensor_data] -> sensor value 3 Proxy PUB [start_measurement] -> start measurement Proxy NOTIFY: [sensor_data] -> sensor value 4 Proxy PUB [start_measurement] -> start measurement Proxy NOTIFY: [sensor_data] -> sensor value 5 Proxy PUB [start_measurement] -> start measurement Proxy NOTIFY: [sensor_data] -> sensor value 6 Proxy PUB [start_measurement] -> start measurement Proxy NOTIFY: [sensor_data] -> sensor value 7 Proxy PUB [start_measurement] -> start measurement Proxy NOTIFY: [sensor_data] -> sensor value 8 Proxy PUB [start_measurement] -> start measurement Proxy NOTIFY: [sensor_data] -> sensor value 9 Proxy PUB [start_measurement] -> start measurement Proxy NOTIFY: [sensor_data] -> sensor value 10 Exit the remote mock script by pressing :kbd:`CTRL+C`.