addition of white balance gain slider

This commit is contained in:
Romain Bazile 2020-11-27 12:45:22 +01:00
parent dd66f1adf0
commit ac2d44a24e
2 changed files with 219 additions and 27 deletions

View file

@ -732,15 +732,6 @@
"width": 4, "width": 4,
"height": 1 "height": 1
}, },
{
"id": "ee894df1.f9372",
"type": "ui_spacer",
"name": "spacer",
"group": "707d9797.c8e798",
"order": 5,
"width": 1,
"height": 1
},
{ {
"id": "f4e2e0a1.33948", "id": "f4e2e0a1.33948",
"type": "ui_spacer", "type": "ui_spacer",
@ -840,6 +831,15 @@
"width": 5, "width": 5,
"height": 1 "height": 1
}, },
{
"id": "8789db4f.9528a8",
"type": "ui_spacer",
"name": "spacer",
"group": "707d9797.c8e798",
"order": 5,
"width": 1,
"height": 1
},
{ {
"id": "4e78af2d.90be7", "id": "4e78af2d.90be7",
"type": "ui_ui_control", "type": "ui_ui_control",
@ -1581,7 +1581,7 @@
"name": "Stream Pi Camera", "name": "Stream Pi Camera",
"order": 1, "order": 1,
"width": 18, "width": 18,
"height": "14", "height": 14,
"format": "<center>\n <img src=\"http://planktoscope.local:8000/stream.mjpg\"\n width=\"100%\" height=\"100%\">\n</center>", "format": "<center>\n <img src=\"http://planktoscope.local:8000/stream.mjpg\"\n width=\"100%\" height=\"100%\">\n</center>",
"storeOutMessages": true, "storeOutMessages": true,
"fwdInMessages": true, "fwdInMessages": true,
@ -2367,7 +2367,7 @@
"name": "", "name": "",
"events": "change", "events": "change",
"x": 1060, "x": 1060,
"y": 1000, "y": 1120,
"wires": [ "wires": [
[] []
] ]
@ -2387,7 +2387,7 @@
"topic": "", "topic": "",
"name": "", "name": "",
"x": 1070, "x": 1070,
"y": 1100, "y": 1220,
"wires": [ "wires": [
[] []
] ]
@ -2403,7 +2403,7 @@
"initialize": "", "initialize": "",
"finalize": "", "finalize": "",
"x": 670, "x": 670,
"y": 1060, "y": 1180,
"wires": [ "wires": [
[ [
"652d812a.7d808" "652d812a.7d808"
@ -2417,7 +2417,7 @@
"name": "", "name": "",
"events": "change", "events": "change",
"x": 1060, "x": 1060,
"y": 1040, "y": 1160,
"wires": [ "wires": [
[] []
] ]
@ -2445,7 +2445,7 @@
"repair": false, "repair": false,
"outputs": 2, "outputs": 2,
"x": 830, "x": 830,
"y": 1060, "y": 1180,
"wires": [ "wires": [
[ [
"f58a0c4.e207df" "f58a0c4.e207df"
@ -2859,7 +2859,7 @@
"payloadType": "json", "payloadType": "json",
"topic": "", "topic": "",
"x": 500, "x": 500,
"y": 1000, "y": 1120,
"wires": [ "wires": [
[ [
"6c792043.b6ff9" "6c792043.b6ff9"
@ -2885,7 +2885,7 @@
"payloadType": "json", "payloadType": "json",
"topic": "", "topic": "",
"x": 500, "x": 500,
"y": 1060, "y": 1180,
"wires": [ "wires": [
[ [
"fe840e05.b46f3" "fe840e05.b46f3"
@ -3529,7 +3529,7 @@
"z": "bccd1f23.87219", "z": "bccd1f23.87219",
"name": "Shutter speed slider", "name": "Shutter speed slider",
"label": "Shutter Speed", "label": "Shutter Speed",
"tooltip": "In microseconds, up to 2500µs, 10µs by default", "tooltip": "In microseconds, up to 1000µs, 1µs by default",
"group": "8c38a81e.9897a8", "group": "8c38a81e.9897a8",
"order": 1, "order": 1,
"width": 0, "width": 0,
@ -3537,9 +3537,9 @@
"passthru": true, "passthru": true,
"outs": "end", "outs": "end",
"topic": "imager/image", "topic": "imager/image",
"min": "10", "min": "1",
"max": "2500", "max": "1000",
"step": "10", "step": "1",
"x": 390, "x": 390,
"y": 880, "y": 880,
"wires": [ "wires": [
@ -3583,7 +3583,7 @@
"id": "2350e507.d4e302", "id": "2350e507.d4e302",
"type": "inject", "type": "inject",
"z": "bccd1f23.87219", "z": "bccd1f23.87219",
"name": "Default: 10µs", "name": "Default: 1µs",
"props": [ "props": [
{ {
"p": "payload" "p": "payload"
@ -3594,7 +3594,7 @@
"once": true, "once": true,
"onceDelay": "1", "onceDelay": "1",
"topic": "", "topic": "",
"payload": "10", "payload": "1",
"payloadType": "num", "payloadType": "num",
"x": 110, "x": 110,
"y": 880, "y": 880,
@ -3621,7 +3621,7 @@
"topic": "", "topic": "",
"payload": "100", "payload": "100",
"payloadType": "num", "payloadType": "num",
"x": 120, "x": 110,
"y": 820, "y": 820,
"wires": [ "wires": [
[ [
@ -3788,8 +3788,12 @@
"1fa7fddf.18161a", "1fa7fddf.18161a",
"8c3e4a1c.1ebbb" "8c3e4a1c.1ebbb"
], ],
[], [
[] "8c3e4a1c.1ebbb"
],
[
"8c3e4a1c.1ebbb"
]
] ]
}, },
{ {
@ -6267,5 +6271,154 @@
"x": 1210, "x": 1210,
"y": 360, "y": 360,
"wires": [] "wires": []
},
{
"id": "43737d43.eb0e9c",
"type": "ui_slider",
"z": "bccd1f23.87219",
"name": "WB Red slider",
"label": "WB: Red",
"tooltip": "from 1.0 to 3.0",
"group": "8c38a81e.9897a8",
"order": 3,
"width": 5,
"height": 1,
"passthru": true,
"outs": "end",
"topic": "imager/image",
"min": "1.0",
"max": "3.0",
"step": "0.01",
"x": 380,
"y": 940,
"wires": [
[
"5e147425.7666ec"
]
]
},
{
"id": "5e147425.7666ec",
"type": "function",
"z": "bccd1f23.87219",
"name": "Encapsulate settings",
"func": "msg.payload = {\n \"action\":\"settings\", \n \"settings\":{\"white_balance_gain\":{\n \"red\":Math.round(msg.payload*100)\n }\n }\n}\nmsg.topic = \"imager/image\"\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"x": 720,
"y": 940,
"wires": [
[
"45c83cd2.15aee4"
]
]
},
{
"id": "4b708426.adeeb4",
"type": "function",
"z": "bccd1f23.87219",
"name": "Encapsulate settings",
"func": "msg.payload = {\n \"action\":\"settings\", \n \"settings\":{\"white_balance_gain\":{\n \"blue\":Math.round(msg.payload*100)\n }\n }\n}\nmsg.topic = \"imager/image\"\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"x": 720,
"y": 1000,
"wires": [
[
"45c83cd2.15aee4"
]
]
},
{
"id": "45c83cd2.15aee4",
"type": "mqtt out",
"z": "bccd1f23.87219",
"name": "",
"topic": "",
"qos": "",
"retain": "",
"broker": "8dc3722c.06efa8",
"x": 930,
"y": 960,
"wires": []
},
{
"id": "5ca6cdb6.3a6684",
"type": "inject",
"z": "bccd1f23.87219",
"name": "Default: WB 2.0",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": true,
"onceDelay": "1",
"topic": "",
"payload": "2.0",
"payloadType": "num",
"x": 120,
"y": 940,
"wires": [
[
"43737d43.eb0e9c"
]
]
},
{
"id": "7b699798.3d568",
"type": "ui_slider",
"z": "bccd1f23.87219",
"name": "WB Blue slider",
"label": "WB: Blue",
"tooltip": "from 1.0 to 3.0",
"group": "8c38a81e.9897a8",
"order": 4,
"width": 5,
"height": 1,
"passthru": true,
"outs": "end",
"topic": "imager/image",
"min": "1.0",
"max": "3.0",
"step": "0.01",
"x": 380,
"y": 1000,
"wires": [
[
"4b708426.adeeb4"
]
]
},
{
"id": "7db56b9d.37f52c",
"type": "inject",
"z": "bccd1f23.87219",
"name": "Default: WB 1.4",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": true,
"onceDelay": "1",
"topic": "",
"payload": "1.4",
"payloadType": "num",
"x": 120,
"y": 1000,
"wires": [
[
"7b699798.3d568"
]
]
} }
] ]

View file

@ -126,7 +126,7 @@ class ImagerProcess(multiprocessing.Process):
"""This class contains the main definitions for the imager of the PlanktoScope""" """This class contains the main definitions for the imager of the PlanktoScope"""
@logger.catch @logger.catch
def __init__(self, stop_event, iso=200, shutter_speed=20): def __init__(self, stop_event, iso=100, shutter_speed=1):
"""Initialize the Imager class """Initialize the Imager class
Args: Args:
@ -436,6 +436,45 @@ class ImagerProcess(multiprocessing.Process):
"status/imager", '{"status":"Error: Shutter speed not valid"}' "status/imager", '{"status":"Error: Shutter speed not valid"}'
) )
return return
if "white_balance_gain" in settings:
if "red" in settings["white_balance_gain"]:
logger.debug(
f"Updating the camera white balance red gain to to {settings['white_balance_gain']}"
)
self.__white_balance_gain = (
settings["white_balance_gain"].get(
"red", self.__white_balance_gain[0]
),
self.__white_balance_gain[1],
)
if "blue" in settings["white_balance_gain"]:
logger.debug(
f"Updating the camera white balance blue gain to to {settings['white_balance_gain']}"
)
self.__white_balance_gain = (
self.__white_balance_gain[0],
settings["white_balance_gain"].get(
"blue", self.__white_balance_gain[1]
),
)
logger.debug(
f"Updating the camera white balance gain to to {self.__white_balance_gain}"
)
try:
self.__camera.white_balance_gain = self.__white_balance_gain
except TimeoutError as e:
logger.error(
"A timeout has occured when setting the white balance gain, trying again"
)
self.__camera.white_balance_gain = self.__white_balance_gain
except ValueError as e:
logger.error("The requested white balance gain is not valid!")
self.imager_client.client.publish(
"status/imager",
'{"status":"Error: White balance gain not valid"}',
)
return
# Publish the status "Config updated" to via MQTT to Node-RED # Publish the status "Config updated" to via MQTT to Node-RED
self.imager_client.client.publish( self.imager_client.client.publish(
"status/imager", '{"status":"Camera settings updated"}' "status/imager", '{"status":"Camera settings updated"}'