[{"id":"ff0a3f68.86108","type":"tab","label":"Septic","disabled":false,"info":""},{"id":"d6d53ef0.52f35","type":"modbus-read","z":"ff0a3f68.86108","name":"PLC Inputs","topic":"","showStatusActivities":false,"logIOActivities":false,"showErrors":false,"unitid":"255","dataType":"Input","adr":"0","quantity":"8","rate":"30","rateUnit":"s","delayOnStart":false,"startDelayTime":"","server":"2fa7dfdb.077188","useIOFile":false,"ioFile":"","useIOForPayload":false,"x":340,"y":280,"wires":[["673a7165.33bf8"],[]]},{"id":"673a7165.33bf8","type":"function","z":"ff0a3f68.86108","name":"Rewrite for MQTT","func":"var Names = [\n    \"off_no\",\n    \"off_nc\",\n    \"on_no\",\n    \"on_nc\",\n    \"alarm_no\",\n    \"alarm_nc\",\n    \"pump_power_status\",\n    \"switch\"\n    ]\n    \n/* For each of the items we receive, generate an MQTT message */\nvar data = new Array({});\nvar i = 0;\nvar length = Math.min(Names.length,msg.payload.length);\nfor(i = 0; i < length; i++)\n{\n    /* Single message - convert from true/false to number 1/0 so we can log it as a number */\n    var local = {payload:{}};\n    local.payload.value = (msg.payload[i]) ? 1 : 0;\n    local.topic = \"raw/plc_septic/digin\"+i+\"_\"+Names[i];\n    data.push(local);\n}\n\nreturn [data];","outputs":1,"noerr":0,"x":610,"y":280,"wires":[["a5d5b8c1.2a1a2"]]},{"id":"a5d5b8c1.2a1a2","type":"mqtt out","z":"ff0a3f68.86108","name":"","topic":"","qos":"1","retain":"true","broker":"81316909.b66d1","x":940,"y":300,"wires":[]},{"id":"64599f8a.9cbe5","type":"modbus-read","z":"ff0a3f68.86108","name":"PLC Outputs","topic":"","showStatusActivities":false,"logIOActivities":false,"showErrors":false,"unitid":"255","dataType":"Coil","adr":"0x2000","quantity":"3","rate":"30","rateUnit":"s","delayOnStart":false,"startDelayTime":"","server":"2fa7dfdb.077188","useIOFile":false,"ioFile":"","useIOForPayload":false,"x":350,"y":360,"wires":[["3f0caf14.5510e"],[]]},{"id":"3f0caf14.5510e","type":"function","z":"ff0a3f68.86108","name":"Rewrite for MQTT","func":"var Names = [\n    \"pump_rly\",\n    \"alarm_not_rly\",\n    \"fault_lamp\"\n    ]\n    \n/* For each of the items we receive, generate an MQTT message */\nvar data = new Array({});\nvar i = 0;\nvar length = Math.min(Names.length,msg.payload.length);\nfor(i = 0; i < length; i++)\n{\n    /* Single message */\n    var local = {payload:{}};\n    local.payload.value = (msg.payload[i]) ? 1 : 0;\n    local.topic = \"raw/plc_septic/digout\"+i+\"_\"+Names[i];\n    data.push(local);\n}\n\nreturn [data];","outputs":1,"noerr":0,"x":610,"y":360,"wires":[["a5d5b8c1.2a1a2"]]},{"id":"1ab89662.1b5b52","type":"function","z":"ff0a3f68.86108","name":"Rewrite for MQTT","func":"var Names = [\n    \"off_float\",\n    \"on_float\",\n    \"alarm_float\",\n    \"off_rat_fail\",\n    \"on_rat_fail\",\n    \"alarm_rat_fail\",\n    \"pump_request_on\",\n    \"pump_request\",\n    \"alarm_latch\",\n    \"alarm_test\"\n    ]\n    \n/* For each of the items we receive, generate an MQTT message */\nvar data = new Array({});\nvar i = 0;\nvar length = Math.min(Names.length,msg.payload.length);\nfor(i = 0; i < length; i++)\n{\n    /* Single message */\n    var local = {payload:{}};\n    local.payload.value = (msg.payload[i]) ? 1 : 0;\n    local.topic = \"raw/plc_septic/\"+Names[i];\n    data.push(local);\n}\n\nreturn [data];","outputs":1,"noerr":0,"x":610,"y":440,"wires":[["a5d5b8c1.2a1a2","1bfbe892.c34eff"]]},{"id":"7a9c2125.0dbca8","type":"comment","z":"ff0a3f68.86108","name":"Communication with Septic PLC","info":"","x":730,"y":140,"wires":[]},{"id":"b78b3217.03f0d","type":"modbus-read","z":"ff0a3f68.86108","name":"PLC Holting Bits","topic":"","showStatusActivities":false,"logIOActivities":false,"showErrors":false,"unitid":"255","dataType":"Coil","adr":"0x4000","quantity":"11","rate":"30","rateUnit":"s","delayOnStart":false,"startDelayTime":"","server":"2fa7dfdb.077188","useIOFile":false,"ioFile":"","useIOForPayload":false,"x":360,"y":440,"wires":[["1ab89662.1b5b52"],[]]},{"id":"1bfbe892.c34eff","type":"switch","z":"ff0a3f68.86108","name":"Septic Alarm Topic","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"raw/plc_septic/alarm_latch","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":900,"y":460,"wires":[["d396cb5e.2237a8"]]},{"id":"cceef416.15b0c","type":"delay","z":"ff0a3f68.86108","name":"Wait for continuous signal","pauseType":"delay","timeout":"5","timeoutUnits":"hours","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":1590,"y":460,"wires":[["efc65376.7acf7"]]},{"id":"3a8afae7.9f1f56","type":"change","z":"ff0a3f68.86108","name":"Reset no error","rules":[{"t":"set","p":"reset","pt":"msg","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1320,"y":420,"wires":[["cceef416.15b0c"]]},{"id":"d396cb5e.2237a8","type":"switch","z":"ff0a3f68.86108","name":"Payload 1 or 0","property":"payload.value","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"str"},{"t":"else"}],"checkall":"false","repair":false,"outputs":2,"x":1100,"y":460,"wires":[["3a8afae7.9f1f56"],["cceef416.15b0c"]]},{"id":"e9230844.77bf18","type":"comment","z":"ff0a3f68.86108","name":"Septic Alarm Email","info":"","x":1450,"y":340,"wires":[]},{"id":"efc65376.7acf7","type":"delay","z":"ff0a3f68.86108","name":"Limit 1 per hour","pauseType":"rate","timeout":"1","timeoutUnits":"hours","rate":"1","nbRateUnits":"1","rateUnits":"hour","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":1840,"y":460,"wires":[["2630b3be.99854c"]]},{"id":"b0b97e66.d6a43","type":"link out","z":"ff0a3f68.86108","name":"","links":["c68b4b12.72aef"],"x":2155,"y":460,"wires":[]},{"id":"2630b3be.99854c","type":"change","z":"ff0a3f68.86108","name":"Message to Send","rules":[{"t":"set","p":"payload","pt":"msg","to":"Septic Alarm was Triggered","tot":"str"},{"t":"set","p":"topic","pt":"msg","to":"Septic Alarm","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":2030,"y":460,"wires":[["b0b97e66.d6a43"]]},{"id":"2fa7dfdb.077188","type":"modbus-client","z":"","name":"Septic PLC","clienttype":"tcp","bufferCommands":true,"stateLogEnabled":false,"queueLogEnabled":false,"tcpHost":"septicplc.palnet.net","tcpPort":"502","tcpType":"DEFAULT","serialPort":"/dev/ttyUSB","serialType":"RTU-BUFFERD","serialBaudrate":"9600","serialDatabits":"8","serialStopbits":"1","serialParity":"none","serialConnectionDelay":"100","unit_id":"255","commandDelay":"1","clientTimeout":"1000","reconnectOnTimeout":true,"reconnectTimeout":"2000","parallelUnitIdsAllowed":true},{"id":"81316909.b66d1","type":"mqtt-broker","z":"","name":"broker","broker":"undefined","port":"1883","clientid":"NodeRed","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"system/nodered","birthQos":"1","birthRetain":"true","birthPayload":"{\"Life\":1}","closeTopic":"system/nodered","closeQos":"1","closeRetain":"true","closePayload":"{\"Life\":0}","willTopic":"system/nodered","willQos":"1","willRetain":"true","willPayload":"{\"Life\":-1}"}]