0bdd85366a
flow: improve update handling
10184 lines
280 KiB
JSON
10184 lines
280 KiB
JSON
[
|
|
{
|
|
"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": "c1660bc.e7ff7f8",
|
|
"type": "tab",
|
|
"label": "Gallery",
|
|
"disabled": false,
|
|
"info": ""
|
|
},
|
|
{
|
|
"id": "9daf9e2b.019fc",
|
|
"type": "tab",
|
|
"label": "Administration",
|
|
"disabled": false,
|
|
"info": ""
|
|
},
|
|
{
|
|
"id": "1371dec5.76e671",
|
|
"type": "tab",
|
|
"label": "Settings",
|
|
"disabled": false,
|
|
"info": ""
|
|
},
|
|
{
|
|
"id": "f21ba04.c26266",
|
|
"type": "tab",
|
|
"label": "WIFI Management",
|
|
"disabled": false,
|
|
"info": ""
|
|
},
|
|
{
|
|
"id": "9a22e67a.378818",
|
|
"type": "tab",
|
|
"label": "MQTT Receive",
|
|
"disabled": false,
|
|
"info": ""
|
|
},
|
|
{
|
|
"id": "1eaf21c8.f7a21e",
|
|
"type": "tab",
|
|
"label": "Hardware Settings",
|
|
"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": 220,
|
|
"y": 160,
|
|
"wires": [
|
|
{
|
|
"id": "3ad9835.08c937c"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"out": [
|
|
{
|
|
"x": 1040,
|
|
"y": 60,
|
|
"wires": [
|
|
{
|
|
"id": "ad541674.4791c8",
|
|
"port": 0
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"env": [],
|
|
"color": "#DDAA99"
|
|
},
|
|
{
|
|
"id": "4ed26b8b.253504",
|
|
"type": "subflow",
|
|
"name": "Hardware config",
|
|
"info": "",
|
|
"category": "",
|
|
"in": [
|
|
{
|
|
"x": 40,
|
|
"y": 200,
|
|
"wires": [
|
|
{
|
|
"id": "53d163be.47cf24"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"out": [
|
|
{
|
|
"x": 1040,
|
|
"y": 80,
|
|
"wires": [
|
|
{
|
|
"id": "ddb4b136.fc0b78",
|
|
"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",
|
|
"z": "",
|
|
"name": "System Monitoring",
|
|
"icon": "fa-thermometer-full",
|
|
"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",
|
|
"palette": "light"
|
|
}
|
|
},
|
|
"site": {
|
|
"name": "PlanktosScope",
|
|
"hideToolbar": "false",
|
|
"allowSwipe": "false",
|
|
"lockMenu": "false",
|
|
"allowTempTheme": "true",
|
|
"dateFormat": "DD/MM/YYYY",
|
|
"sizes": {
|
|
"sx": 55,
|
|
"sy": 55,
|
|
"gx": 5,
|
|
"gy": 5,
|
|
"cx": 5,
|
|
"cy": 5,
|
|
"px": 5,
|
|
"py": 5
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "36739a35.7cce36",
|
|
"type": "ui_tab",
|
|
"z": "",
|
|
"name": "Gallery",
|
|
"icon": "fa-file-image-o",
|
|
"order": 6,
|
|
"disabled": false,
|
|
"hidden": false
|
|
},
|
|
{
|
|
"id": "c0ebfc57.42527",
|
|
"type": "ui_group",
|
|
"z": "",
|
|
"name": "Group 1",
|
|
"tab": "36739a35.7cce36",
|
|
"order": 1,
|
|
"disp": false,
|
|
"width": "24",
|
|
"collapse": false
|
|
},
|
|
{
|
|
"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",
|
|
"z": "",
|
|
"name": "Sample Identification",
|
|
"tab": "737ec584.2eea2c",
|
|
"order": 1,
|
|
"disp": true,
|
|
"width": "10",
|
|
"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",
|
|
"z": "",
|
|
"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": false,
|
|
"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",
|
|
"z": "",
|
|
"name": "Danger Zone (DO NOT TOUCH HERE UNLESS YOU KNOW WHAT YOU ARE DOING)",
|
|
"tab": "2489e51c.eed77a",
|
|
"order": 2,
|
|
"disp": true,
|
|
"width": "12",
|
|
"collapse": true
|
|
},
|
|
{
|
|
"id": "3ca00bf9.e5cac4",
|
|
"type": "ui_group",
|
|
"z": "",
|
|
"name": "Navigation",
|
|
"tab": "d9cd733b.ab73d",
|
|
"order": 7,
|
|
"disp": true,
|
|
"width": 6,
|
|
"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": "Net Metadata",
|
|
"tab": "737ec584.2eea2c",
|
|
"order": 3,
|
|
"disp": false,
|
|
"width": "10",
|
|
"collapse": false
|
|
},
|
|
{
|
|
"id": "ce9e278.781eed8",
|
|
"type": "ui_group",
|
|
"name": "Information",
|
|
"tab": "d9cd733b.ab73d",
|
|
"order": 5,
|
|
"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": "52d1b77.28369c8",
|
|
"type": "ui_group",
|
|
"z": "",
|
|
"name": "USB Backup",
|
|
"tab": "d9cd733b.ab73d",
|
|
"order": 6,
|
|
"disp": true,
|
|
"width": "6",
|
|
"collapse": true
|
|
},
|
|
{
|
|
"id": "a7d64879.38298",
|
|
"type": "ui_group",
|
|
"z": "",
|
|
"name": "Python Log",
|
|
"tab": "2489e51c.eed77a",
|
|
"order": 1,
|
|
"disp": true,
|
|
"width": "12",
|
|
"collapse": true
|
|
},
|
|
{
|
|
"id": "9e409235.73cd7",
|
|
"type": "ui_group",
|
|
"z": "",
|
|
"name": "Add a new network",
|
|
"tab": "1b49ae0f.602d6a",
|
|
"order": 2,
|
|
"disp": true,
|
|
"width": "6",
|
|
"collapse": false
|
|
},
|
|
{
|
|
"id": "919923a3.d10868",
|
|
"type": "ui_group",
|
|
"z": "",
|
|
"name": "Current Connection",
|
|
"tab": "1b49ae0f.602d6a",
|
|
"order": 1,
|
|
"disp": true,
|
|
"width": "6",
|
|
"collapse": false
|
|
},
|
|
{
|
|
"id": "1b49ae0f.602d6a",
|
|
"type": "ui_tab",
|
|
"z": "",
|
|
"name": "Wifi",
|
|
"icon": "wifi",
|
|
"order": 8,
|
|
"disabled": false,
|
|
"hidden": false
|
|
},
|
|
{
|
|
"id": "2489e51c.eed77a",
|
|
"type": "ui_tab",
|
|
"z": "",
|
|
"name": "Administration",
|
|
"icon": "dashboard",
|
|
"order": 9,
|
|
"disabled": false,
|
|
"hidden": false
|
|
},
|
|
{
|
|
"id": "b0fb559a.6966a8",
|
|
"type": "ui_tab",
|
|
"z": "",
|
|
"name": "Hardware Settings",
|
|
"icon": "fa-cogs",
|
|
"disabled": false,
|
|
"hidden": false
|
|
},
|
|
{
|
|
"id": "bf163cd3.8abe38",
|
|
"type": "ui_spacer",
|
|
"name": "spacer",
|
|
"group": "b7919ae2.c01788",
|
|
"order": 2,
|
|
"width": 5,
|
|
"height": 1
|
|
},
|
|
{
|
|
"id": "bfec963a.5a4988",
|
|
"type": "ui_spacer",
|
|
"name": "spacer",
|
|
"group": "9e409235.73cd7",
|
|
"order": 4,
|
|
"width": 6,
|
|
"height": 1
|
|
},
|
|
{
|
|
"id": "91dfe8eb.658218",
|
|
"type": "ui_spacer",
|
|
"name": "spacer",
|
|
"group": "9e409235.73cd7",
|
|
"order": 5,
|
|
"width": 6,
|
|
"height": 1
|
|
},
|
|
{
|
|
"id": "fc5e4e6f.5b1c8",
|
|
"type": "ui_group",
|
|
"z": "",
|
|
"name": "GPS Status",
|
|
"tab": "737ec584.2eea2c",
|
|
"order": 5,
|
|
"disp": true,
|
|
"width": 10,
|
|
"collapse": false
|
|
},
|
|
{
|
|
"id": "d9e6e70f.97c318",
|
|
"type": "ui_spacer",
|
|
"name": "spacer",
|
|
"group": "3e1ba03d.f01d8",
|
|
"order": 5,
|
|
"width": 10,
|
|
"height": 1
|
|
},
|
|
{
|
|
"id": "80153260.896c98",
|
|
"type": "ui_spacer",
|
|
"name": "spacer",
|
|
"group": "3e1ba03d.f01d8",
|
|
"order": 7,
|
|
"width": 10,
|
|
"height": 1
|
|
},
|
|
{
|
|
"id": "20a51061.5d6be8",
|
|
"type": "ui_spacer",
|
|
"name": "spacer",
|
|
"group": "fc5e4e6f.5b1c8",
|
|
"order": 3,
|
|
"width": 1,
|
|
"height": 1
|
|
},
|
|
{
|
|
"id": "f3ca28ef.4df0a8",
|
|
"type": "ui_group",
|
|
"z": "",
|
|
"name": "Shutdown",
|
|
"tab": "3a6bb13f.c9703e",
|
|
"order": 7,
|
|
"disp": true,
|
|
"width": 4,
|
|
"collapse": false
|
|
},
|
|
{
|
|
"id": "3dfd8a69.69ed56",
|
|
"type": "ui_spacer",
|
|
"name": "spacer",
|
|
"group": "f3ca28ef.4df0a8",
|
|
"order": 3,
|
|
"width": 4,
|
|
"height": 1
|
|
},
|
|
{
|
|
"id": "cfe2288f.a8862",
|
|
"type": "ui_group",
|
|
"z": "",
|
|
"name": "GPS Status",
|
|
"tab": "d9cd733b.ab73d",
|
|
"order": 8,
|
|
"disp": true,
|
|
"width": "6",
|
|
"collapse": false
|
|
},
|
|
{
|
|
"id": "934b51b3.585b28",
|
|
"type": "ui_spacer",
|
|
"name": "spacer",
|
|
"group": "abeb6dad.635a2",
|
|
"order": 9,
|
|
"width": 1,
|
|
"height": 1
|
|
},
|
|
{
|
|
"id": "626cde70.2c2918",
|
|
"type": "ui_spacer",
|
|
"name": "spacer",
|
|
"group": "46be9c86.dea684",
|
|
"order": 4,
|
|
"width": 3,
|
|
"height": 1
|
|
},
|
|
{
|
|
"id": "6bacc64.0a25c38",
|
|
"type": "ui_spacer",
|
|
"name": "spacer",
|
|
"group": "46be9c86.dea684",
|
|
"order": 6,
|
|
"width": 3,
|
|
"height": 1
|
|
},
|
|
{
|
|
"id": "cee2ca2f.3dfe18",
|
|
"type": "ui_group",
|
|
"z": "",
|
|
"name": "Default",
|
|
"tab": "b0fb559a.6966a8",
|
|
"order": 1,
|
|
"disp": false,
|
|
"width": "6",
|
|
"collapse": false
|
|
},
|
|
{
|
|
"id": "f0eab4f4.40bc08",
|
|
"type": "ui_spacer",
|
|
"name": "spacer",
|
|
"group": "4248342d.e55fac",
|
|
"order": 2,
|
|
"width": 5,
|
|
"height": 1
|
|
},
|
|
{
|
|
"id": "13f34bee.279a44",
|
|
"type": "ui_spacer",
|
|
"name": "spacer",
|
|
"group": "1be83144.4fe4bf",
|
|
"order": 5,
|
|
"width": 12,
|
|
"height": 1
|
|
},
|
|
{
|
|
"id": "a862072d.0ec1e8",
|
|
"type": "ui_spacer",
|
|
"name": "spacer",
|
|
"group": "1be83144.4fe4bf",
|
|
"order": 6,
|
|
"width": 3,
|
|
"height": 1
|
|
},
|
|
{
|
|
"id": "ac09f674.27d14",
|
|
"type": "ui_spacer",
|
|
"name": "spacer",
|
|
"group": "1be83144.4fe4bf",
|
|
"order": 8,
|
|
"width": 3,
|
|
"height": 1
|
|
},
|
|
{
|
|
"id": "bbc09199.173ee",
|
|
"type": "ui_spacer",
|
|
"name": "spacer",
|
|
"group": "1be83144.4fe4bf",
|
|
"order": 9,
|
|
"width": 12,
|
|
"height": 1
|
|
},
|
|
{
|
|
"id": "4b444d98.a84854",
|
|
"type": "ui_spacer",
|
|
"name": "spacer",
|
|
"group": "1be83144.4fe4bf",
|
|
"order": 10,
|
|
"width": 12,
|
|
"height": 1
|
|
},
|
|
{
|
|
"id": "5b88d5d8.baac64",
|
|
"type": "ui_spacer",
|
|
"name": "spacer",
|
|
"group": "1be83144.4fe4bf",
|
|
"order": 11,
|
|
"width": 4,
|
|
"height": 1
|
|
},
|
|
{
|
|
"id": "df135e23.9d5ba",
|
|
"type": "ui_spacer",
|
|
"name": "spacer",
|
|
"group": "1be83144.4fe4bf",
|
|
"order": 13,
|
|
"width": 4,
|
|
"height": 1
|
|
},
|
|
{
|
|
"id": "6d0cfbad.fb566c",
|
|
"type": "ui_spacer",
|
|
"name": "spacer",
|
|
"group": "1be83144.4fe4bf",
|
|
"order": 14,
|
|
"width": 12,
|
|
"height": 1
|
|
},
|
|
{
|
|
"id": "7d988743.b75b",
|
|
"type": "ui_spacer",
|
|
"name": "spacer",
|
|
"group": "1be83144.4fe4bf",
|
|
"order": 16,
|
|
"width": 8,
|
|
"height": 1
|
|
},
|
|
{
|
|
"id": "4e78af2d.90be7",
|
|
"type": "ui_ui_control",
|
|
"z": "eaae323a.31b3",
|
|
"name": "",
|
|
"events": "change",
|
|
"x": 440,
|
|
"y": 160,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"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": 430,
|
|
"y": 600,
|
|
"wires": [
|
|
[
|
|
"f0fb77cf.8f1c28"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "f0fb77cf.8f1c28",
|
|
"type": "ui_ui_control",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "",
|
|
"events": "change",
|
|
"x": 740,
|
|
"y": 600,
|
|
"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": 330,
|
|
"y": 120,
|
|
"wires": [
|
|
[
|
|
"bc503fa5.f46dd",
|
|
"2c8c45ab.610c0a",
|
|
"cef370c7.1f7a"
|
|
],
|
|
[],
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"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"
|
|
],
|
|
"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": 330,
|
|
"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": 340,
|
|
"y": 280,
|
|
"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": 590,
|
|
"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": 260,
|
|
"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": 330,
|
|
"y": 360,
|
|
"wires": [
|
|
[
|
|
"45e1912a.36a23",
|
|
"84ac8611.1a6ac8",
|
|
"eaf74a43.fa27d"
|
|
],
|
|
[],
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"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": 340,
|
|
"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"
|
|
],
|
|
"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"
|
|
],
|
|
"outputs": 1,
|
|
"x": 570,
|
|
"y": 300,
|
|
"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"
|
|
],
|
|
"outputs": 1,
|
|
"x": 570,
|
|
"y": 380,
|
|
"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": 100,
|
|
"y": 240,
|
|
"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": 2,
|
|
"width": 2,
|
|
"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 control",
|
|
"func": "#!/usr/bin/python\nimport smbus\n\nstate = msg[\"payload\"]\n\nbus = smbus.SMBus(1)\n\nDEVICE_ADDRESS = 0x0d\n\ntry:\n # command happens twice, for reasons\n if state == \"off\":\n bus.write_byte_data(DEVICE_ADDRESS, 0x08, 0x00)\n bus.write_byte_data(DEVICE_ADDRESS, 0x08, 0x00)\n if state == \"on\":\n bus.write_byte_data(DEVICE_ADDRESS, 0x08, 0x01)\n bus.write_byte_data(DEVICE_ADDRESS, 0x08, 0x01)\nexcept:\n pass",
|
|
"outputs": 1,
|
|
"x": 1110,
|
|
"y": 40,
|
|
"wires": [
|
|
[
|
|
"b7ab1ada.1f4158"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"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": 1290,
|
|
"y": 40,
|
|
"wires": [
|
|
[],
|
|
[],
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "bc503fa5.f46dd",
|
|
"type": "switch",
|
|
"z": "1371dec5.76e671",
|
|
"name": "",
|
|
"property": "payload",
|
|
"propertyType": "msg",
|
|
"rules": [
|
|
{
|
|
"t": "gt",
|
|
"v": "40",
|
|
"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": 130,
|
|
"y": 60,
|
|
"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": 800,
|
|
"y": 400,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "f59a2f0d.5e9af",
|
|
"type": "ui_numeric",
|
|
"z": "baa1e3d9.cb29d",
|
|
"name": "acq_minimum_mesh",
|
|
"label": "Min fraction size (μm)",
|
|
"tooltip": "",
|
|
"group": "404c301a.19c4e",
|
|
"order": 1,
|
|
"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": 2,
|
|
"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": 240,
|
|
"wires": [
|
|
[
|
|
"fb887036.12429"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"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: {tab:'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,
|
|
"resendOnRefresh": false,
|
|
"templateScope": "local",
|
|
"x": 130,
|
|
"y": 100,
|
|
"wires": [
|
|
[
|
|
"4e78af2d.90be7"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"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: {tab:'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,
|
|
"resendOnRefresh": false,
|
|
"templateScope": "local",
|
|
"x": 130,
|
|
"y": 140,
|
|
"wires": [
|
|
[
|
|
"4e78af2d.90be7"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"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: {tab:'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,
|
|
"resendOnRefresh": false,
|
|
"templateScope": "local",
|
|
"x": 140,
|
|
"y": 180,
|
|
"wires": [
|
|
[
|
|
"4e78af2d.90be7"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"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: {tab:'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,
|
|
"resendOnRefresh": false,
|
|
"templateScope": "local",
|
|
"x": 160,
|
|
"y": 220,
|
|
"wires": [
|
|
[
|
|
"4e78af2d.90be7"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "811cd88c.daf528",
|
|
"type": "ui_button",
|
|
"z": "bccd1f23.87219",
|
|
"name": "down",
|
|
"group": "fbd92986.1028c8",
|
|
"order": 5,
|
|
"width": 4,
|
|
"height": 1,
|
|
"passthru": true,
|
|
"label": "",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "",
|
|
"icon": "fa-angle-double-down fa-3x",
|
|
"payload": "DOWN",
|
|
"payloadType": "str",
|
|
"topic": "actuator/focus",
|
|
"x": 190,
|
|
"y": 660,
|
|
"wires": [
|
|
[
|
|
"65ad39d.b6d4d48"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "edda4df4.76de2",
|
|
"type": "ui_button",
|
|
"z": "bccd1f23.87219",
|
|
"name": "up",
|
|
"group": "fbd92986.1028c8",
|
|
"order": 1,
|
|
"width": 4,
|
|
"height": 1,
|
|
"passthru": false,
|
|
"label": "",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "",
|
|
"icon": "fa-angle-double-up fa-3x",
|
|
"payload": "UP",
|
|
"payloadType": "str",
|
|
"topic": "actuator/focus",
|
|
"x": 190,
|
|
"y": 620,
|
|
"wires": [
|
|
[
|
|
"65ad39d.b6d4d48"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "68962547.34a67c",
|
|
"type": "ui_text_input",
|
|
"z": "bccd1f23.87219",
|
|
"name": "pump_manual_volume",
|
|
"label": "Volume to pass (ml)",
|
|
"tooltip": "Tiny values are accepted down to 0.001mL",
|
|
"group": "707d9797.c8e798",
|
|
"order": 3,
|
|
"width": 3,
|
|
"height": 1,
|
|
"passthru": true,
|
|
"mode": "text",
|
|
"delay": "0",
|
|
"topic": "pump_manual_volume",
|
|
"x": 510,
|
|
"y": 380,
|
|
"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.5",
|
|
"max": "100",
|
|
"step": "0.5",
|
|
"x": 540,
|
|
"y": 340,
|
|
"wires": [
|
|
[
|
|
"dc48dc42.98d18"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "c1b1469.9650eb8",
|
|
"type": "ui_template",
|
|
"z": "eaae323a.31b3",
|
|
"group": "777a7c33.fcd804",
|
|
"name": "System Monitoring",
|
|
"order": 1,
|
|
"width": 4,
|
|
"height": 4,
|
|
"format": "<md-button ng-click=\"send({payload: {tab:'System Monitoring'}})\" style=\"height:100%;\">\n <i class=\"fa fa-thermometer-full fa-5x\"></i>\n <div style=\"margin-top:30px;\">System Monitoring</div>\n</md-button>",
|
|
"storeOutMessages": true,
|
|
"fwdInMessages": true,
|
|
"resendOnRefresh": false,
|
|
"templateScope": "local",
|
|
"x": 130,
|
|
"y": 260,
|
|
"wires": [
|
|
[
|
|
"4e78af2d.90be7"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"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: {tab:'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": [
|
|
[
|
|
"4e78af2d.90be7"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"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": "0",
|
|
"topic": "sample_ship",
|
|
"x": 670,
|
|
"y": 80,
|
|
"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": 6,
|
|
"width": 0,
|
|
"height": 0,
|
|
"passthru": true,
|
|
"multiple": false,
|
|
"options": [
|
|
{
|
|
"label": "High Speed Net",
|
|
"value": "net_hsn",
|
|
"type": "str"
|
|
},
|
|
{
|
|
"label": "Tara Decknet",
|
|
"value": "net_decknet",
|
|
"type": "str"
|
|
},
|
|
{
|
|
"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": 630,
|
|
"y": 200,
|
|
"wires": [
|
|
[
|
|
"9f501f49.45645",
|
|
"46eb1bf8.3dc5f4"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "82c5fc77.59c97",
|
|
"type": "ui_text_input",
|
|
"z": "b771c342.49603",
|
|
"name": "sample_operator",
|
|
"label": "Name of the operator*",
|
|
"tooltip": "",
|
|
"group": "3e1ba03d.f01d8",
|
|
"order": 3,
|
|
"width": 0,
|
|
"height": 0,
|
|
"passthru": true,
|
|
"mode": "text",
|
|
"delay": "0",
|
|
"topic": "sample_operator",
|
|
"x": 650,
|
|
"y": 160,
|
|
"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": "0",
|
|
"topic": "sample_project",
|
|
"x": 660,
|
|
"y": 40,
|
|
"wires": [
|
|
[
|
|
"9f501f49.45645"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "94eb4221.9b92c",
|
|
"type": "ui_text_input",
|
|
"z": "b771c342.49603",
|
|
"name": "sample_id",
|
|
"label": "Station ID*",
|
|
"tooltip": "",
|
|
"group": "3e1ba03d.f01d8",
|
|
"order": 4,
|
|
"width": 0,
|
|
"height": 0,
|
|
"passthru": true,
|
|
"mode": "text",
|
|
"delay": "0",
|
|
"topic": "sample_id",
|
|
"x": 670,
|
|
"y": 120,
|
|
"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": 1080,
|
|
"y": 200,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "cc0ca68b.4263a8",
|
|
"type": "ui_dropdown",
|
|
"z": "baa1e3d9.cb29d",
|
|
"name": "acq_celltype",
|
|
"label": "Flowcell thickness*",
|
|
"tooltip": "",
|
|
"place": "Select option",
|
|
"group": "4322c187.e73e5",
|
|
"order": 6,
|
|
"width": 5,
|
|
"height": 1,
|
|
"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": 200,
|
|
"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": 900,
|
|
"y": 200,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "222c851d.5d0a3a",
|
|
"type": "ui_ui_control",
|
|
"z": "b771c342.49603",
|
|
"name": "",
|
|
"events": "change",
|
|
"x": 400,
|
|
"y": 580,
|
|
"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": 710,
|
|
"y": 700,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "986d960a.c75908",
|
|
"type": "function",
|
|
"z": "b771c342.49603",
|
|
"name": "Check form",
|
|
"func": "var sample_project= global.get(\"sample_project\");\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\");\nif (sample_project === undefined || sample_project === \"\") {\n msg.topic = \"Missing entry :\"\n msg.payload = \"Sample project\"\n return [null, msg];\n}\n\nelse if (sample_id === undefined || sample_id === \"\") {\n msg.topic = \"Missing entry :\"\n msg.payload = \"Sample ID\"\n return [null, msg];\n}\n\nelse if (sample_operator === undefined || sample_operator === \"\") {\n msg.topic = \"Missing entry :\"\n msg.payload = \"Sample operator\"\n return [null, msg];\n}\n\nelse if (sample_sampling_gear === undefined || sample_sampling_gear === \"\") {\n msg.topic = \"Missing entry :\"\n msg.payload = \"Sample sampling gear\"\n return [null, msg];\n}\n\nelse if (object_lat === undefined || object_lat === null) {\n msg.topic = \"Missing entry :\"\n msg.payload = \"Latitude of sample\"\n return [null, msg];\n}\n\nelse if (object_lon === undefined || object_lon === null) {\n msg.topic = \"Missing entry :\"\n msg.payload = \"Longitude of sample\"\n return [null, msg];\n}\n\nelse if (object_date === undefined || object_date === \"\") {\n msg.topic = \"Missing entry :\"\n msg.payload = \"Date of sample\"\n return [null, msg];\n}\n\nelse if (object_time === undefined || object_time === \"\") {\n msg.topic = \"Missing entry :\"\n msg.payload = \"Time of sample\"\n return [null, msg];\n}\nelse if (sample_sampling_gear.startsWith(\"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 var sample_gear_net_opening = global.get(\"sample_gear_net_opening\");\n\n if (object_lat_end === undefined || object_lat_end === null) {\n msg.topic = \"Missing entry :\"\n msg.payload = \"Latitude of retrieval\"\n return [null, msg];\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 return [null, msg];\n }\n \n else if (object_date_end === undefined || object_date_end === \"\") {\n msg.topic = \"Missing entry :\"\n msg.payload = \"Date of retrieval\"\n return [null, msg];\n }\n \n else if (object_time_end === undefined || object_time_end === \"\") {\n msg.topic = \"Missing entry :\"\n msg.payload = \"Time of retrieval\"\n return [null, msg];\n }\n \n else if (sample_gear_net_opening === undefined || sample_gear_net_opening === \"\") {\n msg.topic = \"Missing entry :\"\n msg.payload = \"Net opening dimension\"\n return [null, msg];\n }\n \n if (sample_sampling_gear == \"net_decknet\"){\n var sample_total_volume = global.get(\"sample_total_volume\");\n if (sample_total_volume === undefined || sample_total_volume === \"\") {\n msg.topic = \"Missing entry :\"\n msg.payload = \"Decknet flowmeter readings\"\n return [null, msg];\n }\n }\n}\nmsg.topic = \"config_save\"\nmsg.payload={\"tab\":\"Optic Configuration\"};\n\nreturn [msg, null];",
|
|
"outputs": 2,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 410,
|
|
"y": 640,
|
|
"wires": [
|
|
[
|
|
"726a7822.cd6298",
|
|
"e2b277c1.07283",
|
|
"9a18a4b4.178448"
|
|
],
|
|
[
|
|
"52f6b103.1efb6"
|
|
]
|
|
],
|
|
"outputLabels": [
|
|
"message",
|
|
"error"
|
|
]
|
|
},
|
|
{
|
|
"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": 250,
|
|
"y": 940,
|
|
"wires": [
|
|
[
|
|
"258b4562.9f778a",
|
|
"54e37580.fdc31c",
|
|
"cc21ca16.b92928",
|
|
"4a4de52c.cf2884",
|
|
"35ad311f.344c76"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "726a7822.cd6298",
|
|
"type": "ui_ui_control",
|
|
"z": "b771c342.49603",
|
|
"name": "",
|
|
"events": "change",
|
|
"x": 700,
|
|
"y": 620,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "6c792043.b6ff9",
|
|
"type": "ui_ui_control",
|
|
"z": "bccd1f23.87219",
|
|
"name": "",
|
|
"events": "change",
|
|
"x": 560,
|
|
"y": 1040,
|
|
"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": 570,
|
|
"y": 1120,
|
|
"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 return [null, msg];\n}\n\nmsg.topic = \"Change Tab\";\nmsg.payload={\"tab\":\"Fluidic Acquisition\"};\nreturn [msg, null];",
|
|
"outputs": 2,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 330,
|
|
"y": 1080,
|
|
"wires": [
|
|
[
|
|
"6c792043.b6ff9",
|
|
"326a1d95.ca21aa"
|
|
],
|
|
[
|
|
"902429eb.ceacb8"
|
|
]
|
|
],
|
|
"outputLabels": [
|
|
"message",
|
|
"error"
|
|
]
|
|
},
|
|
{
|
|
"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": "fa-rotate-left fa-2x",
|
|
"payload": "BACKWARD",
|
|
"payloadType": "str",
|
|
"topic": "actuator/pump",
|
|
"x": 160,
|
|
"y": 260,
|
|
"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": "fa-rotate-right fa-2x",
|
|
"payload": "FORWARD",
|
|
"payloadType": "str",
|
|
"topic": "actuator/pump",
|
|
"x": 160,
|
|
"y": 300,
|
|
"wires": [
|
|
[
|
|
"3cb96380.e575ec"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "cc966678.da8d08",
|
|
"type": "ui_dropdown",
|
|
"z": "bccd1f23.87219",
|
|
"name": "acq_fnumber_objective",
|
|
"label": "M12 Lens*",
|
|
"tooltip": "",
|
|
"place": "Select option",
|
|
"group": "4248342d.e55fac",
|
|
"order": 3,
|
|
"width": 0,
|
|
"height": 0,
|
|
"passthru": true,
|
|
"multiple": false,
|
|
"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": 1190,
|
|
"y": 80,
|
|
"wires": [
|
|
[
|
|
"328cec46.09e40c"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "9b515beb.4aea48",
|
|
"type": "ui_template",
|
|
"z": "bccd1f23.87219",
|
|
"group": "4248342d.e55fac",
|
|
"name": "Magnification",
|
|
"order": 4,
|
|
"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": 1460,
|
|
"y": 140,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "8038414a.34461",
|
|
"type": "function",
|
|
"z": "bccd1f23.87219",
|
|
"name": "Calculate optics",
|
|
"func": "var acq_fnumber_objective = String(global.get(\"acq_fnumber_objective\"));\nvar acq_camera = global.get(\"acq_camera\")\n\n// Those values needs to be recalculated, they are not good!\nif (acq_camera == \"HQ Camera\"){\n switch(acq_fnumber_objective) {\n case \"25\":\n acq_magnification= 0.6;\n process_pixel= 1.56;\n sug_min= 60;\n sug_max= 670;\n sug_flowrate= 3;\n break;\n case \"16\":\n acq_magnification= 1.6;\n process_pixel= 1;\n sug_min= 40;\n sug_max= 430;\n sug_flowrate= 2.4;\n break;\n case \"12\":\n acq_magnification= 1.20;\n process_pixel= 0.79;\n sug_min= 30;\n sug_max= 340;\n sug_flowrate= 1.25;\n break;\n case \"8\":\n acq_magnification= 1.78;\n process_pixel= 0.53;\n sug_min= 20;\n sug_max= 230;\n sug_flowrate= 0.42;\n break;\n case \"6\":\n acq_magnification= 2.36;\n process_pixel= 0.41;\n sug_min= 15;\n sug_max= 170;\n sug_flowrate= 0.32;\n break;\n }\n}\nelse if (acq_camera == \"Camera v2.1\"){\n switch(acq_fnumber_objective) {\n case \"25\":\n acq_magnification= 0.6;\n process_pixel= 1.86;\n sug_min= 60;\n sug_max= 670;\n sug_flowrate= 3;\n break;\n case \"16\":\n acq_magnification= 1.6;\n process_pixel= 0.7;\n sug_min= 40;\n sug_max= 430;\n sug_flowrate= 2.4;\n break;\n case \"12\":\n acq_magnification= 1.20;\n process_pixel= 0.94;\n sug_min= 30;\n sug_max= 340;\n sug_flowrate= 1.25;\n break;\n case \"8\":\n acq_magnification= 1.78;\n process_pixel= 0.63;\n sug_min= 20;\n sug_max= 230;\n sug_flowrate= 0.42;\n break;\n case \"6\":\n acq_magnification= 2.36;\n process_pixel= 0.48;\n sug_min= 15;\n sug_max= 170;\n sug_flowrate= 0.32;\n break;\n }\n}else {\n acq_magnification= \"ERROR\";\n process_pixel= \"ERROR\";\n sug_min= \"ERROR\";\n sug_max= \"ERROR\";\n sug_flowrate= \"ERROR\";\n}\n\nglobal.set(\"acq_magnification\",acq_magnification);\nglobal.set(\"process_pixel\",process_pixel);\n\nreturn [{payload: acq_magnification}, {payload: process_pixel}, {payload: sug_min}, {payload: sug_max}, {payload: sug_flowrate}];",
|
|
"outputs": 5,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 1200,
|
|
"y": 180,
|
|
"wires": [
|
|
[
|
|
"9b515beb.4aea48"
|
|
],
|
|
[
|
|
"3d2360ad.e41e7"
|
|
],
|
|
[
|
|
"8e66977b.9166a8"
|
|
],
|
|
[
|
|
"26b32f2c.c64fc"
|
|
],
|
|
[]
|
|
],
|
|
"inputLabels": [
|
|
"acq_fnumber_objective"
|
|
],
|
|
"outputLabels": [
|
|
"acq_magnification",
|
|
"process_pixel",
|
|
"sug_min",
|
|
"sug_max",
|
|
"sug_flowrate"
|
|
]
|
|
},
|
|
{
|
|
"id": "3d2360ad.e41e7",
|
|
"type": "ui_template",
|
|
"z": "bccd1f23.87219",
|
|
"group": "4248342d.e55fac",
|
|
"name": "process_pixel",
|
|
"order": 5,
|
|
"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": 1460,
|
|
"y": 180,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "8e66977b.9166a8",
|
|
"type": "ui_template",
|
|
"z": "bccd1f23.87219",
|
|
"group": "4248342d.e55fac",
|
|
"name": "min_size",
|
|
"order": 6,
|
|
"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": 1440,
|
|
"y": 220,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "26b32f2c.c64fc",
|
|
"type": "ui_template",
|
|
"z": "bccd1f23.87219",
|
|
"group": "4248342d.e55fac",
|
|
"name": "max_size",
|
|
"order": 7,
|
|
"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": 1440,
|
|
"y": 260,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"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": 1280,
|
|
"y": 700,
|
|
"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": 240,
|
|
"y": 580,
|
|
"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": 240,
|
|
"y": 640,
|
|
"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": 140,
|
|
"y": 1040,
|
|
"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": 140,
|
|
"y": 1080,
|
|
"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": 1140,
|
|
"y": 700,
|
|
"wires": [
|
|
[
|
|
"d0c5b57d.590818"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "29be525e.0c87fe",
|
|
"type": "ui_template",
|
|
"z": "baa1e3d9.cb29d",
|
|
"group": "b5d61bc7.54fe48",
|
|
"name": "Show Metadata",
|
|
"order": 9,
|
|
"width": 0,
|
|
"height": 0,
|
|
"format": "<div>\n <table style=\"text-align: center; width:100%\">\n <tr style=\"vertical-align: top\">\n <td>\n <h2>Sample</h2>\n <p><strong>id:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sample_id\"></span></p>\n <p><strong>project:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sample_project\"></span></p>\n <p><strong>ship:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sample_ship\"></span></p>\n <p><strong>operator:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sample_operator\"></span></p>\n <p><strong>sampling gear:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sample_sampling_gear\"></span></p>\n <p><strong>concentrated volume:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sample_concentrated_sample_volume\"></span></p>\n <p><strong>gear net opening:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sample_gear_net_opening\"></span></p>\n <p><strong>total volume filtered:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sample_total_volume\"></span></p>\n </td>\n <td>\n <h2>Acquisition</h2>\n <p><strong>id:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_id\"></span></p>\n <p><strong>instrument:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_instrument\"></span></p>\n <p><strong>instrument id:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_instrument_id\"></span></p>\n <p><strong>camera:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_camera\"></span></p>\n <p><strong>celltype:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_celltype\"></span></p>\n <p><strong>minimum mesh:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_minimum_mesh\"></span></p>\n <p><strong>maximum mesh:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_maximum_mesh\"></span></p>\n <p><strong>min esd:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_min_esd\"></span></p>\n <p><strong>max esd:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_max_esd\"></span></p>\n <p><strong>volume:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_volume\"></span></p>\n <p><strong>magnification:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_magnification\"></span></p>\n <p><strong>fnumber objective:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_fnumber_objective\"></span></p>\n <p><strong>software:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_software\"></span></p>\n </td>\n </tr>\n <tr style=\"vertical-align: top\">\n <td>\n <h2>Object</h2>\n <p><strong>latitude:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_lat\"></span></p>\n <p><strong>longitude:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_lon\"></span></p>\n <p><strong>latitude end:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_lat_end\"></span></p>\n <p><strong>longitude end:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_lon_end\"></span></p>\n <p><strong>date:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_date\"></span></p>\n <p><strong>time:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_time\"></span></p>\n <p><strong>date end:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_date_end\"></span></p>\n <p><strong>time end:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_time_end\"></span></p>\n <p><strong>depth min:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_depth_min\"></span></p>\n <p><strong>depth max:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_depth_max\"></span></p>\n </td>\n <td>\n <h2>Process</h2>\n <p><strong>pixel:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.process_pixel\"></span></p>\n <p><strong>id:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.process_id\"></span></p>\n </td>\n </tr>\n </table>\n</div>",
|
|
"storeOutMessages": false,
|
|
"fwdInMessages": false,
|
|
"resendOnRefresh": false,
|
|
"templateScope": "local",
|
|
"x": 1160,
|
|
"y": 420,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "cbb8afed.0a026",
|
|
"type": "rpi-gpio out",
|
|
"z": "bccd1f23.87219",
|
|
"name": "LED Output",
|
|
"pin": "40",
|
|
"set": true,
|
|
"level": "0",
|
|
"freq": "",
|
|
"out": "out",
|
|
"x": 550,
|
|
"y": 120,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "3cb96380.e575ec",
|
|
"type": "function",
|
|
"z": "bccd1f23.87219",
|
|
"name": "pump",
|
|
"func": "var 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 return [null, msg];\n}\nelse if (flowrate === undefined || flowrate === \"\" || flowrate === null) {\n msg.topic = \"Missing entry :\"\n msg.payload = \"Flowrate\";\n return [null, msg];\n}\nelse {\n msg.topic = \"actuator/pump\";\n // msg.payload is FORWARD or BACKWARD here\n msg.payload={\"action\":\"move\", \n \"direction\":msg.payload,\n \"volume\":manual_volume,\n \"flowrate\":flowrate};\n}\nreturn [msg, null];",
|
|
"outputs": 2,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 350,
|
|
"y": 280,
|
|
"wires": [
|
|
[
|
|
"bdc8ce57.de1f08"
|
|
],
|
|
[
|
|
"8bcce348.efc1a"
|
|
]
|
|
],
|
|
"inputLabels": [
|
|
"direction"
|
|
],
|
|
"outputLabels": [
|
|
"message",
|
|
"error"
|
|
]
|
|
},
|
|
{
|
|
"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": 550,
|
|
"y": 280,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "bdc8ce57.de1f08",
|
|
"type": "mqtt out",
|
|
"z": "bccd1f23.87219",
|
|
"name": "",
|
|
"topic": "",
|
|
"qos": "",
|
|
"retain": "",
|
|
"broker": "8dc3722c.06efa8",
|
|
"x": 530,
|
|
"y": 220,
|
|
"wires": []
|
|
},
|
|
{
|
|
"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": 660,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "65ad39d.b6d4d48",
|
|
"type": "function",
|
|
"z": "bccd1f23.87219",
|
|
"name": "focus",
|
|
"func": "var distance = global.get(\"focus_distance\");\n\nif (distance === undefined || distance === \"\" || distance === null) {\n msg.topic = \"Missing entry :\"\n msg.payload = \"Distance\";\n return [null, msg]\n}else {\n distance = global.get(\"focus_distance\");\n // msg.payload is UP or DOWN here\n msg.payload={\"action\":\"move\", \n \"direction\":msg.payload,\n \"distance\":(distance/1000)};\n}\nreturn [msg, null];",
|
|
"outputs": 2,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 370,
|
|
"y": 640,
|
|
"wires": [
|
|
[
|
|
"62030521.88317c"
|
|
],
|
|
[
|
|
"d71d224f.0585d8"
|
|
]
|
|
],
|
|
"inputLabels": [
|
|
"direction"
|
|
],
|
|
"outputLabels": [
|
|
"message",
|
|
"error"
|
|
]
|
|
},
|
|
{
|
|
"id": "1962d999.4a97e6",
|
|
"type": "ui_button",
|
|
"z": "bccd1f23.87219",
|
|
"name": "stop focus",
|
|
"group": "fbd92986.1028c8",
|
|
"order": 9,
|
|
"width": 0,
|
|
"height": 0,
|
|
"passthru": true,
|
|
"label": " STOP FOCUS",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "#AD1625",
|
|
"icon": "fa-pause fa-2x",
|
|
"payload": "{\"action\":\"stop\"}",
|
|
"payloadType": "json",
|
|
"topic": "actuator/focus",
|
|
"x": 170,
|
|
"y": 500,
|
|
"wires": [
|
|
[
|
|
"62030521.88317c"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "62030521.88317c",
|
|
"type": "mqtt out",
|
|
"z": "bccd1f23.87219",
|
|
"name": "",
|
|
"topic": "",
|
|
"qos": "",
|
|
"retain": "",
|
|
"broker": "8dc3722c.06efa8",
|
|
"x": 650,
|
|
"y": 580,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "3bd43039.bc5fb8",
|
|
"type": "ui_button",
|
|
"z": "bccd1f23.87219",
|
|
"name": "",
|
|
"group": "fbd92986.1028c8",
|
|
"order": 3,
|
|
"width": 3,
|
|
"height": 1,
|
|
"passthru": false,
|
|
"label": "UP 1mm",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "",
|
|
"icon": "fa-angle-up fa-3x",
|
|
"payload": "{\"action\":\"move\",\"direction\":\"UP\",\"distance\":1}",
|
|
"payloadType": "json",
|
|
"topic": "actuator/focus",
|
|
"x": 180,
|
|
"y": 540,
|
|
"wires": [
|
|
[
|
|
"62030521.88317c"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "c0663029.2d03b",
|
|
"type": "ui_button",
|
|
"z": "bccd1f23.87219",
|
|
"name": "",
|
|
"group": "fbd92986.1028c8",
|
|
"order": 7,
|
|
"width": 3,
|
|
"height": 1,
|
|
"passthru": false,
|
|
"label": "DOWN 1mm",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "",
|
|
"icon": "fa-angle-down fa-3x",
|
|
"payload": "{\"action\":\"move\",\"direction\":\"DOWN\",\"distance\":1}",
|
|
"payloadType": "json",
|
|
"topic": "actuator/focus",
|
|
"x": 170,
|
|
"y": 580,
|
|
"wires": [
|
|
[
|
|
"62030521.88317c"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "69d4ea6c.4c1e2c",
|
|
"type": "ui_slider",
|
|
"z": "bccd1f23.87219",
|
|
"name": "focus_distance",
|
|
"label": "Focus Distance",
|
|
"tooltip": "in µm",
|
|
"group": "fbd92986.1028c8",
|
|
"order": 4,
|
|
"width": 0,
|
|
"height": 0,
|
|
"passthru": true,
|
|
"outs": "end",
|
|
"topic": "focus_distance",
|
|
"min": "25",
|
|
"max": "2000",
|
|
"step": "25",
|
|
"x": 540,
|
|
"y": 420,
|
|
"wires": [
|
|
[
|
|
"dc48dc42.98d18"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "71f55a58.d7eaf4",
|
|
"type": "inject",
|
|
"z": "bccd1f23.87219",
|
|
"name": "Default: 500µm",
|
|
"props": [
|
|
{
|
|
"p": "payload"
|
|
}
|
|
],
|
|
"repeat": "",
|
|
"crontab": "",
|
|
"once": true,
|
|
"onceDelay": "0.5",
|
|
"topic": "",
|
|
"payload": "500",
|
|
"payloadType": "num",
|
|
"x": 120,
|
|
"y": 420,
|
|
"wires": [
|
|
[
|
|
"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": "off",
|
|
"payloadType": "str",
|
|
"x": 140,
|
|
"y": 120,
|
|
"wires": [
|
|
[
|
|
"f0775525.cf806"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"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": 740,
|
|
"y": 720,
|
|
"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, 125µs by default",
|
|
"group": "8c38a81e.9897a8",
|
|
"order": 5,
|
|
"width": 0,
|
|
"height": 0,
|
|
"passthru": true,
|
|
"outs": "end",
|
|
"topic": "imager/image",
|
|
"min": "125",
|
|
"max": "1000",
|
|
"step": "1",
|
|
"x": 400,
|
|
"y": 800,
|
|
"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": 740,
|
|
"y": 800,
|
|
"wires": [
|
|
[
|
|
"845e06e1.0d812"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "845e06e1.0d812",
|
|
"type": "mqtt out",
|
|
"z": "bccd1f23.87219",
|
|
"name": "",
|
|
"topic": "",
|
|
"qos": "",
|
|
"retain": "",
|
|
"broker": "8dc3722c.06efa8",
|
|
"x": 1010,
|
|
"y": 840,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "2350e507.d4e302",
|
|
"type": "inject",
|
|
"z": "bccd1f23.87219",
|
|
"name": "Default: 125µs",
|
|
"props": [
|
|
{
|
|
"p": "payload"
|
|
}
|
|
],
|
|
"repeat": "",
|
|
"crontab": "",
|
|
"once": true,
|
|
"onceDelay": "1",
|
|
"topic": "",
|
|
"payload": "125",
|
|
"payloadType": "num",
|
|
"x": 120,
|
|
"y": 800,
|
|
"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": 130,
|
|
"y": 720,
|
|
"wires": [
|
|
[
|
|
"87f8732c.caf648"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "f782a471.447748",
|
|
"type": "inject",
|
|
"z": "bccd1f23.87219",
|
|
"name": "Default: 2mL/min",
|
|
"props": [
|
|
{
|
|
"p": "payload"
|
|
}
|
|
],
|
|
"repeat": "",
|
|
"crontab": "",
|
|
"once": true,
|
|
"onceDelay": "0.5",
|
|
"topic": "",
|
|
"payload": "2",
|
|
"payloadType": "num",
|
|
"x": 130,
|
|
"y": 340,
|
|
"wires": [
|
|
[
|
|
"34c81624.df1cea"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "73b8252a.5ca754",
|
|
"type": "inject",
|
|
"z": "bccd1f23.87219",
|
|
"name": "Default: 2mL",
|
|
"props": [
|
|
{
|
|
"p": "payload"
|
|
}
|
|
],
|
|
"repeat": "",
|
|
"crontab": "",
|
|
"once": true,
|
|
"onceDelay": "0.5",
|
|
"topic": "",
|
|
"payload": "2",
|
|
"payloadType": "num",
|
|
"x": 110,
|
|
"y": 380,
|
|
"wires": [
|
|
[
|
|
"68962547.34a67c"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "8ec68b82.17e3d8",
|
|
"type": "ui_button",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "Start segmentation",
|
|
"group": "abeb6dad.635a2",
|
|
"order": 10,
|
|
"width": 5,
|
|
"height": 1,
|
|
"passthru": false,
|
|
"label": "Start segmentation",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "",
|
|
"icon": "",
|
|
"payload": "{\"action\":\"segment\"}",
|
|
"payloadType": "json",
|
|
"topic": "segmenter/segment",
|
|
"x": 370,
|
|
"y": 460,
|
|
"wires": [
|
|
[
|
|
"33c28dc1.238002",
|
|
"c72a1064.1ec388"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "27be7971.b3fbce",
|
|
"type": "ui_button",
|
|
"z": "cb95299c.2817c8",
|
|
"d": true,
|
|
"name": "Stop segmentation",
|
|
"group": "abeb6dad.635a2",
|
|
"order": 8,
|
|
"width": 4,
|
|
"height": 1,
|
|
"passthru": true,
|
|
"label": "Stop segmentation",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "#AD1625",
|
|
"icon": "",
|
|
"payload": "{\"action\":\"stop\"}",
|
|
"payloadType": "json",
|
|
"topic": "segmenter/segment",
|
|
"x": 370,
|
|
"y": 520,
|
|
"wires": [
|
|
[
|
|
"16f3cef4.0acac9"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "16f3cef4.0acac9",
|
|
"type": "mqtt out",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "",
|
|
"topic": "",
|
|
"qos": "",
|
|
"retain": "",
|
|
"broker": "8dc3722c.06efa8",
|
|
"x": 850,
|
|
"y": 520,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "569154a.b53182c",
|
|
"type": "inject",
|
|
"z": "1371dec5.76e671",
|
|
"name": "once",
|
|
"props": [
|
|
{
|
|
"p": "payload"
|
|
}
|
|
],
|
|
"repeat": "",
|
|
"crontab": "",
|
|
"once": true,
|
|
"onceDelay": "",
|
|
"topic": "",
|
|
"payload": "start",
|
|
"payloadType": "str",
|
|
"x": 130,
|
|
"y": 620,
|
|
"wires": [
|
|
[
|
|
"452af41c.43940c"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "4b489713.ccde5",
|
|
"type": "ui_button",
|
|
"z": "baa1e3d9.cb29d",
|
|
"name": "",
|
|
"group": "4322c187.e73e5",
|
|
"order": 12,
|
|
"width": 5,
|
|
"height": 1,
|
|
"passthru": false,
|
|
"label": "Start Acquisition",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "",
|
|
"icon": "camera",
|
|
"payload": "",
|
|
"payloadType": "str",
|
|
"topic": "imager/image",
|
|
"x": 420,
|
|
"y": 500,
|
|
"wires": [
|
|
[
|
|
"c9f510c0.7d1328"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "c9f510c0.7d1328",
|
|
"type": "function",
|
|
"z": "baa1e3d9.cb29d",
|
|
"name": "Image control",
|
|
"func": "// Reset the number of images taken\nglobal.set('img_counter', 0);\n\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 imaging_pump_volume = global.get(\"imaging_pump_volume\");\nvar acq_id = global.get(\"acq_id\");\nvar nb_frame = global.get(\"nb_frame\");\nvar pump_direction = global.get(\"pump_direction\");\nvar sleep_before = global.get(\"sleep_before\");\nvar object_date = global.get(\"object_date\");\n\nif (acq_celltype === undefined || acq_celltype === \"\") {\n msg.topic = \"Missing entry :\";\n msg.payload = \"Type of the flowcell\";\n return [null, msg];\n} else if (acq_minimum_mesh === undefined || acq_minimum_mesh === \"\") {\n msg.topic = \"Missing entry :\";\n msg.payload = \"Lower fraction size\";\n return [null, msg];\n} else if (acq_maximum_mesh === undefined || acq_maximum_mesh === \"\") {\n msg.topic = \"Missing entry :\";\n msg.payload = \"Upper fraction size\";\n return [null, msg];\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 return [null, msg];\n} else if (acq_id === undefined || acq_id === \"\") {\n msg.topic = \"Missing entry :\";\n msg.payload = \"Acquisition ID\";\n return [null, msg];\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 return [null, msg];\n} else if (pump_direction === undefined || pump_direction === \"\" || pump_direction === null) {\n msg.topic = \"Missing entry :\";\n msg.payload = \"Pump direction\";\n return [null, msg];\n} else if (sleep_before === undefined || sleep_before === \"\" || sleep_before === null) {\n msg.topic = \"Missing entry :\";\n msg.payload = \"Delay before image\";\n return [null, msg];\n}else if (object_date === undefined || object_date === \"\" || object_date === null) {\n msg.topic = \"Missing entry :\";\n msg.payload = \"Object date\";\n return [null, msg];\n}\n\nmsg.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\nreturn [msg, null];",
|
|
"outputs": 2,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 640,
|
|
"y": 500,
|
|
"wires": [
|
|
[
|
|
"52ea7d01.711034",
|
|
"40c12463.a1f84c",
|
|
"a4abb1ae.2ae418"
|
|
],
|
|
[
|
|
"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": 890,
|
|
"y": 580,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "c3e50240.82aa58",
|
|
"type": "mqtt out",
|
|
"z": "baa1e3d9.cb29d",
|
|
"name": "",
|
|
"topic": "",
|
|
"qos": "",
|
|
"retain": "",
|
|
"broker": "8dc3722c.06efa8",
|
|
"x": 1130,
|
|
"y": 460,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "3a4450b1.4459a8",
|
|
"type": "ui_button",
|
|
"z": "baa1e3d9.cb29d",
|
|
"name": "Stop Acquisition",
|
|
"group": "4322c187.e73e5",
|
|
"order": 11,
|
|
"width": 5,
|
|
"height": 1,
|
|
"passthru": true,
|
|
"label": "STOP ACQUISITION",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "#AD1625",
|
|
"icon": "cancel",
|
|
"payload": "{\"action\":\"stop\"}",
|
|
"payloadType": "json",
|
|
"topic": "imager/image",
|
|
"x": 420,
|
|
"y": 540,
|
|
"wires": [
|
|
[
|
|
"d74210ef.edc15"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "d74210ef.edc15",
|
|
"type": "mqtt out",
|
|
"z": "baa1e3d9.cb29d",
|
|
"name": "",
|
|
"topic": "",
|
|
"qos": "",
|
|
"retain": "",
|
|
"broker": "8dc3722c.06efa8",
|
|
"x": 610,
|
|
"y": 540,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "bb62da8a.ebc328",
|
|
"type": "ui_switch",
|
|
"z": "baa1e3d9.cb29d",
|
|
"name": "Pump direction",
|
|
"label": "Pump direction",
|
|
"tooltip": "BACKWARD / FORWARD",
|
|
"group": "4322c187.e73e5",
|
|
"order": 9,
|
|
"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": 420,
|
|
"y": 580,
|
|
"wires": [
|
|
[
|
|
"6b2239f3.41fa3"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "52ea7d01.711034",
|
|
"type": "function",
|
|
"z": "baa1e3d9.cb29d",
|
|
"name": "Encapsulate config",
|
|
"func": "msg.payload = {\n\t\"action\": \"update_config\",\n\t\"config\": {\n \t\"description\": {\n \t\t\"sample_project\": \"Project's name\",\n \t\t\"sample_id\": \"Sample ID\",\n \t\t\"sample_uuid\": \"Sample UUID (Autogenerated)\",\n \t\t\"sample_ship\": \"Ship's name\",\n \t\t\"sample_operator\": \"Operator's name\",\n \t\t\"sample_sampling_gear\": \"Sampling gear used\",\n \t\t\"sample_concentrated_sample_volume\": \"Volume of concentrated sample, in mL\",\n \t\t\"sample_total_volume\": \"Total volume filtered by the net used, in L\",\n \t\t\"acq_id\": \"Acquisition ID\",\n \t\t\"acq_uuid\": \"Acquisition UUID (Autogenerated)\",\n \t\t\"acq_instrument\": \"Instrument type\",\n \t\t\"acq_instrument_id\": \"Instrument ID\",\n \t\t\"acq_celltype\": \"Flow cell dimension thickness, in µm\",\n \t\t\"acq_minimum_mesh\": \"Minimum filtration mesh size, in µm\",\n \t\t\"acq_maximum_mesh\": \"Maximum filtration mesh size, in µm\",\n \t\t\"acq_min_esd\": \"\",\n \t\t\"acq_max_esd\": \"\",\n \t\t\"acq_volume\": \"Pumped volume, in mL\",\n\t\t \"acq_imaged_volume\": \"Total imaged volume, in mL\",\n \t\t\"acq_magnification\": \"Optical magnification\",\n \t\t\"acq_fnumber_objective\": \"Focal length of the objective, in mm\",\n \t\t\"acq_camera_name\": \"Name of the camera used\",\n \t\t\"acq_nb_frame\": \"Number of picture taken\",\n \"acq_local_datetime\": \"Instrument local datetime\",\n \"acq_camera_resolution\": \"Resolution of the images\",\n \"acq_camera_iso\": \"ISO Number of the images\",\n \"acq_camera_shutter_speed\": \"Shutter speed of the images, in µs\",\n \"acq_software\": \"Software version number\",\n \t\t\"object_date\": \"Sample collection date (or beginning if using a net)\",\n \t\t\"object_time\": \"Sample collection time (or beginning if using a net)\",\n \t\t\"object_lat\": \"Sample collection latitude (or beginning if using a net)\",\n \t\t\"object_lon\": \"Sample collection longitude (or beginning if using a net)\",\n \t\t\"object_depth_min\": \"Sample collection minimal depth, in m\",\n \t\t\"object_depth_max\": \"Sample collection maximum depth, in m\",\n \t\t\"process_pixel\": \"Pixel imaging resolution, in µm/pixel\",\n \t\t\"process_id\": \"Segmentation ID\",\n \t\t\"process_uuid\": \"Segmentation UUID (Autogenerated)\",\n \t\t\"process_source\": \"Code source link of the executed code\",\n \t\t\"process_commit\": \"Version reference of the executed code\",\n \t\t\"sample_gear_net_opening\": \"Sample mouth opening dimension, in mm\",\n \t\t\"object_date_end\": \"Sample end collection date when using a net\",\n \t\t\"object_time_end\": \"Sample end collection time when using a net\",\n \t\t\"object_lat_end\": \"Sample end collection latitude when using a net\",\n \t\t\"object_lon_end\": \"Sample end collection longitude when using a net\",\n \t},\n\t\t\"sample_project\": global.get(\"sample_project\"),\n\t\t\"sample_id\": global.get(\"sample_project\") + \"_\" + global.get(\"sample_id\"),\n\t\t\"sample_ship\": global.get(\"sample_ship\"),\n\t\t\"sample_operator\": global.get(\"sample_operator\"),\n\t\t\"sample_sampling_gear\": global.get(\"sample_sampling_gear\"),\n\t\t\"sample_concentrated_sample_volume\": global.get(\"sample_concentrated_sample_volume\"),\n\n\t\t\"acq_id\": global.get(\"sample_project\") + \"_\" + global.get(\"sample_id\")+ \"_\" + global.get(\"acq_id\"),\n\t\t\"acq_instrument\": global.get(\"acq_instrument\"),\n\t\t\"acq_instrument_id\": global.get(\"acq_instrument_id\"),\n\t\t\"acq_celltype\": global.get(\"acq_celltype\"),\n\t\t\"acq_minimum_mesh\": global.get(\"acq_minimum_mesh\"),\n\t\t\"acq_maximum_mesh\": global.get(\"acq_maximum_mesh\"),\n\t\t\"acq_min_esd\": global.get(\"acq_min_esd\"),\n\t\t\"acq_max_esd\": global.get(\"acq_max_esd\"),\n\t\t\"acq_volume\": global.get(\"acq_volume\"),\n\t\t\"acq_imaged_volume\": global.get(\"acq_imaged_volume\"),\n\t\t\"acq_magnification\": global.get(\"magnification\"),\n\t\t\"acq_fnumber_objective\": global.get(\"acq_fnumber_objective\"),\n\t\t\"acq_camera\": global.get(\"acq_camera\"),\n\t\t\"acq_nb_frame\": global.get(\"nb_frame\"),\n\t\t\"acq_software\": global.get(\"acq_software\"),\n\n\t\t\"object_date\": global.get(\"object_date\"),\n\t\t\"object_time\": global.get(\"object_time\"),\n\t\t\"object_lat\": global.get(\"object_lat\"),\n\t\t\"object_lon\": global.get(\"object_lon\"),\n\t\t\"object_depth_min\": global.get(\"object_depth_min\"),\n\t\t\"object_depth_max\": global.get(\"object_depth_max\"),\n\n\t\t\"process_pixel\": global.get(\"process_pixel\"),\n\t\t\"process_id\": global.get(\"process_id\"),\n\t\t\"process_source\": \"https://www.github.com/PlanktonPlanet/PlanktonScope\",\n\t\t\"process_commit\": global.get(\"process_commit\")\n\t}\n};\n\nif (msg.payload.config.sample_sampling_gear.startsWith(\"net\")) {\n\tmsg.payload.config[\"sample_gear_net_opening\"] = global.get(\"sample_gear_net_opening\")\n\tmsg.payload.config[\"object_date_end\"] = global.get(\"object_date_end\")\n\tmsg.payload.config[\"object_time_end\"] = global.get(\"object_time_end\")\n\tmsg.payload.config[\"object_lat_end\"] = global.get(\"object_lat_end\")\n\tmsg.payload.config[\"object_lon_end\"] = global.get(\"object_lon_end\")\n\tmsg.payload.config[\"sample_total_volume\"] = global.get(\"sample_total_volume\")\n}\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 870,
|
|
"y": 460,
|
|
"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": 900,
|
|
"y": 500,
|
|
"wires": [
|
|
[
|
|
"c3e50240.82aa58"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "4d1b02cb.83b51c",
|
|
"type": "ui_button",
|
|
"z": "baa1e3d9.cb29d",
|
|
"name": "",
|
|
"group": "4322c187.e73e5",
|
|
"order": 10,
|
|
"width": 5,
|
|
"height": 1,
|
|
"passthru": false,
|
|
"label": "Update config",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "",
|
|
"icon": "save",
|
|
"payload": "",
|
|
"payloadType": "str",
|
|
"topic": "imager/image",
|
|
"x": 420,
|
|
"y": 460,
|
|
"wires": [
|
|
[
|
|
"52ea7d01.711034"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"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": 350,
|
|
"y": 620,
|
|
"wires": [
|
|
[
|
|
"4828d2f4.7c712c",
|
|
"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": 580,
|
|
"y": 640,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "d027a6bf.7049e8",
|
|
"type": "function",
|
|
"z": "b771c342.49603",
|
|
"name": "get sample_projet",
|
|
"func": "msg.payload = msg.payload.sample_project;\nglobal.set(\"sample_projet\",msg.payload);\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 310,
|
|
"y": 40,
|
|
"wires": [
|
|
[
|
|
"9c882b37.fde668"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "5a811caf.0f3144",
|
|
"type": "function",
|
|
"z": "b771c342.49603",
|
|
"name": "get sample_ship",
|
|
"func": "msg.payload = msg.payload.sample_ship;\nglobal.set(\"sample_ship\",msg.payload);\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 310,
|
|
"y": 80,
|
|
"wires": [
|
|
[
|
|
"4557d689.a4fa88"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "45911c98.2bd83c",
|
|
"type": "function",
|
|
"z": "b771c342.49603",
|
|
"name": "get sample_id",
|
|
"func": "msg.payload = msg.payload.sample_id;\nglobal.set(\"sample_id\",msg.payload);\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 300,
|
|
"y": 120,
|
|
"wires": [
|
|
[
|
|
"94eb4221.9b92c"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "1e09a4ab.72996b",
|
|
"type": "function",
|
|
"z": "b771c342.49603",
|
|
"name": "get sample_operator",
|
|
"func": "msg.payload = msg.payload.sample_operator;\nglobal.set(\"sample_operator\",msg.payload);\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 320,
|
|
"y": 160,
|
|
"wires": [
|
|
[
|
|
"82c5fc77.59c97"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "a3272681.f271c8",
|
|
"type": "function",
|
|
"z": "b771c342.49603",
|
|
"name": "get sample_sampling_gear",
|
|
"func": "if (msg.payload.sample_sampling_gear === null){\n msg.payload = \"net\";\n}\nelse\n{\n msg.payload = msg.payload.sample_sampling_gear;\n}\nglobal.set(\"sample_sampling_gear\",msg.payload);\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 340,
|
|
"y": 200,
|
|
"wires": [
|
|
[
|
|
"fcfc31ae.af3af",
|
|
"46eb1bf8.3dc5f4"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"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": 470,
|
|
"y": 60,
|
|
"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": 730,
|
|
"y": 60,
|
|
"wires": [
|
|
[
|
|
"ad541674.4791c8"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "7205d267.36adcc",
|
|
"type": "file",
|
|
"z": "1c24ad9c.bebec2",
|
|
"name": "",
|
|
"filename": "/home/pi/PlanktonScope/config.json",
|
|
"appendNewline": true,
|
|
"createDir": true,
|
|
"overwriteFile": "true",
|
|
"encoding": "none",
|
|
"x": 990,
|
|
"y": 160,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "2e6ddf51.c0dba",
|
|
"type": "json",
|
|
"z": "1c24ad9c.bebec2",
|
|
"name": "config.json",
|
|
"property": "payload",
|
|
"action": "str",
|
|
"pretty": true,
|
|
"x": 730,
|
|
"y": 160,
|
|
"wires": [
|
|
[
|
|
"7205d267.36adcc"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "ad541674.4791c8",
|
|
"type": "function",
|
|
"z": "1c24ad9c.bebec2",
|
|
"name": "Global Set",
|
|
"func": "global.set(\"config_keys\", Object.keys(msg.payload));\n\nfor (const key in msg.payload) {\n global.set(key, msg.payload[key]);\n}\n\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 910,
|
|
"y": 60,
|
|
"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": 210,
|
|
"y": 60,
|
|
"wires": [
|
|
[
|
|
"6465bdd5.15eb8c"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "e2f39a35.f57298",
|
|
"type": "subflow:1c24ad9c.bebec2",
|
|
"z": "1371dec5.76e671",
|
|
"name": "",
|
|
"env": [],
|
|
"x": 570,
|
|
"y": 560,
|
|
"wires": [
|
|
[
|
|
"bdc6718a.dd5d48"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "a6907a38.f6611",
|
|
"type": "subflow:1c24ad9c.bebec2",
|
|
"z": "b771c342.49603",
|
|
"name": "",
|
|
"env": [],
|
|
"x": 70,
|
|
"y": 120,
|
|
"wires": [
|
|
[
|
|
"d027a6bf.7049e8",
|
|
"5a811caf.0f3144",
|
|
"45911c98.2bd83c",
|
|
"1e09a4ab.72996b",
|
|
"296c73f.78ff10c",
|
|
"8dff1648.82e42",
|
|
"9f04c5ec.75f3d8",
|
|
"f408a273.4fb538"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "e2b277c1.07283",
|
|
"type": "subflow:1c24ad9c.bebec2",
|
|
"z": "b771c342.49603",
|
|
"name": "",
|
|
"env": [],
|
|
"x": 690,
|
|
"y": 660,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "68fa1227.dbdd5c",
|
|
"type": "function",
|
|
"z": "bccd1f23.87219",
|
|
"name": "get acq_fnumber_objective",
|
|
"func": "msg.payload = msg.payload.acq_fnumber_objective;\n\nglobal.set(\"acq_fnumber_objective\",msg.payload);\n\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 920,
|
|
"y": 80,
|
|
"wires": [
|
|
[
|
|
"cc966678.da8d08",
|
|
"328cec46.09e40c"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "1c45ea1c.80234e",
|
|
"type": "subflow:1c24ad9c.bebec2",
|
|
"z": "bccd1f23.87219",
|
|
"name": "",
|
|
"x": 710,
|
|
"y": 80,
|
|
"wires": [
|
|
[
|
|
"68fa1227.dbdd5c"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "5921d0d0.a3d568",
|
|
"type": "subflow:1c24ad9c.bebec2",
|
|
"z": "baa1e3d9.cb29d",
|
|
"name": "",
|
|
"env": [],
|
|
"x": 90,
|
|
"y": 180,
|
|
"wires": [
|
|
[
|
|
"f3658d30.b8448",
|
|
"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": 310,
|
|
"y": 240,
|
|
"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": 200,
|
|
"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": "bdc6718a.dd5d48",
|
|
"type": "ui_text",
|
|
"z": "1371dec5.76e671",
|
|
"group": "ce9e278.781eed8",
|
|
"order": 2,
|
|
"width": 0,
|
|
"height": 0,
|
|
"name": "",
|
|
"label": "Instrument Type",
|
|
"format": "{{msg.payload.acq_instrument}}",
|
|
"layout": "row-spread",
|
|
"x": 840,
|
|
"y": 560,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "a400a97e.e333a8",
|
|
"type": "ui_text",
|
|
"z": "1371dec5.76e671",
|
|
"group": "ce9e278.781eed8",
|
|
"order": 1,
|
|
"width": 0,
|
|
"height": 0,
|
|
"name": "",
|
|
"label": "Instrument Name",
|
|
"format": "{{msg.payload}}",
|
|
"layout": "row-spread",
|
|
"x": 610,
|
|
"y": 600,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "f783aefd.c3bfd8",
|
|
"type": "ui_text",
|
|
"z": "1371dec5.76e671",
|
|
"group": "ce9e278.781eed8",
|
|
"order": 4,
|
|
"width": 0,
|
|
"height": 0,
|
|
"name": "",
|
|
"label": "Camera Name",
|
|
"format": "{{msg.payload}}",
|
|
"layout": "row-spread",
|
|
"x": 1020,
|
|
"y": 620,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "7116e906.9f50f",
|
|
"type": "ui_text",
|
|
"z": "b771c342.49603",
|
|
"group": "fc5e4e6f.5b1c8",
|
|
"order": 1,
|
|
"width": 10,
|
|
"height": 1,
|
|
"name": "GPS Status Display",
|
|
"label": "GPS Status:",
|
|
"format": "{{msg.payload}}",
|
|
"layout": "row-center",
|
|
"x": 730,
|
|
"y": 840,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "48879182.6fd718",
|
|
"type": "inject",
|
|
"z": "baa1e3d9.cb29d",
|
|
"name": "Default: 100",
|
|
"props": [
|
|
{
|
|
"p": "payload"
|
|
}
|
|
],
|
|
"repeat": "",
|
|
"crontab": "",
|
|
"once": true,
|
|
"onceDelay": "0.2",
|
|
"topic": "",
|
|
"payload": "100",
|
|
"payloadType": "num",
|
|
"x": 310,
|
|
"y": 280,
|
|
"wires": [
|
|
[
|
|
"51b4d0df.d70a88"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "6451f991.aaac1",
|
|
"type": "ui_button",
|
|
"z": "bccd1f23.87219",
|
|
"name": "stop pump",
|
|
"group": "707d9797.c8e798",
|
|
"order": 5,
|
|
"width": 3,
|
|
"height": 1,
|
|
"passthru": true,
|
|
"label": " STOP PUMP",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "#AD1625",
|
|
"icon": "fa-pause fa-2x",
|
|
"payload": "{\"action\":\"stop\"}",
|
|
"payloadType": "json",
|
|
"topic": "actuator/pump",
|
|
"x": 150,
|
|
"y": 220,
|
|
"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": 180,
|
|
"y": 580,
|
|
"wires": [
|
|
[
|
|
"bb62da8a.ebc328"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"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": 620,
|
|
"y": 580,
|
|
"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": 2,
|
|
"width": 5,
|
|
"height": 1,
|
|
"passthru": true,
|
|
"mode": "number",
|
|
"delay": 300,
|
|
"topic": "nb_frame",
|
|
"x": 640,
|
|
"y": 280,
|
|
"wires": [
|
|
[
|
|
"fb887036.12429",
|
|
"67091ac0.8f9f6c",
|
|
"99b11fe4.2795d"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "9c7f7fc9.c8d3a",
|
|
"type": "ui_text_input",
|
|
"z": "b771c342.49603",
|
|
"name": "object_depth_max",
|
|
"label": "Max sampling depth (m)",
|
|
"tooltip": "in m",
|
|
"group": "3e1ba03d.f01d8",
|
|
"order": 9,
|
|
"width": 5,
|
|
"height": 1,
|
|
"passthru": true,
|
|
"mode": "number",
|
|
"delay": "0",
|
|
"topic": "object_depth_max",
|
|
"x": 650,
|
|
"y": 240,
|
|
"wires": [
|
|
[
|
|
"9f501f49.45645"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "317eeeb7.8d3042",
|
|
"type": "ui_text_input",
|
|
"z": "b771c342.49603",
|
|
"name": "object_depth_min",
|
|
"label": "Min sampling depth (m)",
|
|
"tooltip": "in m",
|
|
"group": "3e1ba03d.f01d8",
|
|
"order": 8,
|
|
"width": 5,
|
|
"height": 1,
|
|
"passthru": true,
|
|
"mode": "number",
|
|
"delay": "0",
|
|
"topic": "object_depth_min",
|
|
"x": 650,
|
|
"y": 280,
|
|
"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": 320,
|
|
"y": 840,
|
|
"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": 770,
|
|
"y": 780,
|
|
"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": 770,
|
|
"y": 740,
|
|
"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": 770,
|
|
"y": 700,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "bb628f8d.98f108",
|
|
"type": "link in",
|
|
"z": "baa1e3d9.cb29d",
|
|
"name": "Status for fluidic module",
|
|
"links": [
|
|
"58f2e0f.4e8b12"
|
|
],
|
|
"x": 175,
|
|
"y": 840,
|
|
"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": 550,
|
|
"y": 940,
|
|
"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": 800,
|
|
"y": 980,
|
|
"wires": [
|
|
[
|
|
"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": 1260,
|
|
"y": 880,
|
|
"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": 1060,
|
|
"y": 880,
|
|
"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": 830,
|
|
"y": 880,
|
|
"wires": [
|
|
[
|
|
"8c7348aa.1962e8"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "1a2e721a.f5e876",
|
|
"type": "ui_gauge",
|
|
"z": "baa1e3d9.cb29d",
|
|
"name": "progress donut",
|
|
"group": "b5d61bc7.54fe48",
|
|
"order": 3,
|
|
"width": 6,
|
|
"height": 3,
|
|
"gtype": "donut",
|
|
"title": "",
|
|
"label": "%",
|
|
"format": "{{value}}",
|
|
"min": 0,
|
|
"max": "100",
|
|
"colors": [
|
|
"#ffa83f",
|
|
"#e6ff02",
|
|
"#00dfe9"
|
|
],
|
|
"seg1": "50",
|
|
"seg2": "75",
|
|
"x": 1260,
|
|
"y": 980,
|
|
"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": 1040,
|
|
"y": 980,
|
|
"wires": [
|
|
[
|
|
"1a2e721a.f5e876"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "8f3788f6.ddcf98",
|
|
"type": "function",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "obj_counter",
|
|
"func": "obj_counter = flow.get('obj_counter')\nobj_counter = obj_counter + 1\nflow.set('obj_counter', obj_counter)\nmsg.payload = obj_counter\nmsg.topic = \"object count\"\nreturn msg",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 810,
|
|
"y": 800,
|
|
"wires": [
|
|
[
|
|
"fa3b7929.ac7da8",
|
|
"9d53dbe2.dbffe8"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"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": 7,
|
|
"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"
|
|
],
|
|
"outputs": 1,
|
|
"x": 1340,
|
|
"y": 840,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "50ce901f.b5034",
|
|
"type": "function",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "ex : area",
|
|
"func": "// Payload looks like this:\n// {'name': '01_13_28_232066_0',\n// 'metadata': {\n// 'label': 0, 'width': 29, 'height': 80, ....\n\nmsg.payload=msg.payload.metadata.area_exc\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"
|
|
],
|
|
"outputs": 1,
|
|
"x": 1330,
|
|
"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": 5,
|
|
"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": "object count",
|
|
"payload": "0",
|
|
"payloadType": "num",
|
|
"x": 810,
|
|
"y": 880,
|
|
"wires": [
|
|
[
|
|
"ac439738.28bc18",
|
|
"4f3f7c4a.cb21c4"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"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",
|
|
"35eb925e.5f8016"
|
|
],
|
|
"x": 815,
|
|
"y": 160,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "9bd72495.a8a098",
|
|
"type": "ui_text",
|
|
"z": "baa1e3d9.cb29d",
|
|
"group": "4322c187.e73e5",
|
|
"order": 5,
|
|
"width": 5,
|
|
"height": 1,
|
|
"name": "Total imaged volume",
|
|
"label": "Total imaged volume",
|
|
"format": "{{msg.payload}}",
|
|
"layout": "col-center",
|
|
"x": 1180,
|
|
"y": 240,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "99b11fe4.2795d",
|
|
"type": "function",
|
|
"z": "baa1e3d9.cb29d",
|
|
"name": "imaged volume calc",
|
|
"func": "camera = global.get(\"acq_camera\");\ncell = global.get(\"acq_celltype\");\nnb_frame = global.get(\"nb_frame\");\nvar volume = 0\nif (camera == \"HQ Camera\"){\n volume = nb_frame * (4.15*3.14*cell/1000) / 1000;\n}\nelse if (camera == \"Camera v2.1\"){\n volume = nb_frame * (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(2) + \" mL\"\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 940,
|
|
"y": 240,
|
|
"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": 7,
|
|
"width": 5,
|
|
"height": 1,
|
|
"name": "Total pumped volume",
|
|
"label": "Total pumped volume",
|
|
"format": "{{msg.payload}} mL",
|
|
"layout": "col-center",
|
|
"x": 1180,
|
|
"y": 300,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "67091ac0.8f9f6c",
|
|
"type": "function",
|
|
"z": "baa1e3d9.cb29d",
|
|
"name": "acq_volume calc",
|
|
"func": "var imaging_pump_volume = global.get(\"imaging_pump_volume\");\nvar nb_frame = global.get(\"nb_frame\");\nvar acq_volume = 0\n\nacq_volume = (Number(nb_frame)*Number(imaging_pump_volume)).toFixed(2)\nglobal.set(\"acq_volume\", acq_volume)\n\nmsg.payload = acq_volume\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 930,
|
|
"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": 3,
|
|
"width": 8,
|
|
"height": 1,
|
|
"passthru": true,
|
|
"outs": "end",
|
|
"topic": "wb_red_gain",
|
|
"min": "1.0",
|
|
"max": "8.0",
|
|
"step": "0.01",
|
|
"x": 500,
|
|
"y": 880,
|
|
"wires": [
|
|
[
|
|
"5e147425.7666ec",
|
|
"56835fa1.2fe538"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "5e147425.7666ec",
|
|
"type": "function",
|
|
"z": "bccd1f23.87219",
|
|
"name": "Encapsulate settings",
|
|
"func": "if (msg.topic == \"wb_red_gain\"){\n msg.payload = {\n \"action\":\"settings\", \n \"settings\":{\"white_balance_gain\":{\n \"red\":Math.round(msg.payload*100)\n }\n }\n }\n}\nif (msg.topic == \"wb_blue_gain\"){\n msg.payload = {\n \"action\":\"settings\", \n \"settings\":{\"white_balance_gain\":{\n \"blue\":Math.round(msg.payload*100)\n }\n }\n }\n}\nmsg.topic = \"imager/image\"\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 740,
|
|
"y": 880,
|
|
"wires": [
|
|
[
|
|
"845e06e1.0d812"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"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": 4,
|
|
"width": 8,
|
|
"height": 1,
|
|
"passthru": true,
|
|
"outs": "end",
|
|
"topic": "wb_blue_gain",
|
|
"min": "1.0",
|
|
"max": "8.0",
|
|
"step": "0.01",
|
|
"x": 500,
|
|
"y": 920,
|
|
"wires": [
|
|
[
|
|
"5e147425.7666ec",
|
|
"56835fa1.2fe538"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"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": 740,
|
|
"y": 960,
|
|
"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": 960,
|
|
"wires": [
|
|
[
|
|
"60e44330.50bdec"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "60e44330.50bdec",
|
|
"type": "ui_switch",
|
|
"z": "bccd1f23.87219",
|
|
"name": "AWB",
|
|
"label": "Auto White Balance",
|
|
"tooltip": "",
|
|
"group": "8c38a81e.9897a8",
|
|
"order": 2,
|
|
"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": 510,
|
|
"y": 960,
|
|
"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": 650,
|
|
"y": 800,
|
|
"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": 810,
|
|
"y": 820,
|
|
"wires": [
|
|
[
|
|
"559a8085.1d6b9"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "559a8085.1d6b9",
|
|
"type": "link out",
|
|
"z": "baa1e3d9.cb29d",
|
|
"name": "Camera Name",
|
|
"links": [
|
|
"30067f35.532f2",
|
|
"572a6daa.6004c4",
|
|
"cfc783d7.d6ceb"
|
|
],
|
|
"x": 965,
|
|
"y": 820,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "30067f35.532f2",
|
|
"type": "link in",
|
|
"z": "1371dec5.76e671",
|
|
"name": "Camera Name",
|
|
"links": [
|
|
"559a8085.1d6b9"
|
|
],
|
|
"x": 875,
|
|
"y": 620,
|
|
"wires": [
|
|
[
|
|
"f783aefd.c3bfd8"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "11b51f8f.acd308",
|
|
"type": "python3-function",
|
|
"z": "1371dec5.76e671",
|
|
"d": true,
|
|
"name": "fan temperature",
|
|
"func": "import smbus\nbus = smbus.SMBus(1)\n\naddr = 0x0d\nfan_reg = 0x08\n\ntemp = float( msg[\"payload\"])\n\n# 0x01 full speed, 0x02: 20% speed, ..., 0x09: 90% speed\n\nif temp < 38:\n bus.write_byte_data(addr, fan_reg, 0x00)\nelif temp < 43:\n bus.write_byte_data(addr, fan_reg, 0x02)\nelif temp < 46:\n bus.write_byte_data(addr, fan_reg, 0x04)\nelif temp < 48:\n bus.write_byte_data(addr, fan_reg, 0x06)\nelif temp < 52:\n bus.write_byte_data(addr, fan_reg, 0x08)\nelse:\n bus.write_byte_data(addr, fan_reg, 0x01)\n\nreturn msg",
|
|
"outputs": 1,
|
|
"x": 1520,
|
|
"y": 40,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "cbb123ab.fd3428",
|
|
"type": "ui_ui_control",
|
|
"z": "b771c342.49603",
|
|
"name": "show/hide net groups",
|
|
"events": "change",
|
|
"x": 1320,
|
|
"y": 260,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"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": 780,
|
|
"y": 380,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "d43c3ed9.e6cb1",
|
|
"type": "ui_template",
|
|
"z": "cb95299c.2817c8",
|
|
"group": "46be9c86.dea684",
|
|
"name": "Object counts",
|
|
"order": 3,
|
|
"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": 1330,
|
|
"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": 4,
|
|
"width": 5,
|
|
"height": 1,
|
|
"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>\n <center>\n <object data=\"http://planktoscope.local:80/\" width=\"1400px\" height=\"1100px\"></object>\n </center>\n</div>",
|
|
"storeOutMessages": true,
|
|
"fwdInMessages": true,
|
|
"resendOnRefresh": false,
|
|
"templateScope": "local",
|
|
"x": 440,
|
|
"y": 140,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "572a6daa.6004c4",
|
|
"type": "link in",
|
|
"z": "baa1e3d9.cb29d",
|
|
"name": "",
|
|
"links": [
|
|
"559a8085.1d6b9"
|
|
],
|
|
"x": 795,
|
|
"y": 260,
|
|
"wires": [
|
|
[
|
|
"99b11fe4.2795d"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "642ff403.1ed91c",
|
|
"type": "ui_text_input",
|
|
"z": "b771c342.49603",
|
|
"name": "sample_concentrated_sample_volume",
|
|
"label": "Concentrated sample volume (mL)",
|
|
"tooltip": "Volume extracted from the net (in mL)",
|
|
"group": "3e1ba03d.f01d8",
|
|
"order": 10,
|
|
"width": 10,
|
|
"height": 1,
|
|
"passthru": true,
|
|
"mode": "number",
|
|
"delay": "0",
|
|
"topic": "sample_concentrated_sample_volume",
|
|
"x": 590,
|
|
"y": 360,
|
|
"wires": [
|
|
[
|
|
"9f501f49.45645"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "e967b844.46aa48",
|
|
"type": "ui_text_input",
|
|
"z": "b771c342.49603",
|
|
"name": "sample_gear_net_opening",
|
|
"label": "Net opening dimension (mm)",
|
|
"tooltip": "Size of the net mouth opening (in mm)",
|
|
"group": "cf5d9f0e.d57e7",
|
|
"order": 3,
|
|
"width": 10,
|
|
"height": 1,
|
|
"passthru": true,
|
|
"mode": "number",
|
|
"delay": "0",
|
|
"topic": "sample_gear_net_opening",
|
|
"x": 620,
|
|
"y": 320,
|
|
"wires": [
|
|
[
|
|
"9f501f49.45645"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "8032ea50.1b57f",
|
|
"type": "ui_template",
|
|
"z": "baa1e3d9.cb29d",
|
|
"group": "b5d61bc7.54fe48",
|
|
"name": "progress header",
|
|
"order": 1,
|
|
"width": 0,
|
|
"height": 0,
|
|
"format": "<center><h2>Capture progress</h2></center>",
|
|
"storeOutMessages": false,
|
|
"fwdInMessages": false,
|
|
"resendOnRefresh": false,
|
|
"templateScope": "local",
|
|
"x": 1270,
|
|
"y": 940,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "eaf74a43.fa27d",
|
|
"type": "switch",
|
|
"z": "1371dec5.76e671",
|
|
"name": "if disk > 90%",
|
|
"property": "payload",
|
|
"propertyType": "msg",
|
|
"rules": [
|
|
{
|
|
"t": "gte",
|
|
"v": "90",
|
|
"vt": "num"
|
|
}
|
|
],
|
|
"checkall": "true",
|
|
"repair": false,
|
|
"outputs": 1,
|
|
"x": 590,
|
|
"y": 420,
|
|
"wires": [
|
|
[
|
|
"6d09f428.930bcc"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "46d5e78b.15f998",
|
|
"type": "ui_toast",
|
|
"z": "1371dec5.76e671",
|
|
"position": "dialog",
|
|
"displayTime": "10",
|
|
"highlight": "",
|
|
"sendall": true,
|
|
"outputs": 1,
|
|
"ok": "OK",
|
|
"cancel": "",
|
|
"raw": false,
|
|
"topic": "",
|
|
"name": "",
|
|
"x": 1070,
|
|
"y": 420,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "24df077a.cb252",
|
|
"type": "change",
|
|
"z": "1371dec5.76e671",
|
|
"name": "full disk msg",
|
|
"rules": [
|
|
{
|
|
"t": "set",
|
|
"p": "payload",
|
|
"pt": "msg",
|
|
"to": "\"Your drive has reached 90% capacity, you should do a backup to an external drive and a purge.\"",
|
|
"tot": "str"
|
|
}
|
|
],
|
|
"action": "",
|
|
"property": "",
|
|
"from": "",
|
|
"to": "",
|
|
"reg": false,
|
|
"x": 910,
|
|
"y": 420,
|
|
"wires": [
|
|
[
|
|
"46d5e78b.15f998"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "df1ea904.cd261",
|
|
"type": "ui_slider",
|
|
"z": "baa1e3d9.cb29d",
|
|
"name": "imaging_pump_volume",
|
|
"label": "Pumped volume (mL)",
|
|
"tooltip": "inbetween frames",
|
|
"group": "4322c187.e73e5",
|
|
"order": 3,
|
|
"width": 0,
|
|
"height": 0,
|
|
"passthru": true,
|
|
"outs": "end",
|
|
"topic": "imaging_pump_volume",
|
|
"min": "0.001",
|
|
"max": "0.5",
|
|
"step": "0.001",
|
|
"x": 590,
|
|
"y": 320,
|
|
"wires": [
|
|
[
|
|
"fb887036.12429",
|
|
"67091ac0.8f9f6c"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "a4abb1ae.2ae418",
|
|
"type": "subflow:1c24ad9c.bebec2",
|
|
"z": "baa1e3d9.cb29d",
|
|
"name": "",
|
|
"env": [],
|
|
"x": 890,
|
|
"y": 540,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "cfc783d7.d6ceb",
|
|
"type": "link in",
|
|
"z": "bccd1f23.87219",
|
|
"name": "Camera Name",
|
|
"links": [
|
|
"559a8085.1d6b9"
|
|
],
|
|
"x": 1035,
|
|
"y": 200,
|
|
"wires": [
|
|
[
|
|
"8038414a.34461"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "c0ce5626.b6c5",
|
|
"type": "ui_toast",
|
|
"z": "b771c342.49603",
|
|
"position": "dialog",
|
|
"displayTime": "3",
|
|
"highlight": "",
|
|
"sendall": true,
|
|
"outputs": 1,
|
|
"ok": "OK",
|
|
"cancel": "",
|
|
"raw": false,
|
|
"topic": "",
|
|
"name": "",
|
|
"x": 1070,
|
|
"y": 460,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "33c28dc1.238002",
|
|
"type": "function",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "prepare segmentation",
|
|
"func": "global.set('obj_counter', 0);\n\nvar segmentation_list = flow.get('segmentation_list')\nif (segmentation_list !== undefined && segmentation_list !== \"\") {\n msg.payload['path'] = segmentation_list\n}\n\n\nvar force = flow.get('force')\nif (force !== undefined && force !== \"\") {\n msg.payload['settings'] = {\"force\":Boolean(force)}\n}\n\n\nvar recursive = flow.get('recursive')\nif (recursive !== undefined && recursive !== \"\") {\n if (\"settings\" in msg.payload){\n msg.payload.settings[\"recursive\"] = Boolean(recursive)\n }\n else{\n msg.payload['settings'] = {\"recursive\": Boolean(recursive)}\n }\n}\n\nvar ecotaxa = flow.get('ecotaxa')\nif (ecotaxa !== undefined && ecotaxa !== \"\") {\n if (\"settings\" in msg.payload){\n msg.payload.settings[\"ecotaxa\"] = Boolean(ecotaxa)\n }\n else{\n msg.payload['settings'] = {\"ecotaxa\": Boolean(ecotaxa)}\n }\n}\n\nvar keep = flow.get('keep')\nif (keep !== undefined && keep !== \"\") {\n if (\"settings\" in msg.payload){\n msg.payload.settings[\"keep\"] = Boolean(keep)\n }\n else{\n msg.payload['settings'] = {\"keep\": Boolean(keep)}\n }\n}\n\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 620,
|
|
"y": 460,
|
|
"wires": [
|
|
[
|
|
"16f3cef4.0acac9"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "b9bf06d6.26c518",
|
|
"type": "exec",
|
|
"z": "f21ba04.c26266",
|
|
"command": "sudo iwlist wlan0 scan | grep ESSID | sed 's/ESSID://g;s/\"//g;s/^ *//;s/ *$//'",
|
|
"addpay": false,
|
|
"append": "",
|
|
"useSpawn": "false",
|
|
"timer": "",
|
|
"oldrc": false,
|
|
"name": "scan",
|
|
"x": 450,
|
|
"y": 80,
|
|
"wires": [
|
|
[
|
|
"9642cb31.663b4"
|
|
],
|
|
[],
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "9642cb31.663b4",
|
|
"type": "function",
|
|
"z": "f21ba04.c26266",
|
|
"name": "parseOptions",
|
|
"func": "var ssids = msg.payload.split('\\n').filter(s => !!s)\n\nssids = [...new Set(ssids)];\n\nmsg.options = ssids\nmsg.payload = null\n\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"x": 640,
|
|
"y": 80,
|
|
"wires": [
|
|
[
|
|
"dbc0d44.5361b28"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "3db572cd.cf972e",
|
|
"type": "inject",
|
|
"z": "f21ba04.c26266",
|
|
"name": "once",
|
|
"props": [
|
|
{
|
|
"p": "payload"
|
|
},
|
|
{
|
|
"p": "topic",
|
|
"vt": "str"
|
|
}
|
|
],
|
|
"repeat": "",
|
|
"crontab": "",
|
|
"once": true,
|
|
"onceDelay": 0.1,
|
|
"topic": "",
|
|
"payload": "",
|
|
"payloadType": "date",
|
|
"x": 270,
|
|
"y": 180,
|
|
"wires": [
|
|
[
|
|
"b9bf06d6.26c518",
|
|
"4c0400c.69a1e8",
|
|
"448b4c37.be50bc"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "dbc0d44.5361b28",
|
|
"type": "ui_dropdown",
|
|
"z": "f21ba04.c26266",
|
|
"name": "",
|
|
"label": "Wifi",
|
|
"tooltip": "",
|
|
"place": "Select a WIFI",
|
|
"group": "9e409235.73cd7",
|
|
"order": 2,
|
|
"width": 0,
|
|
"height": 0,
|
|
"passthru": false,
|
|
"multiple": false,
|
|
"options": [],
|
|
"payload": "",
|
|
"topic": "",
|
|
"x": 830,
|
|
"y": 80,
|
|
"wires": [
|
|
[
|
|
"cdfa9013.b91278"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "2bf338e3.966468",
|
|
"type": "ui_button",
|
|
"z": "f21ba04.c26266",
|
|
"name": "",
|
|
"group": "9e409235.73cd7",
|
|
"order": 1,
|
|
"width": 0,
|
|
"height": 0,
|
|
"passthru": false,
|
|
"label": "Scan",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "",
|
|
"icon": "fa-wifi fa-2x",
|
|
"payload": "true",
|
|
"payloadType": "bool",
|
|
"topic": "",
|
|
"x": 270,
|
|
"y": 40,
|
|
"wires": [
|
|
[
|
|
"b9bf06d6.26c518"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "63b885ac.46f384",
|
|
"type": "switch",
|
|
"z": "f21ba04.c26266",
|
|
"name": "ifWifi",
|
|
"property": "name",
|
|
"propertyType": "msg",
|
|
"rules": [
|
|
{
|
|
"t": "eq",
|
|
"v": "Wifi",
|
|
"vt": "str"
|
|
}
|
|
],
|
|
"checkall": "true",
|
|
"repair": false,
|
|
"outputs": 1,
|
|
"x": 271,
|
|
"y": 80,
|
|
"wires": [
|
|
[
|
|
"b9bf06d6.26c518",
|
|
"4c0400c.69a1e8",
|
|
"448b4c37.be50bc"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "4c0400c.69a1e8",
|
|
"type": "exec",
|
|
"z": "f21ba04.c26266",
|
|
"command": "ifconfig wlan0",
|
|
"addpay": false,
|
|
"append": "",
|
|
"useSpawn": "false",
|
|
"timer": "",
|
|
"oldrc": false,
|
|
"name": "getInfo",
|
|
"x": 460,
|
|
"y": 180,
|
|
"wires": [
|
|
[
|
|
"bcb20e39.00cea8"
|
|
],
|
|
[],
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "bcb20e39.00cea8",
|
|
"type": "function",
|
|
"z": "f21ba04.c26266",
|
|
"name": "parse IP Info",
|
|
"func": "if (msg.payload === null){\n var ip = \"\";\n var mask = \"\";\n var broadcast = \"\";\n}\nelse{\n var ip = msg.payload.match(/inet ([0-9\\.]+)/)[1];\n var mask = msg.payload.match(/netmask ([0-9\\.]+)/)[1];\n var broadcast = msg.payload.match(/broadcast ([0-9\\.]+)/)[1];\n}\n\nreturn [{topic: 'ip', payload: ip},{topic: 'mask', payload: mask},{topic: 'broadcast', payload: broadcast}]",
|
|
"outputs": 3,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 730,
|
|
"y": 180,
|
|
"wires": [
|
|
[
|
|
"d71c8185.800fd"
|
|
],
|
|
[
|
|
"67d052ba.99ff24"
|
|
],
|
|
[
|
|
"dc305a26.b33fc"
|
|
]
|
|
],
|
|
"outputLabels": [
|
|
"ip",
|
|
"mask",
|
|
"broadcast"
|
|
]
|
|
},
|
|
{
|
|
"id": "d71c8185.800fd",
|
|
"type": "ui_text",
|
|
"z": "f21ba04.c26266",
|
|
"group": "919923a3.d10868",
|
|
"order": 2,
|
|
"width": 0,
|
|
"height": 0,
|
|
"name": "",
|
|
"label": "IP",
|
|
"format": "{{msg.payload || '---'}}",
|
|
"layout": "row-spread",
|
|
"x": 990,
|
|
"y": 141,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "67d052ba.99ff24",
|
|
"type": "ui_text",
|
|
"z": "f21ba04.c26266",
|
|
"group": "919923a3.d10868",
|
|
"order": 3,
|
|
"width": 0,
|
|
"height": 0,
|
|
"name": "",
|
|
"label": "Netmask",
|
|
"format": "{{msg.payload || '---'}}",
|
|
"layout": "row-spread",
|
|
"x": 1000,
|
|
"y": 181,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "dc305a26.b33fc",
|
|
"type": "ui_text",
|
|
"z": "f21ba04.c26266",
|
|
"group": "919923a3.d10868",
|
|
"order": 4,
|
|
"width": 0,
|
|
"height": 0,
|
|
"name": "",
|
|
"label": "Broadcast",
|
|
"format": "{{msg.payload || '---'}}",
|
|
"layout": "row-spread",
|
|
"x": 1010,
|
|
"y": 220,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "94b2e8fc.aa20e",
|
|
"type": "ui_form",
|
|
"z": "f21ba04.c26266",
|
|
"name": "",
|
|
"label": "Update",
|
|
"group": "9e409235.73cd7",
|
|
"order": 3,
|
|
"width": 0,
|
|
"height": 0,
|
|
"options": [
|
|
{
|
|
"label": "SSID",
|
|
"value": "ssid",
|
|
"type": "text",
|
|
"required": true,
|
|
"rows": null
|
|
},
|
|
{
|
|
"label": "Password",
|
|
"value": "password",
|
|
"type": "text",
|
|
"required": true,
|
|
"rows": null
|
|
}
|
|
],
|
|
"formValue": {
|
|
"ssid": "",
|
|
"password": ""
|
|
},
|
|
"payload": "",
|
|
"submit": "Add the network",
|
|
"cancel": "Reset fields",
|
|
"topic": "",
|
|
"x": 1160,
|
|
"y": 80,
|
|
"wires": [
|
|
[
|
|
"d59021e3.1b63e8"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "cdfa9013.b91278",
|
|
"type": "function",
|
|
"z": "f21ba04.c26266",
|
|
"name": "insert ssid",
|
|
"func": "\nmsg.payload = {ssid: msg.payload}\n\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 990,
|
|
"y": 80,
|
|
"wires": [
|
|
[
|
|
"94b2e8fc.aa20e"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "448b4c37.be50bc",
|
|
"type": "exec",
|
|
"z": "f21ba04.c26266",
|
|
"command": "iwgetid",
|
|
"addpay": false,
|
|
"append": "",
|
|
"useSpawn": "false",
|
|
"timer": "",
|
|
"oldrc": false,
|
|
"name": "getCurrentSSID",
|
|
"x": 480,
|
|
"y": 260,
|
|
"wires": [
|
|
[
|
|
"151819d4.0dbe56"
|
|
],
|
|
[],
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "c8a5ae48.ef1308",
|
|
"type": "ui_text",
|
|
"z": "f21ba04.c26266",
|
|
"group": "919923a3.d10868",
|
|
"order": 1,
|
|
"width": 0,
|
|
"height": 0,
|
|
"name": "",
|
|
"label": "SSID",
|
|
"format": "{{msg.payload || '---'}}",
|
|
"layout": "row-spread",
|
|
"x": 990,
|
|
"y": 260,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "151819d4.0dbe56",
|
|
"type": "function",
|
|
"z": "f21ba04.c26266",
|
|
"name": "parse SSID",
|
|
"func": "if (msg.payload !== null){\n var ssid = msg.payload.match(/ESSID:\"([^\"]+)\"/)[1];\n}\nelse\n{\n var ssid = \"\";\n}\n\n\nnode.send({topic: 'ssid', payload: ssid})\n",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 730,
|
|
"y": 260,
|
|
"wires": [
|
|
[
|
|
"c8a5ae48.ef1308"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "ff059f3f.9c0f28",
|
|
"type": "ui_ui_control",
|
|
"z": "f21ba04.c26266",
|
|
"name": "onTab",
|
|
"events": "all",
|
|
"x": 130,
|
|
"y": 80,
|
|
"wires": [
|
|
[
|
|
"63b885ac.46f384"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "167d7bd0.679ce4",
|
|
"type": "function",
|
|
"z": "f21ba04.c26266",
|
|
"name": "update contry code",
|
|
"func": "var template = `sudo sed -i \\\"s/^country.*/country=\"${msg.payload}\"/\\\" /home/pi/wpa_supplicant.conf`\n// sudo tee /etc/wpa_supplicant/wpa_supplicant.conf <<EOF\n//ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev\n//update_config=1\n//country=IT\nmsg.payload = template\n\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 630,
|
|
"y": 400,
|
|
"wires": [
|
|
[
|
|
"9d30f7b5.aac88"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "9d30f7b5.aac88",
|
|
"type": "exec",
|
|
"z": "f21ba04.c26266",
|
|
"command": "",
|
|
"addpay": true,
|
|
"append": "",
|
|
"useSpawn": "false",
|
|
"timer": "",
|
|
"oldrc": false,
|
|
"name": "updateConf",
|
|
"x": 890,
|
|
"y": 400,
|
|
"wires": [
|
|
[],
|
|
[],
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "deb8c14e.ff1fd",
|
|
"type": "ui_button",
|
|
"z": "f21ba04.c26266",
|
|
"name": "",
|
|
"group": "9e409235.73cd7",
|
|
"order": 7,
|
|
"width": 3,
|
|
"height": 1,
|
|
"passthru": false,
|
|
"label": "Change Country Code",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "",
|
|
"icon": "",
|
|
"payload": "country_code",
|
|
"payloadType": "flow",
|
|
"topic": "",
|
|
"x": 400,
|
|
"y": 400,
|
|
"wires": [
|
|
[
|
|
"167d7bd0.679ce4"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "6d4ce391.04abf4",
|
|
"type": "ui_text_input",
|
|
"z": "f21ba04.c26266",
|
|
"name": "country_code",
|
|
"label": "Country Code",
|
|
"tooltip": "ISO/IEC alpha2 country code",
|
|
"group": "9e409235.73cd7",
|
|
"order": 6,
|
|
"width": 3,
|
|
"height": 1,
|
|
"passthru": true,
|
|
"mode": "text",
|
|
"delay": "500",
|
|
"topic": "country_code",
|
|
"x": 420,
|
|
"y": 360,
|
|
"wires": [
|
|
[
|
|
"3f60469d.620aea"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "3f60469d.620aea",
|
|
"type": "change",
|
|
"z": "f21ba04.c26266",
|
|
"name": "",
|
|
"rules": [
|
|
{
|
|
"t": "set",
|
|
"p": "country_code",
|
|
"pt": "flow",
|
|
"to": "payload",
|
|
"tot": "msg"
|
|
}
|
|
],
|
|
"action": "",
|
|
"property": "",
|
|
"from": "",
|
|
"to": "",
|
|
"reg": false,
|
|
"x": 640,
|
|
"y": 360,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "4f02c726.de69b8",
|
|
"type": "ui_button",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "",
|
|
"group": "1be83144.4fe4bf",
|
|
"order": 15,
|
|
"width": 2,
|
|
"height": 1,
|
|
"passthru": false,
|
|
"label": "Reboot",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "#AD1625",
|
|
"icon": "fa-repeat fa-2x",
|
|
"payload": "reboot",
|
|
"payloadType": "str",
|
|
"topic": "reboot",
|
|
"x": 420,
|
|
"y": 680,
|
|
"wires": [
|
|
[
|
|
"4af9112d.87767"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "611a8b1c.a829b4",
|
|
"type": "exec",
|
|
"z": "9daf9e2b.019fc",
|
|
"command": "sudo",
|
|
"addpay": true,
|
|
"append": "now",
|
|
"useSpawn": "false",
|
|
"timer": "2",
|
|
"oldrc": false,
|
|
"name": "cmd",
|
|
"x": 710,
|
|
"y": 720,
|
|
"wires": [
|
|
[],
|
|
[],
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "bc76c4d6.a7ad28",
|
|
"type": "ui_button",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "",
|
|
"group": "1be83144.4fe4bf",
|
|
"order": 17,
|
|
"width": 2,
|
|
"height": 1,
|
|
"passthru": false,
|
|
"label": "Shutdown",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "#AD1625",
|
|
"icon": "fa-power-off fa-2x",
|
|
"payload": "shutdown",
|
|
"payloadType": "str",
|
|
"topic": "shutdown",
|
|
"x": 410,
|
|
"y": 760,
|
|
"wires": [
|
|
[
|
|
"4af9112d.87767"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "4af9112d.87767",
|
|
"type": "python3-function",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "action",
|
|
"func": "#!/usr/bin/python\nimport smbus\n\nbus = smbus.SMBus(1)\n#turn off LED\nbus.write_byte_data(0x0d, 0x07, 0x00)\n#turn off Fan\nbus.write_byte_data(0x0d, 0x08, 0x00)\n\n#msg[\"payload\"] = str(msg[\"topic\"])+' now'\nreturn msg",
|
|
"outputs": 1,
|
|
"x": 590,
|
|
"y": 720,
|
|
"wires": [
|
|
[
|
|
"611a8b1c.a829b4"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "fa914867.0a0658",
|
|
"type": "exec",
|
|
"z": "9daf9e2b.019fc",
|
|
"command": "python3 -u /home/pi/PlanktonScope/scripts/main.py",
|
|
"addpay": false,
|
|
"append": "",
|
|
"useSpawn": "true",
|
|
"timer": "",
|
|
"oldrc": false,
|
|
"name": "",
|
|
"x": 1090,
|
|
"y": 600,
|
|
"wires": [
|
|
[],
|
|
[
|
|
"8b511c2b.9c24c8"
|
|
],
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "1575db82.742854",
|
|
"type": "delay",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "",
|
|
"pauseType": "delay",
|
|
"timeout": "3",
|
|
"timeoutUnits": "seconds",
|
|
"rate": "1",
|
|
"nbRateUnits": "1",
|
|
"rateUnits": "second",
|
|
"randomFirst": "1",
|
|
"randomLast": "5",
|
|
"randomUnits": "seconds",
|
|
"drop": false,
|
|
"x": 720,
|
|
"y": 600,
|
|
"wires": [
|
|
[
|
|
"fa914867.0a0658"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "466eb611.4da048",
|
|
"type": "ui_button",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "Restart Python",
|
|
"group": "1be83144.4fe4bf",
|
|
"order": 12,
|
|
"width": 4,
|
|
"height": 1,
|
|
"passthru": true,
|
|
"label": "Restart Python",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "#AD1625",
|
|
"icon": "fa-refresh fa-2x",
|
|
"payload": "",
|
|
"payloadType": "str",
|
|
"topic": "",
|
|
"x": 400,
|
|
"y": 600,
|
|
"wires": [
|
|
[
|
|
"1575db82.742854",
|
|
"bd5cceef.b17ad",
|
|
"ed7503f3.d95a48"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "ed7503f3.d95a48",
|
|
"type": "exec",
|
|
"z": "9daf9e2b.019fc",
|
|
"command": "sudo killall -15 python3",
|
|
"addpay": false,
|
|
"append": "",
|
|
"useSpawn": "false",
|
|
"timer": "",
|
|
"oldrc": false,
|
|
"name": "Python soft kill",
|
|
"x": 740,
|
|
"y": 660,
|
|
"wires": [
|
|
[],
|
|
[],
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "bd5cceef.b17ad",
|
|
"type": "exec",
|
|
"z": "9daf9e2b.019fc",
|
|
"command": "sudo killall -15 raspimjpeg",
|
|
"addpay": false,
|
|
"append": "",
|
|
"useSpawn": "false",
|
|
"timer": "",
|
|
"oldrc": false,
|
|
"name": "Raspimjpeg soft kill",
|
|
"x": 750,
|
|
"y": 540,
|
|
"wires": [
|
|
[],
|
|
[],
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "d12008a0.47be4",
|
|
"type": "ui_template",
|
|
"z": "9daf9e2b.019fc",
|
|
"group": "a7d64879.38298",
|
|
"name": "Log table",
|
|
"order": 1,
|
|
"width": 12,
|
|
"height": 10,
|
|
"format": "<script type=\"text/javascript\">\n function selectElementContents(el) {\n var body = document.body, range, sel;\n if (document.createRange && window.getSelection) {\n range = document.createRange();\n sel = window.getSelection();\n sel.removeAllRanges();\n try {\n range.selectNodeContents(el);\n sel.addRange(range);\n } catch (e) {\n range.selectNode(el);\n sel.addRange(range);\n }\n document.execCommand(\"copy\");\n sel.removeAllRanges();\n\n } else if (body.createTextRange) {\n range = body.createTextRange();\n range.moveToElementText(el);\n range.select();\n range.execCommand(\"Copy\");\n }\n }\n</script>\n\n<md-button onclick=\"selectElementContents( document.getElementById('log_table') );\">\n <i class=\"fa fa-copy fa-1x\"></i> Copy Log\n</md-button>\n\n<table id=\"log_table\" style=\"font-family: mono;font-size: 5px;\">\n <tr ng-repeat=\"row in msg.payload\">\n <td>{{row}}</td>\n </tr>\n</table>\n\n",
|
|
"storeOutMessages": false,
|
|
"fwdInMessages": false,
|
|
"resendOnRefresh": false,
|
|
"templateScope": "local",
|
|
"x": 1700,
|
|
"y": 640,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "8b511c2b.9c24c8",
|
|
"type": "function",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "Log array",
|
|
"func": "var log = flow.get(\"python_log\")||[];\n\nlog = log.concat(msg.payload.trim().split('\\n'));\n\nwhile (log.length > 500){\n log.shift();\n}\n\nflow.set(\"python_log\", log);\n\nmsg.payload = log;\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 1500,
|
|
"y": 560,
|
|
"wires": [
|
|
[
|
|
"d12008a0.47be4"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "7a1dedf.1c63094",
|
|
"type": "ui_button",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "",
|
|
"group": "a7d64879.38298",
|
|
"order": 2,
|
|
"width": 0,
|
|
"height": 0,
|
|
"passthru": true,
|
|
"label": "Clear Log",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "",
|
|
"icon": "fa-eraser",
|
|
"payload": "",
|
|
"payloadType": "str",
|
|
"topic": "",
|
|
"x": 1260,
|
|
"y": 720,
|
|
"wires": [
|
|
[
|
|
"73500be7.9ab7c4"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "9187bf97.9922b8",
|
|
"type": "catch",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "Catch Errors",
|
|
"scope": null,
|
|
"uncaught": false,
|
|
"x": 1090,
|
|
"y": 660,
|
|
"wires": [
|
|
[
|
|
"f9a871d5.a73828"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "f9a871d5.a73828",
|
|
"type": "function",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "Get error",
|
|
"func": "msg.payload = \"Node Red Error: \" + msg.error + \" created by the message \" + msg.payload;\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 1260,
|
|
"y": 660,
|
|
"wires": [
|
|
[
|
|
"8b511c2b.9c24c8"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "73500be7.9ab7c4",
|
|
"type": "function",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "Clear log",
|
|
"func": "flow.set(\"python_log\", [\"Log cleared!\"]);\n\nmsg.payload = [\"Log cleared!\"];\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 1500,
|
|
"y": 720,
|
|
"wires": [
|
|
[
|
|
"d12008a0.47be4"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "7372e83e.5fc0e8",
|
|
"type": "inject",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "once",
|
|
"props": [
|
|
{
|
|
"p": "payload"
|
|
}
|
|
],
|
|
"repeat": "",
|
|
"crontab": "",
|
|
"once": true,
|
|
"onceDelay": "",
|
|
"topic": "",
|
|
"payload": "start",
|
|
"payloadType": "str",
|
|
"x": 150,
|
|
"y": 600,
|
|
"wires": [
|
|
[
|
|
"466eb611.4da048"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "f344dc9e.3c9278",
|
|
"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": 430,
|
|
"y": 740,
|
|
"wires": [
|
|
[
|
|
"5f94b366.e4d3a4"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "5f94b366.e4d3a4",
|
|
"type": "ui_ui_control",
|
|
"z": "1371dec5.76e671",
|
|
"name": "",
|
|
"events": "change",
|
|
"x": 580,
|
|
"y": 740,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "43cf8ff7.75231",
|
|
"type": "rpi-gpio out",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "Pump Enable",
|
|
"pin": "7",
|
|
"set": true,
|
|
"level": "1",
|
|
"freq": "",
|
|
"out": "out",
|
|
"x": 400,
|
|
"y": 80,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "4bca8a25.15be3c",
|
|
"type": "rpi-gpio out",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "Focus Enable",
|
|
"pin": "32",
|
|
"set": true,
|
|
"level": "1",
|
|
"freq": "",
|
|
"out": "out",
|
|
"x": 400,
|
|
"y": 120,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "50f9b5b.a84bccc",
|
|
"type": "inject",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "Default: ON",
|
|
"props": [
|
|
{
|
|
"p": "payload"
|
|
}
|
|
],
|
|
"repeat": "",
|
|
"crontab": "",
|
|
"once": true,
|
|
"onceDelay": "0.01",
|
|
"topic": "",
|
|
"payload": "true",
|
|
"payloadType": "bool",
|
|
"x": 150,
|
|
"y": 100,
|
|
"wires": [
|
|
[
|
|
"43cf8ff7.75231",
|
|
"4bca8a25.15be3c"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "8bd1f3dc.9affe8",
|
|
"type": "exec",
|
|
"z": "9daf9e2b.019fc",
|
|
"command": "",
|
|
"addpay": true,
|
|
"append": "",
|
|
"useSpawn": "false",
|
|
"timer": "1",
|
|
"oldrc": false,
|
|
"name": "git user.name",
|
|
"x": 1150,
|
|
"y": 60,
|
|
"wires": [
|
|
[],
|
|
[],
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "b40d1f65.39e14",
|
|
"type": "template",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "git config",
|
|
"field": "payload",
|
|
"fieldType": "msg",
|
|
"format": "handlebars",
|
|
"syntax": "mustache",
|
|
"template": "git config --global --replace-all user.name \"{{payload}}\"",
|
|
"output": "str",
|
|
"x": 960,
|
|
"y": 60,
|
|
"wires": [
|
|
[
|
|
"8bd1f3dc.9affe8"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "35eb925e.5f8016",
|
|
"type": "link in",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "Git config",
|
|
"links": [
|
|
"52af9ac0.60eb24",
|
|
"3caed565.fad25a"
|
|
],
|
|
"x": 775,
|
|
"y": 100,
|
|
"wires": [
|
|
[
|
|
"b40d1f65.39e14",
|
|
"6d7dd372.3b7814"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "4e5183bd.e77bac",
|
|
"type": "exec",
|
|
"z": "9daf9e2b.019fc",
|
|
"command": "",
|
|
"addpay": true,
|
|
"append": "",
|
|
"useSpawn": "false",
|
|
"timer": "1",
|
|
"oldrc": false,
|
|
"name": "git user.email",
|
|
"x": 1150,
|
|
"y": 140,
|
|
"wires": [
|
|
[],
|
|
[],
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "6d7dd372.3b7814",
|
|
"type": "template",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "git config",
|
|
"field": "payload",
|
|
"fieldType": "msg",
|
|
"format": "handlebars",
|
|
"syntax": "mustache",
|
|
"template": "git config --global --replace-all user.email \"{{payload}}\"",
|
|
"output": "str",
|
|
"x": 960,
|
|
"y": 140,
|
|
"wires": [
|
|
[
|
|
"4e5183bd.e77bac"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "e564e9ad.7c312",
|
|
"type": "ui_button",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "Update",
|
|
"group": "1be83144.4fe4bf",
|
|
"order": 7,
|
|
"width": 6,
|
|
"height": 1,
|
|
"passthru": false,
|
|
"label": "System Update",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "",
|
|
"icon": "mi-system_update",
|
|
"payload": " ",
|
|
"payloadType": "str",
|
|
"topic": "update",
|
|
"topicType": "str",
|
|
"x": 260,
|
|
"y": 460,
|
|
"wires": [
|
|
[
|
|
"2d2ef1fd.40e6e6"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "2d2ef1fd.40e6e6",
|
|
"type": "exec",
|
|
"z": "9daf9e2b.019fc",
|
|
"command": "bash /home/pi/PlanktonScope/scripts/bash/update.sh",
|
|
"addpay": true,
|
|
"append": "",
|
|
"useSpawn": "true",
|
|
"timer": "",
|
|
"oldrc": false,
|
|
"name": "Update",
|
|
"x": 460,
|
|
"y": 460,
|
|
"wires": [
|
|
[
|
|
"64f61762.68c788",
|
|
"8b511c2b.9c24c8",
|
|
"83c5a708.a5715",
|
|
"d334d264.8a7728"
|
|
],
|
|
[
|
|
"8b511c2b.9c24c8"
|
|
],
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "8f08c4eb.db74b8",
|
|
"type": "ui_template",
|
|
"z": "9daf9e2b.019fc",
|
|
"group": "1be83144.4fe4bf",
|
|
"name": "Update message",
|
|
"order": 1,
|
|
"width": 12,
|
|
"height": 3,
|
|
"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!\nAlso, you can choose the branch you want to update to. BE CAREFUL, selecting a branch WILL update the code immediately.\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": 150,
|
|
"y": 260,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "64f61762.68c788",
|
|
"type": "ui_toast",
|
|
"z": "9daf9e2b.019fc",
|
|
"position": "dialog",
|
|
"displayTime": "10",
|
|
"highlight": "",
|
|
"sendall": true,
|
|
"outputs": 1,
|
|
"ok": "OK",
|
|
"cancel": "",
|
|
"raw": false,
|
|
"topic": "",
|
|
"name": "Update notif",
|
|
"x": 730,
|
|
"y": 440,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "d59021e3.1b63e8",
|
|
"type": "function",
|
|
"z": "f21ba04.c26266",
|
|
"name": "add network",
|
|
"func": "var data = msg.payload\n\nvar command = `wpa_passphrase \"${data.ssid}\" \"${data.password}\" | sed '/#psk=\".*\"/d' | sudo tee -a /etc/wpa_supplicant/wpa_supplicant.conf > /dev/null`\n \nmsg.payload = command\n\nreturn msg",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 1330,
|
|
"y": 80,
|
|
"wires": [
|
|
[
|
|
"64a1f2f2.3de8b4"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "64a1f2f2.3de8b4",
|
|
"type": "exec",
|
|
"z": "f21ba04.c26266",
|
|
"command": "",
|
|
"addpay": true,
|
|
"append": "",
|
|
"useSpawn": "false",
|
|
"timer": "",
|
|
"oldrc": false,
|
|
"name": "Save Network",
|
|
"x": 1520,
|
|
"y": 80,
|
|
"wires": [
|
|
[
|
|
"6868b4c4.65987c"
|
|
],
|
|
[],
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "6868b4c4.65987c",
|
|
"type": "exec",
|
|
"z": "f21ba04.c26266",
|
|
"command": "sudo /usr/bin/autohotspotN >/dev/null",
|
|
"addpay": false,
|
|
"append": "",
|
|
"useSpawn": "false",
|
|
"timer": "",
|
|
"oldrc": false,
|
|
"name": "reconfigure",
|
|
"x": 1710,
|
|
"y": 80,
|
|
"wires": [
|
|
[
|
|
"59e24c40.e1a4dc"
|
|
],
|
|
[],
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "59e24c40.e1a4dc",
|
|
"type": "function",
|
|
"z": "f21ba04.c26266",
|
|
"name": "showMessage",
|
|
"func": "msg.payload = \"Wifi configuration updated successfully\"\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 1440,
|
|
"y": 180,
|
|
"wires": [
|
|
[
|
|
"4ecb6be2.ad39f4"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "4ecb6be2.ad39f4",
|
|
"type": "ui_toast",
|
|
"z": "f21ba04.c26266",
|
|
"position": "dialog",
|
|
"displayTime": "3",
|
|
"highlight": "",
|
|
"sendall": true,
|
|
"outputs": 1,
|
|
"ok": "OK",
|
|
"cancel": "",
|
|
"raw": false,
|
|
"topic": "",
|
|
"name": "",
|
|
"x": 1650,
|
|
"y": 180,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "f30bf784.90d58",
|
|
"type": "ui_dropdown",
|
|
"z": "1371dec5.76e671",
|
|
"name": "",
|
|
"label": "",
|
|
"tooltip": "",
|
|
"place": "Choose USB device",
|
|
"group": "52d1b77.28369c8",
|
|
"order": 2,
|
|
"width": 0,
|
|
"height": 0,
|
|
"passthru": false,
|
|
"multiple": false,
|
|
"options": [
|
|
{
|
|
"label": "",
|
|
"value": "No Drive Detected",
|
|
"type": "str"
|
|
}
|
|
],
|
|
"payload": "",
|
|
"topic": "device_path",
|
|
"x": 840,
|
|
"y": 820,
|
|
"wires": [
|
|
[
|
|
"d1b9fed3.f3ead8"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "fe29acc2.c25d18",
|
|
"type": "ui_button",
|
|
"z": "1371dec5.76e671",
|
|
"name": "Detect drive",
|
|
"group": "52d1b77.28369c8",
|
|
"order": 1,
|
|
"width": 0,
|
|
"height": 0,
|
|
"passthru": false,
|
|
"label": "Detect drive",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "",
|
|
"icon": "fa-usb fa-2x",
|
|
"payload": "",
|
|
"payloadType": "str",
|
|
"topic": "",
|
|
"x": 150,
|
|
"y": 820,
|
|
"wires": [
|
|
[
|
|
"4c00cd96.6b2f6c"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "4c00cd96.6b2f6c",
|
|
"type": "exec",
|
|
"z": "1371dec5.76e671",
|
|
"command": "lsblk --bytes --json --paths --output-all",
|
|
"addpay": false,
|
|
"append": "",
|
|
"useSpawn": "false",
|
|
"timer": "",
|
|
"oldrc": false,
|
|
"name": "detect drive",
|
|
"x": 330,
|
|
"y": 820,
|
|
"wires": [
|
|
[
|
|
"2dc1e43d.cd3d64"
|
|
],
|
|
[],
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "2dc1e43d.cd3d64",
|
|
"type": "json",
|
|
"z": "1371dec5.76e671",
|
|
"name": "",
|
|
"property": "payload",
|
|
"action": "",
|
|
"pretty": false,
|
|
"x": 490,
|
|
"y": 820,
|
|
"wires": [
|
|
[
|
|
"6b730649.09351"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "6b730649.09351",
|
|
"type": "change",
|
|
"z": "1371dec5.76e671",
|
|
"name": "",
|
|
"rules": [
|
|
{
|
|
"t": "set",
|
|
"p": "options",
|
|
"pt": "msg",
|
|
"to": "[payload.blockdevices.children[mountpoint=null].name]",
|
|
"tot": "jsonata"
|
|
}
|
|
],
|
|
"action": "",
|
|
"property": "",
|
|
"from": "",
|
|
"to": "",
|
|
"reg": false,
|
|
"x": 660,
|
|
"y": 820,
|
|
"wires": [
|
|
[
|
|
"f30bf784.90d58"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "1ece8d8e.1008e2",
|
|
"type": "ui_button",
|
|
"z": "1371dec5.76e671",
|
|
"name": "Backup to USB",
|
|
"group": "52d1b77.28369c8",
|
|
"order": 3,
|
|
"width": 0,
|
|
"height": 0,
|
|
"passthru": false,
|
|
"label": "Backup to USB",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "",
|
|
"icon": "archive",
|
|
"payload": "",
|
|
"payloadType": "str",
|
|
"topic": "USB Backup",
|
|
"x": 160,
|
|
"y": 900,
|
|
"wires": [
|
|
[
|
|
"6b2fed77.883c0c"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "d1b9fed3.f3ead8",
|
|
"type": "function",
|
|
"z": "1371dec5.76e671",
|
|
"name": "set local",
|
|
"func": "flow.set(msg.topic,msg.payload);",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 1000,
|
|
"y": 820,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "6b2fed77.883c0c",
|
|
"type": "function",
|
|
"z": "1371dec5.76e671",
|
|
"name": "get device_path",
|
|
"func": "msg.payload = flow.get(\"device_path\");\nreturn msg",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 360,
|
|
"y": 900,
|
|
"wires": [
|
|
[
|
|
"df4d4d6a.24787"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "c74fe76.bcba718",
|
|
"type": "exec",
|
|
"z": "1371dec5.76e671",
|
|
"command": "sudo /home/pi/PlanktonScope/scripts/bash/usb_backup.sh",
|
|
"addpay": true,
|
|
"append": "",
|
|
"useSpawn": "true",
|
|
"timer": "",
|
|
"oldrc": false,
|
|
"name": "usb_backup.sh",
|
|
"x": 720,
|
|
"y": 920,
|
|
"wires": [
|
|
[
|
|
"72f5e8d4.40fcb8"
|
|
],
|
|
[],
|
|
[
|
|
"a2c36500.6d376"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "df4d4d6a.24787",
|
|
"type": "switch",
|
|
"z": "1371dec5.76e671",
|
|
"name": "No Drive",
|
|
"property": "payload",
|
|
"propertyType": "msg",
|
|
"rules": [
|
|
{
|
|
"t": "eq",
|
|
"v": "No Drive Detected",
|
|
"vt": "str"
|
|
},
|
|
{
|
|
"t": "else"
|
|
}
|
|
],
|
|
"checkall": "false",
|
|
"repair": false,
|
|
"outputs": 2,
|
|
"x": 520,
|
|
"y": 900,
|
|
"wires": [
|
|
[
|
|
"9a577caa.1535a"
|
|
],
|
|
[
|
|
"c74fe76.bcba718",
|
|
"4997446.5176d3c"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "9a577caa.1535a",
|
|
"type": "ui_toast",
|
|
"z": "1371dec5.76e671",
|
|
"position": "dialog",
|
|
"displayTime": "5",
|
|
"highlight": "",
|
|
"sendall": true,
|
|
"outputs": 1,
|
|
"ok": "OK",
|
|
"cancel": "",
|
|
"raw": false,
|
|
"topic": "",
|
|
"name": "",
|
|
"x": 710,
|
|
"y": 880,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "72f5e8d4.40fcb8",
|
|
"type": "ui_toast",
|
|
"z": "1371dec5.76e671",
|
|
"position": "top right",
|
|
"displayTime": "5",
|
|
"highlight": "",
|
|
"sendall": true,
|
|
"outputs": 0,
|
|
"ok": "OK",
|
|
"cancel": "",
|
|
"raw": false,
|
|
"topic": "",
|
|
"name": "",
|
|
"x": 930,
|
|
"y": 900,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "81a48376.27a66",
|
|
"type": "ui_toast",
|
|
"z": "1371dec5.76e671",
|
|
"position": "dialog",
|
|
"displayTime": "5",
|
|
"highlight": "",
|
|
"sendall": true,
|
|
"outputs": 1,
|
|
"ok": "OK",
|
|
"cancel": "",
|
|
"raw": false,
|
|
"topic": "",
|
|
"name": "",
|
|
"x": 1110,
|
|
"y": 980,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "a2c36500.6d376",
|
|
"type": "function",
|
|
"z": "1371dec5.76e671",
|
|
"name": "return code",
|
|
"func": "switch (msg.payload.code){\ncase 0:\n msg.payload = \"All files successfully copied, you can remove your usb drive!\";\n break;\ncase 1:\n msg.payload = \"There was an error!\";\n break;\ncase 2:\n msg.payload = \"Error: your device is already mounted\"\n break;\ncase 3:\n msg.payload = \"Error while mounting the device\"\n break;\ncase 4:\n msg.payload = \"Error: some files were corrupted during the copy!\"\n break;\n}\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 910,
|
|
"y": 940,
|
|
"wires": [
|
|
[
|
|
"81a48376.27a66"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "dde0025c.3df9f",
|
|
"type": "ui_button",
|
|
"z": "1371dec5.76e671",
|
|
"name": "Purge local",
|
|
"group": "52d1b77.28369c8",
|
|
"order": 4,
|
|
"width": 0,
|
|
"height": 0,
|
|
"passthru": false,
|
|
"label": "Purge local data",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "#AD1625",
|
|
"icon": "delete_forever",
|
|
"payload": "THIS IS GOING TO WIPE ALL THE LOCAL DATA. MAKE SURE YOU DID A BACKUP TO AN USB DRIVE BEFOREHAND.",
|
|
"payloadType": "str",
|
|
"topic": "BE EXTRA CAREFUL",
|
|
"x": 150,
|
|
"y": 1020,
|
|
"wires": [
|
|
[
|
|
"ba72704a.8a38a"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "ba72704a.8a38a",
|
|
"type": "ui_toast",
|
|
"z": "1371dec5.76e671",
|
|
"position": "dialog",
|
|
"displayTime": "5",
|
|
"highlight": "",
|
|
"sendall": true,
|
|
"outputs": 1,
|
|
"ok": "GO BACK",
|
|
"cancel": "YES I'M SURE, I WANT TO PURGE THE DATA",
|
|
"raw": false,
|
|
"topic": "Data purge",
|
|
"name": "",
|
|
"x": 350,
|
|
"y": 1020,
|
|
"wires": [
|
|
[
|
|
"d80e6307.3aaf8"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "d80e6307.3aaf8",
|
|
"type": "switch",
|
|
"z": "1371dec5.76e671",
|
|
"name": "",
|
|
"property": "payload",
|
|
"propertyType": "msg",
|
|
"rules": [
|
|
{
|
|
"t": "cont",
|
|
"v": "YES I'M SURE",
|
|
"vt": "str"
|
|
}
|
|
],
|
|
"checkall": "true",
|
|
"repair": false,
|
|
"outputs": 1,
|
|
"x": 530,
|
|
"y": 1020,
|
|
"wires": [
|
|
[
|
|
"4a8cb5d4.52e4bc"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "4a8cb5d4.52e4bc",
|
|
"type": "exec",
|
|
"z": "1371dec5.76e671",
|
|
"command": "rm -rf /home/pi/data/img /home/pi/data/objects /home/pi/data/export",
|
|
"addpay": false,
|
|
"append": "",
|
|
"useSpawn": "false",
|
|
"timer": "",
|
|
"oldrc": false,
|
|
"name": "rm data",
|
|
"x": 680,
|
|
"y": 1020,
|
|
"wires": [
|
|
[
|
|
"c5b1e763.d1bba8"
|
|
],
|
|
[],
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "2dc762df.08cd7e",
|
|
"type": "inject",
|
|
"z": "baa1e3d9.cb29d",
|
|
"name": "Default: 0.01",
|
|
"props": [
|
|
{
|
|
"p": "payload"
|
|
}
|
|
],
|
|
"repeat": "",
|
|
"crontab": "",
|
|
"once": true,
|
|
"onceDelay": 0.1,
|
|
"topic": "",
|
|
"payload": "0.05",
|
|
"payloadType": "num",
|
|
"x": 310,
|
|
"y": 320,
|
|
"wires": [
|
|
[
|
|
"df1ea904.cd261"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "c33f1124.af6688",
|
|
"type": "ui_form",
|
|
"z": "b771c342.49603",
|
|
"name": "sample_location",
|
|
"label": "Sample Location",
|
|
"group": "cef1e703.bcf3c8",
|
|
"order": 1,
|
|
"width": 0,
|
|
"height": 0,
|
|
"options": [
|
|
{
|
|
"label": "Latitude (36.574439°N or 36°57.4439'N)",
|
|
"value": "object_lat",
|
|
"type": "text",
|
|
"required": true,
|
|
"rows": null
|
|
},
|
|
{
|
|
"label": "Longitude (110.42100°W or 110°4.2100'W)",
|
|
"value": "object_lon",
|
|
"type": "text",
|
|
"required": true,
|
|
"rows": null
|
|
},
|
|
{
|
|
"label": "Date (YYYY-MM-DD, UTC)",
|
|
"value": "object_date",
|
|
"type": "text",
|
|
"required": true,
|
|
"rows": null
|
|
},
|
|
{
|
|
"label": "Time (HH:MM(:SS), UTC 24h)",
|
|
"value": "object_time",
|
|
"type": "text",
|
|
"required": true,
|
|
"rows": null
|
|
}
|
|
],
|
|
"formValue": {
|
|
"object_lat": "",
|
|
"object_lon": "",
|
|
"object_date": "",
|
|
"object_time": ""
|
|
},
|
|
"payload": "",
|
|
"submit": "Validate",
|
|
"cancel": "Reset",
|
|
"topic": "sample_location",
|
|
"x": 660,
|
|
"y": 420,
|
|
"wires": [
|
|
[
|
|
"14658615.47c862"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "358908cd.416ab",
|
|
"type": "ui_form",
|
|
"z": "b771c342.49603",
|
|
"name": "net_throw_location",
|
|
"label": "Net Throw Location",
|
|
"group": "cf5d9f0e.d57e7",
|
|
"order": 1,
|
|
"width": 0,
|
|
"height": 0,
|
|
"options": [
|
|
{
|
|
"label": "Latitude (36.574439°N or 36°57.4439'N)",
|
|
"value": "object_lat",
|
|
"type": "text",
|
|
"required": true,
|
|
"rows": null
|
|
},
|
|
{
|
|
"label": "Longitude (110.42100°W or 110°4.2100'W)",
|
|
"value": "object_lon",
|
|
"type": "text",
|
|
"required": true,
|
|
"rows": null
|
|
},
|
|
{
|
|
"label": "Date (YYYY-MM-DD, UTC)",
|
|
"value": "object_date",
|
|
"type": "text",
|
|
"required": true,
|
|
"rows": null
|
|
},
|
|
{
|
|
"label": "Time (HH:MM(:SS), UTC 24h)",
|
|
"value": "object_time",
|
|
"type": "text",
|
|
"required": true,
|
|
"rows": null
|
|
}
|
|
],
|
|
"formValue": {
|
|
"object_lat": "",
|
|
"object_lon": "",
|
|
"object_date": "",
|
|
"object_time": ""
|
|
},
|
|
"payload": "",
|
|
"submit": "Validate",
|
|
"cancel": "Reset",
|
|
"topic": "net_throw_location",
|
|
"x": 650,
|
|
"y": 460,
|
|
"wires": [
|
|
[
|
|
"14658615.47c862"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "56d40584.eff4e4",
|
|
"type": "ui_form",
|
|
"z": "b771c342.49603",
|
|
"name": "net_retrieval_location",
|
|
"label": "Net Retrieval Location",
|
|
"group": "cf5d9f0e.d57e7",
|
|
"order": 2,
|
|
"width": 0,
|
|
"height": 0,
|
|
"options": [
|
|
{
|
|
"label": "Latitude (36.574439°N or 36°57.4439'N)",
|
|
"value": "object_lat_end",
|
|
"type": "text",
|
|
"required": true,
|
|
"rows": null
|
|
},
|
|
{
|
|
"label": "Longitude (110.42100°W or 110°4.2100'W)",
|
|
"value": "object_lon_end",
|
|
"type": "text",
|
|
"required": true,
|
|
"rows": null
|
|
},
|
|
{
|
|
"label": "Date (YYYY-MM-DD, UTC)",
|
|
"value": "object_date_end",
|
|
"type": "text",
|
|
"required": true,
|
|
"rows": null
|
|
},
|
|
{
|
|
"label": "Time (HH:MM(:SS), UTC 24h)",
|
|
"value": "object_time_end",
|
|
"type": "text",
|
|
"required": true,
|
|
"rows": null
|
|
}
|
|
],
|
|
"formValue": {
|
|
"object_lat_end": "",
|
|
"object_lon_end": "",
|
|
"object_date_end": "",
|
|
"object_time_end": ""
|
|
},
|
|
"payload": "",
|
|
"submit": "Validate",
|
|
"cancel": "Reset",
|
|
"topic": "net_retrieval_location",
|
|
"x": 640,
|
|
"y": 500,
|
|
"wires": [
|
|
[
|
|
"14658615.47c862"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "14658615.47c862",
|
|
"type": "function",
|
|
"z": "b771c342.49603",
|
|
"name": "Validate Form",
|
|
"func": "function ConvertDDMMToDD(input) {\n // Input Format 36°57.4439' N, 110°4.2100' W\n // From https://stackoverflow.com/questions/1140189/converting-latitude-and-longitude-to-decimal-values\n if (!input.match(/\\d\\d°\\d\\d\\.*\\d*\\'\\s*[NSEW]/)){\n \treturn \"parsing error\"\n }\n var parts = input.split(/[^\\d.\\w]+/)\n if (parts.length != 3){\n \treturn \"parsing error\"\n }\n var dd = Number(parts[0]) + Number(parts[1])/60\n return dd.toFixed(6) + parts[2]\n}\n\nfunction ValidateCoordinates(input, lat){\n // Input Format 36.574439°N, 110.42100°W\n // Or 36°57.4439'N, 110°4.2100'W\n if (input.match(\"'\")){\n input = ConvertDDMMToDD(input)\n }\n var direction = input.match(/[NSEW]/)\n var position = input.match(/[\\+\\-\\d\\.]+/)\n var error = {}\n\n if (input.startsWith(\"parsing error\")){\n error.topic = \"Error with the \"\n error.payload = \"You need to respect the format example, 36.574439°N or 36°57.4439'N\"\n return [null, error]\n }\n \n if (direction === null){\n error.topic = \"Error with the \"\n error.payload = \"You need to explicitely enter N/S/E/W\"\n return [null, error]\n }\n \n // Test that position is only made of digits!\n if(/^[\\+\\-]/.test(position)){\n error.topic = \"Error with the \"\n error.payload = \"Use of +/- sign is inconsistent with N/S/E/W letter! Please only use N/S/E/W!\"\n return [null, error]\n }\n \n var dd = Number(position)\n if (lat){\n // Check latitude\n if (direction == \"S\" || direction == \"N\") {\n if (dd>90.0){\n error.topic = \"Error with the \"\n error.payload = \"Latitude is more than 90°\"\n return [null, error]\n }\n }\n if (direction == \"W\" || direction == \"E\") {\n error.topic = \"Error with the \"\n error.payload = \"This is not a Latitude!\"\n return [null, error]\n }\n }\n else{\n // Check longitude\n if (direction == \"W\" || direction == \"E\") {\n if (dd>180.0){\n error.topic = \"Error with the \"\n error.payload = \"Longitude is more than 180°\"\n return [null, error]\n }\n }\n if (direction == \"N\" || direction == \"S\") {\n error.topic = \"Error with the \"\n error.payload = \"This is not a Longitude!\"\n return [null, error]\n }\n }\n \n if (direction == \"S\" || direction == \"W\") {\n dd = dd * -1\n } // Don't do anything for N or E\n return [dd.toFixed(4), null]\n \n}\n\nfunction ValidateDate(input){\n // Input Format 2020-12-25\n var error = {};\n \n if (! /20\\d{2}-[0-1]\\d-[0-3]\\d/.test(input)){\n error.topic = \"Error with the date\";\n error.payload = \"The date should respect the ISO format YYYY-MM-DD\";\n return [null, error];\n }\n else {\n var date = input.match(/\\d+/g);\n if (!((2000 < date[0]) && (date[0] < 2100))){\n error.topic = \"Error with the date\"\n error.payload = \"The year should be between 2000 and 2100\"\n return [null, error]\n }\n else if (!((0 < date[1]) && (date[1] <= 12))){\n error.topic = \"Error with the date\"\n error.payload = \"The month should be between 01 and 12\"\n return [null, error]\n }\n else if (!((0 < date[2]) && (date[2] <= 31))){\n error.topic = \"Error with the date\"\n error.payload = \"The day should be between 01 and 31\"\n return [null, error]\n }\n }\n return [input.replace(/-/g, ''), null]\n}\n\nfunction ValidateTime(input){\n // Input Format 12:00 or 12:00:00\n var error = {}\n \n if (! /[0-2]?\\d:[0-5]\\d(:[0-5]\\d)?/.test(input)){\n error.topic = \"Error with the time\"\n error.payload = \"The date should respect the ISO format HH:MM(:SS) (:SS is optional)\"\n return [null, error]\n }\n else {\n var time = input.match(/\\d+/g)\n \n if (!((0 <= time[0]) && (time[0] < 24))){\n error.topic = \"Error with the time\"\n error.payload = \"The hours should be 0 and 23.\"\n return [null, error]\n }\n else if (!((0 <= time[1]) && (time[1] < 60))){\n error.topic = \"Error with the time\"\n error.payload = \"The minutes should be between 0 and 59\"\n return [null, error]\n }\n \n if (time.length > 2){\n if (!((0 <= time[2]) && (time[2] < 60))){\n error.topic = \"Error with the time\"\n error.payload = \"The seconds should be between 01 and 31\"\n return [null, error]\n }\n }\n else {\n input = input + \":00\"\n }\n }\n return [input.replace(/:/g, ''), null]\n}\n\n\nvar ret\nvar payload_for_form = {payload:{}}\n\nif (msg.topic == \"net_retrieval_location\"){\n ret = ValidateCoordinates(msg.payload.object_lat_end, true);\n if (ret[1] !== null){\n msg.topic = ret[1].topic + \" Latitude\"\n msg.payload = ret[1].payload\n return [msg, null]\n }\n global.set(\"object_lat_end\", ret[0])\n ret = ValidateCoordinates(msg.payload.object_lon_end, false)\n if (ret[1] !== null){\n msg.topic = ret[1].topic + \" Longitude\"\n msg.payload = ret[1].payload\n return [msg, null]\n }\n global.set(\"object_lon_end\", ret[0]);\n \n ret = ValidateDate(msg.payload.object_date_end)\n if (ret[1] !== null){\n msg.topic = ret[1].topic + \" of the sample retrieval\"\n msg.payload = ret[1].payload\n return [msg, null]\n }\n global.set(\"object_date_end\", ret[0])\n \n ret = ValidateTime(msg.payload.object_time_end)\n if (ret[1] !== null){\n msg.topic = ret[1].topic + \" of the sample retrieval\"\n msg.payload = ret[1].payload\n return [msg, null]\n }\n global.set(\"object_time_end\", ret[0])\n}\nelse{\n ret = ValidateCoordinates(msg.payload.object_lat, true);\n if (ret[1] !== null){\n msg.topic = ret[1].topic + \" Latitude\";\n msg.payload = ret[1].payload\n return [msg, null]\n }\n global.set(\"object_lat\", ret[0]);\n payload_for_form.payload[\"object_lat_end\"] = msg.payload.object_lat;\n \n ret = ValidateCoordinates(msg.payload.object_lon, false);\n if (ret[1] !== null){\n msg.topic = ret[1].topic + \" Longitude\"\n msg.payload = ret[1].payload\n return [msg, null]\n }\n global.set(\"object_lon\", ret[0])\n payload_for_form.payload[\"object_lon_end\"] = msg.payload.object_lon;\n\n ret = ValidateDate(msg.payload.object_date)\n if (ret[1] !== null){\n msg.topic = ret[1].topic + \" of the sample\"\n msg.payload = ret[1].payload\n return [msg, null]\n }\n global.set(\"object_date\", ret[0])\n payload_for_form.payload[\"object_date_end\"] = msg.payload.object_date;\n \n ret = ValidateTime(msg.payload.object_time)\n if (ret[1] !== null){\n msg.topic = ret[1].topic + \" of the sample\"\n msg.payload = ret[1].payload\n return [msg, null]\n }\n global.set(\"object_time\", ret[0])\n payload_for_form.payload[\"object_time_end\"] = msg.payload.object_time;\n}\nreturn [{topic: \"Coordinates valid!\", payload: \"All good!\"}, payload_for_form]\n",
|
|
"outputs": 2,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 880,
|
|
"y": 460,
|
|
"wires": [
|
|
[
|
|
"c0ce5626.b6c5"
|
|
],
|
|
[
|
|
"56d40584.eff4e4"
|
|
]
|
|
],
|
|
"inputLabels": [
|
|
"location"
|
|
],
|
|
"outputLabels": [
|
|
"checked location",
|
|
""
|
|
]
|
|
},
|
|
{
|
|
"id": "296c73f.78ff10c",
|
|
"type": "delay",
|
|
"z": "b771c342.49603",
|
|
"name": "",
|
|
"pauseType": "delay",
|
|
"timeout": "1",
|
|
"timeoutUnits": "seconds",
|
|
"rate": "1",
|
|
"nbRateUnits": "1",
|
|
"rateUnits": "second",
|
|
"randomFirst": "1",
|
|
"randomLast": "2",
|
|
"randomUnits": "milliseconds",
|
|
"drop": false,
|
|
"x": 140,
|
|
"y": 200,
|
|
"wires": [
|
|
[
|
|
"a3272681.f271c8"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "46eb1bf8.3dc5f4",
|
|
"type": "function",
|
|
"z": "b771c342.49603",
|
|
"name": "Net check",
|
|
"func": "var decknet = {}\nvar activation_msg = {}\n\nif (msg.payload.startsWith(\"net_decknet\")){\n decknet.enabled = true;\n}\nelse {\n decknet.enabled = false;\n}\n\nif (msg.payload.startsWith(\"net\")){\n activation_msg.payload = {\"group\":{\"show\":[\"Sample_Net_Metadata\"],\"hide\":[\"Sample_Sample_Location\"]}};\n}\nelse{\n activation_msg.payload = {\"group\":{\"hide\":[\"Sample_Net_Metadata\"],\"show\":[\"Sample_Sample_Location\"]}};\n}\n\n\nreturn [decknet, activation_msg];",
|
|
"outputs": 2,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 1080,
|
|
"y": 240,
|
|
"wires": [
|
|
[
|
|
"516375fd.2ed61c",
|
|
"470e382a.25691",
|
|
"fbe32ac8.ff6a38"
|
|
],
|
|
[
|
|
"cbb123ab.fd3428"
|
|
]
|
|
],
|
|
"outputLabels": [
|
|
"decknet activation",
|
|
"group display control"
|
|
]
|
|
},
|
|
{
|
|
"id": "516375fd.2ed61c",
|
|
"type": "ui_text_input",
|
|
"z": "b771c342.49603",
|
|
"name": "sample_total_flowmeter_start",
|
|
"label": "Decknet flowmeter start",
|
|
"tooltip": "in L",
|
|
"group": "cf5d9f0e.d57e7",
|
|
"order": 5,
|
|
"width": 5,
|
|
"height": 1,
|
|
"passthru": false,
|
|
"mode": "text",
|
|
"delay": "0",
|
|
"topic": "sample_total_flowmeter_start",
|
|
"x": 1350,
|
|
"y": 180,
|
|
"wires": [
|
|
[
|
|
"c23967d8.8d088"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "470e382a.25691",
|
|
"type": "ui_text_input",
|
|
"z": "b771c342.49603",
|
|
"name": "sample_total_flowmeter_end",
|
|
"label": "Decknet flowmeter end",
|
|
"tooltip": "in L",
|
|
"group": "cf5d9f0e.d57e7",
|
|
"order": 6,
|
|
"width": 5,
|
|
"height": 1,
|
|
"passthru": false,
|
|
"mode": "text",
|
|
"delay": "0",
|
|
"topic": "sample_total_flowmeter_end",
|
|
"x": 1340,
|
|
"y": 220,
|
|
"wires": [
|
|
[
|
|
"c23967d8.8d088"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "c23967d8.8d088",
|
|
"type": "function",
|
|
"z": "b771c342.49603",
|
|
"name": "Store sample_total_volume",
|
|
"func": "if (msg.topic == \"sample_total_flowmeter_start\"){\n context.set(\"sample_total_flowmeter_start\", msg.payload);\n}\nif (msg.topic == \"sample_total_flowmeter_end\"){\n context.set(\"sample_total_flowmeter_end\", msg.payload);\n}\nif (context.keys().length == 2){\n sample_total_volume = context.get(\"sample_total_flowmeter_end\") - context.get(\"sample_total_flowmeter_start\");\n global.set(\"sample_total_volume\", sample_total_volume);\n}\n\n",
|
|
"outputs": 2,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 1640,
|
|
"y": 200,
|
|
"wires": [
|
|
[],
|
|
[]
|
|
],
|
|
"outputLabels": [
|
|
"decknet activation",
|
|
"group display control"
|
|
]
|
|
},
|
|
{
|
|
"id": "fbe32ac8.ff6a38",
|
|
"type": "ui_template",
|
|
"z": "b771c342.49603",
|
|
"group": "cf5d9f0e.d57e7",
|
|
"name": "Decknet flowmeter read",
|
|
"order": 4,
|
|
"width": 10,
|
|
"height": 1,
|
|
"format": "<div style=\"line-height: 100%;\">\n <p class=\"formlabel\" style=\"font-size: larger;\">Decknet flowmeter readings</p>\n <p style=\"font-size: smaller;\">Those values are used to calculate <font style=\"font-family: mono;\">sample_total_volume</font>. Values are in L.</p>\n</div>\n",
|
|
"storeOutMessages": true,
|
|
"fwdInMessages": true,
|
|
"resendOnRefresh": true,
|
|
"templateScope": "local",
|
|
"x": 1330,
|
|
"y": 140,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "1f63860d.5f5efa",
|
|
"type": "file in",
|
|
"z": "4ed26b8b.253504",
|
|
"name": "",
|
|
"filename": "/home/pi/PlanktonScope/hardware.json",
|
|
"format": "utf8",
|
|
"chunk": false,
|
|
"sendError": false,
|
|
"encoding": "none",
|
|
"x": 380,
|
|
"y": 80,
|
|
"wires": [
|
|
[
|
|
"8c1fda48.d7d828"
|
|
]
|
|
],
|
|
"info": "# PlanktonScope Help\nThis Node will read the content of the file named **config.txt** containing all the input placeholders.\n"
|
|
},
|
|
{
|
|
"id": "8c1fda48.d7d828",
|
|
"type": "json",
|
|
"z": "4ed26b8b.253504",
|
|
"name": "Parse JSON",
|
|
"property": "payload",
|
|
"action": "",
|
|
"pretty": false,
|
|
"x": 650,
|
|
"y": 80,
|
|
"wires": [
|
|
[
|
|
"ddb4b136.fc0b78"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "82099021.9ceb08",
|
|
"type": "file",
|
|
"z": "4ed26b8b.253504",
|
|
"name": "",
|
|
"filename": "/home/pi/PlanktonScope/hardware.json",
|
|
"appendNewline": true,
|
|
"createDir": true,
|
|
"overwriteFile": "true",
|
|
"encoding": "none",
|
|
"x": 780,
|
|
"y": 200,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "bb0a8725.a1849",
|
|
"type": "json",
|
|
"z": "4ed26b8b.253504",
|
|
"name": "Create JSON",
|
|
"property": "payload",
|
|
"action": "str",
|
|
"pretty": true,
|
|
"x": 500,
|
|
"y": 200,
|
|
"wires": [
|
|
[
|
|
"82099021.9ceb08"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "f748d952.4b6bc8",
|
|
"type": "inject",
|
|
"z": "4ed26b8b.253504",
|
|
"name": "Load config",
|
|
"props": [
|
|
{
|
|
"p": "topic",
|
|
"vt": "str"
|
|
}
|
|
],
|
|
"repeat": "",
|
|
"crontab": "",
|
|
"once": true,
|
|
"onceDelay": 0.1,
|
|
"topic": "",
|
|
"x": 110,
|
|
"y": 80,
|
|
"wires": [
|
|
[
|
|
"1f63860d.5f5efa"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "ddb4b136.fc0b78",
|
|
"type": "change",
|
|
"z": "4ed26b8b.253504",
|
|
"name": "",
|
|
"rules": [
|
|
{
|
|
"t": "set",
|
|
"p": "hardware_conf",
|
|
"pt": "global",
|
|
"to": "payload",
|
|
"tot": "msg"
|
|
}
|
|
],
|
|
"action": "",
|
|
"property": "",
|
|
"from": "",
|
|
"to": "",
|
|
"reg": false,
|
|
"x": 870,
|
|
"y": 80,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "44efaeb3.59bf6",
|
|
"type": "subflow:4ed26b8b.253504",
|
|
"z": "1eaf21c8.f7a21e",
|
|
"name": "",
|
|
"env": [],
|
|
"x": 100,
|
|
"y": 180,
|
|
"wires": [
|
|
[
|
|
"e10f5e55.00b828",
|
|
"c534fd26.13741",
|
|
"54ba7f16.709ad8"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "e10f5e55.00b828",
|
|
"type": "change",
|
|
"z": "1eaf21c8.f7a21e",
|
|
"name": "Get stepper_type",
|
|
"rules": [
|
|
{
|
|
"t": "set",
|
|
"p": "payload",
|
|
"pt": "msg",
|
|
"to": "payload.stepper_type",
|
|
"tot": "msg"
|
|
}
|
|
],
|
|
"action": "",
|
|
"property": "",
|
|
"from": "",
|
|
"to": "",
|
|
"reg": false,
|
|
"x": 330,
|
|
"y": 140,
|
|
"wires": [
|
|
[
|
|
"dee52a36.2af72"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "dee52a36.2af72",
|
|
"type": "ui_dropdown",
|
|
"z": "1eaf21c8.f7a21e",
|
|
"name": "stepper_type",
|
|
"label": "",
|
|
"tooltip": "",
|
|
"place": "",
|
|
"group": "cee2ca2f.3dfe18",
|
|
"order": 3,
|
|
"width": 3,
|
|
"height": 1,
|
|
"passthru": false,
|
|
"multiple": false,
|
|
"options": [
|
|
{
|
|
"label": "",
|
|
"value": "adafruit",
|
|
"type": "str"
|
|
},
|
|
{
|
|
"label": "",
|
|
"value": "waveshare",
|
|
"type": "str"
|
|
}
|
|
],
|
|
"payload": "",
|
|
"topic": "stepper_type",
|
|
"x": 610,
|
|
"y": 140,
|
|
"wires": [
|
|
[
|
|
"2068e7f.f4efb18",
|
|
"8e3b3d3c.955148"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "e41870d7.300eb8",
|
|
"type": "link out",
|
|
"z": "1eaf21c8.f7a21e",
|
|
"name": "Stepper_type change",
|
|
"links": [
|
|
"45a7b5aa.2ed20c"
|
|
],
|
|
"x": 955,
|
|
"y": 160,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "2068e7f.f4efb18",
|
|
"type": "delay",
|
|
"z": "1eaf21c8.f7a21e",
|
|
"name": "",
|
|
"pauseType": "delay",
|
|
"timeout": "1",
|
|
"timeoutUnits": "seconds",
|
|
"rate": "1",
|
|
"nbRateUnits": "1",
|
|
"rateUnits": "second",
|
|
"randomFirst": "1",
|
|
"randomLast": "5",
|
|
"randomUnits": "seconds",
|
|
"drop": false,
|
|
"x": 820,
|
|
"y": 160,
|
|
"wires": [
|
|
[
|
|
"e41870d7.300eb8"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "45a7b5aa.2ed20c",
|
|
"type": "link in",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "Python restart",
|
|
"links": [
|
|
"e41870d7.300eb8"
|
|
],
|
|
"x": 175,
|
|
"y": 560,
|
|
"wires": [
|
|
[
|
|
"466eb611.4da048"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "53d163be.47cf24",
|
|
"type": "function",
|
|
"z": "4ed26b8b.253504",
|
|
"name": "Update and retrieve hardware_conf",
|
|
"func": "// change global\nhardware_conf = global.get(\"hardware_conf\");\nif (msg.topic !== null){\n hardware_conf[msg.topic] = msg.payload;\n global.set(\"hardware_conf\", hardware_conf);\n}\n\nreturn {\"payload\": hardware_conf};",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 240,
|
|
"y": 200,
|
|
"wires": [
|
|
[
|
|
"bb0a8725.a1849"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "8e3b3d3c.955148",
|
|
"type": "subflow:4ed26b8b.253504",
|
|
"z": "1eaf21c8.f7a21e",
|
|
"name": "",
|
|
"env": [],
|
|
"x": 840,
|
|
"y": 200,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "c534fd26.13741",
|
|
"type": "change",
|
|
"z": "1eaf21c8.f7a21e",
|
|
"name": "Get stepper_reverse",
|
|
"rules": [
|
|
{
|
|
"t": "set",
|
|
"p": "payload",
|
|
"pt": "msg",
|
|
"to": "payload.stepper_reverse",
|
|
"tot": "msg"
|
|
}
|
|
],
|
|
"action": "",
|
|
"property": "",
|
|
"from": "",
|
|
"to": "",
|
|
"reg": false,
|
|
"x": 340,
|
|
"y": 180,
|
|
"wires": [
|
|
[
|
|
"cd1987c7.027f58"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "cd1987c7.027f58",
|
|
"type": "ui_switch",
|
|
"z": "1eaf21c8.f7a21e",
|
|
"name": "stepper_reverse",
|
|
"label": "Invert stepper output",
|
|
"tooltip": "Stepper 1 is controlled by output 1 or the other way around",
|
|
"group": "cee2ca2f.3dfe18",
|
|
"order": 4,
|
|
"width": 0,
|
|
"height": 0,
|
|
"passthru": false,
|
|
"decouple": "false",
|
|
"topic": "stepper_reverse",
|
|
"style": "",
|
|
"onvalue": "true",
|
|
"onvalueType": "bool",
|
|
"onicon": "",
|
|
"oncolor": "",
|
|
"offvalue": "false",
|
|
"offvalueType": "bool",
|
|
"officon": "",
|
|
"offcolor": "",
|
|
"x": 600,
|
|
"y": 180,
|
|
"wires": [
|
|
[
|
|
"8e3b3d3c.955148",
|
|
"2068e7f.f4efb18"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "54ba7f16.709ad8",
|
|
"type": "change",
|
|
"z": "1eaf21c8.f7a21e",
|
|
"name": "Get pump_steps_per_ml",
|
|
"rules": [
|
|
{
|
|
"t": "set",
|
|
"p": "payload",
|
|
"pt": "msg",
|
|
"to": "payload.pump_steps_per_ml",
|
|
"tot": "msg"
|
|
}
|
|
],
|
|
"action": "",
|
|
"property": "",
|
|
"from": "",
|
|
"to": "",
|
|
"reg": false,
|
|
"x": 350,
|
|
"y": 220,
|
|
"wires": [
|
|
[
|
|
"ee58b91c.396108"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "ee58b91c.396108",
|
|
"type": "ui_text_input",
|
|
"z": "1eaf21c8.f7a21e",
|
|
"name": "pump_steps_per_ml",
|
|
"label": "Pump: steps per mL",
|
|
"tooltip": "",
|
|
"group": "cee2ca2f.3dfe18",
|
|
"order": 5,
|
|
"width": 0,
|
|
"height": 0,
|
|
"passthru": false,
|
|
"mode": "number",
|
|
"delay": "2000",
|
|
"topic": "pump_steps_per_ml",
|
|
"x": 580,
|
|
"y": 220,
|
|
"wires": [
|
|
[
|
|
"2068e7f.f4efb18",
|
|
"8e3b3d3c.955148"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "be888117.5cd67",
|
|
"type": "ui_template",
|
|
"z": "1eaf21c8.f7a21e",
|
|
"group": "cee2ca2f.3dfe18",
|
|
"name": "Stepper controller type header",
|
|
"order": 2,
|
|
"width": 3,
|
|
"height": 1,
|
|
"format": "<div>Stepper controller type</div>",
|
|
"storeOutMessages": true,
|
|
"fwdInMessages": true,
|
|
"resendOnRefresh": true,
|
|
"templateScope": "local",
|
|
"x": 550,
|
|
"y": 100,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "7534dfd9.8cf3e8",
|
|
"type": "ui_template",
|
|
"z": "1eaf21c8.f7a21e",
|
|
"group": "cee2ca2f.3dfe18",
|
|
"name": "Information",
|
|
"order": 1,
|
|
"width": 6,
|
|
"height": 3,
|
|
"format": "<div style=\"text-align: center;\">\n <p>Changing one of these values will make the python back-end to restart.</p>\n <p><strong style=\"font-size: large;\">If you are not sure, you probably should not be touching anything here!</strong></p>\n</div>",
|
|
"storeOutMessages": true,
|
|
"fwdInMessages": true,
|
|
"resendOnRefresh": true,
|
|
"templateScope": "local",
|
|
"x": 610,
|
|
"y": 60,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "c3cdf9e.1d27308",
|
|
"type": "subflow:4ed26b8b.253504",
|
|
"z": "bccd1f23.87219",
|
|
"name": "",
|
|
"env": [],
|
|
"x": 100,
|
|
"y": 900,
|
|
"wires": [
|
|
[
|
|
"6be64480.7e7e24",
|
|
"6d49d161.13628"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "6be64480.7e7e24",
|
|
"type": "change",
|
|
"z": "bccd1f23.87219",
|
|
"name": "Get wb_red_gain",
|
|
"rules": [
|
|
{
|
|
"t": "set",
|
|
"p": "payload",
|
|
"pt": "msg",
|
|
"to": "payload.wb_red_gain",
|
|
"tot": "msg"
|
|
}
|
|
],
|
|
"action": "",
|
|
"property": "",
|
|
"from": "",
|
|
"to": "",
|
|
"reg": false,
|
|
"x": 290,
|
|
"y": 880,
|
|
"wires": [
|
|
[
|
|
"43737d43.eb0e9c"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "6d49d161.13628",
|
|
"type": "change",
|
|
"z": "bccd1f23.87219",
|
|
"name": "Get wb_blue_gain",
|
|
"rules": [
|
|
{
|
|
"t": "set",
|
|
"p": "payload",
|
|
"pt": "msg",
|
|
"to": "payload.wb_blue_gain",
|
|
"tot": "msg"
|
|
}
|
|
],
|
|
"action": "",
|
|
"property": "",
|
|
"from": "",
|
|
"to": "",
|
|
"reg": false,
|
|
"x": 290,
|
|
"y": 920,
|
|
"wires": [
|
|
[
|
|
"7b699798.3d568"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "56835fa1.2fe538",
|
|
"type": "subflow:4ed26b8b.253504",
|
|
"z": "bccd1f23.87219",
|
|
"name": "",
|
|
"env": [],
|
|
"x": 720,
|
|
"y": 920,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "3ad9835.08c937c",
|
|
"type": "function",
|
|
"z": "1c24ad9c.bebec2",
|
|
"name": "get config payload",
|
|
"func": "keys = global.get(\"config_keys\")\n\nvar payload = {}\n\nkeys.forEach(function(item, index, array) {\n payload[item] = global.get(item);\n})\n\nreturn {\"payload\": payload};",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 410,
|
|
"y": 160,
|
|
"wires": [
|
|
[
|
|
"2e6ddf51.c0dba"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "f408a273.4fb538",
|
|
"type": "function",
|
|
"z": "b771c342.49603",
|
|
"name": "get sample_gear_net_opening",
|
|
"func": "if (msg.payload.sample_gear_net_opening === null){\n msg.payload = 0;\n}\nelse\n{\n msg.payload = msg.payload.sample_gear_net_opening;\n}\nglobal.set(\"sample_gear_net_opening\",msg.payload);\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 350,
|
|
"y": 320,
|
|
"wires": [
|
|
[
|
|
"e967b844.46aa48"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "fa12f9f8.00cfa8",
|
|
"type": "subflow:1c24ad9c.bebec2",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "",
|
|
"env": [],
|
|
"x": 430,
|
|
"y": 380,
|
|
"wires": [
|
|
[
|
|
"3b72d11c.86e9e6"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "3b72d11c.86e9e6",
|
|
"type": "function",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "get process_id",
|
|
"func": "msg.payload = msg.payload.process_id;\nmsg.topic = \"process_id\";\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 600,
|
|
"y": 380,
|
|
"wires": [
|
|
[
|
|
"c8749cbb.55254"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "8dff1648.82e42",
|
|
"type": "function",
|
|
"z": "b771c342.49603",
|
|
"name": "get object_depth_max",
|
|
"func": "if (msg.payload.object_depth_max === null){\n msg.payload = 0;\n}\nelse\n{\n msg.payload = msg.payload.object_depth_max;\n}\nglobal.set(\"object_depth_max\",msg.payload);\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 320,
|
|
"y": 240,
|
|
"wires": [
|
|
[
|
|
"9c7f7fc9.c8d3a"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "9f04c5ec.75f3d8",
|
|
"type": "function",
|
|
"z": "b771c342.49603",
|
|
"name": "get object_depth_min",
|
|
"func": "if (msg.payload.object_depth_min === null){\n msg.payload = 0;\n}\nelse\n{\n msg.payload = msg.payload.object_depth_min;\n}\nglobal.set(\"object_depth_min\",msg.payload);\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 320,
|
|
"y": 280,
|
|
"wires": [
|
|
[
|
|
"317eeeb7.8d3042"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "326a1d95.ca21aa",
|
|
"type": "subflow:1c24ad9c.bebec2",
|
|
"z": "bccd1f23.87219",
|
|
"name": "",
|
|
"x": 550,
|
|
"y": 1080,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "328cec46.09e40c",
|
|
"type": "change",
|
|
"z": "bccd1f23.87219",
|
|
"name": "",
|
|
"rules": [
|
|
{
|
|
"t": "set",
|
|
"p": "acq_fnumber_objective",
|
|
"pt": "global",
|
|
"to": "payload",
|
|
"tot": "msg"
|
|
}
|
|
],
|
|
"action": "",
|
|
"property": "",
|
|
"from": "",
|
|
"to": "",
|
|
"reg": false,
|
|
"x": 920,
|
|
"y": 160,
|
|
"wires": [
|
|
[
|
|
"8038414a.34461"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "f4f6e3fa.0234f",
|
|
"type": "inject",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "once",
|
|
"props": [
|
|
{
|
|
"p": "payload"
|
|
}
|
|
],
|
|
"repeat": "",
|
|
"crontab": "",
|
|
"once": true,
|
|
"onceDelay": "",
|
|
"topic": "",
|
|
"payload": "start",
|
|
"payloadType": "str",
|
|
"x": 1190,
|
|
"y": 720,
|
|
"wires": [
|
|
[
|
|
"7a1dedf.1c63094"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "991d1df9.3ffb3",
|
|
"type": "function",
|
|
"z": "f21ba04.c26266",
|
|
"name": "reset wpa_supplicant.conf",
|
|
"func": "country_code = flow.get(\"country_code\")\n\nvar template = `sudo tee /etc/wpa_supplicant/wpa_supplicant.conf <<EOF\nctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev\nupdate_config=1\ncountry=${country_code}\n\nEOF`\n\nmsg.payload = template\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 660,
|
|
"y": 460,
|
|
"wires": [
|
|
[
|
|
"2124997d.2cbf0e"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "2124997d.2cbf0e",
|
|
"type": "exec",
|
|
"z": "f21ba04.c26266",
|
|
"command": "",
|
|
"addpay": true,
|
|
"append": "",
|
|
"useSpawn": "false",
|
|
"timer": "",
|
|
"oldrc": false,
|
|
"name": "resetConf",
|
|
"x": 880,
|
|
"y": 460,
|
|
"wires": [
|
|
[],
|
|
[],
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "8b3a1ecb.c4d2e8",
|
|
"type": "ui_button",
|
|
"z": "f21ba04.c26266",
|
|
"name": "",
|
|
"group": "9e409235.73cd7",
|
|
"order": 8,
|
|
"width": 0,
|
|
"height": 0,
|
|
"passthru": false,
|
|
"label": "Reset wifi networks",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "#AD1625",
|
|
"icon": "",
|
|
"payload": "country_code",
|
|
"payloadType": "flow",
|
|
"topic": "",
|
|
"x": 410,
|
|
"y": 460,
|
|
"wires": [
|
|
[
|
|
"991d1df9.3ffb3"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "c5b1e763.d1bba8",
|
|
"type": "function",
|
|
"z": "1371dec5.76e671",
|
|
"name": "error message",
|
|
"func": "// TODO revoir cette partie\n\nswitch (msg.rc.code){\ncase 0:\n msg.payload = \"/home/pi/data was purged successfully!\";\n break;\ndefault:\n msg.payload = \"There was an error! The error is \" + msg.rc.message;\n break;\n}\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 900,
|
|
"y": 1020,
|
|
"wires": [
|
|
[
|
|
"81a48376.27a66"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "6d09f428.930bcc",
|
|
"type": "delay",
|
|
"z": "1371dec5.76e671",
|
|
"name": "",
|
|
"pauseType": "rate",
|
|
"timeout": "5",
|
|
"timeoutUnits": "seconds",
|
|
"rate": "1",
|
|
"nbRateUnits": "1",
|
|
"rateUnits": "minute",
|
|
"randomFirst": "1",
|
|
"randomLast": "5",
|
|
"randomUnits": "seconds",
|
|
"drop": true,
|
|
"x": 750,
|
|
"y": 420,
|
|
"wires": [
|
|
[
|
|
"24df077a.cb252"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "4997446.5176d3c",
|
|
"type": "change",
|
|
"z": "1371dec5.76e671",
|
|
"name": "Backup starting message",
|
|
"rules": [
|
|
{
|
|
"t": "set",
|
|
"p": "payload",
|
|
"pt": "msg",
|
|
"to": "\"The backup is starting now, please wait for the complete message before removing the drive\"",
|
|
"tot": "str"
|
|
}
|
|
],
|
|
"action": "",
|
|
"property": "",
|
|
"from": "",
|
|
"to": "",
|
|
"reg": false,
|
|
"x": 750,
|
|
"y": 980,
|
|
"wires": [
|
|
[
|
|
"81a48376.27a66"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "9a18a4b4.178448",
|
|
"type": "function",
|
|
"z": "b771c342.49603",
|
|
"name": "calculate sample_total_volume",
|
|
"func": "var object_lat = global.get(\"object_lat\")\nvar object_lon = global.get(\"object_lon\")\nvar object_lat_end = global.get(\"object_lat_end\")\nvar object_lon_end = global.get(\"object_lon_end\")\nvar sample_gear_net_opening = global.get(\"sample_gear_net_opening\");\nvar sample_sampling_gear= global.get(\"sample_sampling_gear\");\n\n/*object_lat = 33.95 \nobject_lon = 118.4 \nobject_lat_end = 40.6333 \nobject_lon_end = 73.78333\nsample_gear_net_opening = 40*/\n// Copyright 1997 Ed Williams. All rights reserved\n// Adapted by Romain Bazile - Ocean Trotter - 01-2021\n\ndecpl=4 // Dec places of minutes output\n\nellipse = {\"name\":\"WSG84\", \"a\":6378.137/1.852, \"invf\":298.257223563}\n\nfunction ComputeDistance(lat1, lon1, lat2, lon2){\n var d,crs12,crs21\n var argacos\n var a,invf\n \n // lat and lon in radian\n lat1=(Math.PI/180)*lat1\n lat2=(Math.PI/180)*lat2\n lon1=(Math.PI/180)*lon1\n lon2=(Math.PI/180)*lon2\n \n //alert(\"lat1=\" + lat1 + \"lon1=\" + lon1 +\"\\nlat2=\" +lat2+ \"lon2=\"+lon2)\n \n /* get distance conversion factor */\n dc=1.852 //km\n //alert(\"dc=\" +dc)\n \n //showProps(ellipse,\"ellipse\")\n \n // elliptic code\n d=crsdist_ell(lat1,-lon1,lat2,-lon2,ellipse) // ellipse uses East negative\n d=d*dc // go to physical units\n \n //alert(\"d=\"+d+\" crs12=\"+crs12+\" crs21=\"+crs21)\n return d\n}\n\nfunction crsdist(lat1,lon1,lat2,lon2){ // radian args\n /* compute course and distance (spherical) */\n if ((lat1+lat2===0) && (Math.abs(lon1-lon2)==Math.PI) && \n (Math.abs(lat1) != (Math.PI/180)*90)){\t\n \talert(\"Course between antipodal points is undefined\")\n }\n \n d = Math.acos(Math.sin(lat1)*Math.sin(lat2)+Math.cos(lat1)*Math.cos(lat2)*Math.cos(lon1-lon2))\n return d\n}\n\nfunction crsdist_ell(glat1,glon1,glat2,glon2,ellipse){\n // glat1 initial geodetic latitude in radians N positive \n // glon1 initial geodetic longitude in radians E positive \n // glat2 final geodetic latitude in radians N positive \n // glon2 final geodetic longitude in radians E positive \n a=ellipse.a\n f=1/ellipse.invf\n //alert(\"a=\"+a+\" f=\"+f)\n var r, tu1, tu2, cu1, su1, cu2, s1, b1, f1\n var x, sx, cx, sy, cy,y, sa, c2a, cz, e, c, d\n var EPS= 0.00000000005\n var faz, baz, s\n var iter=1\n var MAXITER=100\n if ((glat1+glat2===0) && (Math.abs(glon1-glon2)==Math.PI)){\n alert(\"Course and distance between antipodal points is undefined\")\n glat1=glat1+0.00001 // allow algorithm to complete\n }\n if (glat1==glat2 && (glon1==glon2 || Math.abs(Math.abs(glon1-glon2)-2*Math.PI) < EPS)){\n alert(\"Points 1 and 2 are identical- course undefined\")\n out=new MakeArray(0)\n out.d=0\n out.crs12=0\n out.crs21=Math.PI\n return out\n }\n r = 1 - f\n tu1 = r * Math.tan (glat1)\n tu2 = r * Math.tan (glat2)\n cu1 = 1 / Math.sqrt (1 + tu1 * tu1)\n su1 = cu1 * tu1\n cu2 = 1 / Math.sqrt (1 + tu2 * tu2)\n s1 = cu1 * cu2\n b1 = s1 * tu2\n f1 = b1 * tu1\n x = glon2 - glon1\n d = x + 1 // force one pass\n while ((Math.abs(d - x) > EPS) && (iter < MAXITER))\n {\n iter=iter+1\n sx = Math.sin (x)\n // alert(\"sx=\"+sx)\n cx = Math.cos (x)\n tu1 = cu2 * sx\n tu2 = b1 - su1 * cu2 * cx\n sy = Math.sqrt(tu1 * tu1 + tu2 * tu2)\n cy = s1 * cx + f1\n y = atan2 (sy, cy)\n sa = s1 * sx / sy\n c2a = 1 - sa * sa\n cz = f1 + f1\n if (c2a > 0)\n cz = cy - cz / c2a\n e = cz * cz * 2 - 1\n c = ((-3 * c2a + 4) * f + 4) * c2a * f / 16\n d = x\n x = ((e * cy * c + cz) * sy * c + y) * sa\n x = (1 - c) * x * f + glon2 - glon1\n }\n x = Math.sqrt ((1 / (r * r) - 1) * c2a + 1)\n x +=1\n x = (x - 2) / x\n c = 1 - x\n c = (x * x / 4 + 1) / c\n d = (0.375 * x * x - 1) * x\n x = e * cy\n d = ((((sy*sy*4-3)*(1-e-e)*cz*d/6-x)*d/4+cz)*sy*d+y)*c*a*r\n if (Math.abs(iter-MAXITER)<EPS){\n alert(\"Algorithm did not converge\")\n }\n return d\n}\n\n\n//***************Utility***************\nfunction atan2(y,x){\n var out\n if (x <0) { out= Math.atan(y/x)+Math.PI}\n if ((x >0) && (y>=0)){ out= Math.atan(y/x)}\n if ((x >0) && (y<0)) { out= Math.atan(y/x)+2*Math.PI}\n if ((x===0) && (y>0)) { out= Math.PI/2}\n if ((x===0) && (y<0)) { out= 3*Math.PI/2} \n if ((x===0) && (y===0)) {\n alert(\"atan2(0,0) undefined\")\n out= 0\n } \n return out\n}\n\nfunction showProps(obj,objName){\n var result=\"\"\n for (var i in obj){\n result +=objName + \".\" + i + \" = \" + obj[i] + \"\\n\"\n }\n alert(result)\n}\n\nif (sample_sampling_gear.startsWith(\"net\") && sample_sampling_gear != \"net_decknet\"){\n distance_km = ComputeDistance(object_lat, object_lon, object_lat_end, object_lon_end)\n \n sample_total_volume = distance_km*(Math.PI*(sample_gear_net_opening/2)*(sample_gear_net_opening/2))/1000// cubic meter\n sample_total_volume = Math.round((sample_total_volume + Number.EPSILON) * 1000) / 1000\n global.set(\"sample_total_volume\", sample_total_volume)\n msg.payload = sample_total_volume\n}\nelse {\n msg.payload = 0\n}\n\n\nreturn msg",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 770,
|
|
"y": 580,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "4fb4e0ad.c417c",
|
|
"type": "ui_text",
|
|
"z": "b771c342.49603",
|
|
"group": "fc5e4e6f.5b1c8",
|
|
"order": 6,
|
|
"width": 5,
|
|
"height": 1,
|
|
"name": "Latitude",
|
|
"label": "Latitude",
|
|
"format": "{{msg.payload.lat.deg}}°{{msg.payload.lat.min}}'{{msg.payload.lat.sec}}{{msg.payload.lat.dir}}",
|
|
"layout": "col-center",
|
|
"x": 700,
|
|
"y": 820,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "8d2b5026.13e6e8",
|
|
"type": "ui_text",
|
|
"z": "b771c342.49603",
|
|
"group": "fc5e4e6f.5b1c8",
|
|
"order": 7,
|
|
"width": 5,
|
|
"height": 1,
|
|
"name": "Longitude",
|
|
"label": "Longitude",
|
|
"format": "{{msg.payload.lon.deg}}°{{msg.payload.lon.min}}'{{msg.payload.lon.sec}}{{msg.payload.lon.dir}}",
|
|
"layout": "col-center",
|
|
"x": 700,
|
|
"y": 860,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "258b4562.9f778a",
|
|
"type": "function",
|
|
"z": "b771c342.49603",
|
|
"name": "Convert 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": 490,
|
|
"y": 900,
|
|
"wires": [
|
|
[
|
|
"4fb4e0ad.c417c",
|
|
"8d2b5026.13e6e8"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "7c4ce5f3.62dd5c",
|
|
"type": "ui_text",
|
|
"z": "b771c342.49603",
|
|
"group": "fc5e4e6f.5b1c8",
|
|
"order": 4,
|
|
"width": 2,
|
|
"height": 1,
|
|
"name": "Speed",
|
|
"label": "Speed",
|
|
"format": "{{msg.payload}} kts",
|
|
"layout": "col-center",
|
|
"x": 690,
|
|
"y": 900,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "54e37580.fdc31c",
|
|
"type": "ui_text",
|
|
"z": "b771c342.49603",
|
|
"group": "fc5e4e6f.5b1c8",
|
|
"order": 5,
|
|
"width": 2,
|
|
"height": 1,
|
|
"name": "Direction",
|
|
"label": "Direction",
|
|
"format": "{{msg.payload.track}} °",
|
|
"layout": "col-center",
|
|
"x": 700,
|
|
"y": 940,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "cc21ca16.b92928",
|
|
"type": "function",
|
|
"z": "b771c342.49603",
|
|
"name": "GPS Mode",
|
|
"func": "switch (msg.payload.mode){\n case 1:msg.payload = \"No Fix\"; break\n case 2:msg.payload = \"2D Fix\"; break\n case 3:msg.payload = \"3D Fix\"; break\n default: msg.payload = \"No info\"\n}\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 450,
|
|
"y": 780,
|
|
"wires": [
|
|
[
|
|
"7116e906.9f50f"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "4a4de52c.cf2884",
|
|
"type": "function",
|
|
"z": "b771c342.49603",
|
|
"name": "Speed conversion",
|
|
"func": "msg.payload = (0|msg.payload.speed) * 1.9438\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 470,
|
|
"y": 900,
|
|
"wires": [
|
|
[
|
|
"7c4ce5f3.62dd5c"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "35ad311f.344c76",
|
|
"type": "ui_text",
|
|
"z": "b771c342.49603",
|
|
"group": "fc5e4e6f.5b1c8",
|
|
"order": 2,
|
|
"width": 5,
|
|
"height": 1,
|
|
"name": "Time",
|
|
"label": "Time",
|
|
"format": "{{msg.payload.time}}",
|
|
"layout": "col-center",
|
|
"x": 690,
|
|
"y": 980,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "dab82064.26a8d",
|
|
"type": "ui_button",
|
|
"z": "eaae323a.31b3",
|
|
"name": "Unlock button",
|
|
"group": "f3ca28ef.4df0a8",
|
|
"order": 2,
|
|
"width": 0,
|
|
"height": 0,
|
|
"passthru": false,
|
|
"label": "Unlock button",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "",
|
|
"icon": "",
|
|
"payload": "shutdown",
|
|
"payloadType": "flow",
|
|
"topic": "",
|
|
"x": 140,
|
|
"y": 400,
|
|
"wires": [
|
|
[
|
|
"6c3a3b4.78cad44"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "1c658761.b852a1",
|
|
"type": "ui_toast",
|
|
"z": "eaae323a.31b3",
|
|
"position": "dialog",
|
|
"displayTime": "3",
|
|
"highlight": "",
|
|
"sendall": true,
|
|
"outputs": 1,
|
|
"ok": "YES PLEASE",
|
|
"cancel": "NO!",
|
|
"raw": false,
|
|
"topic": "Are you sure?",
|
|
"name": "Confirmation message",
|
|
"x": 800,
|
|
"y": 380,
|
|
"wires": [
|
|
[
|
|
"8f1b8e23.daafe"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "a48ff63f.db5e18",
|
|
"type": "inject",
|
|
"z": "eaae323a.31b3",
|
|
"name": "disabled",
|
|
"props": [
|
|
{
|
|
"p": "enabled",
|
|
"v": "false",
|
|
"vt": "bool"
|
|
}
|
|
],
|
|
"repeat": "",
|
|
"crontab": "",
|
|
"once": true,
|
|
"onceDelay": 0.1,
|
|
"topic": "",
|
|
"x": 160,
|
|
"y": 360,
|
|
"wires": [
|
|
[
|
|
"d58039a9.6e7928"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "b67a7147.65fcd8",
|
|
"type": "ui_button",
|
|
"z": "eaae323a.31b3",
|
|
"name": "Shutdown button",
|
|
"group": "f3ca28ef.4df0a8",
|
|
"order": 4,
|
|
"width": 0,
|
|
"height": 0,
|
|
"passthru": false,
|
|
"label": "Shutdown",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "#AD1625",
|
|
"icon": "fa-power-off fa-2x",
|
|
"payload": "Do you want to turn the machine off now?",
|
|
"payloadType": "str",
|
|
"topic": "",
|
|
"x": 570,
|
|
"y": 380,
|
|
"wires": [
|
|
[
|
|
"1c658761.b852a1"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "d58039a9.6e7928",
|
|
"type": "change",
|
|
"z": "eaae323a.31b3",
|
|
"name": "",
|
|
"rules": [
|
|
{
|
|
"t": "set",
|
|
"p": "shutdown",
|
|
"pt": "flow",
|
|
"to": "false",
|
|
"tot": "bool"
|
|
},
|
|
{
|
|
"t": "set",
|
|
"p": "enabled",
|
|
"pt": "msg",
|
|
"to": "shutdown",
|
|
"tot": "flow"
|
|
}
|
|
],
|
|
"action": "",
|
|
"property": "",
|
|
"from": "",
|
|
"to": "",
|
|
"reg": false,
|
|
"x": 340,
|
|
"y": 360,
|
|
"wires": [
|
|
[
|
|
"b67a7147.65fcd8"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "6c3a3b4.78cad44",
|
|
"type": "function",
|
|
"z": "eaae323a.31b3",
|
|
"name": "Toggle",
|
|
"func": "flow.set(\"shutdown\", !flow.get(\"shutdown\"))\nmsg.enabled = flow.get(\"shutdown\")\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 310,
|
|
"y": 400,
|
|
"wires": [
|
|
[
|
|
"b67a7147.65fcd8"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "d1153ad6.40d738",
|
|
"type": "ui_template",
|
|
"z": "eaae323a.31b3",
|
|
"group": "f3ca28ef.4df0a8",
|
|
"name": "Shutdown information",
|
|
"order": 1,
|
|
"width": 0,
|
|
"height": 0,
|
|
"format": "<center>To prevent data corruption, please <b>always shutdown the machine</b> before unplugging the unit.\n<br><br>\nRememver to first unlock the shutdown button.\n</center>",
|
|
"storeOutMessages": true,
|
|
"fwdInMessages": false,
|
|
"resendOnRefresh": true,
|
|
"templateScope": "local",
|
|
"x": 120,
|
|
"y": 320,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "e08cfcb8.2a67e8",
|
|
"type": "link out",
|
|
"z": "eaae323a.31b3",
|
|
"name": "Home shutdown button",
|
|
"links": [
|
|
"b81b990a.d4dca"
|
|
],
|
|
"x": 715,
|
|
"y": 480,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "ce7087fc.dcc9e8",
|
|
"type": "ui_toast",
|
|
"z": "eaae323a.31b3",
|
|
"position": "dialog",
|
|
"displayTime": "10",
|
|
"highlight": "",
|
|
"sendall": true,
|
|
"outputs": 1,
|
|
"ok": "OK",
|
|
"cancel": "",
|
|
"raw": false,
|
|
"topic": "Turning off now!",
|
|
"name": "Shutdown message",
|
|
"x": 620,
|
|
"y": 520,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "b81b990a.d4dca",
|
|
"type": "link in",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "Shutdown",
|
|
"links": [
|
|
"e08cfcb8.2a67e8"
|
|
],
|
|
"x": 455,
|
|
"y": 720,
|
|
"wires": [
|
|
[
|
|
"4af9112d.87767"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "7d1626a0.deb85",
|
|
"type": "change",
|
|
"z": "eaae323a.31b3",
|
|
"name": "shutdown!",
|
|
"rules": [
|
|
{
|
|
"t": "set",
|
|
"p": "payload",
|
|
"pt": "msg",
|
|
"to": "shutdown",
|
|
"tot": "str"
|
|
}
|
|
],
|
|
"action": "",
|
|
"property": "",
|
|
"from": "",
|
|
"to": "",
|
|
"reg": false,
|
|
"x": 350,
|
|
"y": 480,
|
|
"wires": [
|
|
[
|
|
"e08cfcb8.2a67e8"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "8f1b8e23.daafe",
|
|
"type": "switch",
|
|
"z": "eaae323a.31b3",
|
|
"name": "",
|
|
"property": "payload",
|
|
"propertyType": "msg",
|
|
"rules": [
|
|
{
|
|
"t": "eq",
|
|
"v": "NO!",
|
|
"vt": "str"
|
|
},
|
|
{
|
|
"t": "else"
|
|
}
|
|
],
|
|
"checkall": "true",
|
|
"repair": false,
|
|
"outputs": 2,
|
|
"x": 150,
|
|
"y": 480,
|
|
"wires": [
|
|
[
|
|
"d58039a9.6e7928"
|
|
],
|
|
[
|
|
"7d1626a0.deb85",
|
|
"281a56c9.ec7902"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "281a56c9.ec7902",
|
|
"type": "change",
|
|
"z": "eaae323a.31b3",
|
|
"name": "Shutdown message",
|
|
"rules": [
|
|
{
|
|
"t": "set",
|
|
"p": "payload",
|
|
"pt": "msg",
|
|
"to": "Please wait a minute before disconnecting the machine from its power supply!",
|
|
"tot": "str"
|
|
}
|
|
],
|
|
"action": "",
|
|
"property": "",
|
|
"from": "",
|
|
"to": "",
|
|
"reg": false,
|
|
"x": 380,
|
|
"y": 520,
|
|
"wires": [
|
|
[
|
|
"ce7087fc.dcc9e8"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "f6ff420b.0af648",
|
|
"type": "ui_slider",
|
|
"z": "bccd1f23.87219",
|
|
"name": "focus_speed",
|
|
"label": "Focus Speed",
|
|
"tooltip": "in µm/sec",
|
|
"group": "fbd92986.1028c8",
|
|
"order": 8,
|
|
"width": 0,
|
|
"height": 0,
|
|
"passthru": true,
|
|
"outs": "end",
|
|
"topic": "focus_speed",
|
|
"min": "250",
|
|
"max": "2500",
|
|
"step": "250",
|
|
"x": 550,
|
|
"y": 460,
|
|
"wires": [
|
|
[
|
|
"dc48dc42.98d18"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "2d371e59.b0e50a",
|
|
"type": "inject",
|
|
"z": "bccd1f23.87219",
|
|
"name": "Default: 1000µm/s",
|
|
"props": [
|
|
{
|
|
"p": "payload"
|
|
}
|
|
],
|
|
"repeat": "",
|
|
"crontab": "",
|
|
"once": true,
|
|
"onceDelay": "0.5",
|
|
"topic": "",
|
|
"payload": "1000",
|
|
"payloadType": "num",
|
|
"x": 130,
|
|
"y": 460,
|
|
"wires": [
|
|
[
|
|
"f6ff420b.0af648"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "167cda35.c9b6ae",
|
|
"type": "ui_button",
|
|
"z": "bccd1f23.87219",
|
|
"name": "",
|
|
"group": "fbd92986.1028c8",
|
|
"order": 2,
|
|
"width": 3,
|
|
"height": 1,
|
|
"passthru": false,
|
|
"label": "UP 100um",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "",
|
|
"icon": "fa-angle-up fa-3x",
|
|
"payload": "{\"action\":\"move\",\"direction\":\"UP\",\"distance\":0.1}",
|
|
"payloadType": "json",
|
|
"topic": "actuator/focus",
|
|
"x": 350,
|
|
"y": 520,
|
|
"wires": [
|
|
[
|
|
"62030521.88317c"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "72a7c597.9374fc",
|
|
"type": "ui_button",
|
|
"z": "bccd1f23.87219",
|
|
"name": "",
|
|
"group": "fbd92986.1028c8",
|
|
"order": 6,
|
|
"width": 3,
|
|
"height": 1,
|
|
"passthru": false,
|
|
"label": "DOWN 100um",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "",
|
|
"icon": "fa-angle-down fa-3x",
|
|
"payload": "{\"action\":\"move\",\"direction\":\"DOWN\",\"distance\":0.1}",
|
|
"payloadType": "json",
|
|
"topic": "actuator/focus",
|
|
"x": 340,
|
|
"y": 600,
|
|
"wires": [
|
|
[
|
|
"62030521.88317c"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "e73fd87d.d24e4",
|
|
"type": "function",
|
|
"z": "b771c342.49603",
|
|
"name": "get acq_minimum_mesh",
|
|
"func": "msg.payload = msg.payload.acq_minimum_mesh;\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"x": 330,
|
|
"y": 360,
|
|
"wires": [
|
|
[
|
|
"5517c129.1617e"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "489c8e06.cc7d6",
|
|
"type": "function",
|
|
"z": "b771c342.49603",
|
|
"name": "get acq_maximum_mesh",
|
|
"func": "msg.payload = msg.payload.acq_maximum_mesh;\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"x": 330,
|
|
"y": 400,
|
|
"wires": [
|
|
[
|
|
"9f3edbe2.43c728"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "9f3edbe2.43c728",
|
|
"type": "ui_numeric",
|
|
"z": "b771c342.49603",
|
|
"name": "acq_maximum_mesh",
|
|
"label": "Max fraction size (μm)",
|
|
"tooltip": "",
|
|
"group": "3e1ba03d.f01d8",
|
|
"order": 8,
|
|
"width": 5,
|
|
"height": 1,
|
|
"wrap": false,
|
|
"passthru": true,
|
|
"topic": "acq_maximum_mesh",
|
|
"format": "{{value}}",
|
|
"min": "200",
|
|
"max": "2000",
|
|
"step": "100",
|
|
"x": 640,
|
|
"y": 400,
|
|
"wires": [
|
|
[
|
|
"9f501f49.45645"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "5517c129.1617e",
|
|
"type": "ui_numeric",
|
|
"z": "b771c342.49603",
|
|
"name": "acq_minimum_mesh",
|
|
"label": "Min fraction size (μm)",
|
|
"tooltip": "",
|
|
"group": "3e1ba03d.f01d8",
|
|
"order": 7,
|
|
"width": 5,
|
|
"height": 1,
|
|
"wrap": false,
|
|
"passthru": true,
|
|
"topic": "acq_minimum_mesh",
|
|
"format": "{{value}}",
|
|
"min": 0,
|
|
"max": "300",
|
|
"step": "10",
|
|
"x": 640,
|
|
"y": 360,
|
|
"wires": [
|
|
[
|
|
"9f501f49.45645"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "83c5a708.a5715",
|
|
"type": "exec",
|
|
"z": "9daf9e2b.019fc",
|
|
"command": "git --git-dir=/home/pi/PlanktonScope/.git describe --long --tags",
|
|
"addpay": false,
|
|
"append": "",
|
|
"useSpawn": "true",
|
|
"timer": "",
|
|
"oldrc": false,
|
|
"name": "Get git revision",
|
|
"x": 660,
|
|
"y": 340,
|
|
"wires": [
|
|
[
|
|
"af2b8d95.195bb8",
|
|
"6c20d6a7.869b6"
|
|
],
|
|
[],
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "d334d264.8a7728",
|
|
"type": "exec",
|
|
"z": "9daf9e2b.019fc",
|
|
"command": "git --git-dir=/home/pi/PlanktonScope/.git branch --remotes --list | awk '/HEAD/{next;} split($1, a, \"/\") {print a[2]}'",
|
|
"addpay": false,
|
|
"append": "",
|
|
"useSpawn": "false",
|
|
"timer": "",
|
|
"oldrc": false,
|
|
"name": "Get git branch",
|
|
"x": 660,
|
|
"y": 260,
|
|
"wires": [
|
|
[
|
|
"e5e8e66c.899588"
|
|
],
|
|
[],
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "e4342b66.72972",
|
|
"type": "ui_button",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "get git branch",
|
|
"group": "1be83144.4fe4bf",
|
|
"order": 3,
|
|
"width": 5,
|
|
"height": 1,
|
|
"passthru": false,
|
|
"label": "Update branch list",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "",
|
|
"icon": "mi-compare_arrows",
|
|
"payload": "",
|
|
"payloadType": "str",
|
|
"topic": "",
|
|
"x": 410,
|
|
"y": 260,
|
|
"wires": [
|
|
[
|
|
"d334d264.8a7728"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "3f13b9f8.bac94e",
|
|
"type": "ui_dropdown",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "Git branch list",
|
|
"label": "Switch branch to",
|
|
"tooltip": "If you choose something, the code WILL be updated to that branch, don't touch if you don't know what you are doing!",
|
|
"place": "branch",
|
|
"group": "1be83144.4fe4bf",
|
|
"order": 4,
|
|
"width": 7,
|
|
"height": 1,
|
|
"passthru": false,
|
|
"multiple": false,
|
|
"options": [],
|
|
"payload": "",
|
|
"topic": "branch",
|
|
"x": 1160,
|
|
"y": 320,
|
|
"wires": [
|
|
[
|
|
"2d2ef1fd.40e6e6"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "e5e8e66c.899588",
|
|
"type": "function",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "filter branch",
|
|
"func": "msg.options = msg.payload.trimEnd().split('\\n')\nmsg.payload = msg.options.find((str) => str.startsWith('*'));\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 870,
|
|
"y": 260,
|
|
"wires": [
|
|
[
|
|
"3f13b9f8.bac94e",
|
|
"ccc7d79b.a419f"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "c1fb03f7.e675f8",
|
|
"type": "inject",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "once",
|
|
"props": [
|
|
{
|
|
"p": "payload"
|
|
}
|
|
],
|
|
"repeat": "",
|
|
"crontab": "",
|
|
"once": true,
|
|
"onceDelay": "",
|
|
"topic": "",
|
|
"payload": "start",
|
|
"payloadType": "str",
|
|
"x": 430,
|
|
"y": 300,
|
|
"wires": [
|
|
[
|
|
"d334d264.8a7728",
|
|
"83c5a708.a5715"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "af2b8d95.195bb8",
|
|
"type": "ui_text",
|
|
"z": "9daf9e2b.019fc",
|
|
"group": "1be83144.4fe4bf",
|
|
"order": 2,
|
|
"width": 12,
|
|
"height": 1,
|
|
"name": "",
|
|
"label": "Current code version",
|
|
"format": "{{msg.payload}}",
|
|
"layout": "row-center",
|
|
"x": 900,
|
|
"y": 320,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "5112444.5be803c",
|
|
"type": "ui_text",
|
|
"z": "1371dec5.76e671",
|
|
"group": "ce9e278.781eed8",
|
|
"order": 3,
|
|
"width": 0,
|
|
"height": 0,
|
|
"name": "[System Monitoring] version",
|
|
"label": "Software version",
|
|
"format": "{{msg.payload}}",
|
|
"layout": "row-spread",
|
|
"x": 800,
|
|
"y": 520,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "16548734.7fe631",
|
|
"type": "function",
|
|
"z": "1371dec5.76e671",
|
|
"name": "store version",
|
|
"func": "msg.payload = \"PlanktoScope-\"+msg.payload.trim()\n\nglobal.set(\"acq_software\",msg.payload);\n\nreturn msg\n",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 570,
|
|
"y": 520,
|
|
"wires": [
|
|
[
|
|
"5112444.5be803c"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "be6bddd3.2004f",
|
|
"type": "link in",
|
|
"z": "1371dec5.76e671",
|
|
"name": "git version",
|
|
"links": [
|
|
"6c20d6a7.869b6"
|
|
],
|
|
"x": 455,
|
|
"y": 520,
|
|
"wires": [
|
|
[
|
|
"16548734.7fe631"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "3ea12061.ce62c",
|
|
"type": "ui_list",
|
|
"z": "cb95299c.2817c8",
|
|
"group": "abeb6dad.635a2",
|
|
"name": "",
|
|
"order": 7,
|
|
"width": 10,
|
|
"height": 11,
|
|
"lineType": "one",
|
|
"actionType": "check",
|
|
"allowHTML": false,
|
|
"outputs": 1,
|
|
"topic": "",
|
|
"x": 770,
|
|
"y": 140,
|
|
"wires": [
|
|
[
|
|
"cb3b87b5.63c4"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "8bd8fb2c.53fa4",
|
|
"type": "dir2files",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "",
|
|
"dirname": "/home/pi/data/img/",
|
|
"pathRegex": "",
|
|
"isRecursive": true,
|
|
"findDir": true,
|
|
"isArray": true,
|
|
"x": 460,
|
|
"y": 140,
|
|
"wires": [
|
|
[
|
|
"ba2947.c854deb8"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "127d4ee.f8ad1b1",
|
|
"type": "ui_button",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "Refresh",
|
|
"group": "abeb6dad.635a2",
|
|
"order": 6,
|
|
"width": 0,
|
|
"height": 0,
|
|
"passthru": false,
|
|
"label": "Update acquisition's folder list",
|
|
"tooltip": "Refresh the list of previous acquisitions",
|
|
"color": "",
|
|
"bgcolor": "",
|
|
"icon": "mi-find_replace",
|
|
"payload": "",
|
|
"payloadType": "date",
|
|
"topic": "update",
|
|
"x": 260,
|
|
"y": 140,
|
|
"wires": [
|
|
[
|
|
"8bd8fb2c.53fa4",
|
|
"56f845f5.e7c054"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "946ce9ee.092cf",
|
|
"type": "inject",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "Init",
|
|
"props": [
|
|
{
|
|
"p": "payload"
|
|
}
|
|
],
|
|
"repeat": "",
|
|
"crontab": "",
|
|
"once": true,
|
|
"onceDelay": 0.1,
|
|
"topic": "",
|
|
"payload": "",
|
|
"payloadType": "date",
|
|
"x": 270,
|
|
"y": 100,
|
|
"wires": [
|
|
[
|
|
"8bd8fb2c.53fa4",
|
|
"56f845f5.e7c054"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "87f8732c.caf648",
|
|
"type": "ui_multistate_switch",
|
|
"z": "bccd1f23.87219",
|
|
"name": "ISO selector",
|
|
"group": "8c38a81e.9897a8",
|
|
"order": 1,
|
|
"width": 10,
|
|
"height": 1,
|
|
"label": "ISO",
|
|
"stateField": "payload",
|
|
"enableField": "enable",
|
|
"rounded": true,
|
|
"useThemeColors": true,
|
|
"hideSelectedLabel": false,
|
|
"options": [
|
|
{
|
|
"label": "100",
|
|
"value": "100",
|
|
"valueType": "num",
|
|
"color": "#009933"
|
|
},
|
|
{
|
|
"label": "200",
|
|
"value": "200",
|
|
"valueType": "num",
|
|
"color": "#999999"
|
|
},
|
|
{
|
|
"label": "320",
|
|
"value": "320",
|
|
"valueType": "num",
|
|
"color": "#ff6666"
|
|
},
|
|
{
|
|
"label": "400",
|
|
"value": "400",
|
|
"valueType": "num",
|
|
"color": "#009999"
|
|
},
|
|
{
|
|
"label": "500",
|
|
"value": "500",
|
|
"valueType": "num",
|
|
"color": "#cccc00"
|
|
},
|
|
{
|
|
"label": "640",
|
|
"value": "640",
|
|
"valueType": "num",
|
|
"color": "#ff33cc"
|
|
},
|
|
{
|
|
"label": "800",
|
|
"value": "800",
|
|
"valueType": "num",
|
|
"color": "#cc6600"
|
|
}
|
|
],
|
|
"x": 370,
|
|
"y": 720,
|
|
"wires": [
|
|
[
|
|
"8ea9dc9a.c7d87"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "f0775525.cf806",
|
|
"type": "ui_multistate_switch",
|
|
"z": "bccd1f23.87219",
|
|
"name": "light_control",
|
|
"group": "4248342d.e55fac",
|
|
"order": 1,
|
|
"width": 5,
|
|
"height": 1,
|
|
"label": "Light ",
|
|
"stateField": "payload",
|
|
"enableField": "enable",
|
|
"rounded": true,
|
|
"useThemeColors": true,
|
|
"hideSelectedLabel": false,
|
|
"options": [
|
|
{
|
|
"label": "Off",
|
|
"value": "0",
|
|
"valueType": "num",
|
|
"color": "#009933"
|
|
},
|
|
{
|
|
"label": "On",
|
|
"value": "1",
|
|
"valueType": "num",
|
|
"color": "#999999"
|
|
}
|
|
],
|
|
"x": 350,
|
|
"y": 120,
|
|
"wires": [
|
|
[
|
|
"cbb8afed.0a026"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "cb3b87b5.63c4",
|
|
"type": "function",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "update segmentation_list",
|
|
"func": "var segmentation_list = flow.get('segmentation_list');\n\nif (segmentation_list === undefined || segmentation_list === \"\") {\n segmentation_list = []\n console.log(\"error\")\n}\n\npath = \"/home/pi/data/img/\" + msg.payload.title\n\nif (msg.payload.isChecked){\n if (segmentation_list.includes(path) === false){\n segmentation_list.push(path)\n }\n // Element already in list, don't push it more than once\n //segmentation_list.push(msg.payload[\"title\"])\n}\nelse {\n var pos = segmentation_list.indexOf(path)\n segmentation_list.splice(pos, 1)\n}\n\nflow.set('segmentation_list', segmentation_list)",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 950,
|
|
"y": 140,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "56f845f5.e7c054",
|
|
"type": "change",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "Reset segmentation_list",
|
|
"rules": [
|
|
{
|
|
"t": "set",
|
|
"p": "segmentation_list",
|
|
"pt": "flow",
|
|
"to": "[]",
|
|
"tot": "json"
|
|
}
|
|
],
|
|
"action": "",
|
|
"property": "",
|
|
"from": "",
|
|
"to": "",
|
|
"reg": false,
|
|
"x": 510,
|
|
"y": 100,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "7fc72364.8f038c",
|
|
"type": "ui_template",
|
|
"z": "cb95299c.2817c8",
|
|
"group": "abeb6dad.635a2",
|
|
"name": "Update message",
|
|
"order": 1,
|
|
"width": 10,
|
|
"height": 3,
|
|
"format": "<div><left>You can choose here in which folder(s) you want the segmentation script to run. A few details though:\n<br>The segmentation is run recursively in all folders. So if you select a top level folder, the segmentation will be run in all subfolders.\n<br>Also, you will be able to chose wether for force the segmentation for folders in which it has run already.</left></div>",
|
|
"storeOutMessages": true,
|
|
"fwdInMessages": true,
|
|
"resendOnRefresh": true,
|
|
"templateScope": "local",
|
|
"x": 270,
|
|
"y": 40,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "6c7f0cc5.ea30d4",
|
|
"type": "gpsd",
|
|
"z": "1371dec5.76e671",
|
|
"name": "",
|
|
"hostname": "localhost",
|
|
"port": "2947",
|
|
"tpv": true,
|
|
"sky": false,
|
|
"info": false,
|
|
"device": false,
|
|
"gst": false,
|
|
"att": false,
|
|
"x": 170,
|
|
"y": 1360,
|
|
"wires": [
|
|
[
|
|
"906072b1.42c7c8",
|
|
"cd3b05d6.5a3e2",
|
|
"9b29e0e2.475e08",
|
|
"96fefa8b.b7d538",
|
|
"49a98fe9.9450d8",
|
|
"f2a62d0.f5e135"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "96bc0179.5c37",
|
|
"type": "ui_text",
|
|
"z": "1371dec5.76e671",
|
|
"group": "cfe2288f.a8862",
|
|
"order": 1,
|
|
"width": 6,
|
|
"height": 1,
|
|
"name": "GPS Status Display",
|
|
"label": "GPS Status:",
|
|
"format": "{{msg.payload}}",
|
|
"layout": "row-center",
|
|
"x": 650,
|
|
"y": 1200,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "8c731f52.2b5f3",
|
|
"type": "ui_text",
|
|
"z": "1371dec5.76e671",
|
|
"group": "cfe2288f.a8862",
|
|
"order": 5,
|
|
"width": 3,
|
|
"height": 1,
|
|
"name": "Latitude",
|
|
"label": "Latitude",
|
|
"format": "{{msg.payload.lat.deg}}°{{msg.payload.lat.min}}'{{msg.payload.lat.sec}}{{msg.payload.lat.dir}}",
|
|
"layout": "col-center",
|
|
"x": 620,
|
|
"y": 1240,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "34e4b5ea.27b4a2",
|
|
"type": "ui_text",
|
|
"z": "1371dec5.76e671",
|
|
"group": "cfe2288f.a8862",
|
|
"order": 6,
|
|
"width": 3,
|
|
"height": 1,
|
|
"name": "Longitude",
|
|
"label": "Longitude",
|
|
"format": "{{msg.payload.lon.deg}}°{{msg.payload.lon.min}}'{{msg.payload.lon.sec}}{{msg.payload.lon.dir}}",
|
|
"layout": "col-center",
|
|
"x": 620,
|
|
"y": 1280,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "906072b1.42c7c8",
|
|
"type": "function",
|
|
"z": "1371dec5.76e671",
|
|
"name": "Convert 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": 410,
|
|
"y": 1260,
|
|
"wires": [
|
|
[
|
|
"8c731f52.2b5f3",
|
|
"34e4b5ea.27b4a2"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "4584c817.0be238",
|
|
"type": "ui_text",
|
|
"z": "1371dec5.76e671",
|
|
"group": "cfe2288f.a8862",
|
|
"order": 3,
|
|
"width": 3,
|
|
"height": 1,
|
|
"name": "Speed",
|
|
"label": "Speed",
|
|
"format": "{{msg.payload}} kts",
|
|
"layout": "col-center",
|
|
"x": 610,
|
|
"y": 1320,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "cd3b05d6.5a3e2",
|
|
"type": "ui_text",
|
|
"z": "1371dec5.76e671",
|
|
"group": "cfe2288f.a8862",
|
|
"order": 4,
|
|
"width": 3,
|
|
"height": 1,
|
|
"name": "Direction",
|
|
"label": "Direction",
|
|
"format": "{{msg.payload.track}} °",
|
|
"layout": "col-center",
|
|
"x": 620,
|
|
"y": 1360,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "9b29e0e2.475e08",
|
|
"type": "function",
|
|
"z": "1371dec5.76e671",
|
|
"name": "GPS Mode",
|
|
"func": "switch (msg.payload.mode){\n case 1:msg.payload = \"No Fix\"; break\n case 2:msg.payload = \"2D Fix\"; break\n case 3:msg.payload = \"3D Fix\"; break\n default: msg.payload = \"No info\"\n}\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 390,
|
|
"y": 1200,
|
|
"wires": [
|
|
[
|
|
"96bc0179.5c37"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "96fefa8b.b7d538",
|
|
"type": "function",
|
|
"z": "1371dec5.76e671",
|
|
"name": "Speed conversion",
|
|
"func": "msg.payload = (0|msg.payload.speed) * 1.9438\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 410,
|
|
"y": 1320,
|
|
"wires": [
|
|
[
|
|
"4584c817.0be238"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "49a98fe9.9450d8",
|
|
"type": "ui_text",
|
|
"z": "1371dec5.76e671",
|
|
"group": "cfe2288f.a8862",
|
|
"order": 2,
|
|
"width": 6,
|
|
"height": 1,
|
|
"name": "GPS UTC datetime",
|
|
"label": "GPS UTC datetime",
|
|
"format": "{{msg.payload.time}}",
|
|
"layout": "col-center",
|
|
"x": 650,
|
|
"y": 1400,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "3c3f334e.d691ac",
|
|
"type": "ui_button",
|
|
"z": "1371dec5.76e671",
|
|
"name": "",
|
|
"group": "cfe2288f.a8862",
|
|
"order": 6,
|
|
"width": 0,
|
|
"height": 0,
|
|
"passthru": false,
|
|
"label": "Force local clock update",
|
|
"tooltip": "",
|
|
"color": "",
|
|
"bgcolor": "",
|
|
"icon": "",
|
|
"payload": "",
|
|
"payloadType": "str",
|
|
"topic": "topic",
|
|
"x": 670,
|
|
"y": 1480,
|
|
"wires": [
|
|
[
|
|
"c60030d4.317418"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "c60030d4.317418",
|
|
"type": "exec",
|
|
"z": "1371dec5.76e671",
|
|
"command": "sudo hwclock -w",
|
|
"addpay": false,
|
|
"append": "",
|
|
"useSpawn": "false",
|
|
"timer": "",
|
|
"oldrc": false,
|
|
"name": "",
|
|
"x": 920,
|
|
"y": 1480,
|
|
"wires": [
|
|
[],
|
|
[],
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "6d144078.508d9",
|
|
"type": "ui_text",
|
|
"z": "1371dec5.76e671",
|
|
"group": "cfe2288f.a8862",
|
|
"order": 2,
|
|
"width": 6,
|
|
"height": 1,
|
|
"name": "Local UTC datetime",
|
|
"label": "Local UTC datetime",
|
|
"format": "{{msg.payload}}",
|
|
"layout": "col-center",
|
|
"x": 650,
|
|
"y": 1440,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "f2a62d0.f5e135",
|
|
"type": "function",
|
|
"z": "1371dec5.76e671",
|
|
"name": "",
|
|
"func": "msg.payload = new Date()\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 380,
|
|
"y": 1440,
|
|
"wires": [
|
|
[
|
|
"6d144078.508d9"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "ba2947.c854deb8",
|
|
"type": "function",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "remove common",
|
|
"func": "function remove_path(item, index, array) {\n array[index] = item.replace(\"/home/pi/data/img/\", \"\")\n} \n\nmsg.payload.forEach(remove_path)\n\nreturn msg",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 620,
|
|
"y": 140,
|
|
"wires": [
|
|
[
|
|
"3ea12061.ce62c"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "21af0db1.c2c182",
|
|
"type": "ui_multistate_switch",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "recursive toggle",
|
|
"group": "abeb6dad.635a2",
|
|
"order": 2,
|
|
"width": 5,
|
|
"height": 1,
|
|
"label": "Recursive folder",
|
|
"stateField": "payload",
|
|
"enableField": "enable",
|
|
"rounded": true,
|
|
"useThemeColors": true,
|
|
"hideSelectedLabel": false,
|
|
"options": [
|
|
{
|
|
"label": "No",
|
|
"value": "0",
|
|
"valueType": "num",
|
|
"color": "#009933"
|
|
},
|
|
{
|
|
"label": "Yes",
|
|
"value": "1",
|
|
"valueType": "num",
|
|
"color": "#999999"
|
|
}
|
|
],
|
|
"x": 480,
|
|
"y": 220,
|
|
"wires": [
|
|
[
|
|
"880b192a.88e2d"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "dffb9881.feef8",
|
|
"type": "ui_multistate_switch",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "force toggle",
|
|
"group": "abeb6dad.635a2",
|
|
"order": 3,
|
|
"width": 5,
|
|
"height": 1,
|
|
"label": "Force rework",
|
|
"stateField": "payload",
|
|
"enableField": "enable",
|
|
"rounded": true,
|
|
"useThemeColors": true,
|
|
"hideSelectedLabel": false,
|
|
"options": [
|
|
{
|
|
"label": "No",
|
|
"value": "0",
|
|
"valueType": "num",
|
|
"color": "#009933"
|
|
},
|
|
{
|
|
"label": "Yes",
|
|
"value": "1",
|
|
"valueType": "num",
|
|
"color": "#999999"
|
|
}
|
|
],
|
|
"x": 470,
|
|
"y": 300,
|
|
"wires": [
|
|
[
|
|
"a4f68fa6.5d77f8"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "880b192a.88e2d",
|
|
"type": "change",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "",
|
|
"rules": [
|
|
{
|
|
"t": "set",
|
|
"p": "recursive",
|
|
"pt": "flow",
|
|
"to": "payload",
|
|
"tot": "msg"
|
|
}
|
|
],
|
|
"action": "",
|
|
"property": "",
|
|
"from": "",
|
|
"to": "",
|
|
"reg": false,
|
|
"x": 690,
|
|
"y": 240,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "a4f68fa6.5d77f8",
|
|
"type": "change",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "",
|
|
"rules": [
|
|
{
|
|
"t": "set",
|
|
"p": "force",
|
|
"pt": "flow",
|
|
"to": "payload",
|
|
"tot": "msg"
|
|
}
|
|
],
|
|
"action": "",
|
|
"property": "",
|
|
"from": "",
|
|
"to": "",
|
|
"reg": false,
|
|
"x": 670,
|
|
"y": 280,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "1ef1b43b.b0f064",
|
|
"type": "inject",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "0",
|
|
"props": [
|
|
{
|
|
"p": "payload"
|
|
}
|
|
],
|
|
"repeat": "",
|
|
"crontab": "",
|
|
"once": true,
|
|
"onceDelay": 0.1,
|
|
"topic": "",
|
|
"payload": "0",
|
|
"payloadType": "num",
|
|
"x": 270,
|
|
"y": 280,
|
|
"wires": [
|
|
[
|
|
"dffb9881.feef8",
|
|
"a4f68fa6.5d77f8"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "f078c068.eacf58",
|
|
"type": "ui_template",
|
|
"z": "cb95299c.2817c8",
|
|
"group": "46be9c86.dea684",
|
|
"name": "Stream Segmented object",
|
|
"order": 2,
|
|
"width": 10,
|
|
"height": 8,
|
|
"format": "<center>\n Latest object segmented:<br/>\n <img src=\"http://planktoscope.local:8001/object.mjpg\"\n onerror=\"this.onerror=null; this.src='http://planktoscope.local:80/error.svg'\"\n alt=\"If you see this, there probably is an error either with your camera or with the python service. Please restart your machine.\"\n style=\"max-width: 100%;max-height: 100%;\">\n</center>",
|
|
"storeOutMessages": true,
|
|
"fwdInMessages": true,
|
|
"resendOnRefresh": false,
|
|
"templateScope": "local",
|
|
"x": 1370,
|
|
"y": 600,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "43f97b93.b76294",
|
|
"type": "inject",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "1",
|
|
"props": [
|
|
{
|
|
"p": "payload"
|
|
}
|
|
],
|
|
"repeat": "",
|
|
"crontab": "",
|
|
"once": true,
|
|
"onceDelay": 0.1,
|
|
"topic": "",
|
|
"payload": "1",
|
|
"payloadType": "num",
|
|
"x": 270,
|
|
"y": 240,
|
|
"wires": [
|
|
[
|
|
"21af0db1.c2c182",
|
|
"880b192a.88e2d"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "ac439738.28bc18",
|
|
"type": "function",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "chart init",
|
|
"func": "obj=[{\"series\": [],\"data\": [],\"labels\": []}]\nmsg.payload = obj\nreturn msg;",
|
|
"outputs": 1,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"x": 980,
|
|
"y": 880,
|
|
"wires": [
|
|
[
|
|
"458cd82e.03d258"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "4f3f7c4a.cb21c4",
|
|
"type": "change",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "",
|
|
"rules": [
|
|
{
|
|
"t": "set",
|
|
"p": "obj_counter",
|
|
"pt": "flow",
|
|
"to": "0",
|
|
"tot": "num"
|
|
}
|
|
],
|
|
"action": "",
|
|
"property": "",
|
|
"from": "",
|
|
"to": "",
|
|
"reg": false,
|
|
"x": 1010,
|
|
"y": 840,
|
|
"wires": [
|
|
[
|
|
"fa3b7929.ac7da8",
|
|
"9d53dbe2.dbffe8"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "6bce0f60.f48998",
|
|
"type": "link in",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "",
|
|
"links": [
|
|
"596fc9d4.46c75"
|
|
],
|
|
"x": 855,
|
|
"y": 840,
|
|
"wires": [
|
|
[
|
|
"4f3f7c4a.cb21c4",
|
|
"ac439738.28bc18"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "596fc9d4.46c75",
|
|
"type": "link out",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "",
|
|
"links": [
|
|
"6bce0f60.f48998"
|
|
],
|
|
"x": 715,
|
|
"y": 500,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "c72a1064.1ec388",
|
|
"type": "change",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "Reset counters",
|
|
"rules": [
|
|
{
|
|
"t": "set",
|
|
"p": "topic",
|
|
"pt": "msg",
|
|
"to": "object count",
|
|
"tot": "str"
|
|
},
|
|
{
|
|
"t": "set",
|
|
"p": "payload",
|
|
"pt": "msg",
|
|
"to": "0",
|
|
"tot": "num"
|
|
}
|
|
],
|
|
"action": "",
|
|
"property": "",
|
|
"from": "",
|
|
"to": "",
|
|
"reg": false,
|
|
"x": 600,
|
|
"y": 500,
|
|
"wires": [
|
|
[
|
|
"596fc9d4.46c75"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "9367534a.fb8568",
|
|
"type": "ui_multistate_switch",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "Ecotaxa archive",
|
|
"group": "abeb6dad.635a2",
|
|
"order": 4,
|
|
"width": 5,
|
|
"height": 1,
|
|
"label": "Ecotaxa archive",
|
|
"stateField": "payload",
|
|
"enableField": "enable",
|
|
"rounded": true,
|
|
"useThemeColors": true,
|
|
"hideSelectedLabel": false,
|
|
"options": [
|
|
{
|
|
"label": "No",
|
|
"value": "0",
|
|
"valueType": "num",
|
|
"color": "#009933"
|
|
},
|
|
{
|
|
"label": "Yes",
|
|
"value": "1",
|
|
"valueType": "num",
|
|
"color": "#999999"
|
|
}
|
|
],
|
|
"x": 1080,
|
|
"y": 220,
|
|
"wires": [
|
|
[
|
|
"25ac4f9a.5b05c8"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "25ac4f9a.5b05c8",
|
|
"type": "change",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "",
|
|
"rules": [
|
|
{
|
|
"t": "set",
|
|
"p": "ecotaxa",
|
|
"pt": "flow",
|
|
"to": "payload",
|
|
"tot": "msg"
|
|
}
|
|
],
|
|
"action": "",
|
|
"property": "",
|
|
"from": "",
|
|
"to": "",
|
|
"reg": false,
|
|
"x": 1280,
|
|
"y": 240,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "bef78886.8f0b98",
|
|
"type": "inject",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "1",
|
|
"props": [
|
|
{
|
|
"p": "payload"
|
|
}
|
|
],
|
|
"repeat": "",
|
|
"crontab": "",
|
|
"once": true,
|
|
"onceDelay": 0.1,
|
|
"topic": "",
|
|
"payload": "1",
|
|
"payloadType": "num",
|
|
"x": 910,
|
|
"y": 240,
|
|
"wires": [
|
|
[
|
|
"9367534a.fb8568",
|
|
"25ac4f9a.5b05c8"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "32465a4e.8fcac6",
|
|
"type": "ui_multistate_switch",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "Keep objects",
|
|
"group": "abeb6dad.635a2",
|
|
"order": 5,
|
|
"width": 5,
|
|
"height": 1,
|
|
"label": "Keep objects",
|
|
"stateField": "payload",
|
|
"enableField": "enable",
|
|
"rounded": true,
|
|
"useThemeColors": true,
|
|
"hideSelectedLabel": false,
|
|
"options": [
|
|
{
|
|
"label": "No",
|
|
"value": "0",
|
|
"valueType": "num",
|
|
"color": "#009933"
|
|
},
|
|
{
|
|
"label": "Yes",
|
|
"value": "1",
|
|
"valueType": "num",
|
|
"color": "#999999"
|
|
}
|
|
],
|
|
"x": 1070,
|
|
"y": 300,
|
|
"wires": [
|
|
[
|
|
"8dd6f57f.b77f98"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "8dd6f57f.b77f98",
|
|
"type": "change",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "",
|
|
"rules": [
|
|
{
|
|
"t": "set",
|
|
"p": "keep",
|
|
"pt": "flow",
|
|
"to": "payload",
|
|
"tot": "msg"
|
|
}
|
|
],
|
|
"action": "",
|
|
"property": "",
|
|
"from": "",
|
|
"to": "",
|
|
"reg": false,
|
|
"x": 1270,
|
|
"y": 280,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "8090df89.c029e",
|
|
"type": "inject",
|
|
"z": "cb95299c.2817c8",
|
|
"name": "0",
|
|
"props": [
|
|
{
|
|
"p": "payload"
|
|
}
|
|
],
|
|
"repeat": "",
|
|
"crontab": "",
|
|
"once": true,
|
|
"onceDelay": 0.1,
|
|
"topic": "",
|
|
"payload": "0",
|
|
"payloadType": "num",
|
|
"x": 910,
|
|
"y": 280,
|
|
"wires": [
|
|
[
|
|
"32465a4e.8fcac6",
|
|
"8dd6f57f.b77f98"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "6c20d6a7.869b6",
|
|
"type": "link out",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "Git revision",
|
|
"links": [
|
|
"be6bddd3.2004f"
|
|
],
|
|
"x": 815,
|
|
"y": 360,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "7de3a9b4.0ab108",
|
|
"type": "ui_toast",
|
|
"z": "9daf9e2b.019fc",
|
|
"position": "top right",
|
|
"displayTime": "10",
|
|
"highlight": "",
|
|
"sendall": true,
|
|
"outputs": 0,
|
|
"ok": "OK",
|
|
"cancel": "",
|
|
"raw": false,
|
|
"topic": "",
|
|
"name": "Git branch update",
|
|
"x": 1290,
|
|
"y": 260,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "ccc7d79b.a419f",
|
|
"type": "change",
|
|
"z": "9daf9e2b.019fc",
|
|
"name": "",
|
|
"rules": [
|
|
{
|
|
"t": "set",
|
|
"p": "payload",
|
|
"pt": "msg",
|
|
"to": "List update successfull",
|
|
"tot": "str"
|
|
},
|
|
{
|
|
"t": "set",
|
|
"p": "topic",
|
|
"pt": "msg",
|
|
"to": "Branch list update",
|
|
"tot": "str"
|
|
}
|
|
],
|
|
"action": "",
|
|
"property": "",
|
|
"from": "",
|
|
"to": "",
|
|
"reg": false,
|
|
"x": 1080,
|
|
"y": 260,
|
|
"wires": [
|
|
[
|
|
"7de3a9b4.0ab108"
|
|
]
|
|
]
|
|
}
|
|
] |