[
    {
        "id": "eaae323a.31b3",
        "type": "tab",
        "label": "Home",
        "disabled": false,
        "info": ""
    },
    {
        "id": "b771c342.49603",
        "type": "tab",
        "label": "Sample",
        "disabled": false,
        "info": ""
    },
    {
        "id": "bccd1f23.87219",
        "type": "tab",
        "label": "Optic Configuration",
        "disabled": false,
        "info": ""
    },
    {
        "id": "baa1e3d9.cb29d",
        "type": "tab",
        "label": "Fluidic Acquisition",
        "disabled": false,
        "info": ""
    },
    {
        "id": "cb95299c.2817c8",
        "type": "tab",
        "label": "Segmentation",
        "disabled": false,
        "info": ""
    },
    {
        "id": "1371dec5.76e671",
        "type": "tab",
        "label": "Settings",
        "disabled": false,
        "info": ""
    },
    {
        "id": "c1660bc.e7ff7f8",
        "type": "tab",
        "label": "Gallery",
        "disabled": false,
        "info": ""
    },
    {
        "id": "9a22e67a.378818",
        "type": "tab",
        "label": "MQTT Receive",
        "disabled": false,
        "info": ""
    },
    {
        "id": "1c24ad9c.bebec2",
        "type": "subflow",
        "name": "Config",
        "info": "An input to this subflow will get the configuration to be saved to disk.\n\nOn startup, this node outputs the loaded configuration",
        "category": "",
        "in": [
            {
                "x": 440,
                "y": 860,
                "wires": [
                    {
                        "id": "cdc75496.45f748"
                    }
                ]
            }
        ],
        "out": [
            {
                "x": 1240,
                "y": 300,
                "wires": [
                    {
                        "id": "ad541674.4791c8",
                        "port": 0
                    }
                ]
            }
        ],
        "env": [],
        "color": "#DDAA99"
    },
    {
        "id": "20ae9e26.17d73a",
        "type": "subflow",
        "name": "Get global for config.json",
        "info": "",
        "category": "",
        "in": [
            {
                "x": 60,
                "y": 80,
                "wires": [
                    {
                        "id": "b584292a.24b08"
                    }
                ]
            }
        ],
        "out": [
            {
                "x": 340,
                "y": 80,
                "wires": [
                    {
                        "id": "b584292a.24b08",
                        "port": 0
                    }
                ]
            }
        ],
        "env": [],
        "color": "#DDAA99"
    },
    {
        "id": "833bc5bb.217ba8",
        "type": "ui_group",
        "z": "",
        "name": "Preview",
        "tab": "181bb236.1e94be",
        "order": 1,
        "disp": true,
        "width": 18,
        "collapse": false
    },
    {
        "id": "3a6bb13f.c9703e",
        "type": "ui_tab",
        "name": "Home",
        "icon": "home",
        "order": 1,
        "disabled": false,
        "hidden": false
    },
    {
        "id": "181bb236.1e94be",
        "type": "ui_tab",
        "name": "Optic Configuration",
        "icon": "fa-eye",
        "order": 3,
        "disabled": false,
        "hidden": false
    },
    {
        "id": "c9194f02.9d5e9",
        "type": "ui_tab",
        "name": "Fluidic Acquisition",
        "icon": "fa-flask",
        "order": 4,
        "disabled": false,
        "hidden": false
    },
    {
        "id": "8d16beb8.9b3fb",
        "type": "ui_tab",
        "name": "Segmentation",
        "icon": "fa-crop",
        "order": 5,
        "disabled": false,
        "hidden": false
    },
    {
        "id": "d9cd733b.ab73d",
        "type": "ui_tab",
        "name": "Settings",
        "icon": "fa-cogs",
        "order": 7,
        "disabled": false,
        "hidden": false
    },
    {
        "id": "4248342d.e55fac",
        "type": "ui_group",
        "name": "Optic Characterization",
        "tab": "181bb236.1e94be",
        "order": 2,
        "disp": true,
        "width": 10,
        "collapse": false
    },
    {
        "id": "858a0e3c.987fe",
        "type": "ui_group",
        "name": "Preview",
        "tab": "c9194f02.9d5e9",
        "order": 1,
        "disp": true,
        "width": 10,
        "collapse": false
    },
    {
        "id": "64903b47.4034e4",
        "type": "ui_group",
        "z": "",
        "name": "Navigation",
        "tab": "8d16beb8.9b3fb",
        "order": 3,
        "disp": false,
        "width": "6",
        "collapse": false
    },
    {
        "id": "3da7da8f.179606",
        "type": "ui_group",
        "name": "Processor",
        "tab": "d9cd733b.ab73d",
        "order": 1,
        "disp": true,
        "width": "6",
        "collapse": false
    },
    {
        "id": "cc8bc4eb.651868",
        "type": "ui_base",
        "z": "",
        "theme": {
            "name": "theme-dark",
            "lightTheme": {
                "default": "#0094CE",
                "baseColor": "#5900ce",
                "baseFont": "-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif",
                "edited": false,
                "reset": false
            },
            "darkTheme": {
                "default": "#097479",
                "baseColor": "#097479",
                "baseFont": "-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif",
                "edited": true,
                "reset": false
            },
            "customTheme": {
                "name": "Untitled Theme 1",
                "default": "#4B7930",
                "baseColor": "#4B7930",
                "baseFont": "-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif"
            },
            "themeState": {
                "base-color": {
                    "default": "#097479",
                    "value": "#097479",
                    "edited": true
                },
                "page-titlebar-backgroundColor": {
                    "value": "#097479",
                    "edited": false
                },
                "page-backgroundColor": {
                    "value": "#111111",
                    "edited": false
                },
                "page-sidebar-backgroundColor": {
                    "value": "#333333",
                    "edited": false
                },
                "group-textColor": {
                    "value": "#0eb8c0",
                    "edited": false
                },
                "group-borderColor": {
                    "value": "#555555",
                    "edited": false
                },
                "group-backgroundColor": {
                    "value": "#333333",
                    "edited": false
                },
                "widget-textColor": {
                    "value": "#eeeeee",
                    "edited": false
                },
                "widget-backgroundColor": {
                    "value": "#097479",
                    "edited": false
                },
                "widget-borderColor": {
                    "value": "#333333",
                    "edited": false
                },
                "base-font": {
                    "value": "-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif"
                }
            },
            "angularTheme": {
                "primary": "indigo",
                "accents": "blue",
                "warn": "red",
                "background": "grey"
            }
        },
        "site": {
            "name": "Node-RED Dashboard",
            "hideToolbar": "false",
            "allowSwipe": "false",
            "lockMenu": "false",
            "allowTempTheme": "true",
            "dateFormat": "DD/MM/YYYY",
            "sizes": {
                "sx": 56,
                "sy": 56,
                "gx": 5,
                "gy": 5,
                "cx": 5,
                "cy": 5,
                "px": 5,
                "py": 5
            }
        }
    },
    {
        "id": "36739a35.7cce36",
        "type": "ui_tab",
        "z": "",
        "name": "Gallery",
        "icon": "fa fa-file-image-o",
        "order": 6,
        "disabled": true,
        "hidden": true
    },
    {
        "id": "c0ebfc57.42527",
        "type": "ui_group",
        "name": "Group 1",
        "tab": "36739a35.7cce36",
        "order": 1,
        "disp": true,
        "width": 24
    },
    {
        "id": "737ec584.2eea2c",
        "type": "ui_tab",
        "z": "",
        "name": "Sample",
        "icon": "fa-eyedropper",
        "order": 2,
        "disabled": false,
        "hidden": false
    },
    {
        "id": "6f97e7ae.270c48",
        "type": "ui_group",
        "name": "Group 1",
        "tab": "3a6bb13f.c9703e",
        "order": 1,
        "disp": false,
        "width": "4",
        "collapse": false
    },
    {
        "id": "3e1ba03d.f01d8",
        "type": "ui_group",
        "name": "Sample Identification",
        "tab": "737ec584.2eea2c",
        "order": 1,
        "disp": true,
        "width": 11,
        "collapse": false
    },
    {
        "id": "4e0cd5ea.17e59c",
        "type": "ui_group",
        "name": "Group 2",
        "tab": "3a6bb13f.c9703e",
        "order": 2,
        "disp": false,
        "width": "4",
        "collapse": false
    },
    {
        "id": "ef590206.24f6",
        "type": "ui_group",
        "name": "Group 3",
        "tab": "3a6bb13f.c9703e",
        "order": 3,
        "disp": false,
        "width": "4",
        "collapse": false
    },
    {
        "id": "ae8f6620.073358",
        "type": "ui_group",
        "name": "Group 4",
        "tab": "3a6bb13f.c9703e",
        "order": 4,
        "disp": false,
        "width": "4",
        "collapse": false
    },
    {
        "id": "196518b2.4d53b7",
        "type": "ui_group",
        "name": "Group 5",
        "tab": "3a6bb13f.c9703e",
        "order": 5,
        "disp": false,
        "width": "4",
        "collapse": false
    },
    {
        "id": "777a7c33.fcd804",
        "type": "ui_group",
        "name": "Group 6",
        "tab": "3a6bb13f.c9703e",
        "order": 6,
        "disp": false,
        "width": "4",
        "collapse": false
    },
    {
        "id": "cef1e703.bcf3c8",
        "type": "ui_group",
        "z": "",
        "name": "Sample Location",
        "tab": "737ec584.2eea2c",
        "order": 2,
        "disp": true,
        "width": "10",
        "collapse": false
    },
    {
        "id": "5517c651.b2f668",
        "type": "ui_group",
        "name": "Validation",
        "tab": "737ec584.2eea2c",
        "order": 4,
        "disp": false,
        "width": 10,
        "collapse": false
    },
    {
        "id": "fbd92986.1028c8",
        "type": "ui_group",
        "name": "Focus Adjustment",
        "tab": "181bb236.1e94be",
        "order": 4,
        "disp": true,
        "width": 10,
        "collapse": false
    },
    {
        "id": "707d9797.c8e798",
        "type": "ui_group",
        "name": "Fluidic Manual Manipulation",
        "tab": "181bb236.1e94be",
        "order": 5,
        "disp": true,
        "width": 10,
        "collapse": false
    },
    {
        "id": "7a0b4877.a5d268",
        "type": "ui_group",
        "z": "",
        "name": "Navigation",
        "tab": "181bb236.1e94be",
        "order": 6,
        "disp": false,
        "width": "10",
        "collapse": false
    },
    {
        "id": "404c301a.19c4e",
        "type": "ui_group",
        "name": "Fraction size",
        "tab": "c9194f02.9d5e9",
        "order": 2,
        "disp": true,
        "width": "10",
        "collapse": false
    },
    {
        "id": "4322c187.e73e5",
        "type": "ui_group",
        "name": "Acquisition",
        "tab": "c9194f02.9d5e9",
        "order": 3,
        "disp": true,
        "width": 10,
        "collapse": false
    },
    {
        "id": "b7919ae2.c01788",
        "type": "ui_group",
        "z": "",
        "name": "Navigation",
        "tab": "c9194f02.9d5e9",
        "order": 6,
        "disp": false,
        "width": "10",
        "collapse": false
    },
    {
        "id": "b5d61bc7.54fe48",
        "type": "ui_group",
        "z": "",
        "name": "Statistics",
        "tab": "c9194f02.9d5e9",
        "order": 4,
        "disp": true,
        "width": "10",
        "collapse": false
    },
    {
        "id": "1be83144.4fe4bf",
        "type": "ui_group",
        "name": "Danger Zone (DO NOT TOUCH HERE UNLESS YOU KNOW WHAT YOU ARE DOING)",
        "tab": "d9cd733b.ab73d",
        "order": 5,
        "disp": true,
        "width": 24,
        "collapse": false
    },
    {
        "id": "3ca00bf9.e5cac4",
        "type": "ui_group",
        "z": "",
        "name": "Navigation",
        "tab": "d9cd733b.ab73d",
        "order": 7,
        "disp": false,
        "width": "24",
        "collapse": false
    },
    {
        "id": "b5ba3f26.2e722",
        "type": "ui_group",
        "name": "CPU Temperature",
        "tab": "d9cd733b.ab73d",
        "order": 2,
        "disp": true,
        "width": "6",
        "collapse": false
    },
    {
        "id": "806d69c8.67fc58",
        "type": "ui_group",
        "name": "Memory",
        "tab": "d9cd733b.ab73d",
        "order": 3,
        "disp": true,
        "width": "6",
        "collapse": false
    },
    {
        "id": "405183bc.d8991c",
        "type": "ui_group",
        "name": "Disk Usage",
        "tab": "d9cd733b.ab73d",
        "order": 4,
        "disp": true,
        "width": "6",
        "collapse": false
    },
    {
        "id": "8dc3722c.06efa8",
        "type": "mqtt-broker",
        "name": "",
        "broker": "0.0.0.0",
        "port": "1883",
        "clientid": "Client_node",
        "usetls": false,
        "compatmode": false,
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "willTopic": "",
        "willQos": "0",
        "willPayload": ""
    },
    {
        "id": "abeb6dad.635a2",
        "type": "ui_group",
        "z": "",
        "name": "Control",
        "tab": "8d16beb8.9b3fb",
        "order": 1,
        "disp": true,
        "width": 10,
        "collapse": false
    },
    {
        "id": "cf5d9f0e.d57e7",
        "type": "ui_group",
        "z": "",
        "name": "Sample Net Location",
        "tab": "737ec584.2eea2c",
        "order": 3,
        "disp": true,
        "width": "10",
        "collapse": false
    },
    {
        "id": "5a0e69ac.725268",
        "type": "ui_spacer",
        "name": "spacer",
        "group": "3ca00bf9.e5cac4",
        "order": 2,
        "width": 1,
        "height": 1
    },
    {
        "id": "ca7a56b3.89805",
        "type": "ui_spacer",
        "name": "spacer",
        "group": "3ca00bf9.e5cac4",
        "order": 5,
        "width": 1,
        "height": 1
    },
    {
        "id": "aab3b337.985c98",
        "type": "ui_spacer",
        "name": "spacer",
        "group": "1be83144.4fe4bf",
        "order": 2,
        "width": 9,
        "height": 1
    },
    {
        "id": "5324b3d4.72d6d4",
        "type": "ui_spacer",
        "name": "spacer",
        "group": "1be83144.4fe4bf",
        "order": 4,
        "width": 9,
        "height": 1
    },
    {
        "id": "8780f7f3.52ee5",
        "type": "ui_spacer",
        "name": "spacer",
        "group": "1be83144.4fe4bf",
        "order": 5,
        "width": 9,
        "height": 1
    },
    {
        "id": "5e847442.3e340c",
        "type": "ui_spacer",
        "name": "spacer",
        "group": "1be83144.4fe4bf",
        "order": 7,
        "width": 9,
        "height": 1
    },
    {
        "id": "cc4fe53d.f4dc4",
        "type": "ui_spacer",
        "name": "spacer",
        "group": "1be83144.4fe4bf",
        "order": 9,
        "width": 10,
        "height": 1
    },
    {
        "id": "ce9e278.781eed8",
        "type": "ui_group",
        "name": "Information",
        "tab": "d9cd733b.ab73d",
        "order": 6,
        "disp": true,
        "width": "6",
        "collapse": false
    },
    {
        "id": "70de8209.68416c",
        "type": "ui_group",
        "z": "",
        "name": "Status",
        "tab": "c9194f02.9d5e9",
        "order": 5,
        "disp": true,
        "width": 10,
        "collapse": false
    },
    {
        "id": "46be9c86.dea684",
        "type": "ui_group",
        "z": "",
        "name": "Status",
        "tab": "8d16beb8.9b3fb",
        "order": 2,
        "disp": true,
        "width": 10,
        "collapse": false
    },
    {
        "id": "8c38a81e.9897a8",
        "type": "ui_group",
        "z": "",
        "name": "Camera Settings",
        "tab": "181bb236.1e94be",
        "order": 3,
        "disp": true,
        "width": "10",
        "collapse": false
    },
    {
        "id": "c38a23a2.5dfc4",
        "type": "ui_spacer",
        "name": "spacer",
        "group": "707d9797.c8e798",
        "order": 5,
        "width": 1,
        "height": 1
    },
    {
        "id": "894786f4.7552b8",
        "type": "ui_spacer",
        "name": "spacer",
        "group": "3e1ba03d.f01d8",
        "order": 7,
        "width": 1,
        "height": 1
    },
    {
        "id": "5835ad3b.5e9ff4",
        "type": "ui_spacer",
        "name": "spacer",
        "group": "cf5d9f0e.d57e7",
        "order": 12,
        "width": 4,
        "height": 1
    },
    {
        "id": "b001a150.faa548",
        "type": "ui_spacer",
        "name": "spacer",
        "group": "46be9c86.dea684",
        "order": 3,
        "width": 3,
        "height": 1
    },
    {
        "id": "e900ba8d.100b6",
        "type": "ui_spacer",
        "name": "spacer",
        "group": "46be9c86.dea684",
        "order": 5,
        "width": 3,
        "height": 1
    },
    {
        "id": "a082e7cf.54863",
        "type": "ui_spacer",
        "name": "spacer",
        "group": "46be9c86.dea684",
        "order": 7,
        "width": 10,
        "height": 1
    },
    {
        "id": "de621043.b31528",
        "type": "ui_spacer",
        "name": "spacer",
        "group": "4322c187.e73e5",
        "order": 7,
        "width": 10,
        "height": 1
    },
    {
        "id": "b0a2c4ff.ce75b",
        "type": "ui_spacer",
        "name": "spacer",
        "group": "b5d61bc7.54fe48",
        "order": 2,
        "width": 6,
        "height": 1
    },
    {
        "id": "f1326cca.4ab1f",
        "type": "ui_spacer",
        "name": "spacer",
        "group": "b5d61bc7.54fe48",
        "order": 3,
        "width": 1,
        "height": 1
    },
    {
        "id": "a27ea76d.b9989",
        "type": "ui_spacer",
        "name": "spacer",
        "group": "b5d61bc7.54fe48",
        "order": 5,
        "width": 1,
        "height": 1
    },
    {
        "id": "17a79a42.2912ce",
        "type": "ui_spacer",
        "name": "spacer",
        "group": "b7919ae2.c01788",
        "order": 2,
        "width": 5,
        "height": 1
    },
    {
        "id": "4e78af2d.90be7",
        "type": "ui_ui_control",
        "z": "eaae323a.31b3",
        "name": "",
        "events": "change",
        "x": 520,
        "y": 60,
        "wires": [
            []
        ]
    },
    {
        "id": "2a65c3ec.49a6bc",
        "type": "function",
        "z": "eaae323a.31b3",
        "name": "swtich tab",
        "func": "\nmsg.payload={\"tab\":msg.payload};\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "x": 360,
        "y": 60,
        "wires": [
            [
                "4e78af2d.90be7"
            ]
        ]
    },
    {
        "id": "9d6abe67.6bb3d",
        "type": "ui_button",
        "z": "cb95299c.2817c8",
        "name": "",
        "group": "64903b47.4034e4",
        "order": 1,
        "width": 0,
        "height": 0,
        "passthru": false,
        "label": "Home",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "icon": "home",
        "payload": "{\"tab\":\"Home\"}",
        "payloadType": "json",
        "topic": "",
        "x": 410,
        "y": 460,
        "wires": [
            [
                "f0fb77cf.8f1c28"
            ]
        ]
    },
    {
        "id": "f0fb77cf.8f1c28",
        "type": "ui_ui_control",
        "z": "cb95299c.2817c8",
        "name": "",
        "events": "change",
        "x": 720,
        "y": 460,
        "wires": [
            []
        ]
    },
    {
        "id": "a66e925b.4155c",
        "type": "ui_button",
        "z": "1371dec5.76e671",
        "name": "",
        "group": "3ca00bf9.e5cac4",
        "order": 1,
        "width": 4,
        "height": 1,
        "passthru": false,
        "label": "Home",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "icon": "home",
        "payload": "{\"tab\":\"Home\"}",
        "payloadType": "json",
        "topic": "",
        "x": 130,
        "y": 1140,
        "wires": [
            [
                "60fd157b.8a5aac"
            ]
        ]
    },
    {
        "id": "60fd157b.8a5aac",
        "type": "ui_ui_control",
        "z": "1371dec5.76e671",
        "name": "",
        "events": "change",
        "x": 280,
        "y": 1140,
        "wires": [
            []
        ]
    },
    {
        "id": "2c8c45ab.610c0a",
        "type": "ui_gauge",
        "z": "1371dec5.76e671",
        "name": "",
        "group": "b5ba3f26.2e722",
        "order": 1,
        "width": 0,
        "height": 0,
        "gtype": "gage",
        "title": "CPU Temperature",
        "label": "°C",
        "format": "{{value}}",
        "min": "30",
        "max": "55",
        "colors": [
            "#00b500",
            "#e6e600",
            "#ca3838"
        ],
        "seg1": "",
        "seg2": "",
        "x": 610,
        "y": 100,
        "wires": []
    },
    {
        "id": "ddcbbfa5.cd158",
        "type": "exec",
        "z": "1371dec5.76e671",
        "command": "vcgencmd measure_temp | tr -d \"temp=\" | tr -d \"'C\" | tr -d \"\\n\"",
        "addpay": false,
        "append": "",
        "useSpawn": "",
        "timer": "",
        "name": "RPi Temp.",
        "x": 310,
        "y": 120,
        "wires": [
            [
                "bc503fa5.f46dd",
                "2c8c45ab.610c0a",
                "cef370c7.1f7a",
                "11b51f8f.acd308"
            ],
            [],
            []
        ]
    },
    {
        "id": "cef370c7.1f7a",
        "type": "ui_chart",
        "z": "1371dec5.76e671",
        "name": "",
        "group": "b5ba3f26.2e722",
        "order": 2,
        "width": 0,
        "height": 0,
        "label": "",
        "chartType": "line",
        "legend": "false",
        "xformat": "HH:mm:ss",
        "interpolate": "linear",
        "nodata": "",
        "dot": false,
        "ymin": "30",
        "ymax": "60",
        "removeOlder": "20",
        "removeOlderPoints": "200",
        "removeOlderUnit": "60",
        "cutout": 0,
        "useOneColor": false,
        "useUTC": false,
        "colors": [
            "#1f77b4",
            "#aec7e8",
            "#ff7f0e",
            "#2ca02c",
            "#98df8a",
            "#d62728",
            "#ff9896",
            "#9467bd",
            "#c5b0d5"
        ],
        "useOldStyle": true,
        "outputs": 1,
        "x": 570,
        "y": 140,
        "wires": [
            []
        ]
    },
    {
        "id": "55749fd8.3aca5",
        "type": "exec",
        "z": "1371dec5.76e671",
        "command": "top -d 0.5 -b -n2 | grep \"Cpu(s)\"|tail -n 1 | awk '{print $2 + $4}' | tr -d \"\\n\"",
        "addpay": false,
        "append": "",
        "useSpawn": "",
        "timer": "",
        "name": "CPU Load",
        "x": 310,
        "y": 200,
        "wires": [
            [
                "e046247c.c466e8",
                "4b2b9a70.6a9af4"
            ],
            [],
            []
        ]
    },
    {
        "id": "c2b8d8b.0d90328",
        "type": "exec",
        "z": "1371dec5.76e671",
        "command": "free | grep Mem | awk '{print 100*($2-$7)/$2}' | awk '{print int($1+0.5)}' | tr -d \"\\n\"",
        "addpay": false,
        "append": "",
        "useSpawn": "",
        "timer": "",
        "name": "Free Memory",
        "x": 310,
        "y": 300,
        "wires": [
            [
                "e84f6e08.5d147",
                "c7c8d192.3df27"
            ],
            [],
            []
        ]
    },
    {
        "id": "e046247c.c466e8",
        "type": "ui_gauge",
        "z": "1371dec5.76e671",
        "name": "",
        "group": "3da7da8f.179606",
        "order": 1,
        "width": 0,
        "height": 0,
        "gtype": "gage",
        "title": "Processor",
        "label": "%",
        "format": "{{value}}",
        "min": 0,
        "max": "100",
        "colors": [
            "#00b500",
            "#e6e600",
            "#ca3838"
        ],
        "seg1": "",
        "seg2": "",
        "x": 580,
        "y": 180,
        "wires": []
    },
    {
        "id": "e84f6e08.5d147",
        "type": "ui_gauge",
        "z": "1371dec5.76e671",
        "name": "",
        "group": "806d69c8.67fc58",
        "order": 1,
        "width": 0,
        "height": 0,
        "gtype": "gage",
        "title": "Memory",
        "label": "%",
        "format": "{{value}}",
        "min": 0,
        "max": "100",
        "colors": [
            "#00b500",
            "#e6e600",
            "#ca3838"
        ],
        "seg1": "",
        "seg2": "",
        "x": 580,
        "y": 280,
        "wires": []
    },
    {
        "id": "3910d662.fa1f7a",
        "type": "exec",
        "z": "1371dec5.76e671",
        "command": "df -h | grep /dev/root | awk -F ' ' '{print $5}' | tr -d % | tr \"\\n$\" \"\\ \" |  sed 's/,/./' | tr -d \" \"",
        "addpay": false,
        "append": "",
        "useSpawn": "",
        "timer": "",
        "name": "Disk Usage",
        "x": 310,
        "y": 400,
        "wires": [
            [
                "45e1912a.36a23",
                "84ac8611.1a6ac8"
            ],
            [],
            []
        ]
    },
    {
        "id": "45e1912a.36a23",
        "type": "ui_gauge",
        "z": "1371dec5.76e671",
        "name": "",
        "group": "405183bc.d8991c",
        "order": 1,
        "width": 0,
        "height": 0,
        "gtype": "gage",
        "title": "Disk",
        "label": "%",
        "format": "{{value}}",
        "min": 0,
        "max": "100",
        "colors": [
            "#00b500",
            "#e6e600",
            "#ca3838"
        ],
        "seg1": "",
        "seg2": "",
        "x": 570,
        "y": 380,
        "wires": []
    },
    {
        "id": "4b2b9a70.6a9af4",
        "type": "ui_chart",
        "z": "1371dec5.76e671",
        "name": "",
        "group": "3da7da8f.179606",
        "order": 2,
        "width": 0,
        "height": 0,
        "label": "",
        "chartType": "line",
        "legend": "false",
        "xformat": "HH:mm:ss",
        "interpolate": "linear",
        "nodata": "",
        "dot": false,
        "ymin": "",
        "ymax": "",
        "removeOlder": "20",
        "removeOlderPoints": "",
        "removeOlderUnit": "60",
        "cutout": 0,
        "useOneColor": false,
        "colors": [
            "#1f77b4",
            "#aec7e8",
            "#ff7f0e",
            "#2ca02c",
            "#98df8a",
            "#d62728",
            "#ff9896",
            "#9467bd",
            "#c5b0d5"
        ],
        "useOldStyle": true,
        "outputs": 1,
        "x": 570,
        "y": 220,
        "wires": [
            []
        ]
    },
    {
        "id": "c7c8d192.3df27",
        "type": "ui_chart",
        "z": "1371dec5.76e671",
        "name": "",
        "group": "806d69c8.67fc58",
        "order": 2,
        "width": 0,
        "height": 0,
        "label": "",
        "chartType": "line",
        "legend": "false",
        "xformat": "HH:mm:ss",
        "interpolate": "linear",
        "nodata": "",
        "dot": false,
        "ymin": "0",
        "ymax": "100",
        "removeOlder": "20",
        "removeOlderPoints": "",
        "removeOlderUnit": "60",
        "cutout": 0,
        "useOneColor": false,
        "useUTC": false,
        "colors": [
            "#1f77b4",
            "#aec7e8",
            "#ff7f0e",
            "#2ca02c",
            "#98df8a",
            "#d62728",
            "#ff9896",
            "#9467bd",
            "#c5b0d5"
        ],
        "useOldStyle": true,
        "outputs": 1,
        "x": 570,
        "y": 320,
        "wires": [
            []
        ]
    },
    {
        "id": "84ac8611.1a6ac8",
        "type": "ui_chart",
        "z": "1371dec5.76e671",
        "name": "",
        "group": "405183bc.d8991c",
        "order": 2,
        "width": 0,
        "height": 0,
        "label": "",
        "chartType": "line",
        "legend": "false",
        "xformat": "HH:mm:ss",
        "interpolate": "linear",
        "nodata": "",
        "dot": false,
        "ymin": "0",
        "ymax": "100",
        "removeOlder": "4",
        "removeOlderPoints": "200",
        "removeOlderUnit": "3600",
        "cutout": 0,
        "useOneColor": false,
        "useUTC": false,
        "colors": [
            "#1f77b4",
            "#aec7e8",
            "#ff7f0e",
            "#2ca02c",
            "#98df8a",
            "#d62728",
            "#ff9896",
            "#9467bd",
            "#c5b0d5"
        ],
        "useOldStyle": true,
        "outputs": 1,
        "x": 570,
        "y": 420,
        "wires": [
            []
        ]
    },
    {
        "id": "1cd5b4c0.46af9b",
        "type": "inject",
        "z": "1371dec5.76e671",
        "name": "update: 15s",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "5",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 90,
        "y": 260,
        "wires": [
            [
                "3910d662.fa1f7a",
                "c2b8d8b.0d90328",
                "55749fd8.3aca5",
                "ddcbbfa5.cd158"
            ]
        ]
    },
    {
        "id": "8485d05.444903",
        "type": "ui_switch",
        "z": "1371dec5.76e671",
        "name": "fan_state",
        "label": "Fan",
        "tooltip": "",
        "group": "3ca00bf9.e5cac4",
        "order": 6,
        "width": 3,
        "height": 1,
        "passthru": true,
        "decouple": "false",
        "topic": "",
        "style": "",
        "onvalue": "on",
        "onvalueType": "str",
        "onicon": "",
        "oncolor": "",
        "offvalue": "off",
        "offvalueType": "str",
        "officon": "",
        "offcolor": "",
        "x": 940,
        "y": 40,
        "wires": [
            [
                "2549f778.4eb828"
            ]
        ]
    },
    {
        "id": "2549f778.4eb828",
        "type": "python3-function",
        "z": "1371dec5.76e671",
        "name": "fan.py",
        "func": "#!/usr/bin/python\nimport smbus\nimport sys\n\nstate = msg[\"payload\"]\n\nbus = smbus.SMBus(1)\n\nDEVICE_ADDRESS = 0x0d\n\nif state == \"off\":\n    bus.write_byte_data(DEVICE_ADDRESS, 0x08, 0x00)\n    bus.write_byte_data(DEVICE_ADDRESS, 0x08, 0x00)\nif state == \"on\":\n    bus.write_byte_data(DEVICE_ADDRESS, 0x08, 0x01)\n    bus.write_byte_data(DEVICE_ADDRESS, 0x08, 0x01)",
        "outputs": 1,
        "x": 1090,
        "y": 40,
        "wires": [
            []
        ]
    },
    {
        "id": "a113b518.830008",
        "type": "ui_button",
        "z": "1371dec5.76e671",
        "name": "",
        "group": "1be83144.4fe4bf",
        "order": 10,
        "width": 7,
        "height": 1,
        "passthru": false,
        "label": "Reboot",
        "tooltip": "",
        "color": "",
        "bgcolor": "#AD1625",
        "icon": "refresh",
        "payload": "reboot",
        "payloadType": "str",
        "topic": "reboot",
        "x": 120,
        "y": 1000,
        "wires": [
            [
                "ee57d11c.ed1dd"
            ]
        ]
    },
    {
        "id": "d9a924bc.0ca078",
        "type": "exec",
        "z": "1371dec5.76e671",
        "command": "sudo",
        "addpay": true,
        "append": "now",
        "useSpawn": "false",
        "timer": "2",
        "oldrc": false,
        "name": "cmd",
        "x": 510,
        "y": 1000,
        "wires": [
            [],
            [],
            []
        ]
    },
    {
        "id": "552d8bbb.cc4ca4",
        "type": "ui_button",
        "z": "1371dec5.76e671",
        "name": "",
        "group": "1be83144.4fe4bf",
        "order": 8,
        "width": 7,
        "height": 1,
        "passthru": false,
        "label": "Shutdown",
        "tooltip": "",
        "color": "",
        "bgcolor": "#AD1625",
        "icon": "standby",
        "payload": "shutdown",
        "payloadType": "str",
        "topic": "shutdown",
        "x": 120,
        "y": 1080,
        "wires": [
            [
                "ee57d11c.ed1dd"
            ]
        ]
    },
    {
        "id": "ee57d11c.ed1dd",
        "type": "python3-function",
        "z": "1371dec5.76e671",
        "name": "action",
        "func": "#!/usr/bin/python\nimport smbus\nimport time\nbus = smbus.SMBus(1)\ntime.sleep(1)\n#turn off fan RGB\nbus.write_byte_data(0x0d, 0x07, 0x00)\nbus.write_byte_data(0x0d, 0x07, 0x00)\n\n#msg[\"payload\"] = str(msg[\"topic\"])+' now'\nreturn msg",
        "outputs": 1,
        "x": 330,
        "y": 1040,
        "wires": [
            [
                "b7ab1ada.1f4158",
                "d9a924bc.0ca078"
            ]
        ]
    },
    {
        "id": "b7ab1ada.1f4158",
        "type": "exec",
        "z": "1371dec5.76e671",
        "command": "i2cdetect -y 1",
        "addpay": false,
        "append": "",
        "useSpawn": "false",
        "timer": "1",
        "oldrc": false,
        "name": "i2c update",
        "x": 530,
        "y": 1080,
        "wires": [
            [],
            [],
            []
        ]
    },
    {
        "id": "bc503fa5.f46dd",
        "type": "switch",
        "z": "1371dec5.76e671",
        "name": "",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "gt",
                "v": "50",
                "vt": "num"
            },
            {
                "t": "lte",
                "v": "35",
                "vt": "num"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 570,
        "y": 40,
        "wires": [
            [
                "a25d6486.e1ce28"
            ],
            [
                "5d4f3e71.1bad4"
            ]
        ]
    },
    {
        "id": "5d4f3e71.1bad4",
        "type": "change",
        "z": "1371dec5.76e671",
        "name": "Set OFF",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "off",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 720,
        "y": 60,
        "wires": [
            [
                "8485d05.444903"
            ]
        ]
    },
    {
        "id": "a25d6486.e1ce28",
        "type": "change",
        "z": "1371dec5.76e671",
        "name": "Set ON",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "on",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 720,
        "y": 20,
        "wires": [
            [
                "8485d05.444903"
            ]
        ]
    },
    {
        "id": "6a84252a.d52a0c",
        "type": "ui_template",
        "z": "bccd1f23.87219",
        "group": "833bc5bb.217ba8",
        "name": "Stream Pi Camera",
        "order": 1,
        "width": 18,
        "height": 14,
        "format": "<center>\n  <img src=\"http://planktoscope.local:8000/stream.mjpg\"\n    width=\"100%\" height=\"100%\">\n</center>",
        "storeOutMessages": true,
        "fwdInMessages": true,
        "resendOnRefresh": false,
        "templateScope": "local",
        "x": 110,
        "y": 100,
        "wires": [
            []
        ]
    },
    {
        "id": "dc48dc42.98d18",
        "type": "function",
        "z": "bccd1f23.87219",
        "name": "set global",
        "func": "global.set(msg.topic,msg.payload);",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 880,
        "y": 340,
        "wires": [
            []
        ]
    },
    {
        "id": "f59a2f0d.5e9af",
        "type": "ui_numeric",
        "z": "baa1e3d9.cb29d",
        "name": "acq_minimum_mesh",
        "label": "Min fraction size (μm)",
        "tooltip": "",
        "group": "404c301a.19c4e",
        "order": 2,
        "width": 5,
        "height": 1,
        "wrap": false,
        "passthru": true,
        "topic": "acq_minimum_mesh",
        "format": "{{value}}",
        "min": 0,
        "max": "300",
        "step": "10",
        "x": 600,
        "y": 120,
        "wires": [
            [
                "fb887036.12429"
            ]
        ]
    },
    {
        "id": "6008a8bb.259f08",
        "type": "ui_numeric",
        "z": "baa1e3d9.cb29d",
        "name": "acq_maximum_mesh",
        "label": "Max fraction size (μm)",
        "tooltip": "",
        "group": "404c301a.19c4e",
        "order": 3,
        "width": 5,
        "height": 1,
        "wrap": false,
        "passthru": true,
        "topic": "acq_maximum_mesh",
        "format": "{{value}}",
        "min": "200",
        "max": "2000",
        "step": "100",
        "x": 600,
        "y": 160,
        "wires": [
            [
                "fb887036.12429"
            ]
        ]
    },
    {
        "id": "6b34c456.83178c",
        "type": "ui_text_input",
        "z": "baa1e3d9.cb29d",
        "name": "acq_id",
        "label": "Acquisition unique ID*",
        "tooltip": "",
        "group": "4322c187.e73e5",
        "order": 1,
        "width": 5,
        "height": 1,
        "passthru": true,
        "mode": "text",
        "delay": 300,
        "topic": "acq_id",
        "x": 650,
        "y": 280,
        "wires": [
            [
                "fb887036.12429",
                "67091ac0.8f9f6c"
            ]
        ]
    },
    {
        "id": "7789839d.69b48c",
        "type": "ui_template",
        "z": "eaae323a.31b3",
        "group": "4e0cd5ea.17e59c",
        "name": "Optic Configuration",
        "order": 1,
        "width": 4,
        "height": 4,
        "format": "<md-button ng-click=\"send({payload:'Optic Configuration'})\" style=\"height:100%;\">\n    <i class=\"fa fa-eye fa-5x\"></i>\n    <div style=\"margin-top:30px;\">Optic Configuration</div>\n</md-button>",
        "storeOutMessages": true,
        "fwdInMessages": true,
        "templateScope": "local",
        "x": 130,
        "y": 100,
        "wires": [
            [
                "2a65c3ec.49a6bc"
            ]
        ]
    },
    {
        "id": "6ea6c306.f9c12c",
        "type": "ui_template",
        "z": "eaae323a.31b3",
        "group": "ef590206.24f6",
        "name": "Fluidic Acquisition",
        "order": 1,
        "width": 4,
        "height": 4,
        "format": "<md-button ng-click=\"send({payload:'Fluidic Acquisition'})\" style=\"height:100%;\">\n    <i class=\"fa fa-flask fa-5x\"></i>\n    <div style=\"margin-top:30px;\">Fluidic Acquisition</div>\n</md-button>",
        "storeOutMessages": true,
        "fwdInMessages": true,
        "templateScope": "local",
        "x": 130,
        "y": 140,
        "wires": [
            [
                "2a65c3ec.49a6bc"
            ]
        ]
    },
    {
        "id": "bb9eb153.9e36c",
        "type": "ui_template",
        "z": "eaae323a.31b3",
        "group": "ae8f6620.073358",
        "name": "Segmentation",
        "order": 1,
        "width": 4,
        "height": 4,
        "format": "<md-button ng-click=\"send({payload:'Segmentation'})\" style=\"height:100%;\">\n    <i class=\"fa fa-crop fa-5x\"></i>\n    <div style=\"margin-top:30px;\">Segmentation</div>\n</md-button>",
        "storeOutMessages": true,
        "fwdInMessages": true,
        "templateScope": "local",
        "x": 140,
        "y": 180,
        "wires": [
            [
                "2a65c3ec.49a6bc"
            ]
        ]
    },
    {
        "id": "eaf8ee7f.96f44",
        "type": "ui_template",
        "z": "eaae323a.31b3",
        "group": "196518b2.4d53b7",
        "name": "Gallery",
        "order": 1,
        "width": 4,
        "height": 4,
        "format": "<md-button ng-click=\"send({payload:'Gallery'})\" style=\"height:100%;\">\n    <i class=\"fa fa-file-image-o fa-5x\"></i>\n    <div style=\"margin-top:30px;\">Gallery</div>\n</md-button>",
        "storeOutMessages": true,
        "fwdInMessages": true,
        "templateScope": "local",
        "x": 160,
        "y": 220,
        "wires": [
            [
                "2a65c3ec.49a6bc"
            ]
        ]
    },
    {
        "id": "811cd88c.daf528",
        "type": "ui_button",
        "z": "bccd1f23.87219",
        "name": "down",
        "group": "fbd92986.1028c8",
        "order": 5,
        "width": 0,
        "height": 0,
        "passthru": true,
        "label": "",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "icon": "arrow_downward",
        "payload": "DOWN",
        "payloadType": "str",
        "topic": "actuator/focus",
        "x": 190,
        "y": 740,
        "wires": [
            [
                "65ad39d.b6d4d48"
            ]
        ]
    },
    {
        "id": "edda4df4.76de2",
        "type": "ui_button",
        "z": "bccd1f23.87219",
        "name": "up",
        "group": "fbd92986.1028c8",
        "order": 1,
        "width": 0,
        "height": 0,
        "passthru": false,
        "label": "",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "icon": "arrow_upwards",
        "payload": "UP",
        "payloadType": "str",
        "topic": "actuator/focus",
        "x": 190,
        "y": 700,
        "wires": [
            [
                "65ad39d.b6d4d48"
            ]
        ]
    },
    {
        "id": "68962547.34a67c",
        "type": "ui_text_input",
        "z": "bccd1f23.87219",
        "name": "pump_manual_volume",
        "label": "Volume to pass (ml)",
        "tooltip": "",
        "group": "707d9797.c8e798",
        "order": 3,
        "width": 3,
        "height": 1,
        "passthru": true,
        "mode": "number",
        "delay": 300,
        "topic": "pump_manual_volume",
        "x": 320,
        "y": 340,
        "wires": [
            [
                "dc48dc42.98d18"
            ]
        ]
    },
    {
        "id": "34c81624.df1cea",
        "type": "ui_slider",
        "z": "bccd1f23.87219",
        "name": "pump_flowrate",
        "label": "Flowrate (ml/min)*",
        "tooltip": "",
        "group": "707d9797.c8e798",
        "order": 1,
        "width": 0,
        "height": 0,
        "passthru": true,
        "outs": "end",
        "topic": "pump_flowrate",
        "min": 0,
        "max": "20",
        "step": "0.1",
        "x": 340,
        "y": 300,
        "wires": [
            [
                "dc48dc42.98d18"
            ]
        ]
    },
    {
        "id": "c1b1469.9650eb8",
        "type": "ui_template",
        "z": "eaae323a.31b3",
        "group": "777a7c33.fcd804",
        "name": "Settings",
        "order": 1,
        "width": 4,
        "height": 4,
        "format": "<md-button ng-click=\"send({payload:'Settings'})\" style=\"height:100%;\">\n    <i class=\"fa fa-cogs fa-5x\"></i>\n    <div style=\"margin-top:30px;\">Settings</div>\n</md-button>",
        "storeOutMessages": true,
        "fwdInMessages": true,
        "templateScope": "local",
        "x": 160,
        "y": 260,
        "wires": [
            [
                "2a65c3ec.49a6bc"
            ]
        ]
    },
    {
        "id": "abafd6e6.04a5f8",
        "type": "ui_template",
        "z": "eaae323a.31b3",
        "group": "6f97e7ae.270c48",
        "name": "Sample",
        "order": 1,
        "width": 4,
        "height": 4,
        "format": "<md-button ng-click=\"send({payload:'Sample'})\" style=\"height:100%;\">\n    <i class=\"fa fa-eyedropper fa-5x\"></i>\n    <div style=\"margin-top:30px;\">Sample</div>\n    <br>\n    In doubt? Start Here!\n</md-button>",
        "storeOutMessages": true,
        "fwdInMessages": true,
        "resendOnRefresh": false,
        "templateScope": "local",
        "x": 160,
        "y": 60,
        "wires": [
            [
                "2a65c3ec.49a6bc"
            ]
        ]
    },
    {
        "id": "4557d689.a4fa88",
        "type": "ui_text_input",
        "z": "b771c342.49603",
        "name": "sample_ship",
        "label": "Name of the ship",
        "tooltip": "",
        "group": "3e1ba03d.f01d8",
        "order": 2,
        "width": 0,
        "height": 0,
        "passthru": true,
        "mode": "text",
        "delay": 300,
        "topic": "sample_ship",
        "x": 670,
        "y": 340,
        "wires": [
            [
                "9f501f49.45645"
            ]
        ]
    },
    {
        "id": "fcfc31ae.af3af",
        "type": "ui_dropdown",
        "z": "b771c342.49603",
        "name": "sample_sampling_gear",
        "label": "Sampling gear",
        "tooltip": "",
        "place": "Choose from list",
        "group": "3e1ba03d.f01d8",
        "order": 5,
        "width": 0,
        "height": 0,
        "passthru": true,
        "multiple": false,
        "options": [
            {
                "label": "Plankton net",
                "value": "net",
                "type": "str"
            },
            {
                "label": "Niskin bottle 12L",
                "value": "niskin_12L",
                "type": "str"
            },
            {
                "label": "Niskin bottle 24L",
                "value": "niskin_24L",
                "type": "str"
            },
            {
                "label": "Pass Hull",
                "value": "pass_hull",
                "type": "str"
            }
        ],
        "payload": "",
        "topic": "sample_sampling_gear",
        "x": 640,
        "y": 460,
        "wires": [
            [
                "9f501f49.45645",
                "d7c68899.f8f678"
            ]
        ]
    },
    {
        "id": "82c5fc77.59c97",
        "type": "ui_text_input",
        "z": "b771c342.49603",
        "name": "sample_operator",
        "label": "Name of the operator",
        "tooltip": "",
        "group": "3e1ba03d.f01d8",
        "order": 4,
        "width": 0,
        "height": 0,
        "passthru": true,
        "mode": "text",
        "delay": 300,
        "topic": "sample_operator",
        "x": 660,
        "y": 420,
        "wires": [
            [
                "9f501f49.45645",
                "52af9ac0.60eb24"
            ]
        ]
    },
    {
        "id": "9c882b37.fde668",
        "type": "ui_text_input",
        "z": "b771c342.49603",
        "name": "sample_project",
        "label": "Name of the project*",
        "tooltip": "",
        "group": "3e1ba03d.f01d8",
        "order": 1,
        "width": 0,
        "height": 0,
        "passthru": true,
        "mode": "text",
        "delay": 300,
        "topic": "sample_project",
        "x": 660,
        "y": 300,
        "wires": [
            [
                "9f501f49.45645"
            ]
        ]
    },
    {
        "id": "94eb4221.9b92c",
        "type": "ui_text_input",
        "z": "b771c342.49603",
        "name": "sample_id",
        "label": "ID of the station*",
        "tooltip": "",
        "group": "3e1ba03d.f01d8",
        "order": 3,
        "width": 0,
        "height": 0,
        "passthru": true,
        "mode": "text",
        "delay": 300,
        "topic": "sample_id",
        "x": 680,
        "y": 380,
        "wires": [
            [
                "9f501f49.45645"
            ]
        ]
    },
    {
        "id": "9f501f49.45645",
        "type": "function",
        "z": "b771c342.49603",
        "name": "set global",
        "func": "global.set(msg.topic,msg.payload);",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1240,
        "y": 540,
        "wires": [
            []
        ]
    },
    {
        "id": "cc0ca68b.4263a8",
        "type": "ui_dropdown",
        "z": "baa1e3d9.cb29d",
        "name": "acq_celltype",
        "label": "Thickness flowcell*",
        "tooltip": "",
        "place": "Select option",
        "group": "404c301a.19c4e",
        "order": 1,
        "width": 0,
        "height": 0,
        "passthru": true,
        "multiple": false,
        "options": [
            {
                "label": "200 μm µ-Slide I Luer",
                "value": 200,
                "type": "num"
            },
            {
                "label": "300 µm capillary",
                "value": 300,
                "type": "num"
            },
            {
                "label": "400 μm µ-Slide I Luer",
                "value": 400,
                "type": "num"
            },
            {
                "label": "600 μm µ-Slide I Luer",
                "value": 600,
                "type": "num"
            },
            {
                "label": "800 μm µ-Slide I Luer",
                "value": 800,
                "type": "num"
            }
        ],
        "payload": "",
        "topic": "acq_celltype",
        "x": 630,
        "y": 240,
        "wires": [
            [
                "fb887036.12429",
                "99b11fe4.2795d"
            ]
        ]
    },
    {
        "id": "fb887036.12429",
        "type": "function",
        "z": "baa1e3d9.cb29d",
        "name": "set global",
        "func": "global.set(msg.topic, msg.payload);",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 940,
        "y": 180,
        "wires": [
            []
        ]
    },
    {
        "id": "222c851d.5d0a3a",
        "type": "ui_ui_control",
        "z": "b771c342.49603",
        "name": "",
        "events": "change",
        "x": 440,
        "y": 1180,
        "wires": [
            []
        ]
    },
    {
        "id": "52f6b103.1efb6",
        "type": "ui_toast",
        "z": "b771c342.49603",
        "position": "dialog",
        "displayTime": "3",
        "highlight": "",
        "sendall": true,
        "outputs": 1,
        "ok": "OK",
        "cancel": "",
        "raw": false,
        "topic": "",
        "name": "",
        "x": 850,
        "y": 1300,
        "wires": [
            []
        ]
    },
    {
        "id": "986d960a.c75908",
        "type": "function",
        "z": "b771c342.49603",
        "name": "Check form",
        "func": "var sample_project= global.get(\"sample_project\");\nvar sample_ship= global.get(\"sample_ship\");\nvar sample_id= global.get(\"sample_id\");\nvar sample_operator= global.get(\"sample_operator\");\nvar sample_sampling_gear= global.get(\"sample_sampling_gear\");\nvar object_lat= global.get(\"object_lat\");\nvar object_lon= global.get(\"object_lon\");\nvar object_date= global.get(\"object_date\");\nvar object_time= global.get(\"object_time\");\n\nif (sample_project === undefined || sample_project === \"\") {\n    msg.topic = \"Missing entry :\"\n    msg.payload = \"Sample project\"\n}\n\nelse if (sample_ship === undefined || sample_ship === \"\") {\n    msg.topic = \"Missing entry :\"\n    msg.payload = \"Sample ship\"\n}\n\nelse if (sample_id === undefined || sample_id === \"\") {\n    msg.topic = \"Missing entry :\"\n    msg.payload = \"Sample ID\"\n}\n\nelse if (sample_operator === undefined || sample_operator === \"\") {\n    msg.topic = \"Missing entry :\"\n    msg.payload = \"Sample operator\"\n}\n\nelse if (sample_sampling_gear === undefined || sample_sampling_gear === \"\") {\n    msg.topic = \"Missing entry :\"\n    msg.payload = \"Sample sampling gear\"\n}\n\nelse if (object_lat === undefined || object_lat === null) {\n    msg.topic = \"Missing entry :\"\n    msg.payload = \"Latitude of throw\"\n}\n\nelse if (object_lon === undefined || object_lon === null) {\n    msg.topic = \"Missing entry :\"\n    msg.payload = \"Longitude of throw\"\n}\n\nelse if (object_date === undefined || object_date === \"\") {\n    msg.topic = \"Missing entry :\"\n    msg.payload = \"Date of throw\"\n}\n\nelse if (object_time === undefined || object_time === \"\") {\n    msg.topic = \"Missing entry :\"\n    msg.payload = \"Time of throw\"\n}\nelse if (sample_sampling_gear == \"net\"){\n    var object_lat_end= global.get(\"object_lat_end\");\n    var object_lon_end= global.get(\"object_lon_end\");\n    var object_date_end= global.get(\"object_date_end\");\n    var object_time_end= global.get(\"object_time_end\");\n\n    if (object_lat_end === undefined || object_lat_end === null) {\n        msg.topic = \"Missing entry :\"\n        msg.payload = \"Latitude of retrieval\"\n    }\n    \n    else if (object_lon_end === undefined || object_lon_end === null) {\n        msg.topic = \"Missing entry :\"\n        msg.payload = \"Longitude of retrieval\"\n    }\n    \n    else if (object_date_end === undefined || object_date_end === \"\") {\n        msg.topic = \"Missing entry :\"\n        msg.payload = \"Date of retrieval\"\n    }\n    \n    else if (object_time_end === undefined || object_time_end === \"\") {\n        msg.topic = \"Missing entry :\"\n        msg.payload = \"Time of retrieval\"\n    }\n    else {\n        msg.topic = \"Change Tab\"\n        msg.payload={\"tab\":\"Optic Configuration\"};\n    }\n}\nelse {\n    msg.topic = \"Change Tab\"\n    msg.payload={\"tab\":\"Optic Configuration\"};\n}\nreturn msg;\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 450,
        "y": 1240,
        "wires": [
            [
                "f5e66a2f.0d09d8"
            ]
        ]
    },
    {
        "id": "18f44504.cac66b",
        "type": "gpsd",
        "z": "b771c342.49603",
        "name": "",
        "hostname": "localhost",
        "port": "2947",
        "tpv": true,
        "sky": false,
        "info": false,
        "device": false,
        "gst": false,
        "att": false,
        "x": 290,
        "y": 1420,
        "wires": [
            []
        ]
    },
    {
        "id": "726a7822.cd6298",
        "type": "ui_ui_control",
        "z": "b771c342.49603",
        "name": "",
        "events": "change",
        "x": 840,
        "y": 1220,
        "wires": [
            []
        ]
    },
    {
        "id": "f5e66a2f.0d09d8",
        "type": "switch",
        "z": "b771c342.49603",
        "name": "",
        "property": "topic",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "Change Tab",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "Missing entry :",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 610,
        "y": 1240,
        "wires": [
            [
                "726a7822.cd6298",
                "e2b277c1.07283"
            ],
            [
                "52f6b103.1efb6"
            ]
        ]
    },
    {
        "id": "2d128018.6a809",
        "type": "ui_text_input",
        "z": "b771c342.49603",
        "name": "object_lat",
        "label": "Latitude",
        "tooltip": "36°57'9\" N",
        "group": "cf5d9f0e.d57e7",
        "order": 2,
        "width": 5,
        "height": 1,
        "passthru": true,
        "mode": "text",
        "delay": 300,
        "topic": "object_lat",
        "x": 680,
        "y": 780,
        "wires": [
            [
                "42795da1.0ee104"
            ]
        ]
    },
    {
        "id": "4626c0da.e0dd5",
        "type": "ui_text_input",
        "z": "b771c342.49603",
        "name": "object_lon",
        "label": "Longitude",
        "tooltip": "110°4'21\" W",
        "group": "cf5d9f0e.d57e7",
        "order": 3,
        "width": 5,
        "height": 1,
        "passthru": true,
        "mode": "text",
        "delay": 300,
        "topic": "object_lon",
        "x": 680,
        "y": 820,
        "wires": [
            [
                "42795da1.0ee104"
            ]
        ]
    },
    {
        "id": "f00f321f.77d76",
        "type": "ui_date_picker",
        "z": "b771c342.49603",
        "name": "object_date",
        "label": "Date",
        "group": "cf5d9f0e.d57e7",
        "order": 4,
        "width": 5,
        "height": 1,
        "passthru": true,
        "topic": "object_date",
        "x": 670,
        "y": 860,
        "wires": [
            [
                "29f2b365.4327ec"
            ]
        ]
    },
    {
        "id": "207fbdbb.2fe2a2",
        "type": "ui_text_input",
        "z": "b771c342.49603",
        "name": "object_time",
        "label": "Time",
        "tooltip": "UTC time, 03:23:00 or 15:45",
        "group": "cf5d9f0e.d57e7",
        "order": 5,
        "width": 5,
        "height": 1,
        "passthru": true,
        "mode": "text",
        "delay": 300,
        "topic": "object_time",
        "x": 670,
        "y": 900,
        "wires": [
            [
                "1a945afa.d60aad"
            ]
        ]
    },
    {
        "id": "6c792043.b6ff9",
        "type": "ui_ui_control",
        "z": "bccd1f23.87219",
        "name": "",
        "events": "change",
        "x": 1060,
        "y": 1120,
        "wires": [
            []
        ]
    },
    {
        "id": "902429eb.ceacb8",
        "type": "ui_toast",
        "z": "bccd1f23.87219",
        "position": "dialog",
        "displayTime": "3",
        "highlight": "",
        "sendall": true,
        "outputs": 1,
        "ok": "OK",
        "cancel": "",
        "raw": false,
        "topic": "",
        "name": "",
        "x": 1070,
        "y": 1220,
        "wires": [
            []
        ]
    },
    {
        "id": "fe840e05.b46f3",
        "type": "function",
        "z": "bccd1f23.87219",
        "name": "Check form",
        "func": "var acq_fnumber_objective= global.get(\"acq_fnumber_objective\");\n\nif (acq_fnumber_objective === undefined || acq_fnumber_objective === \"\") {\n    msg.topic = \"Missing entry :\"\n    msg.payload = \"Focal Length of the objective\"\n}\n\nelse {\n    msg.topic = \"Change Tab\"\n    msg.payload={\"tab\":\"Fluidic Acquisition\"};\n}\nreturn msg;\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 670,
        "y": 1180,
        "wires": [
            [
                "652d812a.7d808"
            ]
        ]
    },
    {
        "id": "f58a0c4.e207df",
        "type": "ui_ui_control",
        "z": "bccd1f23.87219",
        "name": "",
        "events": "change",
        "x": 1060,
        "y": 1160,
        "wires": [
            []
        ]
    },
    {
        "id": "652d812a.7d808",
        "type": "switch",
        "z": "bccd1f23.87219",
        "name": "",
        "property": "topic",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "Change Tab",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "Missing entry :",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 830,
        "y": 1180,
        "wires": [
            [
                "f58a0c4.e207df"
            ],
            [
                "902429eb.ceacb8"
            ]
        ]
    },
    {
        "id": "5846b1d4.7971b",
        "type": "ui_button",
        "z": "bccd1f23.87219",
        "name": "Backward",
        "group": "707d9797.c8e798",
        "order": 2,
        "width": 2,
        "height": 1,
        "passthru": false,
        "label": "",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "icon": "arrow_back",
        "payload": "BACKWARD",
        "payloadType": "str",
        "topic": "actuator/pump",
        "x": 180,
        "y": 220,
        "wires": [
            [
                "3cb96380.e575ec"
            ]
        ]
    },
    {
        "id": "2cab680b.baf888",
        "type": "ui_button",
        "z": "bccd1f23.87219",
        "name": "Forward",
        "group": "707d9797.c8e798",
        "order": 4,
        "width": 2,
        "height": 1,
        "passthru": true,
        "label": "",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "icon": "arrow_forward",
        "payload": "FORWARD",
        "payloadType": "str",
        "topic": "actuator/pump",
        "x": 180,
        "y": 260,
        "wires": [
            [
                "3cb96380.e575ec"
            ]
        ]
    },
    {
        "id": "961d27e7.da65c8",
        "type": "ui_switch",
        "z": "bccd1f23.87219",
        "name": "light_state",
        "label": "Light",
        "tooltip": "",
        "group": "4248342d.e55fac",
        "order": 1,
        "width": 0,
        "height": 0,
        "passthru": true,
        "decouple": "false",
        "topic": "",
        "style": "",
        "onvalue": "true",
        "onvalueType": "bool",
        "onicon": "",
        "oncolor": "",
        "offvalue": "false",
        "offvalueType": "bool",
        "officon": "",
        "offcolor": "",
        "x": 280,
        "y": 40,
        "wires": [
            [
                "cbb8afed.0a026"
            ]
        ],
        "icon": "font-awesome/fa-lightbulb-o"
    },
    {
        "id": "cc966678.da8d08",
        "type": "ui_dropdown",
        "z": "bccd1f23.87219",
        "name": "acq_fnumber_objective",
        "label": "M12 Lens*",
        "tooltip": "",
        "place": "Select option",
        "group": "4248342d.e55fac",
        "order": 2,
        "width": 0,
        "height": 0,
        "passthru": true,
        "options": [
            {
                "label": "f 25mm 1/2\" 5MP IR",
                "value": 25,
                "type": "num"
            },
            {
                "label": "f 16mm 1/2.5\" 5MP IR",
                "value": 16,
                "type": "num"
            },
            {
                "label": "f 12mm 1/2.5\" 5MP IR",
                "value": 12,
                "type": "num"
            },
            {
                "label": "f 8mm 1/2.5\" 5MP IR",
                "value": 8,
                "type": "num"
            },
            {
                "label": "f 6mm 1/2.5\" 5MP IR",
                "value": 6,
                "type": "num"
            }
        ],
        "payload": "",
        "topic": "acq_fnumber_objective",
        "x": 1080,
        "y": 100,
        "wires": [
            [
                "8038414a.34461"
            ]
        ]
    },
    {
        "id": "9b515beb.4aea48",
        "type": "ui_template",
        "z": "bccd1f23.87219",
        "group": "4248342d.e55fac",
        "name": "Magnification",
        "order": 3,
        "width": 0,
        "height": 0,
        "format": "<div>\n    Magnification : X\n    <span id=\"obj_magnification\" ng-bind-html=\"msg.payload\">\n    </span>\n</div>",
        "storeOutMessages": true,
        "fwdInMessages": true,
        "resendOnRefresh": false,
        "templateScope": "local",
        "x": 1670,
        "y": 100,
        "wires": [
            []
        ]
    },
    {
        "id": "8038414a.34461",
        "type": "function",
        "z": "bccd1f23.87219",
        "name": "calculate",
        "func": "global.set(msg.topic,msg.payload);\nvar acq_fnumber_objective = String(global.get(msg.topic));\n\nswitch(acq_fnumber_objective) {\n  case \"25\":\n    global.set(\"acq_magnification\",0.6);\n    global.set(\"process_pixel\",1.86);\n    global.set(\"sug_min\",60);\n    global.set(\"sug_max\",670);\n    global.set(\"sug_flowrate\",3);\n    break;\n  case \"16\":\n    global.set(\"acq_magnification\",0.94);\n    global.set(\"process_pixel\",1.19);\n    global.set(\"sug_min\",40);\n    global.set(\"sug_max\",430);\n    global.set(\"sug_flowrate\",2.4);\n    break;\n  case \"12\":\n    global.set(\"acq_magnification\",1.20);\n    global.set(\"process_pixel\",0.94);\n    global.set(\"sug_min\",30);\n    global.set(\"sug_max\",340);\n    global.set(\"sug_flowrate\",1.25);\n    break;\n  case \"8\":\n    global.set(\"acq_magnification\",1.78);\n    global.set(\"process_pixel\",0.63);\n    global.set(\"sug_min\",20);\n    global.set(\"sug_max\",230);\n    global.set(\"sug_flowrate\",0.42);\n    break;\n  case \"6\":\n    global.set(\"acq_magnification\",2.36);\n    global.set(\"process_pixel\",0.48);\n    global.set(\"sug_min\",15);\n    global.set(\"sug_max\",170);\n    global.set(\"sug_flowrate\",0.32);\n    break;\n}\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1280,
        "y": 100,
        "wires": [
            [
                "ad87820f.b1d1e",
                "d68a52ee.82e8e",
                "238f26b1.e2089a",
                "6e0f6d36.a6b854"
            ]
        ]
    },
    {
        "id": "3d2360ad.e41e7",
        "type": "ui_template",
        "z": "bccd1f23.87219",
        "group": "4248342d.e55fac",
        "name": "process_pixel",
        "order": 4,
        "width": 0,
        "height": 0,
        "format": "<div>\n    Pixel resolution :\n    <span id=\"process_pixel\" ng-bind-html=\"msg.payload\"></span>\n    μm\n</div>",
        "storeOutMessages": true,
        "fwdInMessages": true,
        "resendOnRefresh": false,
        "templateScope": "local",
        "x": 1680,
        "y": 140,
        "wires": [
            []
        ]
    },
    {
        "id": "8e66977b.9166a8",
        "type": "ui_template",
        "z": "bccd1f23.87219",
        "group": "4248342d.e55fac",
        "name": "min_size",
        "order": 5,
        "width": 0,
        "height": 0,
        "format": "<div>\n    Smallest cells to explore :\n    <span id=\"min_size\" ng-bind-html=\"msg.payload\"></span>\n    μm\n</div>",
        "storeOutMessages": true,
        "fwdInMessages": true,
        "templateScope": "local",
        "x": 1660,
        "y": 180,
        "wires": [
            []
        ]
    },
    {
        "id": "26b32f2c.c64fc",
        "type": "ui_template",
        "z": "bccd1f23.87219",
        "group": "4248342d.e55fac",
        "name": "max_size",
        "order": 6,
        "width": 0,
        "height": 0,
        "format": "<div>\n    Biggest cells to explore :\n    <span id=\"max_size\" ng-bind-html=\"msg.payload\"></span>\n    μm\n</div>",
        "storeOutMessages": true,
        "fwdInMessages": true,
        "templateScope": "local",
        "x": 1660,
        "y": 220,
        "wires": [
            []
        ]
    },
    {
        "id": "ad87820f.b1d1e",
        "type": "function",
        "z": "bccd1f23.87219",
        "name": "get magnification",
        "func": "var magnification = global.get(\"acq_magnification\");\nmsg.payload = magnification;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1490,
        "y": 100,
        "wires": [
            [
                "9b515beb.4aea48"
            ]
        ]
    },
    {
        "id": "d68a52ee.82e8e",
        "type": "function",
        "z": "bccd1f23.87219",
        "name": "get process_pixel",
        "func": "var process_pixel = global.get(\"process_pixel\");\nmsg.payload = process_pixel;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1490,
        "y": 140,
        "wires": [
            [
                "3d2360ad.e41e7"
            ]
        ]
    },
    {
        "id": "238f26b1.e2089a",
        "type": "function",
        "z": "bccd1f23.87219",
        "name": "get sug_min",
        "func": "var sug_min = global.get(\"sug_min\");\nmsg.payload = sug_min;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "x": 1470,
        "y": 180,
        "wires": [
            [
                "8e66977b.9166a8"
            ]
        ]
    },
    {
        "id": "6e0f6d36.a6b854",
        "type": "function",
        "z": "bccd1f23.87219",
        "name": "get sug_max",
        "func": "var sug_max = global.get(\"sug_max\");\nmsg.payload = sug_max;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "x": 1470,
        "y": 220,
        "wires": [
            [
                "26b32f2c.c64fc"
            ]
        ]
    },
    {
        "id": "bb2bb7ce.1d1458",
        "type": "ui_template",
        "z": "baa1e3d9.cb29d",
        "group": "858a0e3c.987fe",
        "name": "Stream Pi Camera",
        "order": 1,
        "width": 10,
        "height": 8,
        "format": "<center>\n  <img src=\"http://planktoscope.local:8000/stream.mjpg\"\n    width=\"100%\" height=\"100%\">\n</center>",
        "storeOutMessages": true,
        "fwdInMessages": true,
        "resendOnRefresh": false,
        "templateScope": "local",
        "x": 910,
        "y": 40,
        "wires": [
            []
        ]
    },
    {
        "id": "d0c5b57d.590818",
        "type": "ui_ui_control",
        "z": "baa1e3d9.cb29d",
        "name": "",
        "events": "change",
        "x": 1020,
        "y": 80,
        "wires": [
            []
        ]
    },
    {
        "id": "16de754c.cc969b",
        "type": "ui_button",
        "z": "b771c342.49603",
        "name": "",
        "group": "5517c651.b2f668",
        "order": 1,
        "width": 5,
        "height": 1,
        "passthru": false,
        "label": "Previous",
        "tooltip": "",
        "color": "#097479",
        "bgcolor": "white",
        "icon": "keyboard_return",
        "payload": "{\"tab\":\"Home\"}",
        "payloadType": "json",
        "topic": "",
        "x": 280,
        "y": 1180,
        "wires": [
            [
                "222c851d.5d0a3a"
            ]
        ]
    },
    {
        "id": "84f3d040.5f7ea",
        "type": "ui_button",
        "z": "b771c342.49603",
        "name": "",
        "group": "5517c651.b2f668",
        "order": 2,
        "width": 5,
        "height": 1,
        "passthru": false,
        "label": "Continue",
        "tooltip": "",
        "color": "#097479",
        "bgcolor": "white",
        "icon": "keyboard_tab",
        "payload": "{\"tab\":\"Home\"}",
        "payloadType": "json",
        "topic": "",
        "x": 280,
        "y": 1240,
        "wires": [
            [
                "986d960a.c75908"
            ]
        ]
    },
    {
        "id": "f61aaed5.1e64",
        "type": "ui_button",
        "z": "bccd1f23.87219",
        "name": "",
        "group": "7a0b4877.a5d268",
        "order": 1,
        "width": 5,
        "height": 1,
        "passthru": false,
        "label": "Previous",
        "tooltip": "",
        "color": "#097479",
        "bgcolor": "white",
        "icon": "keyboard_return",
        "payload": "{\"tab\":\"Sample\"}",
        "payloadType": "json",
        "topic": "",
        "x": 500,
        "y": 1120,
        "wires": [
            [
                "6c792043.b6ff9"
            ]
        ]
    },
    {
        "id": "9ba6ec0a.22c96",
        "type": "ui_button",
        "z": "bccd1f23.87219",
        "name": "",
        "group": "7a0b4877.a5d268",
        "order": 2,
        "width": 5,
        "height": 1,
        "passthru": false,
        "label": "Continue",
        "tooltip": "",
        "color": "#097479",
        "bgcolor": "white",
        "icon": "keyboard_tab",
        "payload": "{\"tab\":\"Home\"}",
        "payloadType": "json",
        "topic": "",
        "x": 500,
        "y": 1180,
        "wires": [
            [
                "fe840e05.b46f3"
            ]
        ]
    },
    {
        "id": "c72f8fae.23bd4",
        "type": "ui_button",
        "z": "baa1e3d9.cb29d",
        "name": "",
        "group": "b7919ae2.c01788",
        "order": 1,
        "width": 5,
        "height": 1,
        "passthru": false,
        "label": "Previous",
        "tooltip": "",
        "color": "#097479",
        "bgcolor": "white",
        "icon": "keyboard_return",
        "payload": "{\"tab\":\"Optic Configuration\"}",
        "payloadType": "json",
        "topic": "",
        "x": 880,
        "y": 80,
        "wires": [
            [
                "d0c5b57d.590818"
            ]
        ]
    },
    {
        "id": "389bef3.d94c61",
        "type": "ui_text_input",
        "z": "baa1e3d9.cb29d",
        "name": "acq_volume",
        "label": "Volume to pass (ml)",
        "tooltip": "",
        "group": "4322c187.e73e5",
        "order": 2,
        "width": 5,
        "height": 1,
        "passthru": true,
        "mode": "number",
        "delay": 300,
        "topic": "acq_volume",
        "x": 630,
        "y": 200,
        "wires": [
            [
                "fb887036.12429"
            ]
        ]
    },
    {
        "id": "29be525e.0c87fe",
        "type": "ui_template",
        "z": "baa1e3d9.cb29d",
        "group": "b5d61bc7.54fe48",
        "name": "show global",
        "order": 6,
        "width": 0,
        "height": 0,
        "format": "<div >\n    <strong>Sample Project:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sample_project\"></span><br>\n    <strong>Sample Ship:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sample_ship\"></span><br>\n    <strong>sample operator:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sample_operator\"></span><br>\n    <strong>sample id:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sample_id\"></span><br>\n    <strong>sample sampling_gear:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sample_sampling_gear\"></span><br>\n\n    <strong>acq id:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_id\"></span><br>\n    <strong>acq instrument:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_instrument\"></span><br>\n    <strong>acq instrument_id:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_instrument_id\"></span><br>\n    <strong>acq camera:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_camera\"></span><br>\n    <strong>acq celltype:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_celltype\"></span><br>\n    <strong>acq minimum_mesh:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_minimum_mesh\"></span><br>\n    <strong>acq maximum_mesh:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_maximum_mesh\"></span><br>\n    <strong>acq min_esd:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_min_esd\"></span><br>\n    <strong>acq max_esd:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_max_esd\"></span><br>\n    <strong>acq volume:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_volume\"></span><br>\n    <strong>acq magnification:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_magnification\"></span><br>\n    <strong>acq fnumber_objective:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_fnumber_objective\"></span><br>\n    <strong>acq software:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_software\"></span><br>\n    <strong>acq flowrate:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sug_flowrate\"></span><br>\n\n    <strong>object lat:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_lat\"></span><br>\n    <strong>object lon:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_lon\"></span><br>\n    <strong>object lat end:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_lat_end\"></span><br>\n    <strong>object lon end:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_lon_end\"></span><br>\n    <strong>object date:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_date\"></span><br>\n    <strong>object time:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_time\"></span><br>\n    <strong>object date end:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_date_end\"></span><br>\n    <strong>object time end:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_time_end\"></span><br>\n    <strong>object depth min:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_depth_min\"></span><br>\n    <strong>object depth max:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_depth_max\"></span><br>\n\n    <strong>process pixel:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.process_pixel\"></span><br>\n    <strong>process id:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.process_id\"></span>\n</div>\n",
        "storeOutMessages": true,
        "fwdInMessages": true,
        "resendOnRefresh": false,
        "templateScope": "local",
        "x": 1250,
        "y": 500,
        "wires": [
            []
        ]
    },
    {
        "id": "cbb8afed.0a026",
        "type": "rpi-gpio out",
        "z": "bccd1f23.87219",
        "name": "LED Output",
        "pin": "40",
        "set": true,
        "level": "0",
        "freq": "",
        "out": "out",
        "x": 450,
        "y": 40,
        "wires": []
    },
    {
        "id": "3cb96380.e575ec",
        "type": "function",
        "z": "bccd1f23.87219",
        "name": "pump.js",
        "func": "state = global.get(\"state\");\n\nif (state == null){state=\"free\"}\n\nvar manual_volume= global.get(\"pump_manual_volume\");\nvar flowrate= global.get(\"pump_flowrate\");\n\nif (manual_volume === undefined || manual_volume === \"\" || manual_volume === null) {\n    msg.topic = \"Missing entry :\"\n    msg.payload = \"Volume to pass\";\n    \n}else if (flowrate === undefined || flowrate === \"\" || flowrate === null) {\n    msg.topic = \"Missing entry :\"\n    msg.payload = \"Flowrate\";\n    \n}else {\n    volume = global.get(\"pump_manual_volume\");\n    msg.volume = volume;\n    flowrate = global.get(\"pump_flowrate\");\n    msg.topic = \"actuator/pump\";\n    \n    if(state===\"free\"){\n        // msg.payload is FORWARD or BACKWARD here\n        msg.payload={\"action\":\"move\", \n                    \"direction\":msg.payload,\n                    \"volume\":volume,\n                    \"flowrate\":flowrate};\n    }\n}\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 360,
        "y": 240,
        "wires": [
            [
                "43fa762d.35bcb"
            ]
        ],
        "info": "### Focusing\n##### focus.py `nb_step` `orientation`\n\n- `nb_step` : **integer** (from 1 to 100000) - number of step to perform by the stage (about 31um/step)\n- `orientation` : **string** - orientation of the focus either `up` or `down`\n\nExample:\n\n    python3.7 $HOME/PlanktonScope/scripts/focus.py 650 up\n"
    },
    {
        "id": "43fa762d.35bcb",
        "type": "switch",
        "z": "bccd1f23.87219",
        "name": "",
        "property": "topic",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "actuator/pump",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "Missing entry :",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 490,
        "y": 240,
        "wires": [
            [
                "bdc8ce57.de1f08"
            ],
            [
                "8bcce348.efc1a"
            ]
        ]
    },
    {
        "id": "8bcce348.efc1a",
        "type": "ui_toast",
        "z": "bccd1f23.87219",
        "position": "dialog",
        "displayTime": "3",
        "highlight": "",
        "sendall": true,
        "outputs": 1,
        "ok": "OK",
        "cancel": "",
        "raw": false,
        "topic": "",
        "name": "",
        "x": 650,
        "y": 260,
        "wires": [
            []
        ]
    },
    {
        "id": "bdc8ce57.de1f08",
        "type": "mqtt out",
        "z": "bccd1f23.87219",
        "name": "",
        "topic": "",
        "qos": "",
        "retain": "",
        "broker": "8dc3722c.06efa8",
        "x": 630,
        "y": 220,
        "wires": []
    },
    {
        "id": "3d31ee98.a7d6fa",
        "type": "ui_text_input",
        "z": "bccd1f23.87219",
        "name": "focus_distance",
        "label": "Distance in µm",
        "tooltip": "This will be rounded to the nearest 25µm",
        "group": "fbd92986.1028c8",
        "order": 4,
        "width": 0,
        "height": 0,
        "passthru": true,
        "mode": "number",
        "delay": 300,
        "topic": "focus_distance",
        "x": 400,
        "y": 440,
        "wires": [
            [
                "dbd6bde.99db64"
            ]
        ]
    },
    {
        "id": "1f7cea1d.fbe61e",
        "type": "switch",
        "z": "bccd1f23.87219",
        "name": "",
        "property": "topic",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "actuator/focus",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "Missing entry :",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 470,
        "y": 720,
        "wires": [
            [
                "62030521.88317c"
            ],
            [
                "d71d224f.0585d8"
            ]
        ]
    },
    {
        "id": "d71d224f.0585d8",
        "type": "ui_toast",
        "z": "bccd1f23.87219",
        "position": "dialog",
        "displayTime": "3",
        "highlight": "",
        "sendall": true,
        "outputs": 1,
        "ok": "OK",
        "cancel": "",
        "raw": false,
        "topic": "",
        "name": "",
        "x": 670,
        "y": 740,
        "wires": [
            []
        ]
    },
    {
        "id": "65ad39d.b6d4d48",
        "type": "function",
        "z": "bccd1f23.87219",
        "name": "focus.js",
        "func": "state = global.get(\"state\");\n\nif (state == null){state=\"free\"}\n\nvar distance = global.get(\"focus_distance\");\n\nif (distance === undefined || distance === \"\" || distance === null) {\n    msg.topic = \"Missing entry :\"\n    msg.payload = \"Distance\";\n}else {\n    distance = global.get(\"focus_distance\");\n    if(state===\"free\"){\n        // msg.payload is UP or DOWN here\n        msg.payload={\"action\":\"move\", \n                    \"direction\":msg.payload,\n                    \"distance\":(distance/1000)};\n    }\n}\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 320,
        "y": 720,
        "wires": [
            [
                "1f7cea1d.fbe61e"
            ]
        ]
    },
    {
        "id": "1962d999.4a97e6",
        "type": "ui_button",
        "z": "bccd1f23.87219",
        "name": "stop focus",
        "group": "fbd92986.1028c8",
        "order": 7,
        "width": 0,
        "height": 0,
        "passthru": true,
        "label": "STOP FOCUS",
        "tooltip": "",
        "color": "",
        "bgcolor": "#AD1625",
        "icon": "",
        "payload": "{\"action\":\"stop\"}",
        "payloadType": "json",
        "topic": "actuator/focus",
        "x": 170,
        "y": 580,
        "wires": [
            [
                "62030521.88317c"
            ]
        ]
    },
    {
        "id": "62030521.88317c",
        "type": "mqtt out",
        "z": "bccd1f23.87219",
        "name": "",
        "topic": "",
        "qos": "",
        "retain": "",
        "broker": "8dc3722c.06efa8",
        "x": 650,
        "y": 620,
        "wires": []
    },
    {
        "id": "dbd6bde.99db64",
        "type": "function",
        "z": "bccd1f23.87219",
        "name": "round distance",
        "func": "// Here we change the focus_distance to 25 µm increment\nif (msg.payload%25 <= 12.5){\n    msg.payload = msg.payload - msg.payload%25\n}\nelse {\n    msg.payload = msg.payload + msg.payload%25\n}\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 620,
        "y": 440,
        "wires": [
            [
                "3d31ee98.a7d6fa",
                "69d4ea6c.4c1e2c",
                "dc48dc42.98d18"
            ]
        ]
    },
    {
        "id": "3bd43039.bc5fb8",
        "type": "ui_button",
        "z": "bccd1f23.87219",
        "name": "",
        "group": "fbd92986.1028c8",
        "order": 2,
        "width": 0,
        "height": 0,
        "passthru": false,
        "label": "UP 1mm",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "icon": "",
        "payload": "{\"action\":\"move\",\"direction\":\"UP\",\"distance\":1}",
        "payloadType": "json",
        "topic": "actuator/focus",
        "x": 180,
        "y": 620,
        "wires": [
            [
                "62030521.88317c"
            ]
        ]
    },
    {
        "id": "c0663029.2d03b",
        "type": "ui_button",
        "z": "bccd1f23.87219",
        "name": "",
        "group": "fbd92986.1028c8",
        "order": 6,
        "width": 0,
        "height": 0,
        "passthru": false,
        "label": "DOWN 1mm",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "icon": "",
        "payload": "{\"action\":\"move\",\"direction\":\"DOWN\",\"distance\":1}",
        "payloadType": "json",
        "topic": "actuator/focus",
        "x": 170,
        "y": 660,
        "wires": [
            [
                "62030521.88317c"
            ]
        ]
    },
    {
        "id": "69d4ea6c.4c1e2c",
        "type": "ui_slider",
        "z": "bccd1f23.87219",
        "name": "focus_distance",
        "label": "",
        "tooltip": "in µm",
        "group": "fbd92986.1028c8",
        "order": 3,
        "width": 0,
        "height": 0,
        "passthru": true,
        "outs": "end",
        "topic": "focus_distance",
        "min": "25",
        "max": "2000",
        "step": "25",
        "x": 400,
        "y": 500,
        "wires": [
            [
                "3d31ee98.a7d6fa"
            ]
        ]
    },
    {
        "id": "71f55a58.d7eaf4",
        "type": "inject",
        "z": "bccd1f23.87219",
        "name": "Default: 500µm",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "500",
        "payloadType": "num",
        "x": 120,
        "y": 440,
        "wires": [
            [
                "3d31ee98.a7d6fa",
                "69d4ea6c.4c1e2c"
            ]
        ]
    },
    {
        "id": "9a1d0e7c.2d5a1",
        "type": "inject",
        "z": "bccd1f23.87219",
        "name": "Default: OFF",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "false",
        "payloadType": "bool",
        "x": 110,
        "y": 40,
        "wires": [
            [
                "961d27e7.da65c8"
            ]
        ]
    },
    {
        "id": "16aa0238.209276",
        "type": "ui_slider",
        "z": "bccd1f23.87219",
        "name": "Iso slider",
        "label": "ISO",
        "tooltip": "Possible values are  100, 200, 320, 400, 500, 640, 800. 500 by default.",
        "group": "8c38a81e.9897a8",
        "order": 2,
        "width": 0,
        "height": 0,
        "passthru": true,
        "outs": "end",
        "topic": "imager/image",
        "min": "100",
        "max": "800",
        "step": "20",
        "x": 360,
        "y": 820,
        "wires": [
            [
                "bb090334.1e21a8"
            ]
        ]
    },
    {
        "id": "bb090334.1e21a8",
        "type": "function",
        "z": "bccd1f23.87219",
        "name": "round iso",
        "func": "// Iso should be one of 60, 100, 200, 320, 400, 500, 640, 800\n\nif (msg.payload <= 80){\n    msg.payload = 60;\n    return msg;\n}\n\nif (msg.payload <= 150){\n    msg.payload = 100;\n    return msg;\n}\n\nif (msg.payload <= 260){\n    msg.payload = 200;\n    return msg;\n}\n\nif (msg.payload <= 360){\n    msg.payload = 320;\n    return msg;\n}\n\nif (msg.payload <= 450){\n    msg.payload = 400;\n    return msg;\n}\n\nif (msg.payload <= 565){\n    msg.payload = 500;\n    return msg;\n}\n\nif (msg.payload <= 700){\n    msg.payload = 640;\n    return msg;\n}\n\n\nif (700 < msg.payload){\n    msg.payload = 800;\n    return msg;\n}\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 520,
        "y": 820,
        "wires": [
            [
                "16aa0238.209276",
                "8ea9dc9a.c7d87"
            ]
        ]
    },
    {
        "id": "8ea9dc9a.c7d87",
        "type": "function",
        "z": "bccd1f23.87219",
        "name": "Encapsulate settings",
        "func": "msg.payload = {\n    \"action\":\"settings\", \n    \"settings\":{\"iso\":msg.payload}\n}\nmsg.topic = \"imager/image\"\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 720,
        "y": 820,
        "wires": [
            [
                "845e06e1.0d812"
            ]
        ]
    },
    {
        "id": "5765a825.a595c8",
        "type": "ui_slider",
        "z": "bccd1f23.87219",
        "name": "Shutter speed slider",
        "label": "Shutter Speed",
        "tooltip": "In microseconds, up to 1000µs, 1µs by default",
        "group": "8c38a81e.9897a8",
        "order": 1,
        "width": 0,
        "height": 0,
        "passthru": true,
        "outs": "end",
        "topic": "imager/image",
        "min": "1",
        "max": "1000",
        "step": "1",
        "x": 390,
        "y": 880,
        "wires": [
            [
                "c38509b.fb08af8"
            ]
        ]
    },
    {
        "id": "c38509b.fb08af8",
        "type": "function",
        "z": "bccd1f23.87219",
        "name": "Encapsulate settings",
        "func": "msg.payload = {\n    \"action\":\"settings\", \n    \"settings\":{\"shutter_speed\":msg.payload}\n}\nmsg.topic = \"imager/image\"\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 720,
        "y": 880,
        "wires": [
            [
                "845e06e1.0d812"
            ]
        ]
    },
    {
        "id": "845e06e1.0d812",
        "type": "mqtt out",
        "z": "bccd1f23.87219",
        "name": "",
        "topic": "",
        "qos": "",
        "retain": "",
        "broker": "8dc3722c.06efa8",
        "x": 1010,
        "y": 940,
        "wires": []
    },
    {
        "id": "2350e507.d4e302",
        "type": "inject",
        "z": "bccd1f23.87219",
        "name": "Default: 1µs",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": "1",
        "topic": "",
        "payload": "1",
        "payloadType": "num",
        "x": 110,
        "y": 880,
        "wires": [
            [
                "5765a825.a595c8"
            ]
        ]
    },
    {
        "id": "2edd922b.a471a6",
        "type": "inject",
        "z": "bccd1f23.87219",
        "name": "Default: ISO 100",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": "1",
        "topic": "",
        "payload": "100",
        "payloadType": "num",
        "x": 110,
        "y": 820,
        "wires": [
            [
                "16aa0238.209276"
            ]
        ]
    },
    {
        "id": "f782a471.447748",
        "type": "inject",
        "z": "bccd1f23.87219",
        "name": "Default: 5mL/min",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "5",
        "payloadType": "num",
        "x": 130,
        "y": 300,
        "wires": [
            [
                "34c81624.df1cea"
            ]
        ]
    },
    {
        "id": "73b8252a.5ca754",
        "type": "inject",
        "z": "bccd1f23.87219",
        "name": "Default: 2mL",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "2",
        "payloadType": "num",
        "x": 110,
        "y": 340,
        "wires": [
            [
                "68962547.34a67c"
            ]
        ]
    },
    {
        "id": "8ec68b82.17e3d8",
        "type": "ui_button",
        "z": "cb95299c.2817c8",
        "name": "Start segmentation",
        "group": "abeb6dad.635a2",
        "order": 2,
        "width": 5,
        "height": 1,
        "passthru": false,
        "label": "Start segmentation",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "icon": "",
        "payload": "{\"action\":\"segment\"}",
        "payloadType": "json",
        "topic": "segmenter/segment",
        "x": 370,
        "y": 300,
        "wires": [
            [
                "16f3cef4.0acac9"
            ]
        ]
    },
    {
        "id": "27be7971.b3fbce",
        "type": "ui_button",
        "z": "cb95299c.2817c8",
        "name": "Stop segmentation",
        "group": "abeb6dad.635a2",
        "order": 3,
        "width": 5,
        "height": 1,
        "passthru": true,
        "label": "Stop segmentation",
        "tooltip": "",
        "color": "",
        "bgcolor": "#AD1625",
        "icon": "",
        "payload": "{\"action\":\"stop\"}",
        "payloadType": "json",
        "topic": "segmenter/segment",
        "x": 370,
        "y": 340,
        "wires": [
            [
                "16f3cef4.0acac9"
            ]
        ]
    },
    {
        "id": "16f3cef4.0acac9",
        "type": "mqtt out",
        "z": "cb95299c.2817c8",
        "name": "",
        "topic": "",
        "qos": "",
        "retain": "",
        "broker": "8dc3722c.06efa8",
        "x": 710,
        "y": 320,
        "wires": []
    },
    {
        "id": "6b61b50c.7456d4",
        "type": "ui_button",
        "z": "1371dec5.76e671",
        "name": "Update",
        "group": "1be83144.4fe4bf",
        "order": 3,
        "width": 6,
        "height": 1,
        "passthru": false,
        "label": "Update",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "icon": "system_update",
        "payload": "",
        "payloadType": "str",
        "topic": "update",
        "x": 100,
        "y": 520,
        "wires": [
            [
                "386ce65d.a15d52"
            ]
        ]
    },
    {
        "id": "386ce65d.a15d52",
        "type": "exec",
        "z": "1371dec5.76e671",
        "command": "bash /home/pi/PlanktonScope/scripts/bash/update.sh",
        "addpay": false,
        "append": "",
        "useSpawn": "true",
        "timer": "",
        "oldrc": false,
        "name": "Update",
        "x": 300,
        "y": 520,
        "wires": [
            [
                "1fa7fddf.18161a"
            ],
            [],
            []
        ]
    },
    {
        "id": "9998aa86.74bb",
        "type": "exec",
        "z": "1371dec5.76e671",
        "command": "python3 /home/pi/PlanktonScope/scripts/main.py",
        "addpay": false,
        "append": "",
        "useSpawn": "true",
        "timer": "",
        "oldrc": false,
        "name": "",
        "x": 860,
        "y": 940,
        "wires": [
            [],
            [],
            [
                "de4ba211.e1d3f"
            ]
        ]
    },
    {
        "id": "672d89a8.4e6968",
        "type": "exec",
        "z": "1371dec5.76e671",
        "d": true,
        "command": "sudo killall -9 python3",
        "addpay": true,
        "append": "",
        "useSpawn": "false",
        "timer": "",
        "oldrc": false,
        "name": "Hard kill",
        "x": 980,
        "y": 880,
        "wires": [
            [],
            [],
            []
        ]
    },
    {
        "id": "afa9f4b.2e77988",
        "type": "delay",
        "z": "1371dec5.76e671",
        "name": "",
        "pauseType": "delay",
        "timeout": "5",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "x": 460,
        "y": 940,
        "wires": [
            [
                "9998aa86.74bb"
            ]
        ]
    },
    {
        "id": "1df370a8.6c70ff",
        "type": "ui_button",
        "z": "1371dec5.76e671",
        "name": "Restart Python",
        "group": "1be83144.4fe4bf",
        "order": 6,
        "width": 6,
        "height": 1,
        "passthru": false,
        "label": "Restart Python",
        "tooltip": "",
        "color": "",
        "bgcolor": "#AD1625",
        "icon": "refresh",
        "payload": "",
        "payloadType": "str",
        "topic": "",
        "x": 100,
        "y": 940,
        "wires": [
            [
                "afa9f4b.2e77988",
                "3829adc.ccc87d2",
                "35ea3cf0.a398ac"
            ]
        ]
    },
    {
        "id": "de4ba211.e1d3f",
        "type": "debug",
        "z": "1371dec5.76e671",
        "name": "output",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1210,
        "y": 960,
        "wires": []
    },
    {
        "id": "7aa2e737.e16d98",
        "type": "status",
        "z": "1371dec5.76e671",
        "name": "",
        "scope": [
            "9998aa86.74bb"
        ],
        "x": 1220,
        "y": 900,
        "wires": [
            [
                "439b952c.3e9cf4"
            ]
        ]
    },
    {
        "id": "439b952c.3e9cf4",
        "type": "debug",
        "z": "1371dec5.76e671",
        "name": "status",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "status",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1450,
        "y": 900,
        "wires": []
    },
    {
        "id": "35ea3cf0.a398ac",
        "type": "exec",
        "z": "1371dec5.76e671",
        "command": "sudo killall -15 python3",
        "addpay": true,
        "append": "",
        "useSpawn": "false",
        "timer": "",
        "oldrc": false,
        "name": "Python soft kill",
        "x": 480,
        "y": 880,
        "wires": [
            [],
            [],
            []
        ]
    },
    {
        "id": "a776b9fc.d542e8",
        "type": "delay",
        "z": "1371dec5.76e671",
        "d": true,
        "name": "",
        "pauseType": "delay",
        "timeout": "4",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "x": 740,
        "y": 880,
        "wires": [
            [
                "672d89a8.4e6968"
            ]
        ]
    },
    {
        "id": "569154a.b53182c",
        "type": "inject",
        "z": "1371dec5.76e671",
        "name": "once",
        "props": [
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": "",
        "topic": "",
        "x": 130,
        "y": 820,
        "wires": [
            [
                "afa9f4b.2e77988",
                "3829adc.ccc87d2",
                "452af41c.43940c",
                "b3c21aa9.8c06c"
            ]
        ]
    },
    {
        "id": "3829adc.ccc87d2",
        "type": "exec",
        "z": "1371dec5.76e671",
        "command": "sudo killall -15 raspimjpeg",
        "addpay": true,
        "append": "",
        "useSpawn": "false",
        "timer": "",
        "oldrc": false,
        "name": "Raspimjpeg soft kill",
        "x": 490,
        "y": 820,
        "wires": [
            [],
            [],
            []
        ]
    },
    {
        "id": "b55ed048.2418c8",
        "type": "ui_template",
        "z": "1371dec5.76e671",
        "group": "1be83144.4fe4bf",
        "name": "",
        "order": 1,
        "width": 0,
        "height": 0,
        "format": "<div><center>If you want to update to the latest code version of Node-Red and Python, please click here.\nWe are trying to save your configuration changes with git stash and restore them afterwards, but clearly, things may break!\nIf you have made changes to the flow, you will lose them. Please commit those changes from Node-Red interface, from the Project History tab.</center></div>",
        "storeOutMessages": true,
        "fwdInMessages": true,
        "resendOnRefresh": true,
        "templateScope": "local",
        "x": 100,
        "y": 460,
        "wires": [
            []
        ]
    },
    {
        "id": "4b489713.ccde5",
        "type": "ui_button",
        "z": "baa1e3d9.cb29d",
        "name": "",
        "group": "4322c187.e73e5",
        "order": 11,
        "width": 5,
        "height": 1,
        "passthru": false,
        "label": "Start Acquisition",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "icon": "",
        "payload": "",
        "payloadType": "str",
        "topic": "imager/image",
        "x": 520,
        "y": 580,
        "wires": [
            [
                "c9f510c0.7d1328"
            ]
        ]
    },
    {
        "id": "c9f510c0.7d1328",
        "type": "function",
        "z": "baa1e3d9.cb29d",
        "name": "Image control",
        "func": "state = global.get(\"state\");\nglobal.set('img_counter', 0);\nglobal.set('obj_counter', 0);\nif (state === null) {\n    state = \"free\"\n}\n\nvar nb_frame = global.get(\"nb_frame\");\nvar acq_celltype = global.get(\"acq_celltype\");\nvar acq_minimum_mesh = global.get(\"acq_minimum_mesh\");\nvar acq_maximum_mesh = global.get(\"acq_maximum_mesh\");\nvar acq_id = global.get(\"acq_id\");\nvar pump_direction = global.get(\"pump_direction\");\nvar imaging_pump_volume = global.get(\"imaging_pump_volume\");\nvar sleep_before = global.get(\"sleep_before\");\n\nif (acq_celltype === undefined || acq_celltype === \"\") {\n    msg.topic = \"Missing entry :\"\n    msg.payload = \"Type of the flowcell\"\n} else if (acq_minimum_mesh === undefined || acq_minimum_mesh === \"\") {\n    msg.topic = \"Missing entry :\"\n    msg.payload = \"Lower fraction size\"\n} else if (acq_maximum_mesh === undefined || acq_maximum_mesh === \"\") {\n    msg.topic = \"Missing entry :\"\n    msg.payload = \"Upper fraction size\"\n} else if (imaging_pump_volume === undefined || imaging_pump_volume === \"\" || imaging_pump_volume === null) {\n    msg.topic = \"Missing entry :\"\n    msg.payload = \"Volume inbetween images\"\n} else if (acq_id === undefined || acq_id === \"\") {\n    msg.topic = \"Missing entry :\"\n    msg.payload = \"Acquisition ID\"\n} else if (nb_frame === undefined || nb_frame === \"\" || nb_frame === null) {\n    msg.topic = \"Missing entry :\";\n    msg.payload = \"Number of image to save\";\n} else if (pump_direction === undefined || pump_direction === \"\" || pump_direction === null) {\n    msg.topic = \"Missing entry :\";\n    msg.payload = \"Pump direction\";\n} else if (sleep_before === undefined || sleep_before === \"\" || pump_direction === null) {\n    msg.topic = \"Missing entry :\";\n    msg.payload = \"Delay before image\";\n} else {\n    msg.payload = {\n        \"action\": \"image\",\n        \"sleep\": sleep_before,\n        \"pump_direction\": pump_direction,\n        \"volume\": imaging_pump_volume,\n        \"nb_frame\": nb_frame,\n    }\n}\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 730,
        "y": 580,
        "wires": [
            [
                "52ea7d01.711034",
                "40c12463.a1f84c"
            ]
        ],
        "info": "### Focusing\n##### focus.py `nb_step` `orientation`\n\n- `nb_step` : **integer** (from 1 to 100000) - number of step to perform by the stage (about 31um/step)\n- `orientation` : **string** - orientation of the focus either `up` or `down`\n\nExample:\n\n    python3.7 $HOME/PlanktonScope/scripts/focus.py 650 up\n"
    },
    {
        "id": "d6ebaa2.ea21d58",
        "type": "switch",
        "z": "baa1e3d9.cb29d",
        "name": "",
        "property": "topic",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "imager/image",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "Missing entry :",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 1090,
        "y": 580,
        "wires": [
            [
                "c3e50240.82aa58"
            ],
            [
                "20e0a8c8.edbeb"
            ]
        ]
    },
    {
        "id": "20e0a8c8.edbeb",
        "type": "ui_toast",
        "z": "baa1e3d9.cb29d",
        "position": "dialog",
        "displayTime": "3",
        "highlight": "",
        "sendall": true,
        "outputs": 1,
        "ok": "OK",
        "cancel": "",
        "raw": false,
        "topic": "",
        "name": "",
        "x": 1250,
        "y": 620,
        "wires": [
            []
        ]
    },
    {
        "id": "c3e50240.82aa58",
        "type": "mqtt out",
        "z": "baa1e3d9.cb29d",
        "name": "",
        "topic": "",
        "qos": "",
        "retain": "",
        "broker": "8dc3722c.06efa8",
        "x": 1230,
        "y": 540,
        "wires": []
    },
    {
        "id": "3a4450b1.4459a8",
        "type": "ui_button",
        "z": "baa1e3d9.cb29d",
        "name": "Stop Acquisition",
        "group": "4322c187.e73e5",
        "order": 10,
        "width": 5,
        "height": 1,
        "passthru": true,
        "label": "STOP ACQUISITION",
        "tooltip": "",
        "color": "",
        "bgcolor": "#AD1625",
        "icon": "cancel",
        "payload": "{\"action\":\"stop\"}",
        "payloadType": "json",
        "topic": "imager/image",
        "x": 520,
        "y": 620,
        "wires": [
            [
                "d74210ef.edc15"
            ]
        ]
    },
    {
        "id": "d74210ef.edc15",
        "type": "mqtt out",
        "z": "baa1e3d9.cb29d",
        "name": "",
        "topic": "",
        "qos": "",
        "retain": "",
        "broker": "8dc3722c.06efa8",
        "x": 710,
        "y": 620,
        "wires": []
    },
    {
        "id": "bb62da8a.ebc328",
        "type": "ui_switch",
        "z": "baa1e3d9.cb29d",
        "name": "Pump direction",
        "label": "Pump direction",
        "tooltip": "BACKWARD / FORWARD",
        "group": "4322c187.e73e5",
        "order": 8,
        "width": 5,
        "height": 1,
        "passthru": true,
        "decouple": "false",
        "topic": "pump_direction",
        "style": "",
        "onvalue": "FORWARD",
        "onvalueType": "str",
        "onicon": "",
        "oncolor": "",
        "offvalue": "BACKWARD",
        "offvalueType": "str",
        "officon": "",
        "offcolor": "",
        "x": 520,
        "y": 660,
        "wires": [
            [
                "6b2239f3.41fa3"
            ]
        ]
    },
    {
        "id": "52ea7d01.711034",
        "type": "function",
        "z": "baa1e3d9.cb29d",
        "name": "Encapsulate config",
        "func": "if (global.get(\"sample_sampling_gear\")==\"net\") {\n    msg.payload = {\n        \"action\":\"update_config\", \n        \"config\":{\n            \"sample_project\":global.get(\"sample_project\"),\n            \"sample_id\":global.get(\"sample_id\"),\n            \"sample_ship\":global.get(\"sample_ship\"),\n            \"sample_operator\":global.get(\"sample_operator\"),\n            \"sample_sampling_gear\":global.get(\"sample_sampling_gear\"),\n            \n            \"acq_id\":global.get(\"acq_id\"),\n            \"acq_instrument\":global.get(\"acq_instrument\"),\n            \"acq_instrument_id\":global.get(\"acq_instrument_id\"),\n            \"acq_celltype\":global.get(\"acq_celltype\"),\n            \"acq_minimum_mesh\":global.get(\"acq_minimum_mesh\"),\n            \"acq_maximum_mesh\":global.get(\"acq_maximum_mesh\"),\n            \"acq_min_esd\":global.get(\"acq_min_esd\"),\n            \"acq_max_esd\":global.get(\"acq_max_esd\"),\n            \"acq_volume\":global.get(\"acq_volume\"),\n            \"acq_magnification\":global.get(\"magnification\"),\n            \"acq_fnumber_objective\":global.get(\"acq_fnumber_objective\"),\n            \"acq_camera_name\":global.get(\"acq_camera_name\"),\n            \"acq_imaged_volume\":global.get(\"acq_imaged_volume\"),\n            \"acq_nb_frame\":global.get(\"nb_frame\"),\n    \n            \"object_date\":global.get(\"object_date\"),\n            \"object_time\":global.get(\"object_time\"),\n            \"object_lat\":global.get(\"object_lat\"),\n            \"object_lon\":global.get(\"object_lon\"),\n            \"object_date_end\":global.get(\"object_date_end\"),\n            \"object_time_end\":global.get(\"object_time_end\"),\n            \"object_lat_end\":global.get(\"object_lat_end\"),\n            \"object_lon_end\":global.get(\"object_lon_end\"),\n            \"object_depth_min\":global.get(\"object_depth_min\"),\n            \"object_depth_max\":global.get(\"object_depth_max\"),\n            \n            \"process_pixel\":global.get(\"process_pixel\"),\n            \"process_id\":global.get(\"process_id\")\n        }\n    };\n}\nelse {\n    msg.payload = {\n        \"action\":\"update_config\", \n        \"config\":{\n            \"sample_project\":global.get(\"sample_project\"),\n            \"sample_id\":global.get(\"sample_id\"),\n            \"sample_ship\":global.get(\"sample_ship\"),\n            \"sample_operator\":global.get(\"sample_operator\"),\n            \"sample_sampling_gear\":global.get(\"sample_sampling_gear\"),\n            \n            \"acq_id\":global.get(\"acq_id\"),\n            \"acq_instrument\":global.get(\"acq_instrument\"),\n            \"acq_instrument_id\":global.get(\"acq_instrument_id\"),\n            \"acq_celltype\":global.get(\"acq_celltype\"),\n            \"acq_minimum_mesh\":global.get(\"acq_minimum_mesh\"),\n            \"acq_maximum_mesh\":global.get(\"acq_maximum_mesh\"),\n            \"acq_min_esd\":global.get(\"acq_min_esd\"),\n            \"acq_max_esd\":global.get(\"acq_max_esd\"),\n            \"acq_volume\":global.get(\"acq_volume\"),\n            \"acq_magnification\":global.get(\"magnification\"),\n            \"acq_fnumber_objective\":global.get(\"acq_fnumber_objective\"),\n            \"acq_camera_name\":global.get(\"acq_camera_name\"),\n            \"acq_nb_frame\":global.get(\"nb_frame\"),\n    \n            \"object_date\":global.get(\"object_date\"),\n            \"object_time\":global.get(\"object_time\"),\n            \"object_lat\":global.get(\"object_lat\"),\n            \"object_lon\":global.get(\"object_lon\"),\n            \"object_depth_min\":global.get(\"object_depth_min\"),\n            \"object_depth_max\":global.get(\"object_depth_max\"),\n            \n            \"process_pixel\":global.get(\"process_pixel\"),\n            \"process_id\":global.get(\"process_id\")\n        }\n    };\n}\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 970,
        "y": 540,
        "wires": [
            [
                "c3e50240.82aa58",
                "29be525e.0c87fe"
            ]
        ]
    },
    {
        "id": "40c12463.a1f84c",
        "type": "delay",
        "z": "baa1e3d9.cb29d",
        "name": "",
        "pauseType": "delay",
        "timeout": "1",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "x": 940,
        "y": 580,
        "wires": [
            [
                "d6ebaa2.ea21d58"
            ]
        ]
    },
    {
        "id": "4d1b02cb.83b51c",
        "type": "ui_button",
        "z": "baa1e3d9.cb29d",
        "name": "",
        "group": "4322c187.e73e5",
        "order": 9,
        "width": 5,
        "height": 1,
        "passthru": false,
        "label": "Update config",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "icon": "",
        "payload": "",
        "payloadType": "str",
        "topic": "imager/image",
        "x": 520,
        "y": 540,
        "wires": [
            [
                "52ea7d01.711034",
                "a4abb1ae.2ae418"
            ]
        ]
    },
    {
        "id": "452af41c.43940c",
        "type": "python3-function",
        "z": "1371dec5.76e671",
        "name": "Get MachineName",
        "func": "import sys\nsys.path.append('/home/pi/PlanktonScope/scripts')\nimport planktoscope.uuidName\n\nmsg['payload'] = planktoscope.uuidName.machineName(machine=planktoscope.uuidName.getSerial())\nmsg['topic'] = \"acq_instrument_id\";\nreturn msg",
        "outputs": 1,
        "x": 490,
        "y": 760,
        "wires": [
            [
                "4828d2f4.7c712c",
                "e2f39a35.f57298",
                "a400a97e.e333a8"
            ]
        ]
    },
    {
        "id": "4828d2f4.7c712c",
        "type": "function",
        "z": "1371dec5.76e671",
        "name": "set global",
        "func": "global.set(msg.topic,msg.payload);\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 780,
        "y": 800,
        "wires": [
            []
        ]
    },
    {
        "id": "2200e2ae.0d183e",
        "type": "rpi-gpio out",
        "z": "1371dec5.76e671",
        "name": "Pump Enable",
        "pin": "7",
        "set": true,
        "level": "1",
        "freq": "",
        "out": "out",
        "x": 470,
        "y": 600,
        "wires": []
    },
    {
        "id": "592c4dac.b8a9dc",
        "type": "rpi-gpio out",
        "z": "1371dec5.76e671",
        "name": "Focus Enable",
        "pin": "32",
        "set": true,
        "level": "1",
        "freq": "",
        "out": "out",
        "x": 480,
        "y": 640,
        "wires": []
    },
    {
        "id": "d027a6bf.7049e8",
        "type": "function",
        "z": "b771c342.49603",
        "name": "get sample_projet",
        "func": "msg.payload = msg.payload.sample_project;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 350,
        "y": 300,
        "wires": [
            [
                "9c882b37.fde668"
            ]
        ]
    },
    {
        "id": "5a811caf.0f3144",
        "type": "function",
        "z": "b771c342.49603",
        "name": "get sample_ship",
        "func": "msg.payload = msg.payload.sample_ship;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 340,
        "y": 340,
        "wires": [
            [
                "4557d689.a4fa88"
            ]
        ]
    },
    {
        "id": "45911c98.2bd83c",
        "type": "function",
        "z": "b771c342.49603",
        "name": "get sample_id",
        "func": "msg.payload = msg.payload.sample_id;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 340,
        "y": 380,
        "wires": [
            [
                "94eb4221.9b92c"
            ]
        ]
    },
    {
        "id": "1e09a4ab.72996b",
        "type": "function",
        "z": "b771c342.49603",
        "name": "get sample_operator",
        "func": "msg.payload = msg.payload.sample_operator;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 360,
        "y": 420,
        "wires": [
            [
                "82c5fc77.59c97"
            ]
        ]
    },
    {
        "id": "a3272681.f271c8",
        "type": "function",
        "z": "b771c342.49603",
        "name": "get sample_sampling_gear",
        "func": "msg.payload = msg.payload.sample_sampling_gear;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "x": 380,
        "y": 460,
        "wires": [
            [
                "fcfc31ae.af3af"
            ]
        ]
    },
    {
        "id": "6465bdd5.15eb8c",
        "type": "file in",
        "z": "1c24ad9c.bebec2",
        "name": "",
        "filename": "/home/pi/PlanktonScope/config.json",
        "format": "utf8",
        "chunk": false,
        "sendError": false,
        "encoding": "none",
        "x": 660,
        "y": 300,
        "wires": [
            [
                "15ceb135.6628bf"
            ]
        ],
        "info": "# PlanktonScope Help\nThis Node will read the content of the file named **config.txt** containing all the input placeholders.\n"
    },
    {
        "id": "15ceb135.6628bf",
        "type": "json",
        "z": "1c24ad9c.bebec2",
        "name": "config.json",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 910,
        "y": 300,
        "wires": [
            [
                "ad541674.4791c8"
            ]
        ]
    },
    {
        "id": "b584292a.24b08",
        "type": "function",
        "z": "20ae9e26.17d73a",
        "name": "get global",
        "func": "msg.payload={\n    \"sample_project\":global.get(\"sample_project\"),\n    \"sample_id\":global.get(\"sample_id\"),\n    \"sample_ship\":global.get(\"sample_ship\"),\n    \"sample_operator\":global.get(\"sample_operator\"),\n    \"sample_sampling_gear\":global.get(\"sample_sampling_gear\"),\n    \n    \n    \"acq_id\":global.get(\"acq_id\"),\n    \"acq_instrument\":global.get(\"acq_instrument\"),\n    \"acq_instrument_id\":global.get(\"machine_name\"),\n    \"acq_celltype\":global.get(\"acq_celltype\"),\n    \"acq_minimum_mesh\":global.get(\"acq_minimum_mesh\"),\n    \"acq_maximum_mesh\":global.get(\"acq_maximum_mesh\"),\n    \"acq_min_esd\":global.get(\"acq_min_esd\"),\n    \"acq_max_esd\":global.get(\"acq_max_esd\"),\n    \"acq_volume\":global.get(\"acq_volume\"),\n    \"acq_magnification\":global.get(\"magnification\"),\n    \"acq_fnumber_objective\":global.get(\"acq_fnumber_objective\"),\n    \"acq_camera\":global.get(\"camera\"),\n    \n    \"object_depth_min\":global.get(\"object_depth_min\"),\n    \"object_depth_max\":global.get(\"object_depth_max\"),\n    \"process_pixel\":global.get(\"process_pixel\"),\n    \"process_id\":global.get(\"process_id\")\n};\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 200,
        "y": 80,
        "wires": [
            []
        ]
    },
    {
        "id": "7205d267.36adcc",
        "type": "file",
        "z": "1c24ad9c.bebec2",
        "name": "",
        "filename": "/home/pi/PlanktonScope/config.json",
        "appendNewline": true,
        "createDir": true,
        "overwriteFile": "true",
        "encoding": "none",
        "x": 1040,
        "y": 860,
        "wires": [
            []
        ]
    },
    {
        "id": "2e6ddf51.c0dba",
        "type": "json",
        "z": "1c24ad9c.bebec2",
        "name": "config.json",
        "property": "payload",
        "action": "str",
        "pretty": true,
        "x": 810,
        "y": 860,
        "wires": [
            [
                "7205d267.36adcc"
            ]
        ]
    },
    {
        "id": "ad541674.4791c8",
        "type": "function",
        "z": "1c24ad9c.bebec2",
        "name": "Global Set",
        "func": "for (const key in msg.payload) {\n    global.set(key, msg.payload[key]);\n}\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1090,
        "y": 300,
        "wires": [
            []
        ]
    },
    {
        "id": "3e9a33c.141384c",
        "type": "inject",
        "z": "1c24ad9c.bebec2",
        "name": "Load config",
        "props": [
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "topic": "",
        "x": 410,
        "y": 300,
        "wires": [
            [
                "6465bdd5.15eb8c"
            ]
        ]
    },
    {
        "id": "e2f39a35.f57298",
        "type": "subflow:1c24ad9c.bebec2",
        "z": "1371dec5.76e671",
        "name": "",
        "env": [],
        "x": 770,
        "y": 720,
        "wires": [
            [
                "bdc6718a.dd5d48"
            ]
        ]
    },
    {
        "id": "a6907a38.f6611",
        "type": "subflow:1c24ad9c.bebec2",
        "z": "b771c342.49603",
        "name": "",
        "env": [],
        "x": 90,
        "y": 380,
        "wires": [
            [
                "d027a6bf.7049e8",
                "5a811caf.0f3144",
                "45911c98.2bd83c",
                "1e09a4ab.72996b",
                "a3272681.f271c8"
            ]
        ]
    },
    {
        "id": "e2b277c1.07283",
        "type": "subflow:1c24ad9c.bebec2",
        "z": "b771c342.49603",
        "name": "",
        "env": [],
        "x": 830,
        "y": 1260,
        "wires": [
            []
        ]
    },
    {
        "id": "3cea1f2.20525e",
        "type": "ui_text_input",
        "z": "b771c342.49603",
        "name": "object_lat_end",
        "label": "Latitude",
        "tooltip": "36°57'9\" N",
        "group": "cf5d9f0e.d57e7",
        "order": 7,
        "width": 5,
        "height": 1,
        "passthru": true,
        "mode": "text",
        "delay": 300,
        "topic": "object_lat_end",
        "x": 660,
        "y": 980,
        "wires": [
            [
                "42795da1.0ee104"
            ]
        ]
    },
    {
        "id": "661818e.5a31368",
        "type": "ui_text_input",
        "z": "b771c342.49603",
        "name": "object_lon_end",
        "label": "Longitude",
        "tooltip": "110°4'21\" W",
        "group": "cf5d9f0e.d57e7",
        "order": 8,
        "width": 5,
        "height": 1,
        "passthru": true,
        "mode": "text",
        "delay": 300,
        "topic": "object_lon_end",
        "x": 660,
        "y": 1020,
        "wires": [
            [
                "42795da1.0ee104"
            ]
        ]
    },
    {
        "id": "f9d71e4b.2940a",
        "type": "ui_date_picker",
        "z": "b771c342.49603",
        "name": "object_date_end",
        "label": "Date",
        "group": "cf5d9f0e.d57e7",
        "order": 9,
        "width": 5,
        "height": 1,
        "passthru": true,
        "topic": "object_date_end",
        "x": 660,
        "y": 1060,
        "wires": [
            [
                "29f2b365.4327ec"
            ]
        ]
    },
    {
        "id": "2a514f3b.97a6b",
        "type": "ui_text_input",
        "z": "b771c342.49603",
        "name": "object_time_end",
        "label": "Time",
        "tooltip": "UTC time, 03:23:00 or 15:45",
        "group": "cf5d9f0e.d57e7",
        "order": 10,
        "width": 5,
        "height": 1,
        "passthru": true,
        "mode": "text",
        "delay": 300,
        "topic": "object_time_end",
        "x": 660,
        "y": 1100,
        "wires": [
            [
                "1a945afa.d60aad"
            ]
        ]
    },
    {
        "id": "1a945afa.d60aad",
        "type": "function",
        "z": "b771c342.49603",
        "name": "set time global",
        "func": "msg.payload = msg.payload.replace(/\\D/g, \"\"); // remove non-digit characters\nif (msg.payload.length<5) msg.payload += \"00\";\n\nglobal.set(msg.topic,msg.payload);",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 960,
        "y": 840,
        "wires": [
            []
        ]
    },
    {
        "id": "29f2b365.4327ec",
        "type": "function",
        "z": "b771c342.49603",
        "name": "set date global",
        "func": "var date = new Date(msg.payload);\n\nglobal.set(msg.topic,date.toISOString().split('T')[0].replace(/-/gi, ''));",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 960,
        "y": 800,
        "wires": [
            []
        ]
    },
    {
        "id": "b3c21aa9.8c06c",
        "type": "exec",
        "z": "1371dec5.76e671",
        "command": "git --git-dir /home/pi/PlanktonScope/.git/ rev-parse --short master",
        "addpay": false,
        "append": "",
        "useSpawn": "false",
        "timer": "",
        "oldrc": false,
        "name": "git rev",
        "x": 450,
        "y": 700,
        "wires": [
            [
                "3e64877a.9684b"
            ],
            [],
            []
        ]
    },
    {
        "id": "3e64877a.9684b",
        "type": "function",
        "z": "1371dec5.76e671",
        "name": "store version",
        "func": "msg.payload = \"PlanktoScope v2.2-\"+msg.payload.trim()\n\nglobal.set(\"acq_software\",msg.payload);\n\nreturn msg\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 790,
        "y": 660,
        "wires": [
            [
                "8343fa69.49339"
            ]
        ]
    },
    {
        "id": "68fa1227.dbdd5c",
        "type": "function",
        "z": "bccd1f23.87219",
        "name": "get acq_fnumber_objective",
        "func": "msg.payload = msg.payload.acq_fnumber_objective;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 820,
        "y": 100,
        "wires": [
            [
                "cc966678.da8d08"
            ]
        ]
    },
    {
        "id": "1c45ea1c.80234e",
        "type": "subflow:1c24ad9c.bebec2",
        "z": "bccd1f23.87219",
        "name": "",
        "x": 600,
        "y": 100,
        "wires": [
            [
                "68fa1227.dbdd5c"
            ]
        ]
    },
    {
        "id": "5921d0d0.a3d568",
        "type": "subflow:1c24ad9c.bebec2",
        "z": "baa1e3d9.cb29d",
        "name": "",
        "x": 90,
        "y": 200,
        "wires": [
            [
                "f3658d30.b8448",
                "1f133196.96564e",
                "d3ca8847.4d1ae",
                "5e3dec55.881074",
                "de2c90cf.b73b08"
            ]
        ]
    },
    {
        "id": "f3658d30.b8448",
        "type": "function",
        "z": "baa1e3d9.cb29d",
        "name": "get acq_id",
        "func": "msg.payload = msg.payload.acq_id;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 300,
        "y": 280,
        "wires": [
            [
                "6b34c456.83178c"
            ]
        ]
    },
    {
        "id": "de2c90cf.b73b08",
        "type": "function",
        "z": "baa1e3d9.cb29d",
        "name": "get acq_celltype",
        "func": "msg.payload = msg.payload.acq_celltype;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "x": 320,
        "y": 240,
        "wires": [
            [
                "cc0ca68b.4263a8"
            ]
        ]
    },
    {
        "id": "5e3dec55.881074",
        "type": "function",
        "z": "baa1e3d9.cb29d",
        "name": "get acq_minimum_mesh",
        "func": "msg.payload = msg.payload.acq_minimum_mesh;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "x": 350,
        "y": 120,
        "wires": [
            [
                "f59a2f0d.5e9af"
            ]
        ]
    },
    {
        "id": "d3ca8847.4d1ae",
        "type": "function",
        "z": "baa1e3d9.cb29d",
        "name": "get acq_maximum_mesh",
        "func": "msg.payload = msg.payload.acq_maximum_mesh;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "x": 350,
        "y": 160,
        "wires": [
            [
                "6008a8bb.259f08"
            ]
        ]
    },
    {
        "id": "1f133196.96564e",
        "type": "function",
        "z": "baa1e3d9.cb29d",
        "name": "get acq_volume",
        "func": "msg.payload = msg.payload.acq_volume;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 320,
        "y": 200,
        "wires": [
            [
                "389bef3.d94c61"
            ]
        ]
    },
    {
        "id": "bdc6718a.dd5d48",
        "type": "ui_text",
        "z": "1371dec5.76e671",
        "group": "ce9e278.781eed8",
        "order": 3,
        "width": 0,
        "height": 0,
        "name": "",
        "label": "Instrument Type",
        "format": "{{msg.payload.acq_instrument}}",
        "layout": "row-spread",
        "x": 1040,
        "y": 720,
        "wires": []
    },
    {
        "id": "a400a97e.e333a8",
        "type": "ui_text",
        "z": "1371dec5.76e671",
        "group": "ce9e278.781eed8",
        "order": 0,
        "width": 0,
        "height": 0,
        "name": "",
        "label": "Instrument Name",
        "format": "{{msg.payload}}",
        "layout": "row-spread",
        "x": 810,
        "y": 760,
        "wires": []
    },
    {
        "id": "8343fa69.49339",
        "type": "ui_text",
        "z": "1371dec5.76e671",
        "group": "ce9e278.781eed8",
        "order": 1,
        "width": 0,
        "height": 0,
        "name": "",
        "label": "Software version",
        "format": "{{msg.payload}}",
        "layout": "row-spread",
        "x": 1040,
        "y": 660,
        "wires": []
    },
    {
        "id": "f783aefd.c3bfd8",
        "type": "ui_text",
        "z": "1371dec5.76e671",
        "group": "ce9e278.781eed8",
        "order": 0,
        "width": 0,
        "height": 0,
        "name": "",
        "label": "Camera Name",
        "format": "{{msg.payload}}",
        "layout": "row-spread",
        "x": 1220,
        "y": 780,
        "wires": []
    },
    {
        "id": "a0e2d78c.a587e",
        "type": "inject",
        "z": "1371dec5.76e671",
        "name": "Default: ON",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": "",
        "topic": "",
        "payload": "true",
        "payloadType": "bool",
        "x": 110,
        "y": 620,
        "wires": [
            [
                "2200e2ae.0d183e",
                "592c4dac.b8a9dc"
            ]
        ]
    },
    {
        "id": "906d9fea.4bab48",
        "type": "status",
        "z": "b771c342.49603",
        "d": true,
        "name": "GPS Status",
        "scope": [],
        "x": 310,
        "y": 1500,
        "wires": [
            [
                "7116e906.9f50f"
            ]
        ]
    },
    {
        "id": "7116e906.9f50f",
        "type": "ui_text",
        "z": "b771c342.49603",
        "d": true,
        "group": "cf5d9f0e.d57e7",
        "order": 11,
        "width": 6,
        "height": 1,
        "name": "GPS Status Display",
        "label": "GPS Status:",
        "format": "{{msg.status.text}}",
        "layout": "row-left",
        "x": 810,
        "y": 1500,
        "wires": []
    },
    {
        "id": "3269f55f.05d0d2",
        "type": "function",
        "z": "b771c342.49603",
        "name": "DD to DMS",
        "func": "function ConvertDDToDMS(D, lng){\n    // from https://stackoverflow.com/a/5786281/2108279\n    return {\n        dir : D<0?lng?'W':'S':lng?'E':'N',\n        deg : 0|(D<0?D=-D:D),\n        min : 0|D%1*60,\n        sec :(0|D*60%1*6000)/100\n    };\n}\n\nmsg.payload = {\n    \"lat\":ConvertDDToDMS(msg.payload.lat, false),\n    \"lon\":ConvertDDToDMS(msg.payload.lon, true)\n};\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 230,
        "y": 560,
        "wires": [
            []
        ]
    },
    {
        "id": "48879182.6fd718",
        "type": "inject",
        "z": "baa1e3d9.cb29d",
        "name": "Default: 10",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "10",
        "payloadType": "num",
        "x": 310,
        "y": 320,
        "wires": [
            [
                "51b4d0df.d70a88"
            ]
        ]
    },
    {
        "id": "1fa7fddf.18161a",
        "type": "ui_toast",
        "z": "1371dec5.76e671",
        "position": "dialog",
        "displayTime": "10",
        "highlight": "",
        "sendall": true,
        "outputs": 1,
        "ok": "OK",
        "cancel": "",
        "raw": false,
        "topic": "",
        "name": "Update notif",
        "x": 570,
        "y": 500,
        "wires": [
            []
        ]
    },
    {
        "id": "6451f991.aaac1",
        "type": "ui_button",
        "z": "bccd1f23.87219",
        "name": "stop pump",
        "group": "707d9797.c8e798",
        "order": 6,
        "width": 2,
        "height": 1,
        "passthru": true,
        "label": "STOP PUMP",
        "tooltip": "",
        "color": "",
        "bgcolor": "#AD1625",
        "icon": "",
        "payload": "{\"action\":\"stop\"}",
        "payloadType": "json",
        "topic": "actuator/pump",
        "x": 170,
        "y": 180,
        "wires": [
            [
                "bdc8ce57.de1f08"
            ]
        ]
    },
    {
        "id": "b402f719.55bc98",
        "type": "inject",
        "z": "baa1e3d9.cb29d",
        "name": "Default: FORWARD",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "topic": "pump_direction",
        "payload": "FORWARD",
        "payloadType": "str",
        "x": 280,
        "y": 660,
        "wires": [
            [
                "bb62da8a.ebc328"
            ]
        ]
    },
    {
        "id": "42795da1.0ee104",
        "type": "function",
        "z": "b771c342.49603",
        "name": "DDMM.MMMM to DD",
        "func": "// Format 36°57.4439' N, 110°4.2100' W\n// From https://stackoverflow.com/questions/1140189/converting-latitude-and-longitude-to-decimal-values\nfunction ConvertDDMMToDD(input) {\n    var parts = input.split(/[^\\d\\w]+/);\n    var dd = Number(parts[0]) + (Number(parts[1]) + Number(parts[2])/10000)/60;\n\n    if (parts[3] == \"S\" || parts[3] == \"W\") {\n        dd = dd * -1;\n    } // Don't do anything for N or E\n    return dd.toFixed(6);\n}\n\nmsg.payload = ConvertDDMMToDD(msg.payload)\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 980,
        "y": 760,
        "wires": [
            [
                "9f501f49.45645"
            ]
        ]
    },
    {
        "id": "cdc75496.45f748",
        "type": "subflow:20ae9e26.17d73a",
        "z": "1c24ad9c.bebec2",
        "x": 610,
        "y": 860,
        "wires": [
            [
                "2e6ddf51.c0dba"
            ]
        ]
    },
    {
        "id": "6b2239f3.41fa3",
        "type": "function",
        "z": "baa1e3d9.cb29d",
        "name": "set global",
        "func": "global.set(msg.topic, msg.payload);",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 720,
        "y": 660,
        "wires": [
            []
        ]
    },
    {
        "id": "a4abb1ae.2ae418",
        "type": "subflow:1c24ad9c.bebec2",
        "z": "baa1e3d9.cb29d",
        "name": "",
        "env": [],
        "x": 930,
        "y": 500,
        "wires": [
            []
        ]
    },
    {
        "id": "51b4d0df.d70a88",
        "type": "ui_text_input",
        "z": "baa1e3d9.cb29d",
        "name": "nb_frame",
        "label": "Number of images to acquire",
        "tooltip": "",
        "group": "4322c187.e73e5",
        "order": 3,
        "width": 0,
        "height": 0,
        "passthru": true,
        "mode": "number",
        "delay": 300,
        "topic": "nb_frame",
        "x": 640,
        "y": 320,
        "wires": [
            [
                "fb887036.12429",
                "67091ac0.8f9f6c"
            ]
        ]
    },
    {
        "id": "9c7f7fc9.c8d3a",
        "type": "ui_text_input",
        "z": "b771c342.49603",
        "name": "object_depth_max",
        "label": "Object depth Max",
        "tooltip": "",
        "group": "3e1ba03d.f01d8",
        "order": 8,
        "width": 5,
        "height": 1,
        "passthru": true,
        "mode": "number",
        "delay": 300,
        "topic": "object_depth_max",
        "x": 650,
        "y": 500,
        "wires": [
            [
                "9f501f49.45645"
            ]
        ]
    },
    {
        "id": "317eeeb7.8d3042",
        "type": "ui_text_input",
        "z": "b771c342.49603",
        "name": "object_depth_min",
        "label": "Object Depth Min",
        "tooltip": "",
        "group": "3e1ba03d.f01d8",
        "order": 6,
        "width": 5,
        "height": 1,
        "passthru": true,
        "mode": "number",
        "delay": 300,
        "topic": "object_depth_min",
        "x": 650,
        "y": 540,
        "wires": [
            [
                "9f501f49.45645"
            ]
        ]
    },
    {
        "id": "999065ca.27edb8",
        "type": "switch",
        "z": "baa1e3d9.cb29d",
        "name": "topic filter",
        "property": "topic",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "status/pump",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "status/focus",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "status/imager",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 3,
        "x": 660,
        "y": 940,
        "wires": [
            [
                "a46a1e7f.88a92",
                "6742014e.1bb238"
            ],
            [
                "c516d9ea.f7f6e",
                "6742014e.1bb238"
            ],
            [
                "307c851e.fb0f7a",
                "2b9d6988.d84836"
            ]
        ]
    },
    {
        "id": "2b009bd7.c07004",
        "type": "ui_text",
        "z": "baa1e3d9.cb29d",
        "group": "70de8209.68416c",
        "order": 3,
        "width": 10,
        "height": 2,
        "name": "imager",
        "label": "Imager status:",
        "format": "{{msg.payload.status}}",
        "layout": "col-center",
        "x": 1110,
        "y": 880,
        "wires": []
    },
    {
        "id": "c516d9ea.f7f6e",
        "type": "ui_text",
        "z": "baa1e3d9.cb29d",
        "group": "70de8209.68416c",
        "order": 1,
        "width": 5,
        "height": 1,
        "name": "focus",
        "label": "Focus status:",
        "format": "{{msg.payload.status}}",
        "layout": "col-center",
        "x": 1110,
        "y": 840,
        "wires": []
    },
    {
        "id": "a46a1e7f.88a92",
        "type": "ui_text",
        "z": "baa1e3d9.cb29d",
        "group": "70de8209.68416c",
        "order": 2,
        "width": 5,
        "height": 1,
        "name": "pump",
        "label": "Pump status:",
        "format": "{{msg.payload.status}}",
        "layout": "col-center",
        "x": 1110,
        "y": 800,
        "wires": []
    },
    {
        "id": "bb628f8d.98f108",
        "type": "link in",
        "z": "baa1e3d9.cb29d",
        "name": "Status for fluidic module",
        "links": [
            "58f2e0f.4e8b12"
        ],
        "x": 515,
        "y": 940,
        "wires": [
            [
                "999065ca.27edb8"
            ]
        ]
    },
    {
        "id": "1fdf77b5.24e4e",
        "type": "mqtt in",
        "z": "9a22e67a.378818",
        "name": "",
        "topic": "status/#",
        "qos": "0",
        "datatype": "json",
        "broker": "8dc3722c.06efa8",
        "x": 290,
        "y": 340,
        "wires": [
            [
                "fa73983d.318188"
            ]
        ]
    },
    {
        "id": "4a1e9e3e.27506",
        "type": "switch",
        "z": "9a22e67a.378818",
        "name": "Filter segmenter out",
        "property": "topic",
        "propertyType": "msg",
        "rules": [
            {
                "t": "else"
            },
            {
                "t": "cont",
                "v": "status/segmenter",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 620,
        "y": 340,
        "wires": [
            [
                "58f2e0f.4e8b12"
            ],
            [
                "dcf5bd45.16a8d"
            ]
        ]
    },
    {
        "id": "fa73983d.318188",
        "type": "json",
        "z": "9a22e67a.378818",
        "name": "",
        "property": "payload",
        "action": "obj",
        "pretty": true,
        "x": 430,
        "y": 340,
        "wires": [
            [
                "4a1e9e3e.27506"
            ]
        ]
    },
    {
        "id": "58f2e0f.4e8b12",
        "type": "link out",
        "z": "9a22e67a.378818",
        "name": "Fluidic module status",
        "links": [
            "bb628f8d.98f108"
        ],
        "x": 795,
        "y": 320,
        "wires": []
    },
    {
        "id": "307c851e.fb0f7a",
        "type": "switch",
        "z": "baa1e3d9.cb29d",
        "name": "Imaging state",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "jsonata_exp",
                "v": "$contains(msg.payload.status, \"jpg\")\t",
                "vt": "jsonata"
            },
            {
                "t": "else"
            }
        ],
        "checkall": "false",
        "repair": false,
        "outputs": 2,
        "x": 890,
        "y": 1040,
        "wires": [
            [
                "db8e3dde.44efb8"
            ],
            [
                "6742014e.1bb238"
            ]
        ]
    },
    {
        "id": "db8e3dde.44efb8",
        "type": "function",
        "z": "baa1e3d9.cb29d",
        "name": "img_counter.js",
        "func": "img_counter=global.get('img_counter')\nimg_counter=img_counter+1\nglobal.set('img_counter',img_counter)\nmsg.payload = img_counter\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1140,
        "y": 1100,
        "wires": [
            [
                "b7c3a3ad.9bf32",
                "39812a27.6cb10e"
            ]
        ]
    },
    {
        "id": "59164d65.e7993c",
        "type": "ui_toast",
        "z": "baa1e3d9.cb29d",
        "position": "top right",
        "displayTime": "5",
        "highlight": "",
        "sendall": true,
        "outputs": 0,
        "ok": "OK",
        "cancel": "",
        "raw": false,
        "topic": "",
        "name": "",
        "x": 1600,
        "y": 980,
        "wires": []
    },
    {
        "id": "8c7348aa.1962e8",
        "type": "template",
        "z": "baa1e3d9.cb29d",
        "name": "Create sentence",
        "field": "payload",
        "fieldType": "msg",
        "format": "handlebars",
        "syntax": "mustache",
        "template": "The {{topic}} is {{payload.status}}",
        "output": "str",
        "x": 1400,
        "y": 980,
        "wires": [
            [
                "59164d65.e7993c"
            ]
        ]
    },
    {
        "id": "6742014e.1bb238",
        "type": "change",
        "z": "baa1e3d9.cb29d",
        "name": "Remove high-level topic",
        "rules": [
            {
                "t": "change",
                "p": "topic",
                "pt": "msg",
                "from": "status/",
                "fromt": "str",
                "to": "",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1170,
        "y": 980,
        "wires": [
            [
                "8c7348aa.1962e8"
            ]
        ]
    },
    {
        "id": "b7c3a3ad.9bf32",
        "type": "ui_text",
        "z": "baa1e3d9.cb29d",
        "group": "b5d61bc7.54fe48",
        "order": 4,
        "width": 5,
        "height": 2,
        "name": "Image Count",
        "label": "Images count",
        "format": "{{msg.payload}}",
        "layout": "col-center",
        "x": 1590,
        "y": 1120,
        "wires": []
    },
    {
        "id": "1a2e721a.f5e876",
        "type": "ui_gauge",
        "z": "baa1e3d9.cb29d",
        "name": "Image Donut",
        "group": "b5d61bc7.54fe48",
        "order": 1,
        "width": 4,
        "height": 3,
        "gtype": "donut",
        "title": "progress",
        "label": "%",
        "format": "{{value}}",
        "min": 0,
        "max": "100",
        "colors": [
            "#ffa83f",
            "#e6ff02",
            "#00dfe9"
        ],
        "seg1": "50",
        "seg2": "75",
        "x": 1590,
        "y": 1080,
        "wires": []
    },
    {
        "id": "39812a27.6cb10e",
        "type": "function",
        "z": "baa1e3d9.cb29d",
        "name": "percent image",
        "func": "msg.payload = (100 * msg.payload/global.get('nb_frame')).toFixed(2)\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1400,
        "y": 1080,
        "wires": [
            [
                "1a2e721a.f5e876"
            ]
        ]
    },
    {
        "id": "1585d7e9.ea2d28",
        "type": "function",
        "z": "baa1e3d9.cb29d",
        "name": "img_counter init",
        "func": "img_counter=0\nglobal.set('img_counter',img_counter)\nmsg.payload = img_counter\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1340,
        "y": 1160,
        "wires": [
            [
                "b7c3a3ad.9bf32"
            ]
        ]
    },
    {
        "id": "e1a2f1b3.fe1758",
        "type": "inject",
        "z": "baa1e3d9.cb29d",
        "name": "Init graphs",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "0",
        "payloadType": "num",
        "x": 1130,
        "y": 1160,
        "wires": [
            [
                "1585d7e9.ea2d28"
            ]
        ]
    },
    {
        "id": "8f3788f6.ddcf98",
        "type": "function",
        "z": "cb95299c.2817c8",
        "name": "obj_counter.js",
        "func": "obj_counter=global.get('obj_counter')\nobj_counter=obj_counter+1\nglobal.set('obj_counter',obj_counter)\nmsg.payload = obj_counter\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 820,
        "y": 840,
        "wires": [
            [
                "9d53dbe2.dbffe8",
                "fa3b7929.ac7da8"
            ]
        ]
    },
    {
        "id": "aa38dbbc.cf0a9",
        "type": "switch",
        "z": "cb95299c.2817c8",
        "name": "Segmenter",
        "property": "topic",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "status/segmenter",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "status/segmenter/name",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "status/segmenter/object_id",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "status/segmenter/metric",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 4,
        "x": 490,
        "y": 740,
        "wires": [
            [
                "b9a23b91.93638",
                "6919465f.332e5"
            ],
            [
                "49af3d24.1799e4"
            ],
            [
                "8f3788f6.ddcf98"
            ],
            [
                "50ce901f.b5034"
            ]
        ]
    },
    {
        "id": "9d53dbe2.dbffe8",
        "type": "ui_chart",
        "z": "cb95299c.2817c8",
        "name": "counter graph",
        "group": "46be9c86.dea684",
        "order": 6,
        "width": 10,
        "height": 2,
        "label": "",
        "chartType": "horizontalBar",
        "legend": "false",
        "xformat": "HH:mm:ss",
        "interpolate": "linear",
        "nodata": "Objects count will be shown here once the segmentation is started",
        "dot": false,
        "ymin": "",
        "ymax": "",
        "removeOlder": 1,
        "removeOlderPoints": "",
        "removeOlderUnit": "3600",
        "cutout": 0,
        "useOneColor": true,
        "useUTC": false,
        "colors": [
            "#1f77b4",
            "#aec7e8",
            "#ff7f0e",
            "#2ca02c",
            "#98df8a",
            "#d62728",
            "#ff9896",
            "#9467bd",
            "#c5b0d5"
        ],
        "useOldStyle": false,
        "outputs": 1,
        "x": 1340,
        "y": 840,
        "wires": [
            []
        ]
    },
    {
        "id": "50ce901f.b5034",
        "type": "function",
        "z": "cb95299c.2817c8",
        "name": "ex : area",
        "func": "msg.payload=msg.payload.object_area\nmsg.topic=\"area\"\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 800,
        "y": 920,
        "wires": [
            [
                "458cd82e.03d258"
            ]
        ]
    },
    {
        "id": "a4f0f0d1.3aca88",
        "type": "ui_toast",
        "z": "cb95299c.2817c8",
        "position": "top right",
        "displayTime": "5",
        "highlight": "",
        "sendall": true,
        "outputs": 0,
        "ok": "OK",
        "cancel": "",
        "raw": false,
        "topic": "",
        "name": "",
        "x": 1340,
        "y": 680,
        "wires": []
    },
    {
        "id": "458cd82e.03d258",
        "type": "ui_chart",
        "z": "cb95299c.2817c8",
        "name": "Area chart",
        "group": "46be9c86.dea684",
        "order": 9,
        "width": 10,
        "height": 6,
        "label": "",
        "chartType": "line",
        "legend": "false",
        "xformat": "HH:mm:ss",
        "interpolate": "linear",
        "nodata": "Objects area will be shown here once the segmentation is started",
        "dot": true,
        "ymin": "",
        "ymax": "",
        "removeOlder": 1,
        "removeOlderPoints": "1000",
        "removeOlderUnit": "3600",
        "cutout": 0,
        "useOneColor": false,
        "useUTC": true,
        "colors": [
            "#1f77b4",
            "#aec7e8",
            "#ff7f0e",
            "#2ca02c",
            "#98df8a",
            "#d62728",
            "#ff9896",
            "#9467bd",
            "#c5b0d5"
        ],
        "useOldStyle": false,
        "outputs": 1,
        "x": 1320,
        "y": 920,
        "wires": [
            []
        ]
    },
    {
        "id": "49af3d24.1799e4",
        "type": "debug",
        "z": "cb95299c.2817c8",
        "name": "segmentation name",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 830,
        "y": 760,
        "wires": []
    },
    {
        "id": "7088a5be.0c79a4",
        "type": "template",
        "z": "cb95299c.2817c8",
        "name": "Create sentence",
        "field": "payload",
        "fieldType": "msg",
        "format": "handlebars",
        "syntax": "mustache",
        "template": "The {{topic}} is {{payload.status}}",
        "output": "str",
        "x": 1100,
        "y": 680,
        "wires": [
            [
                "a4f0f0d1.3aca88"
            ]
        ]
    },
    {
        "id": "b9a23b91.93638",
        "type": "change",
        "z": "cb95299c.2817c8",
        "name": "Remove high-level topic",
        "rules": [
            {
                "t": "change",
                "p": "topic",
                "pt": "msg",
                "from": "status/",
                "fromt": "str",
                "to": "",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 850,
        "y": 680,
        "wires": [
            [
                "7088a5be.0c79a4"
            ]
        ]
    },
    {
        "id": "6919465f.332e5",
        "type": "ui_text",
        "z": "cb95299c.2817c8",
        "group": "46be9c86.dea684",
        "order": 1,
        "width": 10,
        "height": 1,
        "name": "segmenter",
        "label": "Segmenter status:",
        "format": "{{msg.payload.status}}",
        "layout": "row-spread",
        "x": 810,
        "y": 720,
        "wires": []
    },
    {
        "id": "fa3b7929.ac7da8",
        "type": "ui_text",
        "z": "cb95299c.2817c8",
        "group": "46be9c86.dea684",
        "order": 4,
        "width": 4,
        "height": 1,
        "name": "counter",
        "label": "",
        "format": "{{msg.payload}}",
        "layout": "col-center",
        "x": 1320,
        "y": 800,
        "wires": []
    },
    {
        "id": "640ece83.88cab",
        "type": "inject",
        "z": "cb95299c.2817c8",
        "name": "Init graphs",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "0",
        "payloadType": "num",
        "x": 810,
        "y": 800,
        "wires": [
            [
                "cd10a556.6a9a08"
            ]
        ]
    },
    {
        "id": "cd10a556.6a9a08",
        "type": "function",
        "z": "cb95299c.2817c8",
        "name": "obj_counter init",
        "func": "obj_counter=0\nglobal.set('obj_counter',obj_counter)\nmsg.payload = obj_counter\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1000,
        "y": 800,
        "wires": [
            [
                "fa3b7929.ac7da8"
            ]
        ]
    },
    {
        "id": "25867454.a8e334",
        "type": "link in",
        "z": "cb95299c.2817c8",
        "name": "Segmenter module status",
        "links": [
            "dcf5bd45.16a8d"
        ],
        "x": 295,
        "y": 740,
        "wires": [
            [
                "aa38dbbc.cf0a9"
            ]
        ]
    },
    {
        "id": "dcf5bd45.16a8d",
        "type": "link out",
        "z": "9a22e67a.378818",
        "name": "Segmenter module status",
        "links": [
            "25867454.a8e334"
        ],
        "x": 795,
        "y": 360,
        "wires": []
    },
    {
        "id": "52af9ac0.60eb24",
        "type": "link out",
        "z": "b771c342.49603",
        "name": "Sample Operator",
        "links": [
            "c1d4934c.9bb628"
        ],
        "x": 815,
        "y": 420,
        "wires": []
    },
    {
        "id": "105e3033.152848",
        "type": "exec",
        "z": "1371dec5.76e671",
        "command": "",
        "addpay": true,
        "append": "",
        "useSpawn": "false",
        "timer": "1",
        "oldrc": false,
        "name": "git user.name",
        "x": 1160,
        "y": 420,
        "wires": [
            [],
            [],
            []
        ]
    },
    {
        "id": "cc205a38.f86ea",
        "type": "template",
        "z": "1371dec5.76e671",
        "name": "git config",
        "field": "payload",
        "fieldType": "msg",
        "format": "handlebars",
        "syntax": "mustache",
        "template": "git config --global --replace-all user.name \"{{payload}}\"",
        "output": "str",
        "x": 980,
        "y": 420,
        "wires": [
            [
                "105e3033.152848"
            ]
        ]
    },
    {
        "id": "c1d4934c.9bb628",
        "type": "link in",
        "z": "1371dec5.76e671",
        "name": "Git config",
        "links": [
            "52af9ac0.60eb24"
        ],
        "x": 835,
        "y": 460,
        "wires": [
            [
                "cc205a38.f86ea",
                "93478941.a80e18"
            ]
        ]
    },
    {
        "id": "9bd72495.a8a098",
        "type": "ui_text",
        "z": "baa1e3d9.cb29d",
        "group": "4322c187.e73e5",
        "order": 4,
        "width": 5,
        "height": 1,
        "name": "Imaged volume",
        "label": "Imaged volume",
        "format": "{{msg.payload}}",
        "layout": "row-spread",
        "x": 1260,
        "y": 260,
        "wires": []
    },
    {
        "id": "99b11fe4.2795d",
        "type": "function",
        "z": "baa1e3d9.cb29d",
        "name": "imaged volume calc",
        "func": "camera = global.get(\"acq_camera\");\ncell = global.get(\"acq_celltype\");\n\nif (camera == \"HQ Camera\"){\n    volume = (4.15*3.14*cell/1000) / 1000;\n}\nelse if (camera == \"Camera v2.1\"){\n    volume = (2.31*1.74*cell/1000) / 1000;\n}\nelse{\n    msg.payload = \"The camera is not known to this system\";\n    return msg;\n}\n\nglobal.set(\"acq_imaged_volume\", volume.toFixed(4))\n\nmsg.payload = volume.toFixed(4) + \" mL\"\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1040,
        "y": 260,
        "wires": [
            [
                "9bd72495.a8a098"
            ]
        ],
        "info": "### Focusing\n##### focus.py `nb_step` `orientation`\n\n- `nb_step` : **integer** (from 1 to 100000) - number of step to perform by the stage (about 31um/step)\n- `orientation` : **string** - orientation of the focus either `up` or `down`\n\nExample:\n\n    python3.7 $HOME/PlanktonScope/scripts/focus.py 650 up\n"
    },
    {
        "id": "8e16aa2f.e40398",
        "type": "ui_text",
        "z": "baa1e3d9.cb29d",
        "group": "4322c187.e73e5",
        "order": 6,
        "width": 5,
        "height": 1,
        "name": "Pump volume",
        "label": "Pump volume",
        "format": "{{msg.payload}}",
        "layout": "row-spread",
        "x": 1260,
        "y": 300,
        "wires": []
    },
    {
        "id": "67091ac0.8f9f6c",
        "type": "function",
        "z": "baa1e3d9.cb29d",
        "name": "pump volume calc",
        "func": "var acq_volume = global.get(\"acq_volume\");\nvar nb_frame = global.get(\"nb_frame\");\n\nvar pump_volume =  Math.max((Number(acq_volume) / Number(nb_frame)), 0.01).toFixed(3)\n\nglobal.set(\"imaging_pump_volume\", pump_volume)\n\nmsg.payload = pump_volume + \" mL/frame\"\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1030,
        "y": 300,
        "wires": [
            [
                "8e16aa2f.e40398"
            ]
        ],
        "info": "### Focusing\n##### focus.py `nb_step` `orientation`\n\n- `nb_step` : **integer** (from 1 to 100000) - number of step to perform by the stage (about 31um/step)\n- `orientation` : **string** - orientation of the focus either `up` or `down`\n\nExample:\n\n    python3.7 $HOME/PlanktonScope/scripts/focus.py 650 up\n"
    },
    {
        "id": "43737d43.eb0e9c",
        "type": "ui_slider",
        "z": "bccd1f23.87219",
        "name": "WB Red slider",
        "label": "WB: Red",
        "tooltip": "from 1.0 to 8.0",
        "group": "8c38a81e.9897a8",
        "order": 4,
        "width": 8,
        "height": 1,
        "passthru": true,
        "outs": "end",
        "topic": "imager/image",
        "min": "1.0",
        "max": "8.0",
        "step": "0.01",
        "x": 380,
        "y": 940,
        "wires": [
            [
                "5e147425.7666ec"
            ]
        ]
    },
    {
        "id": "5e147425.7666ec",
        "type": "function",
        "z": "bccd1f23.87219",
        "name": "Encapsulate settings",
        "func": "msg.payload = {\n    \"action\":\"settings\", \n    \"settings\":{\"white_balance_gain\":{\n        \"red\":Math.round(msg.payload*100)\n        }\n    }\n}\nmsg.topic = \"imager/image\"\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 720,
        "y": 940,
        "wires": [
            [
                "845e06e1.0d812"
            ]
        ]
    },
    {
        "id": "4b708426.adeeb4",
        "type": "function",
        "z": "bccd1f23.87219",
        "name": "Encapsulate settings",
        "func": "msg.payload = {\n    \"action\":\"settings\", \n    \"settings\":{\"white_balance_gain\":{\n        \"blue\":Math.round(msg.payload*100)\n        }\n    }\n}\nmsg.topic = \"imager/image\"\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 720,
        "y": 1000,
        "wires": [
            [
                "845e06e1.0d812"
            ]
        ]
    },
    {
        "id": "5ca6cdb6.3a6684",
        "type": "inject",
        "z": "bccd1f23.87219",
        "name": "Default: WB 2.0",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": "1",
        "topic": "",
        "payload": "2.0",
        "payloadType": "num",
        "x": 120,
        "y": 940,
        "wires": [
            [
                "43737d43.eb0e9c"
            ]
        ]
    },
    {
        "id": "7b699798.3d568",
        "type": "ui_slider",
        "z": "bccd1f23.87219",
        "name": "WB Blue slider",
        "label": "WB: Blue",
        "tooltip": "from 1.0 to 8.0",
        "group": "8c38a81e.9897a8",
        "order": 5,
        "width": 8,
        "height": 1,
        "passthru": true,
        "outs": "end",
        "topic": "imager/image",
        "min": "1.0",
        "max": "8.0",
        "step": "0.01",
        "x": 380,
        "y": 1000,
        "wires": [
            [
                "4b708426.adeeb4"
            ]
        ]
    },
    {
        "id": "7db56b9d.37f52c",
        "type": "inject",
        "z": "bccd1f23.87219",
        "name": "Default: WB 1.4",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": "1",
        "topic": "",
        "payload": "1.4",
        "payloadType": "num",
        "x": 120,
        "y": 1000,
        "wires": [
            [
                "7b699798.3d568"
            ]
        ]
    },
    {
        "id": "227b4b67.5a0f2c",
        "type": "exec",
        "z": "1371dec5.76e671",
        "command": "",
        "addpay": true,
        "append": "",
        "useSpawn": "false",
        "timer": "1",
        "oldrc": false,
        "name": "git user.email",
        "x": 1150,
        "y": 500,
        "wires": [
            [],
            [],
            []
        ]
    },
    {
        "id": "93478941.a80e18",
        "type": "template",
        "z": "1371dec5.76e671",
        "name": "git config",
        "field": "payload",
        "fieldType": "msg",
        "format": "handlebars",
        "syntax": "mustache",
        "template": "git config --global --replace-all user.email \"{{payload}}\"",
        "output": "str",
        "x": 980,
        "y": 500,
        "wires": [
            [
                "227b4b67.5a0f2c"
            ]
        ]
    },
    {
        "id": "daedda1b.9805b8",
        "type": "function",
        "z": "bccd1f23.87219",
        "name": "Encapsulate settings",
        "func": "msg.payload = {\n    \"action\":\"settings\", \n    \"settings\":{\"white_balance\":msg.payload}\n}\nmsg.topic = \"imager/image\"\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 720,
        "y": 1060,
        "wires": [
            [
                "845e06e1.0d812"
            ]
        ]
    },
    {
        "id": "82722a3c.846b3",
        "type": "inject",
        "z": "bccd1f23.87219",
        "name": "Default: OFF",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": "1",
        "topic": "",
        "payload": "false",
        "payloadType": "bool",
        "x": 110,
        "y": 1060,
        "wires": [
            [
                "60e44330.50bdec"
            ]
        ]
    },
    {
        "id": "60e44330.50bdec",
        "type": "ui_switch",
        "z": "bccd1f23.87219",
        "name": "AWB",
        "label": "Auto White Balance",
        "tooltip": "",
        "group": "8c38a81e.9897a8",
        "order": 3,
        "width": 2,
        "height": 2,
        "passthru": true,
        "decouple": "false",
        "topic": "imager/image",
        "style": "",
        "onvalue": "auto",
        "onvalueType": "str",
        "onicon": "",
        "oncolor": "",
        "offvalue": "off",
        "offvalueType": "str",
        "officon": "",
        "offcolor": "",
        "x": 410,
        "y": 1060,
        "wires": [
            [
                "daedda1b.9805b8"
            ]
        ]
    },
    {
        "id": "2b9d6988.d84836",
        "type": "switch",
        "z": "baa1e3d9.cb29d",
        "name": "",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "hask",
                "v": "status",
                "vt": "str"
            },
            {
                "t": "hask",
                "v": "camera_name",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 990,
        "y": 900,
        "wires": [
            [
                "2b009bd7.c07004"
            ],
            [
                "3bbb756a.84190a"
            ]
        ]
    },
    {
        "id": "3bbb756a.84190a",
        "type": "function",
        "z": "baa1e3d9.cb29d",
        "name": "set camera name",
        "func": "global.set(\"acq_camera\", msg.payload.camera_name);\n\nmsg.payload = msg.payload.camera_name;\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1150,
        "y": 920,
        "wires": [
            [
                "559a8085.1d6b9"
            ]
        ]
    },
    {
        "id": "559a8085.1d6b9",
        "type": "link out",
        "z": "baa1e3d9.cb29d",
        "name": "Camera Name",
        "links": [
            "30067f35.532f2",
            "572a6daa.6004c4"
        ],
        "x": 1305,
        "y": 920,
        "wires": []
    },
    {
        "id": "30067f35.532f2",
        "type": "link in",
        "z": "1371dec5.76e671",
        "name": "Camera Name",
        "links": [
            "559a8085.1d6b9"
        ],
        "x": 1075,
        "y": 780,
        "wires": [
            [
                "f783aefd.c3bfd8"
            ]
        ]
    },
    {
        "id": "11b51f8f.acd308",
        "type": "python3-function",
        "z": "1371dec5.76e671",
        "name": "fan.py",
        "func": "import smbus\nbus = smbus.SMBus(1)\n\naddr = 0x0d\nfan_reg = 0x08\n\ntemp = float( msg[\"payload\"])\n\nif temp <= 35:\n    bus.write_byte_data(addr, fan_reg, 0x00)\nelif temp <= 38:\n    bus.write_byte_data(addr, fan_reg, 0x04)\nelif temp <= 43:\n    bus.write_byte_data(addr, fan_reg, 0x06)\nelif temp <= 48:\n    bus.write_byte_data(addr, fan_reg, 0x08)\nelif temp <= 52:\n    bus.write_byte_data(addr, fan_reg, 0x09)\nelse:\n    bus.write_byte_data(addr, fan_reg, 0x01)\n\nreturn msg",
        "outputs": 1,
        "x": 1100,
        "y": 200,
        "wires": [
            []
        ]
    },
    {
        "id": "d7c68899.f8f678",
        "type": "switch",
        "z": "b771c342.49603",
        "name": "Check if net",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "net",
                "vt": "str"
            },
            {
                "t": "else"
            }
        ],
        "checkall": "false",
        "repair": false,
        "outputs": 2,
        "x": 1210,
        "y": 460,
        "wires": [
            [
                "66b362ee.80b5b4"
            ],
            [
                "399cb596.1eaf1a"
            ]
        ]
    },
    {
        "id": "66b362ee.80b5b4",
        "type": "change",
        "z": "b771c342.49603",
        "name": "Activate",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "{\"group\":{\"show\":[\"Sample_Sample_Net_Location\"],\"hide\":[\"Sample_Sample_Location\"]}}",
                "tot": "json"
            },
            {
                "t": "set",
                "p": "enabled",
                "pt": "msg",
                "to": "true",
                "tot": "bool"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1380,
        "y": 440,
        "wires": [
            [
                "cbb123ab.fd3428"
            ]
        ]
    },
    {
        "id": "399cb596.1eaf1a",
        "type": "change",
        "z": "b771c342.49603",
        "name": "Deactivate",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "{\"group\":{\"hide\":[\"Sample_Sample_Net_Location\"],\"show\":[\"Sample_Sample_Location\"]}}",
                "tot": "json"
            },
            {
                "t": "set",
                "p": "enabled",
                "pt": "msg",
                "to": "false",
                "tot": "bool"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1390,
        "y": 480,
        "wires": [
            [
                "cbb123ab.fd3428"
            ]
        ]
    },
    {
        "id": "cbb123ab.fd3428",
        "type": "ui_ui_control",
        "z": "b771c342.49603",
        "name": "",
        "events": "change",
        "x": 1580,
        "y": 460,
        "wires": [
            []
        ]
    },
    {
        "id": "a3b44a65.2d125",
        "type": "ui_text_input",
        "z": "b771c342.49603",
        "name": "object_lat",
        "label": "Latitude",
        "tooltip": "36°57'9\" N",
        "group": "cef1e703.bcf3c8",
        "order": 1,
        "width": 5,
        "height": 1,
        "passthru": true,
        "mode": "text",
        "delay": 300,
        "topic": "object_lat",
        "x": 680,
        "y": 580,
        "wires": [
            [
                "42795da1.0ee104"
            ]
        ]
    },
    {
        "id": "d285b897.2ef578",
        "type": "ui_text_input",
        "z": "b771c342.49603",
        "name": "object_lon",
        "label": "Longitude",
        "tooltip": "110°4'21\" W",
        "group": "cef1e703.bcf3c8",
        "order": 2,
        "width": 5,
        "height": 1,
        "passthru": true,
        "mode": "text",
        "delay": 300,
        "topic": "object_lon",
        "x": 680,
        "y": 620,
        "wires": [
            [
                "42795da1.0ee104"
            ]
        ]
    },
    {
        "id": "6212dc39.bc143c",
        "type": "ui_date_picker",
        "z": "b771c342.49603",
        "name": "object_date",
        "label": "Date",
        "group": "cef1e703.bcf3c8",
        "order": 3,
        "width": 5,
        "height": 1,
        "passthru": true,
        "topic": "object_date",
        "x": 670,
        "y": 660,
        "wires": [
            [
                "29f2b365.4327ec"
            ]
        ]
    },
    {
        "id": "8a13b675.d7851",
        "type": "ui_text_input",
        "z": "b771c342.49603",
        "name": "object_time",
        "label": "Time",
        "tooltip": "UTC time, 03:23:00 or 15:45",
        "group": "cef1e703.bcf3c8",
        "order": 4,
        "width": 5,
        "height": 1,
        "passthru": true,
        "mode": "text",
        "delay": 300,
        "topic": "object_time",
        "x": 670,
        "y": 700,
        "wires": [
            [
                "1a945afa.d60aad"
            ]
        ]
    },
    {
        "id": "31c13820.0e52f",
        "type": "ui_template",
        "z": "b771c342.49603",
        "group": "cf5d9f0e.d57e7",
        "name": "Net throw location",
        "order": 1,
        "width": 0,
        "height": 0,
        "format": "<div><h3>Net throw location</h3></div>",
        "storeOutMessages": true,
        "fwdInMessages": true,
        "resendOnRefresh": true,
        "templateScope": "local",
        "x": 650,
        "y": 740,
        "wires": [
            []
        ]
    },
    {
        "id": "b21d9c96.66f2f8",
        "type": "ui_template",
        "z": "b771c342.49603",
        "group": "cf5d9f0e.d57e7",
        "name": "Net throw retrieval",
        "order": 6,
        "width": 0,
        "height": 0,
        "format": "<div><h3>Net throw retrieval</h3></div>",
        "storeOutMessages": true,
        "fwdInMessages": true,
        "resendOnRefresh": true,
        "templateScope": "local",
        "x": 650,
        "y": 940,
        "wires": [
            []
        ]
    },
    {
        "id": "b0081852.be553",
        "type": "inject",
        "z": "cb95299c.2817c8",
        "name": "Default process_id: 1",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "topic": "process_id",
        "payload": "1",
        "payloadType": "num",
        "x": 360,
        "y": 200,
        "wires": [
            [
                "c8749cbb.55254"
            ]
        ]
    },
    {
        "id": "c8749cbb.55254",
        "type": "function",
        "z": "cb95299c.2817c8",
        "name": "set global",
        "func": "global.set(msg.topic, msg.payload);",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 560,
        "y": 200,
        "wires": [
            []
        ]
    },
    {
        "id": "d43c3ed9.e6cb1",
        "type": "ui_template",
        "z": "cb95299c.2817c8",
        "group": "46be9c86.dea684",
        "name": "Object counts",
        "order": 2,
        "width": 0,
        "height": 0,
        "format": "<div><center><h2>Object counts</h2></center></div>",
        "storeOutMessages": true,
        "fwdInMessages": true,
        "resendOnRefresh": true,
        "templateScope": "local",
        "x": 1340,
        "y": 760,
        "wires": [
            []
        ]
    },
    {
        "id": "857e90c1.cd25b",
        "type": "ui_template",
        "z": "cb95299c.2817c8",
        "group": "46be9c86.dea684",
        "name": "Area chart",
        "order": 8,
        "width": 0,
        "height": 0,
        "format": "<div><center><h2>Area chart</h2></center></div>",
        "storeOutMessages": true,
        "fwdInMessages": true,
        "resendOnRefresh": true,
        "templateScope": "local",
        "x": 1320,
        "y": 880,
        "wires": [
            []
        ]
    },
    {
        "id": "a8bf2334.279c",
        "type": "inject",
        "z": "baa1e3d9.cb29d",
        "name": "Default: 0.5",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "0.5",
        "payloadType": "num",
        "x": 310,
        "y": 80,
        "wires": [
            [
                "49ea1123.ee1768"
            ]
        ]
    },
    {
        "id": "49ea1123.ee1768",
        "type": "ui_numeric",
        "z": "baa1e3d9.cb29d",
        "name": "sleep_before",
        "label": "Delay to stabilize image (s)",
        "tooltip": "Happens before every capture",
        "group": "4322c187.e73e5",
        "order": 5,
        "width": 5,
        "height": 2,
        "wrap": false,
        "passthru": true,
        "topic": "sleep_before",
        "format": "{{value}}",
        "min": "0.1",
        "max": "5",
        "step": "0.1",
        "x": 630,
        "y": 80,
        "wires": [
            [
                "fb887036.12429"
            ]
        ]
    },
    {
        "id": "2911fbc6.d28c24",
        "type": "ui_template",
        "z": "c1660bc.e7ff7f8",
        "group": "c0ebfc57.42527",
        "name": "Image browser",
        "order": 1,
        "width": 24,
        "height": 24,
        "format": "<div><center>\n    <object data=\"http://planktoscope.local:80/\" width=\"100%\" height=\"100%\" onerror=\"alert('URL invalid !!');\"></object>\n</center>\n</div>",
        "storeOutMessages": true,
        "fwdInMessages": true,
        "resendOnRefresh": false,
        "templateScope": "local",
        "x": 600,
        "y": 160,
        "wires": [
            []
        ]
    },
    {
        "id": "572a6daa.6004c4",
        "type": "link in",
        "z": "baa1e3d9.cb29d",
        "name": "",
        "links": [
            "559a8085.1d6b9"
        ],
        "x": 895,
        "y": 260,
        "wires": [
            [
                "99b11fe4.2795d"
            ]
        ]
    }
]