add sample_gear_net_opening and sample_concentrated_sample_volume

improve #44
This commit is contained in:
Romain Bazile 2020-11-29 23:44:09 +01:00
parent 3307d8e5b1
commit 156286a8da
2 changed files with 416 additions and 301 deletions

View file

@ -360,7 +360,7 @@
"tab": "737ec584.2eea2c", "tab": "737ec584.2eea2c",
"order": 1, "order": 1,
"disp": true, "disp": true,
"width": 11, "width": 10,
"collapse": false "collapse": false
}, },
{ {
@ -512,7 +512,7 @@
"type": "ui_group", "type": "ui_group",
"name": "Danger Zone (DO NOT TOUCH HERE UNLESS YOU KNOW WHAT YOU ARE DOING)", "name": "Danger Zone (DO NOT TOUCH HERE UNLESS YOU KNOW WHAT YOU ARE DOING)",
"tab": "d9cd733b.ab73d", "tab": "d9cd733b.ab73d",
"order": 5, "order": 7,
"disp": true, "disp": true,
"width": 24, "width": 24,
"collapse": false "collapse": false
@ -523,9 +523,9 @@
"z": "", "z": "",
"name": "Navigation", "name": "Navigation",
"tab": "d9cd733b.ab73d", "tab": "d9cd733b.ab73d",
"order": 7, "order": 6,
"disp": false, "disp": false,
"width": "24", "width": 10,
"collapse": false "collapse": false
}, },
{ {
@ -594,84 +594,21 @@
"id": "cf5d9f0e.d57e7", "id": "cf5d9f0e.d57e7",
"type": "ui_group", "type": "ui_group",
"z": "", "z": "",
"name": "Sample Net Location", "name": "Net Metadata",
"tab": "737ec584.2eea2c", "tab": "737ec584.2eea2c",
"order": 3, "order": 3,
"disp": true, "disp": true,
"width": "10", "width": "10",
"collapse": false "collapse": false
}, },
{
"id": "5a0e69ac.725268",
"type": "ui_spacer",
"name": "spacer",
"group": "3ca00bf9.e5cac4",
"order": 2,
"width": 1,
"height": 1
},
{
"id": "ca7a56b3.89805",
"type": "ui_spacer",
"name": "spacer",
"group": "3ca00bf9.e5cac4",
"order": 5,
"width": 1,
"height": 1
},
{
"id": "aab3b337.985c98",
"type": "ui_spacer",
"name": "spacer",
"group": "1be83144.4fe4bf",
"order": 2,
"width": 9,
"height": 1
},
{
"id": "5324b3d4.72d6d4",
"type": "ui_spacer",
"name": "spacer",
"group": "1be83144.4fe4bf",
"order": 4,
"width": 9,
"height": 1
},
{
"id": "8780f7f3.52ee5",
"type": "ui_spacer",
"name": "spacer",
"group": "1be83144.4fe4bf",
"order": 5,
"width": 9,
"height": 1
},
{
"id": "5e847442.3e340c",
"type": "ui_spacer",
"name": "spacer",
"group": "1be83144.4fe4bf",
"order": 7,
"width": 9,
"height": 1
},
{
"id": "cc4fe53d.f4dc4",
"type": "ui_spacer",
"name": "spacer",
"group": "1be83144.4fe4bf",
"order": 9,
"width": 10,
"height": 1
},
{ {
"id": "ce9e278.781eed8", "id": "ce9e278.781eed8",
"type": "ui_group", "type": "ui_group",
"name": "Information", "name": "Information",
"tab": "d9cd733b.ab73d", "tab": "d9cd733b.ab73d",
"order": 6, "order": 5,
"disp": true, "disp": true,
"width": "6", "width": 10,
"collapse": false "collapse": false
}, },
{ {
@ -716,24 +653,6 @@
"width": 1, "width": 1,
"height": 1 "height": 1
}, },
{
"id": "894786f4.7552b8",
"type": "ui_spacer",
"name": "spacer",
"group": "3e1ba03d.f01d8",
"order": 7,
"width": 1,
"height": 1
},
{
"id": "5835ad3b.5e9ff4",
"type": "ui_spacer",
"name": "spacer",
"group": "cf5d9f0e.d57e7",
"order": 12,
"width": 4,
"height": 1
},
{ {
"id": "b001a150.faa548", "id": "b001a150.faa548",
"type": "ui_spacer", "type": "ui_spacer",
@ -762,7 +681,79 @@
"height": 1 "height": 1
}, },
{ {
"id": "de621043.b31528", "id": "9715083f.10e3",
"type": "ui_spacer",
"name": "spacer",
"group": "3ca00bf9.e5cac4",
"order": 2,
"width": 2,
"height": 1
},
{
"id": "c4f96e9a.09e738",
"type": "ui_spacer",
"name": "spacer",
"group": "1be83144.4fe4bf",
"order": 2,
"width": 9,
"height": 1
},
{
"id": "8c6ed0ee.25b9b8",
"type": "ui_spacer",
"name": "spacer",
"group": "1be83144.4fe4bf",
"order": 4,
"width": 9,
"height": 1
},
{
"id": "91f16338.34b4e",
"type": "ui_spacer",
"name": "spacer",
"group": "1be83144.4fe4bf",
"order": 5,
"width": 9,
"height": 1
},
{
"id": "6c77293e.422168",
"type": "ui_spacer",
"name": "spacer",
"group": "1be83144.4fe4bf",
"order": 7,
"width": 9,
"height": 1
},
{
"id": "3c649b0d.73c95c",
"type": "ui_spacer",
"name": "spacer",
"group": "1be83144.4fe4bf",
"order": 9,
"width": 10,
"height": 1
},
{
"id": "61cbfe72.ee8ef",
"type": "ui_spacer",
"name": "spacer",
"group": "3e1ba03d.f01d8",
"order": 9,
"width": 5,
"height": 1
},
{
"id": "41a8079d.95ce48",
"type": "ui_spacer",
"name": "spacer",
"group": "cf5d9f0e.d57e7",
"order": 13,
"width": 4,
"height": 1
},
{
"id": "90a195f8.0f1008",
"type": "ui_spacer", "type": "ui_spacer",
"name": "spacer", "name": "spacer",
"group": "4322c187.e73e5", "group": "4322c187.e73e5",
@ -771,34 +762,61 @@
"height": 1 "height": 1
}, },
{ {
"id": "b0a2c4ff.ce75b", "id": "57c4bb5c.952d9c",
"type": "ui_spacer", "type": "ui_spacer",
"name": "spacer", "name": "spacer",
"group": "b5d61bc7.54fe48", "group": "b5d61bc7.54fe48",
"order": 2, "order": 2,
"width": 6, "width": 2,
"height": 1 "height": 1
}, },
{ {
"id": "f1326cca.4ab1f", "id": "da6aee4f.4575e",
"type": "ui_spacer", "type": "ui_spacer",
"name": "spacer", "name": "spacer",
"group": "b5d61bc7.54fe48", "group": "b5d61bc7.54fe48",
"order": 3, "order": 4,
"width": 1, "width": 2,
"height": 1 "height": 1
}, },
{ {
"id": "a27ea76d.b9989", "id": "d517ce18.9f4d28",
"type": "ui_spacer", "type": "ui_spacer",
"name": "spacer", "name": "spacer",
"group": "b5d61bc7.54fe48", "group": "b5d61bc7.54fe48",
"order": 5, "order": 5,
"width": 1, "width": 2,
"height": 1 "height": 1
}, },
{ {
"id": "17a79a42.2912ce", "id": "200200fa.7e301",
"type": "ui_spacer",
"name": "spacer",
"group": "b5d61bc7.54fe48",
"order": 6,
"width": 2,
"height": 1
},
{
"id": "fd54e34d.f85e",
"type": "ui_spacer",
"name": "spacer",
"group": "b5d61bc7.54fe48",
"order": 7,
"width": 2,
"height": 1
},
{
"id": "613f1f0a.5ff3e",
"type": "ui_spacer",
"name": "spacer",
"group": "b5d61bc7.54fe48",
"order": 8,
"width": 2,
"height": 1
},
{
"id": "7bedf48.6e15f0c",
"type": "ui_spacer", "type": "ui_spacer",
"name": "spacer", "name": "spacer",
"group": "b7919ae2.c01788", "group": "b7919ae2.c01788",
@ -879,7 +897,7 @@
"name": "", "name": "",
"group": "3ca00bf9.e5cac4", "group": "3ca00bf9.e5cac4",
"order": 1, "order": 1,
"width": 4, "width": 5,
"height": 1, "height": 1,
"passthru": false, "passthru": false,
"label": "Home", "label": "Home",
@ -952,8 +970,7 @@
[ [
"bc503fa5.f46dd", "bc503fa5.f46dd",
"2c8c45ab.610c0a", "2c8c45ab.610c0a",
"cef370c7.1f7a", "cef370c7.1f7a"
"11b51f8f.acd308"
], ],
[], [],
[] []
@ -1311,7 +1328,7 @@
"label": "Fan", "label": "Fan",
"tooltip": "", "tooltip": "",
"group": "3ca00bf9.e5cac4", "group": "3ca00bf9.e5cac4",
"order": 6, "order": 3,
"width": 3, "width": 3,
"height": 1, "height": 1,
"passthru": true, "passthru": true,
@ -1463,7 +1480,7 @@
"rules": [ "rules": [
{ {
"t": "gt", "t": "gt",
"v": "50", "v": "40",
"vt": "num" "vt": "num"
}, },
{ {
@ -2109,8 +2126,8 @@
"z": "b771c342.49603", "z": "b771c342.49603",
"name": "", "name": "",
"events": "change", "events": "change",
"x": 440, "x": 460,
"y": 1180, "y": 1300,
"wires": [ "wires": [
[] []
] ]
@ -2129,8 +2146,8 @@
"raw": false, "raw": false,
"topic": "", "topic": "",
"name": "", "name": "",
"x": 850, "x": 870,
"y": 1300, "y": 1420,
"wires": [ "wires": [
[] []
] ]
@ -2145,8 +2162,8 @@
"noerr": 0, "noerr": 0,
"initialize": "", "initialize": "",
"finalize": "", "finalize": "",
"x": 450, "x": 470,
"y": 1240, "y": 1360,
"wires": [ "wires": [
[ [
"f5e66a2f.0d09d8" "f5e66a2f.0d09d8"
@ -2178,8 +2195,8 @@
"z": "b771c342.49603", "z": "b771c342.49603",
"name": "", "name": "",
"events": "change", "events": "change",
"x": 840, "x": 860,
"y": 1220, "y": 1340,
"wires": [ "wires": [
[] []
] ]
@ -2206,8 +2223,8 @@
"checkall": "true", "checkall": "true",
"repair": false, "repair": false,
"outputs": 2, "outputs": 2,
"x": 610, "x": 630,
"y": 1240, "y": 1360,
"wires": [ "wires": [
[ [
"726a7822.cd6298", "726a7822.cd6298",
@ -2226,7 +2243,7 @@
"label": "Latitude", "label": "Latitude",
"tooltip": "36°57'9\" N", "tooltip": "36°57'9\" N",
"group": "cf5d9f0e.d57e7", "group": "cf5d9f0e.d57e7",
"order": 2, "order": 3,
"width": 5, "width": 5,
"height": 1, "height": 1,
"passthru": true, "passthru": true,
@ -2234,7 +2251,7 @@
"delay": 300, "delay": 300,
"topic": "object_lat", "topic": "object_lat",
"x": 680, "x": 680,
"y": 780, "y": 860,
"wires": [ "wires": [
[ [
"42795da1.0ee104" "42795da1.0ee104"
@ -2249,7 +2266,7 @@
"label": "Longitude", "label": "Longitude",
"tooltip": "110°4'21\" W", "tooltip": "110°4'21\" W",
"group": "cf5d9f0e.d57e7", "group": "cf5d9f0e.d57e7",
"order": 3, "order": 4,
"width": 5, "width": 5,
"height": 1, "height": 1,
"passthru": true, "passthru": true,
@ -2257,7 +2274,7 @@
"delay": 300, "delay": 300,
"topic": "object_lon", "topic": "object_lon",
"x": 680, "x": 680,
"y": 820, "y": 900,
"wires": [ "wires": [
[ [
"42795da1.0ee104" "42795da1.0ee104"
@ -2271,13 +2288,13 @@
"name": "object_date", "name": "object_date",
"label": "Date", "label": "Date",
"group": "cf5d9f0e.d57e7", "group": "cf5d9f0e.d57e7",
"order": 4, "order": 5,
"width": 5, "width": 5,
"height": 1, "height": 1,
"passthru": true, "passthru": true,
"topic": "object_date", "topic": "object_date",
"x": 670, "x": 670,
"y": 860, "y": 940,
"wires": [ "wires": [
[ [
"29f2b365.4327ec" "29f2b365.4327ec"
@ -2292,7 +2309,7 @@
"label": "Time", "label": "Time",
"tooltip": "UTC time, 03:23:00 or 15:45", "tooltip": "UTC time, 03:23:00 or 15:45",
"group": "cf5d9f0e.d57e7", "group": "cf5d9f0e.d57e7",
"order": 5, "order": 6,
"width": 5, "width": 5,
"height": 1, "height": 1,
"passthru": true, "passthru": true,
@ -2300,7 +2317,7 @@
"delay": 300, "delay": 300,
"topic": "object_time", "topic": "object_time",
"x": 670, "x": 670,
"y": 900, "y": 980,
"wires": [ "wires": [
[ [
"1a945afa.d60aad" "1a945afa.d60aad"
@ -2753,8 +2770,8 @@
"payload": "{\"tab\":\"Home\"}", "payload": "{\"tab\":\"Home\"}",
"payloadType": "json", "payloadType": "json",
"topic": "", "topic": "",
"x": 280, "x": 300,
"y": 1180, "y": 1300,
"wires": [ "wires": [
[ [
"222c851d.5d0a3a" "222c851d.5d0a3a"
@ -2779,8 +2796,8 @@
"payload": "{\"tab\":\"Home\"}", "payload": "{\"tab\":\"Home\"}",
"payloadType": "json", "payloadType": "json",
"topic": "", "topic": "",
"x": 280, "x": 300,
"y": 1240, "y": 1360,
"wires": [ "wires": [
[ [
"986d960a.c75908" "986d960a.c75908"
@ -2893,16 +2910,16 @@
"type": "ui_template", "type": "ui_template",
"z": "baa1e3d9.cb29d", "z": "baa1e3d9.cb29d",
"group": "b5d61bc7.54fe48", "group": "b5d61bc7.54fe48",
"name": "show global", "name": "Show Metadata",
"order": 6, "order": 9,
"width": 0, "width": 0,
"height": 0, "height": 0,
"format": "<div >\n <strong>Sample Project:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sample_project\"></span><br>\n <strong>Sample Ship:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sample_ship\"></span><br>\n <strong>sample operator:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sample_operator\"></span><br>\n <strong>sample id:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sample_id\"></span><br>\n <strong>sample sampling_gear:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sample_sampling_gear\"></span><br>\n\n <strong>acq id:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_id\"></span><br>\n <strong>acq instrument:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_instrument\"></span><br>\n <strong>acq instrument_id:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_instrument_id\"></span><br>\n <strong>acq camera:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_camera\"></span><br>\n <strong>acq celltype:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_celltype\"></span><br>\n <strong>acq minimum_mesh:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_minimum_mesh\"></span><br>\n <strong>acq maximum_mesh:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_maximum_mesh\"></span><br>\n <strong>acq min_esd:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_min_esd\"></span><br>\n <strong>acq max_esd:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_max_esd\"></span><br>\n <strong>acq volume:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_volume\"></span><br>\n <strong>acq magnification:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_magnification\"></span><br>\n <strong>acq fnumber_objective:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_fnumber_objective\"></span><br>\n <strong>acq software:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_software\"></span><br>\n <strong>acq flowrate:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sug_flowrate\"></span><br>\n\n <strong>object lat:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_lat\"></span><br>\n <strong>object lon:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_lon\"></span><br>\n <strong>object lat end:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_lat_end\"></span><br>\n <strong>object lon end:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_lon_end\"></span><br>\n <strong>object date:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_date\"></span><br>\n <strong>object time:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_time\"></span><br>\n <strong>object date end:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_date_end\"></span><br>\n <strong>object time end:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_time_end\"></span><br>\n <strong>object depth min:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_depth_min\"></span><br>\n <strong>object depth max:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_depth_max\"></span><br>\n\n <strong>process pixel:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.process_pixel\"></span><br>\n <strong>process id:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.process_id\"></span>\n</div>\n", "format": "<div>\n <table style=\"text-align: center; width:100%\">\n <tr style=\"vertical-align: top\">\n <td>\n <h2>Sample</h2><br>\n <strong>project:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sample_project\"></span><br>\n <strong>ship:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sample_ship\"></span><br>\n <strong>operator:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sample_operator\"></span><br>\n <strong>id:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sample_id\"></span><br>\n <strong>sampling gear:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sample_sampling_gear\"></span><br>\n <strong>concentrated volume:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sample_concentrated_sample_volume\"></span><br>\n <strong>gear net opening:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sample_gear_net_opening\"></span><br></td>\n <td>\n <h2>Acquisition</h2><br>\n <strong>id:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_id\"></span><br>\n <strong>instrument:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_instrument\"></span><br>\n <strong>instrument id:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_instrument_id\"></span><br>\n <strong>camera:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_camera\"></span><br>\n <strong>celltype:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_celltype\"></span><br>\n <strong>minimum mesh:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_minimum_mesh\"></span><br>\n <strong>maximum mesh:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_maximum_mesh\"></span><br>\n <strong>min esd:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_min_esd\"></span><br>\n <strong>max esd:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_max_esd\"></span><br>\n <strong>volume:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_volume\"></span><br>\n <strong>magnification:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_magnification\"></span><br>\n <strong>fnumber objective:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_fnumber_objective\"></span><br>\n <strong>software:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.acq_software\"></span><br>\n <strong>flowrate:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.sug_flowrate\"></span><br></td>\n </tr>\n <tr style=\"vertical-align: top\">\n <td>\n <h2>Object</h2><br>\n <strong>latitude:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_lat\"></span><br>\n <strong>longitude:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_lon\"></span><br>\n <strong>latitude end:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_lat_end\"></span><br>\n <strong>longitude end:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_lon_end\"></span><br>\n <strong>date:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_date\"></span><br>\n <strong>time:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_time\"></span><br>\n <strong>date end:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_date_end\"></span><br>\n <strong>time end:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_time_end\"></span><br>\n <strong>depth min:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_depth_min\"></span><br>\n <strong>depth max:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.object_depth_max\"></span><br></td>\n <td>\n <h2>Process</h2><br>\n <strong>pixel:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.process_pixel\"></span><br>\n <strong>id:</strong> <span id=\"max_size\" ng-bind-html=\"msg.payload.config.process_id\"></span></td>\n </tr>\n </table>\n</div>",
"storeOutMessages": true, "storeOutMessages": false,
"fwdInMessages": true, "fwdInMessages": false,
"resendOnRefresh": false, "resendOnRefresh": false,
"templateScope": "local", "templateScope": "local",
"x": 1250, "x": 1260,
"y": 500, "y": 500,
"wires": [ "wires": [
[] []
@ -3854,7 +3871,7 @@
"type": "ui_template", "type": "ui_template",
"z": "1371dec5.76e671", "z": "1371dec5.76e671",
"group": "1be83144.4fe4bf", "group": "1be83144.4fe4bf",
"name": "", "name": "Update message",
"order": 1, "order": 1,
"width": 0, "width": 0,
"height": 0, "height": 0,
@ -3863,7 +3880,7 @@
"fwdInMessages": true, "fwdInMessages": true,
"resendOnRefresh": true, "resendOnRefresh": true,
"templateScope": "local", "templateScope": "local",
"x": 100, "x": 130,
"y": 460, "y": 460,
"wires": [ "wires": [
[] []
@ -4056,7 +4073,7 @@
"type": "function", "type": "function",
"z": "baa1e3d9.cb29d", "z": "baa1e3d9.cb29d",
"name": "Encapsulate config", "name": "Encapsulate config",
"func": "if (global.get(\"sample_sampling_gear\")==\"net\") {\n msg.payload = {\n \"action\":\"update_config\", \n \"config\":{\n \"sample_project\":global.get(\"sample_project\"),\n \"sample_id\":global.get(\"sample_id\"),\n \"sample_ship\":global.get(\"sample_ship\"),\n \"sample_operator\":global.get(\"sample_operator\"),\n \"sample_sampling_gear\":global.get(\"sample_sampling_gear\"),\n \n \"acq_id\":global.get(\"acq_id\"),\n \"acq_instrument\":global.get(\"acq_instrument\"),\n \"acq_instrument_id\":global.get(\"acq_instrument_id\"),\n \"acq_celltype\":global.get(\"acq_celltype\"),\n \"acq_minimum_mesh\":global.get(\"acq_minimum_mesh\"),\n \"acq_maximum_mesh\":global.get(\"acq_maximum_mesh\"),\n \"acq_min_esd\":global.get(\"acq_min_esd\"),\n \"acq_max_esd\":global.get(\"acq_max_esd\"),\n \"acq_volume\":global.get(\"acq_volume\"),\n \"acq_magnification\":global.get(\"magnification\"),\n \"acq_fnumber_objective\":global.get(\"acq_fnumber_objective\"),\n \"acq_camera_name\":global.get(\"acq_camera_name\"),\n \"acq_imaged_volume\":global.get(\"acq_imaged_volume\"),\n \"acq_nb_frame\":global.get(\"nb_frame\"),\n \n \"object_date\":global.get(\"object_date\"),\n \"object_time\":global.get(\"object_time\"),\n \"object_lat\":global.get(\"object_lat\"),\n \"object_lon\":global.get(\"object_lon\"),\n \"object_date_end\":global.get(\"object_date_end\"),\n \"object_time_end\":global.get(\"object_time_end\"),\n \"object_lat_end\":global.get(\"object_lat_end\"),\n \"object_lon_end\":global.get(\"object_lon_end\"),\n \"object_depth_min\":global.get(\"object_depth_min\"),\n \"object_depth_max\":global.get(\"object_depth_max\"),\n \n \"process_pixel\":global.get(\"process_pixel\"),\n \"process_id\":global.get(\"process_id\")\n }\n };\n}\nelse {\n msg.payload = {\n \"action\":\"update_config\", \n \"config\":{\n \"sample_project\":global.get(\"sample_project\"),\n \"sample_id\":global.get(\"sample_id\"),\n \"sample_ship\":global.get(\"sample_ship\"),\n \"sample_operator\":global.get(\"sample_operator\"),\n \"sample_sampling_gear\":global.get(\"sample_sampling_gear\"),\n \n \"acq_id\":global.get(\"acq_id\"),\n \"acq_instrument\":global.get(\"acq_instrument\"),\n \"acq_instrument_id\":global.get(\"acq_instrument_id\"),\n \"acq_celltype\":global.get(\"acq_celltype\"),\n \"acq_minimum_mesh\":global.get(\"acq_minimum_mesh\"),\n \"acq_maximum_mesh\":global.get(\"acq_maximum_mesh\"),\n \"acq_min_esd\":global.get(\"acq_min_esd\"),\n \"acq_max_esd\":global.get(\"acq_max_esd\"),\n \"acq_volume\":global.get(\"acq_volume\"),\n \"acq_magnification\":global.get(\"magnification\"),\n \"acq_fnumber_objective\":global.get(\"acq_fnumber_objective\"),\n \"acq_camera_name\":global.get(\"acq_camera_name\"),\n \"acq_nb_frame\":global.get(\"nb_frame\"),\n \n \"object_date\":global.get(\"object_date\"),\n \"object_time\":global.get(\"object_time\"),\n \"object_lat\":global.get(\"object_lat\"),\n \"object_lon\":global.get(\"object_lon\"),\n \"object_depth_min\":global.get(\"object_depth_min\"),\n \"object_depth_max\":global.get(\"object_depth_max\"),\n \n \"process_pixel\":global.get(\"process_pixel\"),\n \"process_id\":global.get(\"process_id\")\n }\n };\n}\nreturn msg;", "func": "msg.payload = {\n\t\"action\": \"update_config\",\n\t\"config\": {\n\t\t\"sample_project\": global.get(\"sample_project\"),\n\t\t\"sample_id\": 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(\"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_magnification\": global.get(\"magnification\"),\n\t\t\"acq_fnumber_objective\": global.get(\"acq_fnumber_objective\"),\n\t\t\"acq_camera_name\": global.get(\"acq_camera_name\"),\n\t\t\"acq_nb_frame\": global.get(\"nb_frame\"),\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}\n};\n\nif (msg.payload.config.sample_sampling_gear == \"net\") {\n\tmsg.payload.config = { ...msg.payload.config ,\n\t\t\t\"sample_gear_net_opening\": global.get(\"sample_gear_net_opening\"),\n\t\t\t\"object_date_end\": global.get(\"object_date_end\"),\n\t\t\t\"object_time_end\": global.get(\"object_time_end\"),\n\t\t\t\"object_lat_end\": global.get(\"object_lat_end\"),\n\t\t\t\"object_lon_end\": global.get(\"object_lon_end\")\n\t};\n}\nreturn msg;",
"outputs": 1, "outputs": 1,
"noerr": 0, "noerr": 0,
"initialize": "", "initialize": "",
@ -4163,7 +4180,7 @@
"level": "1", "level": "1",
"freq": "", "freq": "",
"out": "out", "out": "out",
"x": 470, "x": 480,
"y": 600, "y": 600,
"wires": [] "wires": []
}, },
@ -4430,8 +4447,8 @@
"z": "b771c342.49603", "z": "b771c342.49603",
"name": "", "name": "",
"env": [], "env": [],
"x": 830, "x": 850,
"y": 1260, "y": 1380,
"wires": [ "wires": [
[] []
] ]
@ -4444,7 +4461,7 @@
"label": "Latitude", "label": "Latitude",
"tooltip": "36°57'9\" N", "tooltip": "36°57'9\" N",
"group": "cf5d9f0e.d57e7", "group": "cf5d9f0e.d57e7",
"order": 7, "order": 8,
"width": 5, "width": 5,
"height": 1, "height": 1,
"passthru": true, "passthru": true,
@ -4452,7 +4469,7 @@
"delay": 300, "delay": 300,
"topic": "object_lat_end", "topic": "object_lat_end",
"x": 660, "x": 660,
"y": 980, "y": 1060,
"wires": [ "wires": [
[ [
"42795da1.0ee104" "42795da1.0ee104"
@ -4467,7 +4484,7 @@
"label": "Longitude", "label": "Longitude",
"tooltip": "110°4'21\" W", "tooltip": "110°4'21\" W",
"group": "cf5d9f0e.d57e7", "group": "cf5d9f0e.d57e7",
"order": 8, "order": 9,
"width": 5, "width": 5,
"height": 1, "height": 1,
"passthru": true, "passthru": true,
@ -4475,7 +4492,7 @@
"delay": 300, "delay": 300,
"topic": "object_lon_end", "topic": "object_lon_end",
"x": 660, "x": 660,
"y": 1020, "y": 1100,
"wires": [ "wires": [
[ [
"42795da1.0ee104" "42795da1.0ee104"
@ -4489,13 +4506,13 @@
"name": "object_date_end", "name": "object_date_end",
"label": "Date", "label": "Date",
"group": "cf5d9f0e.d57e7", "group": "cf5d9f0e.d57e7",
"order": 9, "order": 11,
"width": 5, "width": 5,
"height": 1, "height": 1,
"passthru": true, "passthru": true,
"topic": "object_date_end", "topic": "object_date_end",
"x": 660, "x": 660,
"y": 1060, "y": 1140,
"wires": [ "wires": [
[ [
"29f2b365.4327ec" "29f2b365.4327ec"
@ -4518,7 +4535,7 @@
"delay": 300, "delay": 300,
"topic": "object_time_end", "topic": "object_time_end",
"x": 660, "x": 660,
"y": 1100, "y": 1180,
"wires": [ "wires": [
[ [
"1a945afa.d60aad" "1a945afa.d60aad"
@ -4536,7 +4553,7 @@
"initialize": "", "initialize": "",
"finalize": "", "finalize": "",
"x": 960, "x": 960,
"y": 840, "y": 920,
"wires": [ "wires": [
[] []
] ]
@ -4552,7 +4569,7 @@
"initialize": "", "initialize": "",
"finalize": "", "finalize": "",
"x": 960, "x": 960,
"y": 800, "y": 880,
"wires": [ "wires": [
[] []
] ]
@ -4733,7 +4750,7 @@
"type": "ui_text", "type": "ui_text",
"z": "1371dec5.76e671", "z": "1371dec5.76e671",
"group": "ce9e278.781eed8", "group": "ce9e278.781eed8",
"order": 3, "order": 4,
"width": 0, "width": 0,
"height": 0, "height": 0,
"name": "", "name": "",
@ -4749,7 +4766,7 @@
"type": "ui_text", "type": "ui_text",
"z": "1371dec5.76e671", "z": "1371dec5.76e671",
"group": "ce9e278.781eed8", "group": "ce9e278.781eed8",
"order": 0, "order": 1,
"width": 0, "width": 0,
"height": 0, "height": 0,
"name": "", "name": "",
@ -4765,7 +4782,7 @@
"type": "ui_text", "type": "ui_text",
"z": "1371dec5.76e671", "z": "1371dec5.76e671",
"group": "ce9e278.781eed8", "group": "ce9e278.781eed8",
"order": 1, "order": 3,
"width": 0, "width": 0,
"height": 0, "height": 0,
"name": "", "name": "",
@ -4781,7 +4798,7 @@
"type": "ui_text", "type": "ui_text",
"z": "1371dec5.76e671", "z": "1371dec5.76e671",
"group": "ce9e278.781eed8", "group": "ce9e278.781eed8",
"order": 0, "order": 2,
"width": 0, "width": 0,
"height": 0, "height": 0,
"name": "", "name": "",
@ -4839,7 +4856,7 @@
"z": "b771c342.49603", "z": "b771c342.49603",
"d": true, "d": true,
"group": "cf5d9f0e.d57e7", "group": "cf5d9f0e.d57e7",
"order": 11, "order": 12,
"width": 6, "width": 6,
"height": 1, "height": 1,
"name": "GPS Status Display", "name": "GPS Status Display",
@ -4860,8 +4877,8 @@
"noerr": 0, "noerr": 0,
"initialize": "", "initialize": "",
"finalize": "", "finalize": "",
"x": 230, "x": 950,
"y": 560, "y": 800,
"wires": [ "wires": [
[] []
] ]
@ -4981,7 +4998,7 @@
"initialize": "", "initialize": "",
"finalize": "", "finalize": "",
"x": 980, "x": 980,
"y": 760, "y": 840,
"wires": [ "wires": [
[ [
"9f501f49.45645" "9f501f49.45645"
@ -5060,7 +5077,7 @@
"label": "Object depth Max", "label": "Object depth Max",
"tooltip": "", "tooltip": "",
"group": "3e1ba03d.f01d8", "group": "3e1ba03d.f01d8",
"order": 8, "order": 7,
"width": 5, "width": 5,
"height": 1, "height": 1,
"passthru": true, "passthru": true,
@ -5068,7 +5085,7 @@
"delay": 300, "delay": 300,
"topic": "object_depth_max", "topic": "object_depth_max",
"x": 650, "x": 650,
"y": 500, "y": 540,
"wires": [ "wires": [
[ [
"9f501f49.45645" "9f501f49.45645"
@ -5091,7 +5108,7 @@
"delay": 300, "delay": 300,
"topic": "object_depth_min", "topic": "object_depth_min",
"x": 650, "x": 650,
"y": 540, "y": 580,
"wires": [ "wires": [
[ [
"9f501f49.45645" "9f501f49.45645"
@ -5324,10 +5341,9 @@
"initialize": "", "initialize": "",
"finalize": "", "finalize": "",
"x": 1140, "x": 1140,
"y": 1100, "y": 1080,
"wires": [ "wires": [
[ [
"b7c3a3ad.9bf32",
"39812a27.6cb10e" "39812a27.6cb10e"
] ]
] ]
@ -5398,33 +5414,17 @@
] ]
] ]
}, },
{
"id": "b7c3a3ad.9bf32",
"type": "ui_text",
"z": "baa1e3d9.cb29d",
"group": "b5d61bc7.54fe48",
"order": 4,
"width": 5,
"height": 2,
"name": "Image Count",
"label": "Images count",
"format": "{{msg.payload}}",
"layout": "col-center",
"x": 1590,
"y": 1120,
"wires": []
},
{ {
"id": "1a2e721a.f5e876", "id": "1a2e721a.f5e876",
"type": "ui_gauge", "type": "ui_gauge",
"z": "baa1e3d9.cb29d", "z": "baa1e3d9.cb29d",
"name": "Image Donut", "name": "progress donut",
"group": "b5d61bc7.54fe48", "group": "b5d61bc7.54fe48",
"order": 1, "order": 3,
"width": 4, "width": 6,
"height": 3, "height": 3,
"gtype": "donut", "gtype": "donut",
"title": "progress", "title": "",
"label": "%", "label": "%",
"format": "{{value}}", "format": "{{value}}",
"min": 0, "min": 0,
@ -5436,7 +5436,7 @@
], ],
"seg1": "50", "seg1": "50",
"seg2": "75", "seg2": "75",
"x": 1590, "x": 1600,
"y": 1080, "y": 1080,
"wires": [] "wires": []
}, },
@ -5450,7 +5450,7 @@
"noerr": 0, "noerr": 0,
"initialize": "", "initialize": "",
"finalize": "", "finalize": "",
"x": 1400, "x": 1380,
"y": 1080, "y": 1080,
"wires": [ "wires": [
[ [
@ -5458,53 +5458,6 @@
] ]
] ]
}, },
{
"id": "1585d7e9.ea2d28",
"type": "function",
"z": "baa1e3d9.cb29d",
"name": "img_counter init",
"func": "img_counter=0\nglobal.set('img_counter',img_counter)\nmsg.payload = img_counter\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"x": 1340,
"y": 1160,
"wires": [
[
"b7c3a3ad.9bf32"
]
]
},
{
"id": "e1a2f1b3.fe1758",
"type": "inject",
"z": "baa1e3d9.cb29d",
"name": "Init graphs",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": true,
"onceDelay": 0.1,
"topic": "",
"payload": "0",
"payloadType": "num",
"x": 1130,
"y": 1160,
"wires": [
[
"1585d7e9.ea2d28"
]
]
},
{ {
"id": "8f3788f6.ddcf98", "id": "8f3788f6.ddcf98",
"type": "function", "type": "function",
@ -6337,8 +6290,9 @@
"id": "11b51f8f.acd308", "id": "11b51f8f.acd308",
"type": "python3-function", "type": "python3-function",
"z": "1371dec5.76e671", "z": "1371dec5.76e671",
"d": true,
"name": "fan temperature", "name": "fan temperature",
"func": "import smbus\nbus = smbus.SMBus(1)\n\naddr = 0x0d\nfan_reg = 0x08\n\ntemp = float( msg[\"payload\"])\n\nif temp <= 35:\n bus.write_byte_data(addr, fan_reg, 0x00)\nelif temp <= 38:\n bus.write_byte_data(addr, fan_reg, 0x05)\nelif temp <= 43:\n bus.write_byte_data(addr, fan_reg, 0x07)\nelif temp <= 48:\n bus.write_byte_data(addr, fan_reg, 0x08)\nelif temp <= 52:\n bus.write_byte_data(addr, fan_reg, 0x09)\nelse:\n bus.write_byte_data(addr, fan_reg, 0x01)\n\nreturn msg", "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, "outputs": 1,
"x": 1120, "x": 1120,
"y": 100, "y": 100,
@ -6387,7 +6341,7 @@
"t": "set", "t": "set",
"p": "payload", "p": "payload",
"pt": "msg", "pt": "msg",
"to": "{\"group\":{\"show\":[\"Sample_Sample_Net_Location\"],\"hide\":[\"Sample_Sample_Location\"]}}", "to": "{\"group\":{\"show\":[\"Sample_Net_Metadata\"],\"hide\":[\"Sample_Sample_Location\"]}}",
"tot": "json" "tot": "json"
}, },
{ {
@ -6421,7 +6375,7 @@
"t": "set", "t": "set",
"p": "payload", "p": "payload",
"pt": "msg", "pt": "msg",
"to": "{\"group\":{\"hide\":[\"Sample_Sample_Net_Location\"],\"show\":[\"Sample_Sample_Location\"]}}", "to": "{\"group\":{\"hide\":[\"Sample_Net_Metadata\"],\"show\":[\"Sample_Sample_Location\"]}}",
"tot": "json" "tot": "json"
}, },
{ {
@ -6473,7 +6427,7 @@
"delay": 300, "delay": 300,
"topic": "object_lat", "topic": "object_lat",
"x": 680, "x": 680,
"y": 580, "y": 660,
"wires": [ "wires": [
[ [
"42795da1.0ee104" "42795da1.0ee104"
@ -6496,7 +6450,7 @@
"delay": 300, "delay": 300,
"topic": "object_lon", "topic": "object_lon",
"x": 680, "x": 680,
"y": 620, "y": 700,
"wires": [ "wires": [
[ [
"42795da1.0ee104" "42795da1.0ee104"
@ -6516,7 +6470,7 @@
"passthru": true, "passthru": true,
"topic": "object_date", "topic": "object_date",
"x": 670, "x": 670,
"y": 660, "y": 740,
"wires": [ "wires": [
[ [
"29f2b365.4327ec" "29f2b365.4327ec"
@ -6539,7 +6493,7 @@
"delay": 300, "delay": 300,
"topic": "object_time", "topic": "object_time",
"x": 670, "x": 670,
"y": 700, "y": 780,
"wires": [ "wires": [
[ [
"1a945afa.d60aad" "1a945afa.d60aad"
@ -6552,7 +6506,7 @@
"z": "b771c342.49603", "z": "b771c342.49603",
"group": "cf5d9f0e.d57e7", "group": "cf5d9f0e.d57e7",
"name": "Net throw location", "name": "Net throw location",
"order": 1, "order": 2,
"width": 0, "width": 0,
"height": 0, "height": 0,
"format": "<div><h3>Net throw location</h3></div>", "format": "<div><h3>Net throw location</h3></div>",
@ -6561,7 +6515,7 @@
"resendOnRefresh": true, "resendOnRefresh": true,
"templateScope": "local", "templateScope": "local",
"x": 650, "x": 650,
"y": 740, "y": 820,
"wires": [ "wires": [
[] []
] ]
@ -6572,7 +6526,7 @@
"z": "b771c342.49603", "z": "b771c342.49603",
"group": "cf5d9f0e.d57e7", "group": "cf5d9f0e.d57e7",
"name": "Net throw retrieval", "name": "Net throw retrieval",
"order": 6, "order": 7,
"width": 0, "width": 0,
"height": 0, "height": 0,
"format": "<div><h3>Net throw retrieval</h3></div>", "format": "<div><h3>Net throw retrieval</h3></div>",
@ -6581,7 +6535,7 @@
"resendOnRefresh": true, "resendOnRefresh": true,
"templateScope": "local", "templateScope": "local",
"x": 650, "x": 650,
"y": 940, "y": 1020,
"wires": [ "wires": [
[] []
] ]
@ -6731,7 +6685,7 @@
"order": 1, "order": 1,
"width": 24, "width": 24,
"height": 24, "height": 24,
"format": "<div><center>\n <object data=\"http://planktoscope.local:80/\" width=\"100%\" height=\"100%\" onerror=\"alert('URL invalid !!');\"></object>\n</center>\n</div>", "format": "<div>\n <center>\n <object data=\"http://planktoscope.local:80/\" width=\"1400px\" height=\"1100px\"></object>\n </center>\n</div>",
"storeOutMessages": true, "storeOutMessages": true,
"fwdInMessages": true, "fwdInMessages": true,
"resendOnRefresh": false, "resendOnRefresh": false,
@ -6757,5 +6711,71 @@
"99b11fe4.2795d" "99b11fe4.2795d"
] ]
] ]
},
{
"id": "642ff403.1ed91c",
"type": "ui_text_input",
"z": "b771c342.49603",
"name": "sample_concentrated_sample_volume",
"label": "Concentrated sample volume",
"tooltip": "Volume extracted from the net",
"group": "3e1ba03d.f01d8",
"order": 8,
"width": 5,
"height": 1,
"passthru": true,
"mode": "number",
"delay": 300,
"topic": "sample_concentrated_sample_volume",
"x": 590,
"y": 500,
"wires": [
[
"9f501f49.45645"
]
]
},
{
"id": "e967b844.46aa48",
"type": "ui_text_input",
"z": "b771c342.49603",
"name": "sample_gear_net_opening",
"label": "Net opening",
"tooltip": "in mm",
"group": "cf5d9f0e.d57e7",
"order": 1,
"width": 10,
"height": 1,
"passthru": true,
"mode": "number",
"delay": 300,
"topic": "sample_gear_net_opening",
"x": 620,
"y": 620,
"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": 1610,
"y": 1040,
"wires": [
[]
]
} }
] ]

View file

@ -8,25 +8,55 @@
# Logger library compatible with multiprocessing # Logger library compatible with multiprocessing
from loguru import logger from loguru import logger
# Library to send command over I2C for the light module on the fan
import smbus
import RPi.GPIO
import subprocess # nosec import subprocess # nosec
# define the bus used to actuate the light module on the fan # Library to send command over I2C for the light module on the fan
bus = smbus.SMBus(1) try:
import smbus2 as smbus
except ModuleNotFoundError:
subprocess.Popen("pip3 install smbus2".split(), stdout=subprocess.PIPE) # nosec
import smbus2 as smbus
import enum
DEVICE_ADDRESS = 0x0D DEVICE_ADDRESS = 0x0D
rgb_effect_reg = 0x04
rgb_speed_reg = 0x05
rgb_color_reg = 0x06 @enum.unique
rgb_off_reg = 0x07 class Register(enum.IntEnum):
led_select = 0x00
red = 0x01
green = 0x02
blue = 0x03
rgb_effect = 0x04
rgb_speed = 0x05
rgb_color = 0x06
rgb_off = 0x07
@enum.unique
class Effect(enum.IntEnum):
Water = 0
Breathing = 1
Marquee = 2
Rainbow = 3
Colorful = 4
@enum.unique
class EffectColor(enum.IntEnum):
Red = 0
Green = 1
Blue = 2
Yellow = 3
Purple = 4
Cyan = 5
White = 6
################################################################################ ################################################################################
# LEDs functions # LEDs functions
################################################################################ ################################################################################
def i2c_update(): def i2c_update():
# Update the I2C Bus in order to really update the LEDs new values # Update the I2C Bus in order to really update the LEDs new values
subprocess.Popen("i2cdetect -y 1".split(), stdout=subprocess.PIPE) # nosec subprocess.Popen("i2cdetect -y 1".split(), stdout=subprocess.PIPE) # nosec
@ -35,11 +65,14 @@ def i2c_update():
def setRGB(R, G, B): def setRGB(R, G, B):
"""Update all LED at the same time""" """Update all LED at the same time"""
try: try:
bus.write_byte_data(DEVICE_ADDRESS, 0x00, 0xFF) with smbus.SMBus(1) as bus:
bus.write_byte_data(DEVICE_ADDRESS, 0x01, R & 0xFF) bus.write_byte_data(
bus.write_byte_data(DEVICE_ADDRESS, 0x02, G & 0xFF) DEVICE_ADDRESS, Register.led_select, 0xFF
bus.write_byte_data(DEVICE_ADDRESS, 0x03, B & 0xFF) ) # 0xFF write to all LEDs, 0x01/0x02/0x03 to choose first, second or third LED
i2c_update() bus.write_byte_data(DEVICE_ADDRESS, Register.red, R & 0xFF)
bus.write_byte_data(DEVICE_ADDRESS, Register.green, G & 0xFF)
bus.write_byte_data(DEVICE_ADDRESS, Register.blue, B & 0xFF)
# i2c_update()
except Exception as e: except Exception as e:
logger.exception(f"An Exception has occured in the light library at {e}") logger.exception(f"An Exception has occured in the light library at {e}")
@ -47,81 +80,143 @@ def setRGB(R, G, B):
def setRGBOff(): def setRGBOff():
"""Turn off the RGB LED""" """Turn off the RGB LED"""
try: try:
bus.write_byte_data(DEVICE_ADDRESS, 0x07, 0x00) with smbus.SMBus(1) as bus:
i2c_update() bus.write_byte_data(DEVICE_ADDRESS, Register.rgb_off, 0x00)
# i2c_update()
except Exception as e: except Exception as e:
logger.exception(f"An Exception has occured in the light library at {e}") logger.exception(f"An Exception has occured in the light library at {e}")
def setRGBEffect(effect): def setRGBEffect(bus, effect):
"""Choose an effect, 0-4 """Choose an effect, type Effect
0: Water light Effect.Water: Rotating color between LEDs (color has an effect)
1: Breathing light Effect.Breathing: Breathing color effect
2: Marquee Effect.Marquee: Flashing color transition between all LEDs
3: Rainbow lights Effect.Rainbow: Smooth color transition between all LEDs
4: Colorful lights Effect.Colorful: Colorful transition separately between all LEDs
""" """
if effect in Effect:
if effect >= 0 and effect <= 4:
try: try:
bus.write_byte_data(DEVICE_ADDRESS, rgb_effect_reg, effect & 0xFF) bus.write_byte_data(DEVICE_ADDRESS, Register.rgb_effect, effect & 0xFF)
except Exception as e: except Exception as e:
logger.exception(f"An Exception has occured in the light library at {e}") logger.exception(f"An Exception has occured in the light library at {e}")
def setRGBSpeed(speed): def setRGBSpeed(bus, speed):
"""Set the effect speed, 1-3, 3 being the fastest speed""" """Set the effect speed, 1-3, 3 being the fastest speed"""
if speed >= 1 and speed <= 3: if 1 <= speed <= 3:
try: try:
bus.write_byte_data(DEVICE_ADDRESS, rgb_speed_reg, speed & 0xFF) bus.write_byte_data(DEVICE_ADDRESS, Register.rgb_speed, speed & 0xFF)
except Exception as e: except Exception as e:
logger.exception(f"An Exception has occured in the light library at {e}") logger.exception(f"An Exception has occured in the light library at {e}")
def setRGBColor(color): def setRGBColor(bus, color):
"""Set the color of the water light and breathing light effect, 0-6 """Set the color of the water light and breathing light effect, of type EffectColor
0: Red EffectColor.Red, EffectColor.Green (default), EffectColor.Blue, EffectColor.Yellow,
1: Green (default) EffectColor.Purple, EffectColor.Cyan, EffectColor.White
2: Blue
3: Yellow
4: Purple
5: Cyan
6: White
""" """
if color in EffectColor:
if color >= 0 and color <= 6:
try: try:
bus.write_byte_data(DEVICE_ADDRESS, rgb_color_reg, color & 0xFF) bus.write_byte_data(DEVICE_ADDRESS, Register.rgb_color, color & 0xFF)
except Exception as e: except Exception as e:
logger.exception(f"An Exception has occured in the light library at {e}") logger.exception(f"An Exception has occured in the light library at {e}")
def light(state): def ready():
"""Turn the LED on or off""" with smbus.SMBus(1) as bus:
setRGBColor(bus, EffectColor.Green)
if state == "on": setRGBSpeed(bus, 1)
RPi.GPIO.output(21, RPi.GPIO.HIGH) setRGBEffect(bus, Effect.Breathing)
elif state == "off": # i2c_update()
RPi.GPIO.output(21, RPi.GPIO.LOW)
## Wait message: Green def error():
## Actuate message: White with smbus.SMBus(1) as bus:
## Pumping message: Blue setRGBColor(bus, EffectColor.Red)
## Pumping 2 message: BLue + Green setRGBSpeed(bus, 3)
setRGBEffect(bus, Effect.Water)
# i2c_update()
def interrupted():
with smbus.SMBus(1) as bus:
setRGBColor(bus, EffectColor.Yellow)
setRGBSpeed(bus, 3)
setRGBEffect(bus, Effect.Water)
# i2c_update()
def pumping():
with smbus.SMBus(1) as bus:
setRGBColor(bus, EffectColor.Blue)
setRGBSpeed(bus, 3)
setRGBEffect(bus, Effect.Water)
# i2c_update()
def focusing():
with smbus.SMBus(1) as bus:
setRGBColor(bus, EffectColor.Purple)
setRGBSpeed(bus, 3)
setRGBEffect(bus, Effect.Water)
# i2c_update()
def imaging():
with smbus.SMBus(1) as bus:
setRGBColor(bus, EffectColor.White)
setRGBSpeed(bus, 1)
setRGBEffect(bus, Effect.Breathing)
# i2c_update()
def segmenting():
with smbus.SMBus(1) as bus:
setRGBColor(bus, EffectColor.Purple)
setRGBSpeed(bus, 1)
setRGBEffect(bus, Effect.Breathing)
# i2c_update()
# This is called if this script is launched directly # This is called if this script is launched directly
if __name__ == "__main__": if __name__ == "__main__":
# TODO This should be a test suite for this library # TODO This should be a test suite for this library
import RPi.GPIO as GPIO import time
import sys
GPIO.setmode(GPIO.BCM) print("ready")
GPIO.setwarnings(False) ready()
GPIO.setup(21, GPIO.OUT) time.sleep(10)
print("error")
error()
time.sleep(10)
print("pumping")
pumping()
time.sleep(10)
print("focusing")
focusing()
time.sleep(10)
print("imaging")
imaging()
time.sleep(10)
print("segmenting")
segmenting()
time.sleep(10)
with smbus.SMBus(1) as bus:
setRGBSpeed(bus, 3)
for effect in Effect:
print(effect.name)
with smbus.SMBus(1) as bus:
setRGBEffect(bus, effect)
time.sleep(2)
with smbus.SMBus(1) as bus:
setRGBEffect(bus, Effect.Breathing)
for color in EffectColor:
print(color.name)
with smbus.SMBus(1) as bus:
setRGBColor(bus, color)
time.sleep(2)
state = str(sys.argv[1]) setRGBOff()
light(state)