Looking for input, pointers or information in general

Hello everyone,

first of all: this is my first projekt using node-red and my programming skills are ... well I can edit scripts to (maybe) do my bidding, but not create one myself. Here in Germany it's called "gefährliches Halbwissen" which would translate to "dangerous half-knowledge" :wink:

I'm trying to set up a automated watering system for my balcony looking like this:


It consits of 3 3way valves and a pump. The pump starts working, pumping in a circle and the valves will direkt the water to the desired location. No sensors so far, it's simply controlled by flow rate and time (ml/sec).

I'm using a Pi Zero and a i2c-relayboard and managed to build something that would work the way I want it:

[
    {
        "id": "162fe4b273bd1cab",
        "type": "tab",
        "label": "Flow 2",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "0d90552af145dbb3",
        "type": "thingzi-timer",
        "z": "162fe4b273bd1cab",
        "name": "",
        "lat": "0",
        "lon": "0",
        "timerType": "trigger",
        "startupMessage": false,
        "ontype": "tod",
        "ontimesun": "dusk",
        "ontimetod": "19:50",
        "onpropertytype": "msg",
        "onproperty": "payload",
        "onvaluetype": "str",
        "onvalue": "1",
        "onoffset": "",
        "onrandomoffset": false,
        "offtype": "tod",
        "offtimesun": "dawn",
        "offtimetod": "18:47",
        "offpropertytype": "msg",
        "offproperty": "payload",
        "offvaluetype": "str",
        "offvalue": "OFF",
        "offoffset": "",
        "offrandomoffset": false,
        "mon": true,
        "tue": true,
        "wed": true,
        "thu": true,
        "fri": true,
        "sat": true,
        "sun": true,
        "x": 150,
        "y": 260,
        "wires": [
            [
                "716941a82c85c631",
                "b738ca67820e9a81",
                "8587b5b7c4212ea7"
            ]
        ]
    },
    {
        "id": "716941a82c85c631",
        "type": "trigger",
        "z": "162fe4b273bd1cab",
        "name": "",
        "op1": "AN1C2 ON",
        "op2": "AN1C2 OFF",
        "op1type": "str",
        "op2type": "str",
        "duration": "60",
        "extend": false,
        "overrideDelay": false,
        "units": "s",
        "reset": "",
        "bytopic": "all",
        "topic": "topic",
        "outputs": 1,
        "x": 370,
        "y": 260,
        "wires": [
            [
                "d6a905e3bceafa3a",
                "2d02d61869c62c0d"
            ]
        ]
    },
    {
        "id": "b738ca67820e9a81",
        "type": "delay",
        "z": "162fe4b273bd1cab",
        "name": "",
        "pauseType": "delay",
        "timeout": "5",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "allowrate": false,
        "outputs": 1,
        "x": 380,
        "y": 380,
        "wires": [
            [
                "1c6b440c14e4f173"
            ]
        ]
    },
    {
        "id": "1c6b440c14e4f173",
        "type": "trigger",
        "z": "162fe4b273bd1cab",
        "name": "",
        "op1": "AN1C3 ON",
        "op2": "AN1C3 OFF",
        "op1type": "str",
        "op2type": "str",
        "duration": "15",
        "extend": false,
        "overrideDelay": false,
        "units": "s",
        "reset": "",
        "bytopic": "all",
        "topic": "topic",
        "outputs": 1,
        "x": 570,
        "y": 380,
        "wires": [
            [
                "d6a905e3bceafa3a",
                "2d02d61869c62c0d"
            ]
        ]
    },
    {
        "id": "8587b5b7c4212ea7",
        "type": "delay",
        "z": "162fe4b273bd1cab",
        "name": "",
        "pauseType": "delay",
        "timeout": "25",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "allowrate": false,
        "outputs": 1,
        "x": 390,
        "y": 500,
        "wires": [
            [
                "64a83f5d1689236d"
            ]
        ]
    },
    {
        "id": "64a83f5d1689236d",
        "type": "trigger",
        "z": "162fe4b273bd1cab",
        "name": "",
        "op1": "AN1C4 ON",
        "op2": "AN1C4 OFF",
        "op1type": "str",
        "op2type": "str",
        "duration": "15",
        "extend": false,
        "overrideDelay": false,
        "units": "s",
        "reset": "",
        "bytopic": "all",
        "topic": "topic",
        "outputs": 1,
        "x": 590,
        "y": 500,
        "wires": [
            [
                "d6a905e3bceafa3a",
                "2d02d61869c62c0d"
            ]
        ]
    },
    {
        "id": "e3f18831173c58d8",
        "type": "i2c out",
        "z": "162fe4b273bd1cab",
        "name": "Relay 4 - ON ",
        "busno": "1",
        "address": "16",
        "command": "255",
        "payload": "[16,4,255]",
        "payloadType": "bin",
        "count": "3",
        "x": 1210,
        "y": 320,
        "wires": [
            []
        ]
    },
    {
        "id": "d6a905e3bceafa3a",
        "type": "switch",
        "z": "162fe4b273bd1cab",
        "name": "Relay 1-4 Triggered ON",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "AN1C1 ON",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "AN1C2 ON",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "AN1C3 ON",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "AN1C4 ON",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 4,
        "x": 950,
        "y": 260,
        "wires": [
            [
                "7bc5f18c1c26907d"
            ],
            [
                "bb6d3b27d826ec6e"
            ],
            [
                "75e6a649601d712d"
            ],
            [
                "e3f18831173c58d8"
            ]
        ]
    },
    {
        "id": "7bc5f18c1c26907d",
        "type": "i2c out",
        "z": "162fe4b273bd1cab",
        "name": "Relay 1 - ON ",
        "busno": "1",
        "address": "16",
        "command": "255",
        "payload": "[16,1,255]",
        "payloadType": "bin",
        "count": "3",
        "x": 1210,
        "y": 200,
        "wires": [
            []
        ]
    },
    {
        "id": "bb6d3b27d826ec6e",
        "type": "i2c out",
        "z": "162fe4b273bd1cab",
        "name": "Relay 2 - ON ",
        "busno": "1",
        "address": "16",
        "command": "255",
        "payload": "[16,2,255]",
        "payloadType": "bin",
        "count": "3",
        "x": 1210,
        "y": 240,
        "wires": [
            []
        ]
    },
    {
        "id": "75e6a649601d712d",
        "type": "i2c out",
        "z": "162fe4b273bd1cab",
        "name": "Relay 3 - ON ",
        "busno": "1",
        "address": "16",
        "command": "255",
        "payload": "[16,3,255]",
        "payloadType": "bin",
        "count": "3",
        "x": 1210,
        "y": 280,
        "wires": [
            []
        ]
    },
    {
        "id": "b97f6fb371de8e0a",
        "type": "i2c out",
        "z": "162fe4b273bd1cab",
        "name": "Relay 4 - OFF ",
        "busno": "1",
        "address": "16",
        "command": "255",
        "payload": "[16,4,0]",
        "payloadType": "bin",
        "count": "3",
        "x": 1220,
        "y": 500,
        "wires": [
            []
        ]
    },
    {
        "id": "2d02d61869c62c0d",
        "type": "switch",
        "z": "162fe4b273bd1cab",
        "name": "Relay 1-4 Triggered OFF",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "AN1C1 OFF",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "AN1C2 OFF",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "AN1C3 OFF",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "AN1C4 OFF",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 4,
        "x": 950,
        "y": 440,
        "wires": [
            [
                "c03c5b65809ad41b"
            ],
            [
                "18b84a231ce51d78"
            ],
            [
                "76c58507dd0bb2a7"
            ],
            [
                "b97f6fb371de8e0a"
            ]
        ]
    },
    {
        "id": "c03c5b65809ad41b",
        "type": "i2c out",
        "z": "162fe4b273bd1cab",
        "name": "Relay 1 - OFF",
        "busno": "1",
        "address": "16",
        "command": "255",
        "payload": "[16,1,0]",
        "payloadType": "bin",
        "count": "3",
        "x": 1220,
        "y": 380,
        "wires": [
            []
        ]
    },
    {
        "id": "18b84a231ce51d78",
        "type": "i2c out",
        "z": "162fe4b273bd1cab",
        "name": "Relay 2 - OFF",
        "busno": "1",
        "address": "16",
        "command": "255",
        "payload": "[16,2,0]",
        "payloadType": "bin",
        "count": "3",
        "x": 1220,
        "y": 420,
        "wires": [
            []
        ]
    },
    {
        "id": "76c58507dd0bb2a7",
        "type": "i2c out",
        "z": "162fe4b273bd1cab",
        "name": "Relay 3 - OFF ",
        "busno": "1",
        "address": "16",
        "command": "255",
        "payload": "[16,3,0]",
        "payloadType": "bin",
        "count": "3",
        "x": 1220,
        "y": 460,
        "wires": [
            []
        ]
    },
    {
        "id": "92b9a69d1a627c2f",
        "type": "timeswitch",
        "z": "162fe4b273bd1cab",
        "name": "",
        "mytopic": "",
        "lat": "0",
        "lon": "0",
        "starttime": "5000",
        "endtime": "6000",
        "timezone": "Europe/Berlin",
        "duskoff": "0",
        "dawnoff": "0",
        "sun": true,
        "mon": true,
        "tue": true,
        "wed": true,
        "thu": true,
        "fri": true,
        "sat": true,
        "jan": true,
        "feb": true,
        "mar": true,
        "apr": true,
        "may": true,
        "jun": true,
        "jul": true,
        "aug": true,
        "sep": true,
        "oct": true,
        "nov": true,
        "dec": true,
        "x": 160,
        "y": 120,
        "wires": [
            [
                "3d01cccc5eb097b9"
            ]
        ]
    },
    {
        "id": "d2bd7842e7712a77",
        "type": "trigger",
        "z": "162fe4b273bd1cab",
        "name": "",
        "op1": "AN1C1 ON",
        "op2": "0",
        "op1type": "str",
        "op2type": "str",
        "duration": "0",
        "extend": false,
        "overrideDelay": false,
        "units": "ms",
        "reset": "0",
        "bytopic": "all",
        "topic": "topic",
        "outputs": 1,
        "x": 520,
        "y": 80,
        "wires": [
            [
                "d6a905e3bceafa3a"
            ]
        ]
    },
    {
        "id": "c2d6e2f82550b457",
        "type": "trigger",
        "z": "162fe4b273bd1cab",
        "name": "",
        "op1": "AN1C1 OFF",
        "op2": "0",
        "op1type": "str",
        "op2type": "str",
        "duration": "0",
        "extend": false,
        "overrideDelay": false,
        "units": "ms",
        "reset": "1",
        "bytopic": "all",
        "topic": "topic",
        "outputs": 1,
        "x": 520,
        "y": 160,
        "wires": [
            [
                "2d02d61869c62c0d"
            ]
        ]
    },
    {
        "id": "3d01cccc5eb097b9",
        "type": "rbe",
        "z": "162fe4b273bd1cab",
        "name": "",
        "func": "rbe",
        "gap": "",
        "start": "",
        "inout": "out",
        "septopics": true,
        "property": "payload",
        "topi": "topic",
        "x": 330,
        "y": 120,
        "wires": [
            [
                "d2bd7842e7712a77",
                "c2d6e2f82550b457"
            ]
        ]
    },
    {
        "id": "7f3f58d82654fc4e",
        "type": "comment",
        "z": "162fe4b273bd1cab",
        "name": "Pump (Relay 2)",
        "info": "",
        "x": 380,
        "y": 300,
        "wires": []
    },
    {
        "id": "661459d1383d9681",
        "type": "comment",
        "z": "162fe4b273bd1cab",
        "name": "solenoid valve 1 (Relay 3)",
        "info": "",
        "x": 470,
        "y": 420,
        "wires": []
    },
    {
        "id": "3f1b8a572b97683b",
        "type": "comment",
        "z": "162fe4b273bd1cab",
        "name": "solenoid valve 2 (Relay 4)",
        "info": "",
        "x": 510,
        "y": 540,
        "wires": []
    },
    {
        "id": "e023d531499026f8",
        "type": "comment",
        "z": "162fe4b273bd1cab",
        "name": "Growlight (Relay 1)",
        "info": "",
        "x": 190,
        "y": 80,
        "wires": []
    },
    {
        "id": "59ac1c821e10f4ea",
        "type": "comment",
        "z": "162fe4b273bd1cab",
        "name": "Watering",
        "info": "",
        "x": 140,
        "y": 320,
        "wires": []
    },
    {
        "id": "c6b24d43b2efbeb2",
        "type": "comment",
        "z": "162fe4b273bd1cab",
        "name": "DockerPi 4 Channel Relay",
        "info": "",
        "x": 950,
        "y": 160,
        "wires": []
    }
]

Like I said, it's working (thanks to the community and the provided nodes for the relay-board). One relay is currently used for a growlight, so only 2 solenoid valves are in the flow right now. This will change once the plants are big enough.

At the moment I have to manually add the seconds for the pump-runtime.
So it's:
pump runtime = system filling time + solenoid vale 1 runtime + solenoid vale 2 [and so on] + buffer

But ... it's not really that comfortable to use and it's never wrong to learn something so here I am writing this post.

A real improvement would be to be able to only change the seconds for the valves. Would something like that be possible with only using nodes?
Or (maybe) via a smarthome solution where I would be able to set up the time for each valve? But if so - which one?

At the moment I just don't know where to start looking and you can't really search for a tutorial or something if you don't know what you are looking for.

Thanks in advance :slight_smile:

Greetings from Germany
Humhum

There are a number of nodes that will enable you to send a payload from an inject node or a dashboard input and will then output various commands.

The one i use a lot is Mytimeout by Neil Cherry

node-red-contrib-mytimeout

This will enable you to send a set amount of time (or a variable one) from a dashboard icon and will emit an output (an off) when the timeout expires.

This would enable you to have a dashboard input box to set the number of minutes you wish to run, and once that time expires it can send a stop message (or can send a different message to a 2nd timeout node to turn off the first valve and turn on the 2nd valve

Craig

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.