[{"id":"03078fc8e45f8df7","type":"tab","label":"Pet Feeding","disabled":false,"info":""},{"id":"2364a2ce92b580a8","type":"group","z":"03078fc8e45f8df7","style":{"stroke":"#999999","stroke-opacity":"1","fill":"none","fill-opacity":"1","label":true,"label-position":"nw","color":"#a4a4a4"},"nodes":["125ef5cbdcce7734","2455bf810b6cba57","859054f9503f1fce","ea3834e62a43f73a","e60d7a683504c0a7","650fca263906d9ee","e977a7010c2d10df","858d2fa0af335e0c","82f8bba31fb4ce26"],"x":769,"y":460,"w":452,"h":540},{"id":"5899ef8777cd2b19","type":"group","z":"03078fc8e45f8df7","style":{"stroke":"#999999","stroke-opacity":"1","fill":"none","fill-opacity":"1","label":true,"label-position":"nw","color":"#a4a4a4"},"nodes":["e26e4b2fc233409e","75e2131e754b5c1a","21fdc4e57e059056","9b321ced097fc8ac","d37a4fd68c33e613","3cde1879de56cdf4","04b0488cfeb86db5"],"x":552,"y":207,"w":672,"h":223},{"id":"de4d2dd0441991d2","type":"group","z":"03078fc8e45f8df7","style":{"stroke":"#999999","stroke-opacity":"1","fill":"none","fill-opacity":"1","label":true,"label-position":"nw","color":"#a4a4a4"},"nodes":["e5911bd2de38e026","55816c06f6c943ec","400f1fb32dac2ea6","6ad14a32c6b1725d","b00207764e4617aa","c6e117375684a439","63f38810f8fe55bc"],"x":12,"y":206,"w":512,"h":224},{"id":"ec9e453414855796","type":"group","z":"03078fc8e45f8df7","style":{"stroke":"#999999","stroke-opacity":"1","fill":"none","fill-opacity":"1","label":true,"label-position":"nw","color":"#a4a4a4"},"nodes":["f910b37ba103c01c","296702c497b34ef0","b8c19d758bddf06a","51c1e2a0d84ae42d"],"x":34,"y":65,"w":932,"h":122},{"id":"f910b37ba103c01c","type":"function","z":"03078fc8e45f8df7","g":"ec9e453414855796","name":"Settings","func":"//see Setup tab\n","outputs":1,"noerr":0,"initialize":"//----------------------------------------\n\n// Debugging nodes\nflow.set(\"debugFlow\", false);\n\nvar dateNow = new Date();\nvar dateMinus24Hours = new Date(new Date().getTime() - 60 * 60 * 24 * 1000);\n//flow.set(\"whenPetsLastFed\", dateNow); \n\nflow.set(\"whenCatLastFed\", dateMinus24Hours); \nflow.set(\"whenDogLastFed\", dateMinus24Hours); \nflow.set(\"whenWaterLastFilled\", dateMinus24Hours); \n\nflow.set(\"minsSinceCatLastFed\",999);\nflow.set(\"minsSinceDogLastFed\",999);\nflow.set(\"minsSinceWaterLastFilled\",999);\n\nflow.set(\"hoursSinceCatLastFed\",999);\nflow.set(\"hoursSinceDogLastFed\",999);\nflow.set(\"hoursSinceWaterLastFilled\",999);\n\nflow.set(\"averageMinsSincePetsLastFed\", 999 ) ;\nflow.set(\"averageHoursSincePetsLastFed\", 999 ) ;\n\n// Announcement text (for voice notifications if used)\n// these are randomised later.\nflow.set(\"voiceAnnouncements\", [\n \"Hey, the e v charging is now complete\",\n \"Hey, your charging is complete\",\n \"The car charging is done\",\n \"The e v charging has finished\",\n \"E V Charging has now finished\",\n ]);\n \n\n","finalize":"","libs":[],"x":120,"y":146,"wires":[[]]},{"id":"296702c497b34ef0","type":"comment","z":"03078fc8e45f8df7","g":"ec9e453414855796","name":"Startup Settings (Store in Flow Variables)","info":"","x":220,"y":106,"wires":[]},{"id":"e5911bd2de38e026","type":"mqtt in","z":"03078fc8e45f8df7","g":"de4d2dd0441991d2","name":"Cat Fed Button","topic":"tele/tasmo-zigb-6440-1/9E81/SENSOR","qos":"1","datatype":"json","broker":"e28b763a.77bd98","nl":false,"rap":true,"rh":0,"x":118,"y":287,"wires":[["55816c06f6c943ec"]]},{"id":"c8c0cf0b5b28a790","type":"debug","z":"03078fc8e45f8df7","name":"","active":true,"tosidebar":true,"console":true,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"ZbReceived.Pets_Fed_Button.Power","statusType":"auto","x":558,"y":547,"wires":[]},{"id":"55816c06f6c943ec","type":"function","z":"03078fc8e45f8df7","g":"de4d2dd0441991d2","name":"Convert to Cat Fed Message","func":"\nmsg.payload = msg.payload.ZbReceived.Nelson_Fed_Button.Power ;\n\nif ( msg.payload == \"0\" ){\n msg.payload = \"catfed\" ;\n var dateNow = new Date();\n flow.set(\"whenCatLastFed\", dateNow) ; \n return [ msg ];\n }\n ","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":358,"y":287,"wires":[["49251db3f6b4da0c","75e2131e754b5c1a"]]},{"id":"400f1fb32dac2ea6","type":"mqtt in","z":"03078fc8e45f8df7","g":"de4d2dd0441991d2","name":"Dog Fed Button","topic":"tele/tasmo-zigb-6440-1/6CD7/SENSOR","qos":"1","datatype":"json","broker":"e28b763a.77bd98","nl":false,"rap":true,"rh":0,"x":118,"y":337,"wires":[["b00207764e4617aa"]]},{"id":"6ad14a32c6b1725d","type":"mqtt in","z":"03078fc8e45f8df7","g":"de4d2dd0441991d2","name":"Water Filled Button","topic":"tele/tasmo-zigb-6440-1/3E4D/SENSOR","qos":"1","datatype":"json","broker":"e28b763a.77bd98","nl":false,"rap":true,"rh":0,"x":128,"y":389,"wires":[["c6e117375684a439"]]},{"id":"b00207764e4617aa","type":"function","z":"03078fc8e45f8df7","g":"de4d2dd0441991d2","name":"Convert to Dog Fed Message","func":"\nmsg.payload = msg.payload.ZbReceived.Zorro_Fed_Button.Power ;\n\nif ( msg.payload == \"0\" ){\n msg.payload = \"dogfed\" ;\n var dateNow = new Date();\n flow.set(\"whenDogLastFed\", dateNow); \n return [ msg ]\n }\n ","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":358,"y":337,"wires":[["49251db3f6b4da0c","21fdc4e57e059056"]]},{"id":"c6e117375684a439","type":"function","z":"03078fc8e45f8df7","g":"de4d2dd0441991d2","name":"Convert to Water Filled Message","func":"\nmsg.payload = msg.payload.ZbReceived.Water_Filled_Button.Power ;\n\nif ( msg.payload == \"0\" ){\n msg.payload = \"waterfilled\" ;\n var dateNow = new Date();\n flow.set(\"whenWaterLastFilled\", dateNow); \n return [ msg ]\n }\n ","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":368,"y":389,"wires":[["49251db3f6b4da0c","d37a4fd68c33e613"]]},{"id":"007cc41da2f7f377","type":"function","z":"03078fc8e45f8df7","name":"Pet Feeding Main Loop","func":"// -----------------------------------------\n// MAIN LOOP\n// -----------------------------------------\n// 2021-09-16 V0 - zorruno\n// - Started\n// -----------------------------------------\n\n// \nvar petsfedPayload = msg.payload;\n\nvar dateNow = new Date();\n\nwhenCatLastFed = flow.get(\"whenCatLastFed\");\nwhenDogLastFed = flow.get(\"whenDogLastFed\");\nwhenWaterLastFilled = flow.get(\"whenWaterLastFilled\");\n\n// Function to return diffs between two dates\nfunction datediffmins(dateolder, datenewer) {\n var diffMs = (datenewer - dateolder); // milliseconds between now & then\n //var diffDays = Math.floor(diffMs / 86400000); // days\n //var diffHrs = Math.floor((diffMs % 86400000) / 3600000); // hours\n //var diffMins = Math.round(((diffMs % 86400000) % 3600000) / 60000); // minutes\n // msg.payload = diffDays + \" days, \" + diffHrs + \" hours, \" + diffMins + \" minutes since fed)\");\n var diffMins = diffMs / 60000;\n return diffMins;\n}\n\n// Cat feeding Calcs\nlet minsSinceCatLastFed = datediffmins( whenCatLastFed, dateNow); \nflow.set(\"minsSinceCatLastFed\",minsSinceCatLastFed ) ;\nlet hoursSinceCatLastFed = Math.round(minsSinceCatLastFed/60) ;\nflow.set(\"hoursSinceCatLastFed\", hoursSinceCatLastFed ) ;\n\n// Dog feeding Calcs\nlet minsSinceDogLastFed = datediffmins( whenDogLastFed, dateNow); \nflow.set(\"minsSinceDogLastFed\",minsSinceDogLastFed ) ;\nlet hoursSinceDogLastFed = Math.round(minsSinceDogLastFed/60) ;\nflow.set(\"hoursSinceDogLastFed\", hoursSinceDogLastFed ) ;\n\n// Water filling Calcs\nlet minsSinceWaterLastFilled = datediffmins( whenWaterLastFilled, dateNow); \nflow.set(\"minsSinceWaterLastFilled\",minsSinceWaterLastFilled ) ;\nlet hoursSinceWaterLastFilled = Math.round(minsSinceWaterLastFilled/60) ;\nflow.set(\"hoursSinceWaterLastFilled\", hoursSinceWaterLastFilled) ;\n\n// Pet feeding calcs (if dog and cat fed at the same time)\naverageMinsSincePetsLastFed = ( minsSinceCatLastFed + minsSinceDogLastFed) / 2 ;\nflow.set(\"averageMinsSincePetsLastFed\", averageMinsSincePetsLastFed ) ;\nlet averageHoursSincePetsLastFed = Math.round(averageMinsSincePetsLastFed/60) ;\nflow.set(\"averageHoursSincePetsLastFed\", averageHoursSincePetsLastFed ) ;\n\nvar msg1 = { payload: hoursSinceCatLastFed }; \nvar msg2 = { payload: hoursSinceDogLastFed };\nvar msg3 = { payload: hoursSinceWaterLastFilled };\nvar msg4 = { payload: averageHoursSincePetsLastFed };\n\nreturn [msg1,msg2,msg3,msg4];\n\n\n \n \n","outputs":4,"noerr":0,"initialize":"","finalize":"","libs":[],"x":588,"y":667,"wires":[["125ef5cbdcce7734","e60d7a683504c0a7"],["ea3834e62a43f73a","650fca263906d9ee"],["2455bf810b6cba57","e977a7010c2d10df"],["859054f9503f1fce","858d2fa0af335e0c"]]},{"id":"ab2a195d59264717","type":"inject","z":"03078fc8e45f8df7","name":"Update every 5 mins","props":[{"p":"payload"}],"repeat":"300","crontab":"","once":true,"onceDelay":0.1,"topic":"","payloadType":"date","x":178,"y":667,"wires":[["007cc41da2f7f377"]]},{"id":"49251db3f6b4da0c","type":"change","z":"03078fc8e45f8df7","name":"just a passthrough","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":308,"y":547,"wires":[["007cc41da2f7f377","c8c0cf0b5b28a790"]]},{"id":"125ef5cbdcce7734","type":"debug","z":"03078fc8e45f8df7","g":"2364a2ce92b580a8","name":"","active":true,"tosidebar":true,"console":true,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":875,"y":541,"wires":[]},{"id":"2455bf810b6cba57","type":"debug","z":"03078fc8e45f8df7","g":"2364a2ce92b580a8","name":"","active":true,"tosidebar":true,"console":true,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":875,"y":781,"wires":[]},{"id":"859054f9503f1fce","type":"debug","z":"03078fc8e45f8df7","g":"2364a2ce92b580a8","name":"","active":true,"tosidebar":true,"console":true,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":875,"y":910,"wires":[]},{"id":"ea3834e62a43f73a","type":"debug","z":"03078fc8e45f8df7","g":"2364a2ce92b580a8","name":"","active":true,"tosidebar":true,"console":true,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":875,"y":659,"wires":[]},{"id":"e60d7a683504c0a7","type":"mqtt out","z":"03078fc8e45f8df7","g":"2364a2ce92b580a8","name":"","topic":"viewroad-tele/petfeeding/hoursSinceCatFed","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"e28b763a.77bd98","x":965,"y":589,"wires":[]},{"id":"650fca263906d9ee","type":"mqtt out","z":"03078fc8e45f8df7","g":"2364a2ce92b580a8","name":"","topic":"viewroad-tele/petfeeding/hoursSinceDogFed","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"e28b763a.77bd98","x":965,"y":707,"wires":[]},{"id":"e977a7010c2d10df","type":"mqtt out","z":"03078fc8e45f8df7","g":"2364a2ce92b580a8","name":"","topic":"viewroad-tele/petfeeding/hoursSinceWaterFilled","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"e28b763a.77bd98","x":975,"y":830,"wires":[]},{"id":"858d2fa0af335e0c","type":"mqtt out","z":"03078fc8e45f8df7","g":"2364a2ce92b580a8","name":"","topic":"viewroad-tele/petfeeding/averageHoursSincePetsFed","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"e28b763a.77bd98","x":995,"y":959,"wires":[]},{"id":"63f38810f8fe55bc","type":"comment","z":"03078fc8e45f8df7","g":"de4d2dd0441991d2","name":"Detect Button Presses","info":"","x":138,"y":247,"wires":[]},{"id":"37027545681db130","type":"comment","z":"03078fc8e45f8df7","name":"Update calcs in 5 min intervals also","info":"","x":198,"y":627,"wires":[]},{"id":"82f8bba31fb4ce26","type":"comment","z":"03078fc8e45f8df7","g":"2364a2ce92b580a8","name":"Update MQTT","info":"","x":865,"y":501,"wires":[]},{"id":"b8c19d758bddf06a","type":"inject","z":"03078fc8e45f8df7","g":"ec9e453414855796","name":"Set Light Blink Speed","props":[{"p":"payload"}],"repeat":"","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"3","payloadType":"str","x":420,"y":146,"wires":[["51c1e2a0d84ae42d"]]},{"id":"51c1e2a0d84ae42d","type":"mqtt out","z":"03078fc8e45f8df7","g":"ec9e453414855796","name":"","topic":"cmnd/tasmo-ks811d-5613-lounge-4/BlinkTime","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"e28b763a.77bd98","x":760,"y":146,"wires":[]},{"id":"e26e4b2fc233409e","type":"mqtt out","z":"03078fc8e45f8df7","g":"5899ef8777cd2b19","name":"","topic":"cmnd/tasmo-ks811d-5613-lounge-4/Backlog","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"e28b763a.77bd98","x":1028,"y":288,"wires":[]},{"id":"75e2131e754b5c1a","type":"change","z":"03078fc8e45f8df7","g":"5899ef8777cd2b19","name":"Set Blink to 1 and activate Light","rules":[{"t":"set","p":"payload","pt":"msg","to":"BlinkCount 1; Power2 3","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":708,"y":288,"wires":[["e26e4b2fc233409e"]]},{"id":"21fdc4e57e059056","type":"change","z":"03078fc8e45f8df7","g":"5899ef8777cd2b19","name":"Set Blink to 2 and activate Light","rules":[{"t":"set","p":"payload","pt":"msg","to":"BlinkCount 2; Power2 3","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":708,"y":338,"wires":[["9b321ced097fc8ac"]]},{"id":"9b321ced097fc8ac","type":"mqtt out","z":"03078fc8e45f8df7","g":"5899ef8777cd2b19","name":"","topic":"cmnd/tasmo-ks811d-5613-lounge-4/Backlog","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"e28b763a.77bd98","x":1028,"y":338,"wires":[]},{"id":"d37a4fd68c33e613","type":"change","z":"03078fc8e45f8df7","g":"5899ef8777cd2b19","name":"Set Blink to 3 and activate Light","rules":[{"t":"set","p":"payload","pt":"msg","to":"BlinkCount 3; Power2 3","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":708,"y":389,"wires":[["3cde1879de56cdf4"]]},{"id":"3cde1879de56cdf4","type":"mqtt out","z":"03078fc8e45f8df7","g":"5899ef8777cd2b19","name":"","topic":"cmnd/tasmo-ks811d-5613-lounge-4/Backlog","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"e28b763a.77bd98","x":1028,"y":389,"wires":[]},{"id":"04b0488cfeb86db5","type":"comment","z":"03078fc8e45f8df7","g":"5899ef8777cd2b19","name":"Blink Outdoor Light When Button Pressed","info":"","x":738,"y":248,"wires":[]},{"id":"7e9b0436c3942065","type":"comment","z":"03078fc8e45f8df7","name":"Manage how long since the pets have been fed","info":"","x":220,"y":40,"wires":[]},{"id":"e28b763a.77bd98","type":"mqtt-broker","name":"Panda","broker":"192.168.3.200","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]