Skip to content
STAGING SERVER
DEVELOPMENT SERVER

Basler Vision Connector: MQTT JSON Test File with vTools#

This MQTT sample demonstrates how to use the Basler Vision Connector to integrate camera data streams with vTools by injecting JSON commands via the MQTT protocol. The example retrieves histogram values from the camera image stream and calculates the mean value of the raw image, which is then provided as output.

Info

Before you start the sample script: Make sure that an MQTT broker is running and that the camera ID parameter within the Device ID node is updated to match the target camera. In case you are working inside the Siemens ecosystem, you can use the Siemens Databus app.
For further possible JSON commands, refer to the Messaging topics in this documentation.

[
    {
        "id": "533b486d4297ad32",
        "type": "tab",
        "label": "Flow 1",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "798424595a0c2869",
        "type": "group",
        "z": "533b486d4297ad32",
        "name": "Histogram Mean",
        "style": {
            "stroke": "#00457C",
            "fill": "#F59D21",
            "label": true,
            "color": "#00457C"
        },
        "nodes": [
            "32cd4d34c255539a",
            "16e9e5246b5b7d9e",
            "64c3fcded1650393",
            "ed56d64094ee58b3"
        ],
        "x": 514,
        "y": 619,
        "w": 542,
        "h": 122
    },
    {
        "id": "685569f698b0a850",
        "type": "group",
        "z": "533b486d4297ad32",
        "name": "Step 1: Upload Recipe",
        "style": {
            "label": true,
            "stroke": "#00457C",
            "fill": "#F59D21",
            "color": "#00457C"
        },
        "nodes": [
            "3bbbadef9749573d",
            "c060bf1ddb246f3a",
            "aabdc787b7389777"
        ],
        "x": 134,
        "y": 239,
        "w": 252,
        "h": 162
    },
    {
        "id": "fec9be67a18758cb",
        "type": "group",
        "z": "533b486d4297ad32",
        "name": "Step 2: Open Recipe and Camera",
        "style": {
            "label": true,
            "stroke": "#00457C",
            "fill": "#F59D21",
            "color": "#00457C"
        },
        "nodes": [
            "729284bc6ac805df",
            "3b7248e31103834c"
        ],
        "x": 134,
        "y": 419,
        "w": 219,
        "h": 122
    },
    {
        "id": "2102c8c808d8174b",
        "type": "group",
        "z": "533b486d4297ad32",
        "name": "Step 3: Connect Recipe and Start Streaming",
        "style": {
            "label": true,
            "stroke": "#00457C",
            "fill": "#F59D21",
            "color": "#00457C"
        },
        "nodes": [
            "8ba2b2d549aa2af2",
            "22d6a9dc7433f1fb"
        ],
        "x": 134,
        "y": 559,
        "w": 284,
        "h": 122
    },
    {
        "id": "e597044494e9ca85",
        "type": "group",
        "z": "533b486d4297ad32",
        "name": "Teardown",
        "style": {
            "label": true,
            "stroke": "#00457C",
            "fill": "#F59D21",
            "color": "#00457C"
        },
        "nodes": [
            "18af5fd5da60ba40",
            "1be8c6462d5a3983",
            "0ce596db7448a05c",
            "1739c312a0743282"
        ],
        "x": 134,
        "y": 699,
        "w": 232,
        "h": 202
    },
    {
        "id": "8ba2b2d549aa2af2",
        "type": "inject",
        "z": "533b486d4297ad32",
        "g": "2102c8c808d8174b",
        "name": "StartStreaming",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "{\"Action\": \"StartStreaming\", \"DeviceID\": \"40088056\"}",
        "payloadType": "json",
        "x": 260,
        "y": 640,
        "wires": [
            [
                "92f42f7bb5b92748"
            ]
        ]
    },
    {
        "id": "18af5fd5da60ba40",
        "type": "inject",
        "z": "533b486d4297ad32",
        "g": "e597044494e9ca85",
        "name": "StopStreaming",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "{\"Action\": \"StopStreaming\", \"DeviceID\": \"40088056\"}",
        "payloadType": "json",
        "x": 260,
        "y": 740,
        "wires": [
            [
                "92f42f7bb5b92748"
            ]
        ]
    },
    {
        "id": "3bbbadef9749573d",
        "type": "inject",
        "z": "533b486d4297ad32",
        "g": "685569f698b0a850",
        "name": "Upload Recipe",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "{\"Action\":\"cstm_UploadRecipe\",\"FileName\":\"my_recipe.precipe\",\"FileContent\":\"data:application/octet-stream;base64,ewogICJQeWxvbk1ldGFEYXRhIjogewogICAgIk9iamVjdFZlcnNpb24iOiAiMi4wLjAiLAogICAgIk1pblJlcXVpcmVkU29mdHdhcmVWZXJzaW9uIjogIjIuMC4wIgogIH0sCiAgIlB5bG9uQ29udGVudCI6IHsKICAgICJVaSI6IHsKICAgICAgIlB5bG9uTWV0YURhdGEiOiB7CiAgICAgICAgIk9iamVjdFZlcnNpb24iOiAiMy4yLjEiLAogICAgICAgICJNaW5SZXF1aXJlZFNvZnR3YXJlVmVyc2lvbiI6ICIxLjAuMCIKICAgICAgfSwKICAgICAgIlVpR3JhcGhJbnB1dE91dHB1dCI6IFsKICAgICAgICB7CiAgICAgICAgICAiaWQiOiAic3RyOjxHcmFwaElucHV0PiIsCiAgICAgICAgICAieCI6IDExMS4wLAogICAgICAgICAgInkiOiAyMzIuMAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImlkIjogInN0cjo8R3JhcGhPdXRwdXQ+IiwKICAgICAgICAgICJ4IjogMTE3OC4wLAogICAgICAgICAgInkiOiAyMzIuMAogICAgICAgIH0KICAgICAgXSwKICAgICAgIlVpTm9kZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImlkIjogInN0cjpIaXN0b2dyYW1FeHRyYWN0b3IiLAogICAgICAgICAgIngiOiAyOTcuNSwKICAgICAgICAgICJ5IjogMjIyLjUsCiAgICAgICAgICAiV2F0Y2hOb2RlUGlucyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJub2RlTmFtZSI6ICJzdHI6SGlzdG9ncmFtRXh0cmFjdG9yIiwKICAgICAgICAgICAgICAicGluTmFtZSI6ICJzdHI6SW1hZ2UiLAogICAgICAgICAgICAgICJwaW5EaXJlY3Rpb24iOiAic3RyOklucHV0IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIm5vZGVOYW1lIjogInN0cjpIaXN0b2dyYW1FeHRyYWN0b3IiLAogICAgICAgICAgICAgICJwaW5OYW1lIjogInN0cjpSb2kiLAogICAgICAgICAgICAgICJwaW5EaXJlY3Rpb24iOiAic3RyOklucHV0IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIm5vZGVOYW1lIjogInN0cjpIaXN0b2dyYW1FeHRyYWN0b3IiLAogICAgICAgICAgICAgICJwaW5OYW1lIjogInN0cjpNb25vIiwKICAgICAgICAgICAgICAicGluRGlyZWN0aW9uIjogInN0cjpPdXRwdXQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAibm9kZU5hbWUiOiAic3RyOkhpc3RvZ3JhbUV4dHJhY3RvciIsCiAgICAgICAgICAgICAgInBpbk5hbWUiOiAic3RyOlJlZCIsCiAgICAgICAgICAgICAgInBpbkRpcmVjdGlvbiI6ICJzdHI6T3V0cHV0IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIm5vZGVOYW1lIjogInN0cjpIaXN0b2dyYW1FeHRyYWN0b3IiLAogICAgICAgICAgICAgICJwaW5OYW1lIjogInN0cjpHcmVlbiIsCiAgICAgICAgICAgICAgInBpbkRpcmVjdGlvbiI6ICJzdHI6T3V0cHV0IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIm5vZGVOYW1lIjogInN0cjpIaXN0b2dyYW1FeHRyYWN0b3IiLAogICAgICAgICAgICAgICJwaW5OYW1lIjogInN0cjpCbHVlIiwKICAgICAgICAgICAgICAicGluRGlyZWN0aW9uIjogInN0cjpPdXRwdXQiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJpZCI6ICJzdHI6SGlzdG9ncmFtU3RhdGlzdGljcyIsCiAgICAgICAgICAieCI6IDYzMi41LAogICAgICAgICAgInkiOiAyMDQuNSwKICAgICAgICAgICJXYXRjaE5vZGVQaW5zIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIm5vZGVOYW1lIjogInN0cjpIaXN0b2dyYW1TdGF0aXN0aWNzIiwKICAgICAgICAgICAgICAicGluTmFtZSI6ICJzdHI6SGlzdG9ncmFtRGF0YSIsCiAgICAgICAgICAgICAgInBpbkRpcmVjdGlvbiI6ICJzdHI6SW5wdXQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAibm9kZU5hbWUiOiAic3RyOkhpc3RvZ3JhbVN0YXRpc3RpY3MiLAogICAgICAgICAgICAgICJwaW5OYW1lIjogInN0cjpNaW5pbXVtIiwKICAgICAgICAgICAgICAicGluRGlyZWN0aW9uIjogInN0cjpPdXRwdXQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAibm9kZU5hbWUiOiAic3RyOkhpc3RvZ3JhbVN0YXRpc3RpY3MiLAogICAgICAgICAgICAgICJwaW5OYW1lIjogInN0cjpNYXhpbXVtIiwKICAgICAgICAgICAgICAicGluRGlyZWN0aW9uIjogInN0cjpPdXRwdXQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAibm9kZU5hbWUiOiAic3RyOkhpc3RvZ3JhbVN0YXRpc3RpY3MiLAogICAgICAgICAgICAgICJwaW5OYW1lIjogInN0cjpNZWFuIiwKICAgICAgICAgICAgICAicGluRGlyZWN0aW9uIjogInN0cjpPdXRwdXQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAibm9kZU5hbWUiOiAic3RyOkhpc3RvZ3JhbVN0YXRpc3RpY3MiLAogICAgICAgICAgICAgICJwaW5OYW1lIjogInN0cjpNZWRpYW4iLAogICAgICAgICAgICAgICJwaW5EaXJlY3Rpb24iOiAic3RyOk91dHB1dCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJub2RlTmFtZSI6ICJzdHI6SGlzdG9ncmFtU3RhdGlzdGljcyIsCiAgICAgICAgICAgICAgInBpbk5hbWUiOiAic3RyOlN0YW5kYXJkRGV2aWF0aW9uIiwKICAgICAgICAgICAgICAicGluRGlyZWN0aW9uIjogInN0cjpPdXRwdXQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAibm9kZU5hbWUiOiAic3RyOkhpc3RvZ3JhbVN0YXRpc3RpY3MiLAogICAgICAgICAgICAgICJwaW5OYW1lIjogInN0cjpQaXhlbENvdW50IiwKICAgICAgICAgICAgICAicGluRGlyZWN0aW9uIjogInN0cjpPdXRwdXQiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICAiR3JhcGgiOiB7CiAgICAgICJQeWxvbk1ldGFEYXRhIjogewogICAgICAgICJPYmplY3RWZXJzaW9uIjogIjEuMi4wIiwKICAgICAgICAiTWluUmVxdWlyZWRTb2Z0d2FyZVZlcnNpb24iOiAiMS4wLjAiCiAgICAgIH0sCiAgICAgICJOb2RlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiTmFtZSI6ICJzdHI6SGlzdG9ncmFtRXh0cmFjdG9yIiwKICAgICAgICAgICJFbmFibGVkIjogdHJ1ZSwKICAgICAgICAgICJOb2RlVHlwZUlEIjogInN0cjo4N0RCNTkzRS1EMEUyLTRDOTItQUYyMC0yNjhGQzU2MTI3MzYiLAogICAgICAgICAgIk5vZGVEYXRhIjogewogICAgICAgICAgICAiUHlsb25NZXRhRGF0YSI6IHsKICAgICAgICAgICAgICAiT2JqZWN0VmVyc2lvbiI6ICIzLjAuMCIsCiAgICAgICAgICAgICAgIk1pblJlcXVpcmVkU29mdHdhcmVWZXJzaW9uIjogIjMuMC4wIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiTmFtZSI6ICJzdHI6SGlzdG9ncmFtU3RhdGlzdGljcyIsCiAgICAgICAgICAiRW5hYmxlZCI6IHRydWUsCiAgICAgICAgICAiTm9kZVR5cGVJRCI6ICJzdHI6OTU4MTVDQ0MtQzg5RC00MUYyLUIzOTUtODJBRTVEM0MxNzA0IiwKICAgICAgICAgICJOb2RlRGF0YSI6IHsKICAgICAgICAgICAgIlB5bG9uTWV0YURhdGEiOiB7CiAgICAgICAgICAgICAgIk9iamVjdFZlcnNpb24iOiAiMS4wLjAiLAogICAgICAgICAgICAgICJNaW5SZXF1aXJlZFNvZnR3YXJlVmVyc2lvbiI6ICIxLjAuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIkxvd2VyUXVhbnRpbGUiOiAwLjAyLAogICAgICAgICAgICAiVXBwZXJRdWFudGlsZSI6IDAuMDIsCiAgICAgICAgICAgICJEaXNjYXJkIjogZmFsc2UKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sCiAgICAgICJDb25uZWN0aW9ucyI6IFsKICAgICAgICB7CiAgICAgICAgICAiTmFtZSI6ICJzdHI6Q29ubmVjdGlvbjQiLAogICAgICAgICAgIlNvdXJjZSI6ICJzdHI6SGlzdG9ncmFtRXh0cmFjdG9yIiwKICAgICAgICAgICJTaW5rIjogInN0cjpIaXN0b2dyYW1TdGF0aXN0aWNzIiwKICAgICAgICAgICJRdWV1ZU1vZGUiOiAzLAogICAgICAgICAgIk1heFNpemUiOiAxLAogICAgICAgICAgIlNvdXJjZU91dHB1dFBhdGgiOiAic3RyOk1vbm8iLAogICAgICAgICAgIlNpbmtJbnB1dFBhdGgiOiAic3RyOkhpc3RvZ3JhbURhdGEiLAogICAgICAgICAgIlZhbHVlVHlwZUlEIjogInN0cjoxNEE0QjQzOS0xOEI1LTVCMTEtOERERC0wMTYyMjM2N0IxREEiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiTmFtZSI6ICJzdHI6Q29ubmVjdGlvbjIiLAogICAgICAgICAgIlNvdXJjZSI6ICJzdHI6SGlzdG9ncmFtU3RhdGlzdGljcyIsCiAgICAgICAgICAiU2luayI6ICJzdHI6PEdyYXBoT3V0cHV0PiIsCiAgICAgICAgICAiUXVldWVNb2RlIjogMywKICAgICAgICAgICJNYXhTaXplIjogMSwKICAgICAgICAgICJTb3VyY2VPdXRwdXRQYXRoIjogInN0cjpNZWFuIiwKICAgICAgICAgICJTaW5rSW5wdXRQYXRoIjogInN0cjpNZWFuIiwKICAgICAgICAgICJWYWx1ZVR5cGVJRCI6ICJzdHI6QzhEMTIzQzItRTE4OC01Njg3LTg0RjUtOThBQkJCREUyQkM4IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIk5hbWUiOiAic3RyOkNvbm5lY3Rpb24iLAogICAgICAgICAgIlNvdXJjZSI6ICJzdHI6PEdyYXBoSW5wdXQ+IiwKICAgICAgICAgICJTaW5rIjogInN0cjpIaXN0b2dyYW1FeHRyYWN0b3IiLAogICAgICAgICAgIlF1ZXVlTW9kZSI6IDMsCiAgICAgICAgICAiTWF4U2l6ZSI6IDEsCiAgICAgICAgICAiU291cmNlT3V0cHV0UGF0aCI6ICJzdHI6SW1hZ2UwX21lYW4iLAogICAgICAgICAgIlNpbmtJbnB1dFBhdGgiOiAic3RyOkltYWdlIiwKICAgICAgICAgICJWYWx1ZVR5cGVJRCI6ICJzdHI6MkM4OTMzNTgtMEVFRi01MjYwLUIyNjItOENCMzJERjJDMzk0IgogICAgICAgIH0KICAgICAgXSwKICAgICAgIkdyYXBoSW5wdXQiOiB7CiAgICAgICAgIk5vZGVEYXRhIjogewogICAgICAgICAgIk91dHB1dHMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiTmFtZSI6ICJzdHI6SW1hZ2UwX21lYW4iLAogICAgICAgICAgICAgICJUeXBlIjogInN0cjpQeWxvbjo6RGF0YVByb2Nlc3Npbmc6OkNvcmU6OklJbWFnZSIsCiAgICAgICAgICAgICAgIlZhbHVlVHlwZUlEIjogInN0cjoyQzg5MzM1OC0wRUVGLTUyNjAtQjI2Mi04Q0IzMkRGMkMzOTQiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJHcmFwaE91dHB1dCI6IHsKICAgICAgICAiTm9kZURhdGEiOiB7CiAgICAgICAgICAiSW5wdXRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIk5hbWUiOiAic3RyOk1lYW4iLAogICAgICAgICAgICAgICJUeXBlIjogInN0cjpQeWxvbjo6RGF0YVByb2Nlc3Npbmc6OkNvcmU6OklGbG9hdCIsCiAgICAgICAgICAgICAgIlZhbHVlVHlwZUlEIjogInN0cjpDOEQxMjNDMi1FMTg4LTU2ODctODRGNS05OEFCQkJERTJCQzgiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJSZXNvdXJjZXMiOiB7CiAgICAgICAgIlRocmVhZFBvb2wiOiB7CiAgICAgICAgICAiUHlsb25NZXRhRGF0YSI6IHsKICAgICAgICAgICAgIk9iamVjdFZlcnNpb24iOiAiMS4xLjAiLAogICAgICAgICAgICAiTWluUmVxdWlyZWRTb2Z0d2FyZVZlcnNpb24iOiAiMS4wLjAiCiAgICAgICAgICB9LAogICAgICAgICAgIk1heFRocmVhZENvdW50IjogOAogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQ==\"}",
        "payloadType": "json",
        "x": 260,
        "y": 320,
        "wires": [
            [
                "92f42f7bb5b92748"
            ]
        ]
    },
    {
        "id": "c060bf1ddb246f3a",
        "type": "inject",
        "z": "533b486d4297ad32",
        "g": "685569f698b0a850",
        "name": "Enumerate Recipes",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "{\"TransactionID\":\"1\",\"Action\":\"cstm_EnumerateRecipes\"}",
        "payloadType": "json",
        "x": 270,
        "y": 360,
        "wires": [
            [
                "92f42f7bb5b92748"
            ]
        ]
    },
    {
        "id": "1be8c6462d5a3983",
        "type": "inject",
        "z": "533b486d4297ad32",
        "g": "e597044494e9ca85",
        "name": "Close Recipe",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "{\"TransactionID\":\"1\",\"Action\":\"cstm_CloseRecipe\",\"RecipeID\":\"my_recipe\"}",
        "payloadType": "json",
        "x": 250,
        "y": 780,
        "wires": [
            [
                "92f42f7bb5b92748"
            ]
        ]
    },
    {
        "id": "729284bc6ac805df",
        "type": "inject",
        "z": "533b486d4297ad32",
        "g": "fec9be67a18758cb",
        "name": "Open Recipe",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "{\"TransactionID\":\"1\",\"Action\":\"cstm_OpenRecipe\",\"RecipeID\":\"my_recipe\",\"FileName\":\"my_recipe.precipe\"}",
        "payloadType": "json",
        "x": 250,
        "y": 460,
        "wires": [
            [
                "92f42f7bb5b92748"
            ]
        ]
    },
    {
        "id": "aabdc787b7389777",
        "type": "inject",
        "z": "533b486d4297ad32",
        "g": "685569f698b0a850",
        "name": "GetStatus",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "{ \"Action\" : \"GetStatus\" }",
        "payloadType": "json",
        "x": 240,
        "y": 280,
        "wires": [
            [
                "92f42f7bb5b92748"
            ]
        ]
    },
    {
        "id": "0ce596db7448a05c",
        "type": "inject",
        "z": "533b486d4297ad32",
        "g": "e597044494e9ca85",
        "name": "Delete Recipe",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "{\"TransactionID\":\"1\",\"Action\":\"cstm_DeleteRecipe\",\"FileName\":\"my_recipe.precipe\"}",
        "payloadType": "json",
        "x": 250,
        "y": 820,
        "wires": [
            [
                "92f42f7bb5b92748"
            ]
        ]
    },
    {
        "id": "32cd4d34c255539a",
        "type": "mqtt in",
        "z": "533b486d4297ad32",
        "g": "798424595a0c2869",
        "name": "",
        "topic": "BaslerVisionConnector/cstm_recipe/my_recipe/data",
        "qos": "2",
        "datatype": "auto-detect",
        "broker": "af2b5f92f9d2931f",
        "nl": false,
        "rap": true,
        "rh": 0,
        "inputs": 0,
        "x": 730,
        "y": 660,
        "wires": [
            [
                "16e9e5246b5b7d9e",
                "64c3fcded1650393"
            ]
        ]
    },
    {
        "id": "16e9e5246b5b7d9e",
        "type": "debug",
        "z": "533b486d4297ad32",
        "g": "798424595a0c2869",
        "name": "debug 1",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 965,
        "y": 700,
        "wires": [],
        "l": false
    },
    {
        "id": "64c3fcded1650393",
        "type": "function",
        "z": "533b486d4297ad32",
        "g": "798424595a0c2869",
        "name": "add image",
        "func": "\nreturn {\n    payload: \"\" + msg.payload.Data.Mean.Data.Value,\n    image: { \"w\": 200, \"h\": 30, \"background\": 0 }\n};",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 965,
        "y": 660,
        "wires": [
            [
                "ed56d64094ee58b3"
            ]
        ],
        "l": false
    },
    {
        "id": "ed56d64094ee58b3",
        "type": "jimp-image",
        "z": "533b486d4297ad32",
        "g": "798424595a0c2869",
        "name": "Print",
        "data": "image",
        "dataType": "msg",
        "ret": "img",
        "parameter1": "FONT_SANS_16_BLACK",
        "parameter1Type": "jimpFont",
        "parameter2": "0",
        "parameter2Type": "num",
        "parameter3": "0",
        "parameter3Type": "num",
        "parameter4": "payload",
        "parameter4Type": "msg",
        "parameter5": "",
        "parameter5Type": "msg",
        "parameter6": "",
        "parameter6Type": "msg",
        "parameter7": "",
        "parameter7Type": "msg",
        "parameter8": "",
        "parameter8Type": "msg",
        "sendProperty": "payload",
        "sendPropertyType": "msg",
        "parameterCount": 6,
        "jimpFunction": "print",
        "selectedJimpFunction": {
            "name": "print",
            "fn": "print",
            "description": "Print text to the image",
            "parameters": [
                {
                    "name": "font",
                    "type": "jimpFont|str",
                    "required": true,
                    "hint": "font to print. NOTE: This can be one of the presets or the path to a fnt file"
                },
                {
                    "name": "x",
                    "type": "num",
                    "required": true,
                    "hint": "x coordinate to print text"
                },
                {
                    "name": "y",
                    "type": "num",
                    "required": true,
                    "hint": "y coordinate to print text"
                },
                {
                    "name": "text",
                    "type": "str",
                    "required": true,
                    "hint": "text to print"
                },
                {
                    "name": "maxWidth",
                    "type": "num",
                    "required": false,
                    "hint": "wrap text at maxWidth"
                },
                {
                    "name": "maxHeight",
                    "type": "num",
                    "required": false,
                    "hint": "max height"
                }
            ]
        },
        "x": 1015,
        "y": 660,
        "wires": [
            [
                "2a4b4454b1e81706"
            ]
        ],
        "l": false
    },
    {
        "id": "2a4b4454b1e81706",
        "type": "image viewer",
        "z": "533b486d4297ad32",
        "name": "Probability",
        "width": "200",
        "data": "payload",
        "dataType": "msg",
        "active": true,
        "x": 1085,
        "y": 640,
        "wires": [
            []
        ],
        "l": false
    },
    {
        "id": "5f017dbb540174c5",
        "type": "mqtt out",
        "z": "533b486d4297ad32",
        "name": "",
        "topic": "BaslerVisionConnector/app/request",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "af2b5f92f9d2931f",
        "x": 880,
        "y": 520,
        "wires": []
    },
    {
        "id": "92f42f7bb5b92748",
        "type": "function",
        "z": "533b486d4297ad32",
        "name": "Device ID",
        "func": "let jsonMessage = msg.payload;\n//node.warn(JSON.stringify(jsonMessage));\n\nlet ID = \"40062774\"\n\nif ('DeviceID' in jsonMessage) {\n    jsonMessage.DeviceID = ID;\n} else if ('PinConnections' in jsonMessage) {\n    jsonMessage.PinConnections.mean = ID;\n}\n\nmsg.payload = jsonMessage;\nreturn msg;\n",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 640,
        "y": 520,
        "wires": [
            [
                "5f017dbb540174c5"
            ]
        ]
    },
    {
        "id": "5799d94613fc5374",
        "type": "debug",
        "z": "533b486d4297ad32",
        "name": "Debug",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 970,
        "y": 580,
        "wires": []
    },
    {
        "id": "0bd01c8f0c6a63f0",
        "type": "mqtt in",
        "z": "533b486d4297ad32",
        "name": "",
        "topic": "BaslerVisionConnector/app/response",
        "qos": "2",
        "datatype": "auto-detect",
        "broker": "af2b5f92f9d2931f",
        "nl": false,
        "rap": true,
        "rh": 0,
        "inputs": 0,
        "x": 750,
        "y": 580,
        "wires": [
            [
                "5799d94613fc5374"
            ]
        ]
    },
    {
        "id": "caf6b0d5174d0492",
        "type": "comment",
        "z": "533b486d4297ad32",
        "name": "This recipe example illustrates the integration of camera data streams with vTools \\n  in order to generate processing results. Specifically, the example acquires histogram \\n  values from the camera image stream and computes the mean value of the (RAW) image, \\n  which is then provided as the output. \\n \\n   Note: Prior to execution, ensure that the camera ID parameter within the Device ID \\n  node is updated to match the target camera.",
        "info": "",
        "x": 430,
        "y": 120,
        "wires": []
    },
    {
        "id": "1739c312a0743282",
        "type": "inject",
        "z": "533b486d4297ad32",
        "g": "e597044494e9ca85",
        "name": "CloseDevice",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "{\"TransactionID\": \"12\", \"Action\": \"CloseDevice\", \"DeviceID\": \"40088056\"}",
        "payloadType": "json",
        "x": 250,
        "y": 860,
        "wires": [
            [
                "92f42f7bb5b92748"
            ]
        ]
    },
    {
        "id": "3474b5deb6c2f108",
        "type": "mqtt in",
        "z": "533b486d4297ad32",
        "name": "",
        "topic": "BaslerVisionConnector/app/logging",
        "qos": "2",
        "datatype": "auto-detect",
        "broker": "af2b5f92f9d2931f",
        "nl": false,
        "rap": true,
        "rh": 0,
        "inputs": 0,
        "x": 760,
        "y": 820,
        "wires": [
            [
                "f364787e8c844ae0"
            ]
        ]
    },
    {
        "id": "f8b1106ba685224c",
        "type": "mqtt in",
        "z": "533b486d4297ad32",
        "name": "",
        "topic": "BaslerVisionConnector/app/events",
        "qos": "2",
        "datatype": "auto-detect",
        "broker": "af2b5f92f9d2931f",
        "nl": false,
        "rap": true,
        "rh": 0,
        "inputs": 0,
        "x": 760,
        "y": 880,
        "wires": [
            [
                "3f0ca0fd3fee9112"
            ]
        ]
    },
    {
        "id": "f364787e8c844ae0",
        "type": "debug",
        "z": "533b486d4297ad32",
        "name": "debug 7",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 965,
        "y": 820,
        "wires": [],
        "l": false
    },
    {
        "id": "3f0ca0fd3fee9112",
        "type": "debug",
        "z": "533b486d4297ad32",
        "name": "debug 8",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 965,
        "y": 880,
        "wires": [],
        "l": false
    },
    {
        "id": "3b7248e31103834c",
        "type": "inject",
        "z": "533b486d4297ad32",
        "g": "fec9be67a18758cb",
        "name": "OpenDevice",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "{\"TransactionID\": \"12\", \"Action\": \"OpenDevice\", \"DeviceID\": \"Camera_Serial\"}",
        "payloadType": "json",
        "x": 250,
        "y": 500,
        "wires": [
            [
                "92f42f7bb5b92748"
            ]
        ]
    },
    {
        "id": "22d6a9dc7433f1fb",
        "type": "inject",
        "z": "533b486d4297ad32",
        "g": "2102c8c808d8174b",
        "name": "Connect Recipe",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "{\"TransactionID\":\"234423465465\",\"Action\":\"cstm_ConnectRecipe\",\"RecipeID\":\"my_recipe\",\"PinConnections\":{\"mean\":\"21698609\"}}",
        "payloadType": "json",
        "x": 260,
        "y": 600,
        "wires": [
            [
                "92f42f7bb5b92748"
            ]
        ]
    },
    {
        "id": "af2b5f92f9d2931f",
        "type": "mqtt-broker",
        "name": "",
        "broker": "ie-databus",
        "port": "1883",
        "clientid": "",
        "autoConnect": true,
        "usetls": false,
        "protocolVersion": "4",
        "keepalive": "60",
        "cleansession": true,
        "autoUnsubscribe": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "birthMsg": {},
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "closeMsg": {},
        "willTopic": "",
        "willQos": "0",
        "willPayload": "",
        "willMsg": {},
        "userProps": "",
        "sessionExpiry": ""
    }
]