Skip to content

Instantly share code, notes, and snippets.

@Dan-in-CA
Created December 5, 2023 17:42
Show Gist options
  • Save Dan-in-CA/378b38c41c16a41303638ee2fc3249f5 to your computer and use it in GitHub Desktop.
Save Dan-in-CA/378b38c41c16a41303638ee2fc3249f5 to your computer and use it in GitHub Desktop.
SIP irrigation diagnostics

This flow can be used as a diagnostic tool for testing SIP irrigation control software and for use in developing flows that work with SIP.

[
{
"id": "670198850d14a2cf",
"type": "tab",
"label": "SIP diagnostics",
"disabled": false,
"info": "",
"env": []
},
{
"id": "6258e7bcc69d2e16",
"type": "debug",
"z": "670198850d14a2cf",
"name": "gv var",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 610,
"y": 200,
"wires": []
},
{
"id": "3f914e7b3e5983d2",
"type": "http request",
"z": "670198850d14a2cf",
"name": "",
"method": "GET",
"ret": "txt",
"paytoqs": "query",
"url": "",
"tls": "",
"persist": false,
"proxy": "",
"insecureHTTPParser": false,
"authType": "",
"senderr": false,
"headers": [],
"x": 450,
"y": 200,
"wires": [
[
"6258e7bcc69d2e16"
]
]
},
{
"id": "77e85444f2d4b688",
"type": "inject",
"z": "670198850d14a2cf",
"name": "GET gv var",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "{\"gv\":\"rs\"}",
"payloadType": "json",
"x": 110,
"y": 200,
"wires": [
[
"27a85c99fc93c556"
]
],
"info": "### Use SIP get to read SIP settings and status \r\nThis example flow can be used as a handy tool for observing SIP's settings and status information while the software is running. \r\nThere are 2 groups of data that can be read from SIP. \r\n**\"sd\"** values are from SIP's Settings Dictionary. \r\n**\"gv\"** values are global variables that hold status information. \r\nThe **[gv_reference](https://github.com/Dan-in-CA/SIP/blob/P3-only/gv_reference.txt)** file in the SIP folder lists the sd and gv variables.\r\n\r\n### Reading SIP sd values: \r\nUse the JSON option and a JavaScript object with the following format. \r\n**{\"sd\":\"wl\"}** \r\nThe **\"sd\"** property name selects values from SIP's **S**ettings **D**ictionary. \r\nThe **\"wl\"** property value, shown in the example, selects the \"water level\" setting.\r\n\r\n### Reading SIP gv values: \r\n**{\"gv\": \"cputemp\"}** \r\nThe **\"gv\"** property name selects values from SIP's gv group of status information. \r\nThe **\"cputemp\"** property value, shown in the example, will return the temperature from the Raspberry Pi's internal CPU temperature sensor.\r\n\r\n"
},
{
"id": "6f47f80ed72ab9a9",
"type": "debug",
"z": "670198850d14a2cf",
"name": "sd var",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 610,
"y": 260,
"wires": []
},
{
"id": "96a6317d56cb0fa4",
"type": "http request",
"z": "670198850d14a2cf",
"name": "",
"method": "GET",
"ret": "txt",
"paytoqs": "query",
"url": "",
"tls": "",
"persist": false,
"proxy": "",
"insecureHTTPParser": false,
"authType": "",
"senderr": false,
"headers": [],
"x": 450,
"y": 260,
"wires": [
[
"6f47f80ed72ab9a9"
]
]
},
{
"id": "e3edebde86c7a62c",
"type": "inject",
"z": "670198850d14a2cf",
"name": "GET sd var",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "{\"sd\":\"wl\"}",
"payloadType": "json",
"x": 110,
"y": 260,
"wires": [
[
"456465b1ed8296d9"
]
],
"info": "### Use SIP get to read SIP settings and status \r\nThis example flow can be used as a handy tool for observing SIP's settings and status information while the software is running. \r\nThere are 2 groups of data that can be read from SIP. \r\n**\"sd\"** values are from SIP's Settings Dictionary. \r\n**\"gv\"** values are global variables that hold status information. \r\nThe **[gv_reference](https://github.com/Dan-in-CA/SIP/blob/P3-only/gv_reference.txt)** file in the SIP folder lists the sd and gv variables.\r\n\r\n### Reading SIP sd values: \r\nUse the JSON option and a JavaScript object with the following format. \r\n**{\"sd\":\"wl\"}** \r\nThe **\"sd\"** property name selects values from SIP's **S**ettings **D**ictionary. \r\nThe **\"wl\"** property value, shown in the example, selects the \"water level\" setting.\r\n\r\n### Reading SIP gv values: \r\n**{\"gv\": \"cputemp\"}** \r\nThe **\"gv\"** property name selects values from SIP's gv group of status information. \r\nThe **\"cputemp\"** property value, shown in the example, will return the temperature from the Raspberry Pi's internal CPU temperature sensor.\r\n\r\n"
},
{
"id": "50152d12557050c1",
"type": "http response",
"z": "670198850d14a2cf",
"name": "",
"statusCode": "200",
"headers": {
"content-type": "application/json"
},
"x": 260,
"y": 400,
"wires": []
},
{
"id": "ad2fddacf3b02973",
"type": "http in",
"z": "670198850d14a2cf",
"name": "/node-red in",
"url": "/node-red",
"method": "post",
"upload": false,
"swaggerDoc": "",
"x": 90,
"y": 440,
"wires": [
[
"50152d12557050c1",
"960e4d1327c51b9f"
]
]
},
{
"id": "960e4d1327c51b9f",
"type": "debug",
"z": "670198850d14a2cf",
"name": "From SiP",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": true,
"complete": "payload",
"targetType": "msg",
"statusVal": "payload",
"statusType": "auto",
"x": 260,
"y": 440,
"wires": []
},
{
"id": "bc54c4bb0295d68e",
"type": "comment",
"z": "670198850d14a2cf",
"name": "From SIP",
"info": "",
"x": 80,
"y": 400,
"wires": []
},
{
"id": "a845f9828d16d0c2",
"type": "inject",
"z": "670198850d14a2cf",
"name": "init",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": true,
"onceDelay": 0.1,
"topic": "",
"payload": "",
"payloadType": "date",
"x": 90,
"y": 80,
"wires": [
[
"2640c34e21563478"
]
]
},
{
"id": "27a85c99fc93c556",
"type": "function",
"z": "670198850d14a2cf",
"name": "Add url",
"func": "msg.url = flow.get(\"target\");\nreturn(msg);",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 280,
"y": 200,
"wires": [
[
"3f914e7b3e5983d2"
]
]
},
{
"id": "456465b1ed8296d9",
"type": "function",
"z": "670198850d14a2cf",
"name": "Add url",
"func": "msg.url = flow.get(\"target\");\nreturn (msg);",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 280,
"y": 260,
"wires": [
[
"96a6317d56cb0fa4"
]
]
},
{
"id": "b0d77fa7e0f4da70",
"type": "comment",
"z": "670198850d14a2cf",
"name": "To SIP",
"info": "Use these flows to read SIP control \nvariables or to set a variable in the \nSIP settings dictionary (sd).\n\nSee the gv_reference.pdf on the SIP \ndocumentation wiki for a list of \nvariables with a description of each.\n\nhttps://github.com/Dan-in-CA/SIP/wiki/gv_reference.pdf\n\nDouble-click to open the inject node of \nthe flow to change the variable. ",
"x": 70,
"y": 160,
"wires": []
},
{
"id": "52f041a7e09d55d3",
"type": "comment",
"z": "670198850d14a2cf",
"name": "README",
"info": "At startup this flow saves the SIP URL \nto a flow variable named \"target\" for \nuse by other flows on this tab.\n\nIf node-red is running on the same raspi \nas SIP, the default \"localhost\" \nshould work.\n\nIf node-red is running on different \ndevice on your network, change \n\"localhost\" in the \"Set SIP URL\" node \nto the URL of SIP.\nFor example \"192.168.1.123\".\nBe sure to include the quotes.",
"x": 80,
"y": 40,
"wires": []
},
{
"id": "7301dd543f4ae2e7",
"type": "inject",
"z": "670198850d14a2cf",
"name": "SET sd var",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "{\"sd\":\"wl\", \"val\":90}",
"payloadType": "json",
"x": 100,
"y": 320,
"wires": [
[
"f7f9615c2a741a84"
]
],
"info": "## **SIP set** is used to change SIP settings or turn stations on or off. \r\n\r\n### To change a SIP **sd** setting: \r\nUse the JSON option with a JavaScript object of the following form: \r\n**{\"sd\":\"wl\", \"val\": 50, \"save\": 0}** \r\n**\"sd\"** refers to the SIP **Settings Dictionary**. See the **[gv_reference.txt](https://github.com/Dan-in-CA/SIP/blob/P3-only/gv_reference.txt)** file in the SIP folder for a list of settings. \r\n**\"wl\"** is the setting to be changed, The water level (\"wl\") setting is shown in the example above. \r\n**\"val\"** is the new value the setting should have. \r\n**\"save\"** (optioinal) controls if the setting will be saved to the **settings.json** file in the **SIP/data** folder. \r\nIf \"save\" is **0** (default) or if \"save\" is not used, the setting will only be changed in memory and will not survive a software re-start or system reboot. \r\nIf \"save is **1** the setting will persist. \r\n\r\n### To change a SIP **gv** setting: \r\n**{\"gv\":\"use_gpio_pins\", \"val\": 1}** \r\n**\"gv\"** values are SIP variables that contain status and control data. They are also listed in **[gv_reference.txt](https://github.com/Dan-in-CA/SIP/blob/P3-only/gv_reference.txt)**. \r\nyou can use the **SIP get** example flow to see the format of a \"gv\" value of interest. \r\n\"gv\" values are not stored in a file and only kept in memory.\r\n\r\n### To turn one or more stations on or off: \r\n**{\"sn\":[1,2], \"set\": 1, \"req mm\":1}** \r\nThe required property name can be **\"sn\"** or **\"station\"**. Either will work. \r\nThe property value is an array of one or more station numbers seperated by commas. \r\nif **\"set\"** is **1** the station(s) will be turned on. If \"set\" is **0** the station(s) will be turned off. \r\n**\"req mm\"** (optional) means \"Require manual mode\". if it is **1** (default) or if \"req mm\" is not used, SIP must be Manual mode for this to work. \r\nif \"req mm\" is **0** stations will be turned on or off even if SIP is not in Manual mode and other stations are running.\r\n\r\n### To start a Run-once program: \r\n**{\"ro\": [[2, 5], [3, 5], [5, 5]], \"preempt\":1}** \r\nThe required property name can be **\"ro\"** or **\"run once\"**. Either will work. \r\nThe property value is an array of 2 element sub-arrays (note the double [[ and ]] at the start and end). Each 2 element inner array contains a station number and the time in seconds for it to run. \r\nIn the example shown above the first inner array **[2,5]** has station 2 running for 5 seconds \r\n**\"preempt\"** (optional) controls if a program that is already running will be ended (preempted) when the run once program starts. If \"preeempt\" is **1** (default) or if \"preempt\" is not used, any running program will be ended. \r\nIf \"preempt\" is **0**, the run once program will be run allong with the already running program."
},
{
"id": "2cc8996137facd9a",
"type": "http request",
"z": "670198850d14a2cf",
"name": "",
"method": "POST",
"ret": "txt",
"paytoqs": "ignore",
"url": "",
"tls": "",
"persist": false,
"proxy": "",
"insecureHTTPParser": false,
"authType": "",
"senderr": false,
"headers": [],
"credentials": {},
"x": 430,
"y": 320,
"wires": [
[]
]
},
{
"id": "f7f9615c2a741a84",
"type": "function",
"z": "670198850d14a2cf",
"name": "Add url",
"func": "msg.url = flow.get(\"target\");\nreturn (msg);",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 260,
"y": 320,
"wires": [
[
"2cc8996137facd9a"
]
]
},
{
"id": "2640c34e21563478",
"type": "function",
"z": "670198850d14a2cf",
"name": "Set SIP URL",
"func": "let sip_url = \"localhost\";\nsip_url += \"/jsin\";\nflow.set(\"target\", sip_url);\nmsg.payload = flow.get(\"target\");\nreturn msg",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 250,
"y": 80,
"wires": [
[
"90d512de9bf522c3"
]
]
},
{
"id": "90d512de9bf522c3",
"type": "debug",
"z": "670198850d14a2cf",
"name": "SIP URL",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 420,
"y": 80,
"wires": []
}
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment