Hi,
I'm seeking help with this code I have.
Point 1:
When I provide a number input via ui.text.input
to the Python 3 function, it only remembers it until I provide input from another ui.text.input
.
Point 2:
When my MeasuredPPM
is above PPMSetpoint
, it should gradually open, but this is not happening.
JSON Code:
[
{
"id": "0a4ed0543769fad8",
"type": "function",
"z": "0c6431dbee54e2e2",
"name": "PPMSetpoint",
"func": "if (typeof msg.payload !== 'object') {\n // Hvis msg.payload ikke er et objekt, opret et objekt med PPMSetpoint\n msg.payload = { PPMSetpoint: Number(msg.payload) };\n} else {\n // Hvis msg.payload allerede er et objekt, opdater PPMSetpoint, hvis det er defineret\n if (msg.payload.PPMSetpoint !== undefined && msg.payload.PPMSetpoint !== null) {\n msg.payload.PPMSetpoint = Number(msg.payload.PPMSetpoint);\n }\n}\n\nreturn msg;",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1230,
"y": 620,
"wires": [
[
"474db4a060feea65"
]
]
},
{
"id": "13e50a507f788fcd",
"type": "function",
"z": "0c6431dbee54e2e2",
"name": "MeasuredPPM",
"func": "// Håndtering af målt PPM\nif (typeof msg.payload !== 'object') {\n // Hvis msg.payload ikke er et objekt, opret et objekt med MeasuredPPM\n msg.payload = { MeasuredPPM: Number(msg.payload) };\n} else {\n // Hvis msg.payload allerede er et objekt, opdater MeasuredPPM, hvis det er defineret\n if (msg.payload.MeasuredPPM !== undefined && msg.payload.MeasuredPPM !== null) {\n msg.payload.MeasuredPPM = Number(msg.payload.MeasuredPPM);\n }\n}\n\nreturn msg;",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1220,
"y": 660,
"wires": [
[
"474db4a060feea65"
]
]
},
{
"id": "51e2ca50e7a657cf",
"type": "modbus-write",
"z": "0c6431dbee54e2e2",
"name": "Setpoint for flow 0-10000",
"showStatusActivities": false,
"showErrors": false,
"showWarnings": true,
"unitid": "1",
"dataType": "HoldingRegister",
"adr": "0",
"quantity": "1",
"server": "1c23fca020e29bfc",
"emptyMsgOnFail": false,
"keepMsgProperties": false,
"delayOnStart": false,
"startDelayTime": "",
"x": 1670,
"y": 640,
"wires": [
[],
[]
]
},
{
"id": "474db4a060feea65",
"type": "python3-function",
"z": "0c6431dbee54e2e2",
"name": "",
"func": "# If msg.payload is not an object, assume it's a numerical value\nif isinstance(msg, (int, float)):\n setpoint_ppm = float(msg)\nelse:\n # If msg.payload is an object, update PPMSetpoint if defined\n payload = msg.get(\"payload\", {})\n setpoint_ppm = float(payload.get(\"PPMSetpoint\", 0))\n\n# Save incoming values from the UI\nmeasured_ppm = float(payload.get(\"MeasuredPPM\", 0))\n\n# Calculate the difference between the setpoint and the measured PPM\ndifference = measured_ppm - setpoint_ppm\n\n# Assume a simple proportional control with a proportional band of ±100 around the setpoint\np_band = 700\nscale_factor = 30 # Adjust as needed\nspj_opening = 0 # Set default value to 0\n\n# Logic to adjust for the damper opening based on the difference\nif difference > p_band:\n # If PPM is above setpoint and outside the proportional band, calculate opening\n spj_opening = max(0, min(10000, (difference - p_band) * scale_factor))\n\n# Create a new dictionary for output\noutput_msg = {\n \"payload\": spj_opening\n}\n\nreturn output_msg\n",
"outputs": 1,
"x": 1430,
"y": 640,
"wires": [
[
"51e2ca50e7a657cf",
"27d33c68489a6d19",
"8079a78fac3fb693"
]
]
},
{
"id": "1c23fca020e29bfc",
"type": "modbus-client",
"name": "",
"clienttype": "serial",
"bufferCommands": true,
"stateLogEnabled": false,
"queueLogEnabled": false,
"failureLogEnabled": true,
"tcpHost": "127.0.0.1",
"tcpPort": "502",
"tcpType": "DEFAULT",
"serialPort": "/dev/ttySC0",
"serialType": "RTU-BUFFERD",
"serialBaudrate": "38400",
"serialDatabits": "8",
"serialStopbits": "2",
"serialParity": "none",
"serialConnectionDelay": "100",
"serialAsciiResponseStartDelimiter": "0x3A",
"unit_id": "1",
"commandDelay": "1",
"clientTimeout": "1000",
"reconnectOnTimeout": true,
"reconnectTimeout": "2000",
"parallelUnitIdsAllowed": true,
"showErrors": true,
"showWarnings": true,
"showLogs": true
}
]