[{"id":"7f0f1c14.9446bc","type":"comment","z":"df46081d.8c876","name":"Humidor UI: Gauges & Charts","info":"","x":150,"y":300,"wires":[]},{"id":"1b8ba580.cc72c3","type":"mqtt in","z":"df46081d.8c876","name":"","topic":"tele/cigar-delta/SENSOR","qos":"2","broker":"92e7ef98.128c9","x":150,"y":360,"wires":[["f39bef21.42cb68","9d64e9b7.58e068"]]},{"id":"609016c6.bcbd3","type":"ui_gauge","z":"df46081d.8c876","name":"Humidor Temp","group":"abd78d69.a66928","order":1,"width":0,"height":0,"gtype":"gage","title":"Humidor Temperature","label":"","format":"{{value}}°","min":"50","max":"110","colors":["#d7fc03","#64b847","#c50e0e"],"seg1":"65","seg2":"85","x":1260,"y":360,"wires":[]},{"id":"868f4fc8.80a8e8","type":"ui_gauge","z":"df46081d.8c876","name":"Humidor Humidity","group":"abd78d69.a66928","order":3,"width":0,"height":0,"gtype":"gage","title":"Humidor Humidity","label":"","format":"{{value}}%","min":"20","max":"100","colors":["#c50e0e","#64b847","#d7fc03"],"seg1":"68","seg2":"82","x":1270,"y":400,"wires":[]},{"id":"91908c9d.64077","type":"function","z":"df46081d.8c876","name":"Isolate Temperature","func":"msg.payload = msg.payload.HTU21.Temperature;\nreturn msg;","outputs":1,"noerr":0,"x":700,"y":360,"wires":[["609016c6.bcbd3"]]},{"id":"e630c25a.e6879","type":"function","z":"df46081d.8c876","name":"Isolate Humidity","func":"const HUMIDOR_TEMP_ADJUSTMENT = global.get(\"ifHumidorGTETemperature\");\nconst HUMIDOR_HUMIDITY_ADJUSTMENT = global.get(\"adjustHumidorHumidity\");\n\n// Need to adjust since this sensor acts weird when the temps hit 80+ degrees.\nif(msg.payload.HTU21.Temperature >= HUMIDOR_TEMP_ADJUSTMENT) {\n msg.payload = (msg.payload.HTU21.Humidity + HUMIDOR_HUMIDITY_ADJUSTMENT);\n} else {\n msg.payload = msg.payload.HTU21.Humidity;\n}\n\nreturn msg;","outputs":1,"noerr":0,"x":680,"y":480,"wires":[["868f4fc8.80a8e8"]]},{"id":"712f073.106c7f8","type":"debug","z":"df46081d.8c876","name":"DEBUG: Cigar Delta","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":1280,"y":480,"wires":[]},{"id":"f39bef21.42cb68","type":"json","z":"df46081d.8c876","name":"Parse as JSON","property":"payload","action":"","pretty":false,"x":380,"y":360,"wires":[["91908c9d.64077","e630c25a.e6879","e579a941.fcf348","49128669.9cb21","b9e2e168.a7ca68"]]},{"id":"b348a80a.6ac33","type":"ui_chart","z":"df46081d.8c876","name":"Temperature Past 24 Hours","group":"f7076b84.7de6b8","order":2,"width":0,"height":0,"label":"Temperature & Humidity Past 24 Hours","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"","ymax":"","removeOlder":"24","removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"colors":["#1f77b4","#800080","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"x":1300,"y":440,"wires":[[],[]]},{"id":"e579a941.fcf348","type":"function","z":"df46081d.8c876","name":"Humidor Fan Control","func":"// Set our MQTT Fan Power topic here\nmsg.topic = \"cmnd/cigar-delta/power\";\n\nconst USER_PREF_HUMIDITY = global.get(\"userSetHumidity\") || 72; // Make sure we have something set!\nconst USER_PREF_FAN_STATE = global.get(\"userForceFanState\") || \"auto\"; // Make sure we have something set!\nlet USER_PREF_FAN_DELAY = global.get(\"userFanDelay\") || 0; // Make sure we have something set!\n USER_PREF_FAN_DELAY = USER_PREF_FAN_DELAY * 1000;\nlet SAVED_FAN_LAST_OFF = global.get(\"savedFanLastOff\") || \"2018-01-01T00:00:00\"; // Make sure we have something set!\n SAVED_FAN_LAST_OFF = new Date(SAVED_FAN_LAST_OFF);\nlet FAN_LAST_OFF = msg.payload.Time || \"2018-01-01T00:00:00\"; // Make sure we have something set!\n FAN_LAST_OFF = new Date(FAN_LAST_OFF);\n\n\n// Set the humidity to be the only payload\nlet CUR_HUMIDITY = msg.payload.HTU21.Humidity;\nconst HUMIDOR_TEMP_ADJUSTMENT = global.get(\"ifHumidorGTETemperature\");\nconst HUMIDOR_HUMIDITY_ADJUSTMENT = global.get(\"adjustHumidorHumidity\");\n\n// Overide humidity if needed to adjust since this sensor acts weird when the temps hit 80+ degrees.\nif(msg.payload.HTU21.Temperature >= HUMIDOR_TEMP_ADJUSTMENT) {\n // Set the humidity to be the only payload\n CUR_HUMIDITY = (msg.payload.HTU21.Humidity + HUMIDOR_HUMIDITY_ADJUSTMENT);\n}\n\n\n\n\n\n// User fan delay:\n// From there it can compare the next time sent with the first one it saw off, based on the user set delay.\n\n// DEBUG:\nmsg.test_math = (FAN_LAST_OFF - SAVED_FAN_LAST_OFF);\nmsg.test_conditional = ((FAN_LAST_OFF - SAVED_FAN_LAST_OFF) >= USER_PREF_FAN_DELAY)\nmsg.test_SAVED_FAN_LAST_OFF = SAVED_FAN_LAST_OFF;\nmsg.test_FAN_LAST_OFF = FAN_LAST_OFF\n\n\n\nif (\n (CUR_HUMIDITY < USER_PREF_HUMIDITY && USER_PREF_FAN_STATE === \"auto\") && \n ((FAN_LAST_OFF - SAVED_FAN_LAST_OFF) >= USER_PREF_FAN_DELAY) || \n (USER_PREF_FAN_STATE === \"on\")\n) {\n msg.payload = \"ON\";\n} else {\n global.set(\"savedFanLastOff\", FAN_LAST_OFF);\n msg.payload = \"OFF\";\n}\n\n// Send it on to MQTT!\nreturn msg;","outputs":1,"noerr":0,"x":600,"y":660,"wires":[["1e0cf1ce.b7b5b6"]]},{"id":"61fb5664.a4dfb8","type":"ui_numeric","z":"df46081d.8c876","name":"Preferred Humidity","label":"Preferred Humidity","group":"f383da68.29d5d","order":1,"width":0,"height":0,"passthru":false,"topic":"tele/cigar-delta/preferred-humidity","format":"{{value}}%","min":"65","max":"85","step":".1","x":450,"y":1080,"wires":[["1e0cf1ce.b7b5b6","7458af33.442f2"]]},{"id":"1e0cf1ce.b7b5b6","type":"mqtt out","z":"df46081d.8c876","name":"MQTT [Topic Sent In] QOS:2 Retain:True","topic":"","qos":"2","retain":"true","broker":"92e7ef98.128c9","x":1890,"y":1080,"wires":[]},{"id":"d06ddb2e.af9aa","type":"comment","z":"df46081d.8c876","name":"Humidor UI: User Defined Preferred Humidity Range","info":"","x":220,"y":1020,"wires":[]},{"id":"aa568da6.ec65c","type":"mqtt in","z":"df46081d.8c876","name":"","topic":"tele/cigar-delta/preferred-humidity","qos":"2","broker":"92e7ef98.128c9","x":180,"y":1080,"wires":[["61fb5664.a4dfb8"]]},{"id":"7458af33.442f2","type":"function","z":"df46081d.8c876","name":"Global Set - Preferred Humidity","func":"global.set(\"userSetHumidity\", msg.payload);\n\n// No need to return since we aren't sending past this point!\n//return msg;","outputs":1,"noerr":0,"x":750,"y":1120,"wires":[[]]},{"id":"9fac2e06.7c14f","type":"ui_template","z":"df46081d.8c876","group":"abd78d69.a66928","name":"Display Fan Status","order":0,"width":0,"height":0,"format":"\n \n\n
\n Fan Status \n \n
\n","storeOutMessages":true,"fwdInMessages":true,"templateScope":"local","x":970,"y":880,"wires":[[]]},{"id":"e3edfcca.b49758","type":"mqtt in","z":"df46081d.8c876","name":"","topic":"cmnd/cigar-delta/power","qos":"2","broker":"92e7ef98.128c9","x":140,"y":880,"wires":[["40fffd12.ff4a44"]]},{"id":"40fffd12.ff4a44","type":"function","z":"df46081d.8c876","name":"Set Icon To Animate Or Static","func":"if (msg.payload === \"ON\") {\n msg.payload = \"svg_rotate\";\n} else {\n msg.payload = \"svg_static\";\n}\nreturn msg;","outputs":1,"noerr":0,"x":650,"y":880,"wires":[["9fac2e06.7c14f"]]},{"id":"f5f1627d.4e90a","type":"debug","z":"df46081d.8c876","name":"DEBUG: Cigar Delta","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":620,"y":1880,"wires":[]},{"id":"40b541b5.2b11f","type":"mqtt in","z":"df46081d.8c876","name":"","topic":"cmnd/cigar-delta/teleperiod","qos":"2","broker":"92e7ef98.128c9","x":160,"y":1560,"wires":[["6348436f.2ac244"]]},{"id":"8c29b5ee.86683","type":"ui_dropdown","z":"df46081d.8c876","name":"","label":"Update Data Every","place":"Select option","group":"f383da68.29d5d","order":3,"width":0,"height":0,"passthru":false,"options":[{"label":"10 Seconds","value":"10","type":"str"},{"label":"15 Seconds","value":"15","type":"str"},{"label":"30 Seconds","value":"30","type":"str"},{"label":"1 Minute","value":"60","type":"str"},{"label":"2 Minutes","value":"120","type":"str"},{"label":"3 Minutes","value":"180","type":"str"},{"label":"4 Minutes","value":"240","type":"str"},{"label":"5 Minutes","value":"300","type":"str"}],"payload":"","topic":"cmnd/cigar-delta/teleperiod","x":1050,"y":1560,"wires":[["1e0cf1ce.b7b5b6"]]},{"id":"6348436f.2ac244","type":"json","z":"df46081d.8c876","name":"Parse as JSON","property":"payload","action":"","pretty":false,"x":440,"y":1560,"wires":[["ae8e9815.55a348"]]},{"id":"ae8e9815.55a348","type":"function","z":"df46081d.8c876","name":"Set Payload From TelePeriod","func":"msg.payload = msg.payload.TelePeriod\nreturn msg;","outputs":1,"noerr":0,"x":680,"y":1560,"wires":[["8c29b5ee.86683"]]},{"id":"3f89d21e.72b566","type":"comment","z":"df46081d.8c876","name":"TODOs","info":"- Create API Endpoints with JWT Tokens","x":510,"y":2060,"wires":[]},{"id":"2c51fc1e.a6823c","type":"comment","z":"df46081d.8c876","name":"Humidor UI: Fan Animation Status","info":"","x":160,"y":820,"wires":[]},{"id":"cd22627f.863648","type":"comment","z":"df46081d.8c876","name":"Humidor UI: Data Telemetry Update Interval","info":"","x":190,"y":1440,"wires":[]},{"id":"b9ac5524.e23e28","type":"ui_template","z":"df46081d.8c876","group":"f383da68.29d5d","name":"User Set Fan State","order":2,"width":0,"height":0,"format":" \n\n\n\n
\n Force Fan State \n
\n
\n \n \n \n \n \n \n \n \n \n
\n Off\n Auto\n On\n
\n
\n
\n
","storeOutMessages":true,"fwdInMessages":true,"templateScope":"local","x":300,"y":1340,"wires":[["e8d18810.28a6e"]]},{"id":"e8d18810.28a6e","type":"function","z":"df46081d.8c876","name":"Set User Defined Global Fan State","func":"global.set(\"userForceFanState\", msg.payload);\n\n// Need to add something to the template so we know it was template set in which we only trigger the delay at that point.\n\n// Return something to trigger the delay\nreturn msg;","outputs":1,"noerr":0,"x":680,"y":1280,"wires":[["1fbf459c.85deea"]]},{"id":"3745c448.46a7c4","type":"comment","z":"df46081d.8c876","name":"Humidor UI: User Defined Global Fan State","info":"","x":190,"y":1220,"wires":[]},{"id":"e14c3291.d1231","type":"inject","z":"df46081d.8c876","name":"On reboot / redeploy set fan state to auto","topic":"","payload":"auto","payloadType":"str","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":230,"y":1280,"wires":[["e8d18810.28a6e"]]},{"id":"1fbf459c.85deea","type":"delay","z":"df46081d.8c876","name":"Reset User Fan State To Auto, After 12 Hours","pauseType":"delay","timeout":"12","timeoutUnits":"hours","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":1060,"y":1280,"wires":[["15a7fc6a.0fae7c"]]},{"id":"15a7fc6a.0fae7c","type":"function","z":"df46081d.8c876","name":"Reset User Fan State To Auto","func":"global.set(\"userForceFanState\", \"auto\");","outputs":1,"noerr":0,"x":1440,"y":1280,"wires":[[]]},{"id":"8984f62b.944b78","type":"ui_dropdown","z":"df46081d.8c876","name":"Delay Fan On (If it was just on) By","label":"Delay Fan On (If it was just on) By","place":"Select option","group":"f383da68.29d5d","order":4,"width":0,"height":0,"passthru":false,"options":[{"label":"No Delay","value":"0","type":"str"},{"label":"10 Seconds","value":"10","type":"str"},{"label":"15 Seconds","value":"15","type":"str"},{"label":"30 Seconds","value":"30","type":"str"},{"label":"1 Minute","value":"60","type":"str"},{"label":"5 Minutes","value":"300","type":"str"},{"label":"10 Minutes","value":"600","type":"str"},{"label":"15 Minutes","value":"900","type":"str"},{"label":"30 Minutes","value":"1800","type":"str"},{"label":"1 Hour","value":"3600","type":"str"},{"label":"2 Hours","value":"7200","type":"str"},{"label":"3 Hours","value":"10800","type":"str"}],"payload":"","topic":"","x":260,"y":1820,"wires":[["f5f1627d.4e90a","5c21612c.63b48"]]},{"id":"70130969.1f495","type":"comment","z":"df46081d.8c876","name":"Humidor UI: User Defined Fan Delay","info":"","x":170,"y":1700,"wires":[]},{"id":"727c4cce.f7c21c","type":"inject","z":"df46081d.8c876","name":"On reboot / redeploy set fan delay back to 0","topic":"","payload":"0","payloadType":"str","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":240,"y":1760,"wires":[["5c21612c.63b48"]]},{"id":"5c21612c.63b48","type":"function","z":"df46081d.8c876","name":"Set User Defined Global Fan Delay","func":"global.set(\"userFanDelay\", msg.payload);\n\n// Return something to trigger the delay\n//return msg;","outputs":1,"noerr":0,"x":670,"y":1760,"wires":[[]]},{"id":"1f9aec1c.0654b4","type":"inject","z":"df46081d.8c876","name":"On reboot / redeploy set interval back to 10 Seconds","topic":"","payload":"10","payloadType":"str","repeat":"","crontab":"","once":true,"onceDelay":"1","x":600,"y":1500,"wires":[["8c29b5ee.86683"]]},{"id":"f2cd8065.e0726","type":"mysql","z":"df46081d.8c876","mydb":"d87c8e79.24a86","name":"Database: iot_humidor","x":690,"y":120,"wires":[[]]},{"id":"9d64e9b7.58e068","type":"function","z":"df46081d.8c876","name":"Update MySQL / MariaDB With Sensor Data Every 5 Minutes","func":"// --------------------------------------------------------------------------------\n// These Nodes Will Save Your Historical Humidor Data To MySQL / MariaDB\n// --------------------------------------------------------------------------------\n\n// Time Sent In From Sensor\nlet sensorReadTime = new Date((JSON.parse(msg.payload)).Time);\n// If on reboot \"mysqlSensorLastUpdated\" doesn't exist ... set it to the current \"sensorReadTime\".\nif(!global.get(\"mysqlSensorLastUpdated\")) { global.set(\"mysqlSensorLastUpdated\", sensorReadTime); }\n// Last Update To MySQL\nlet lastUpdateTime = new Date(global.get(\"mysqlSensorLastUpdated\"));\n\n\n// DEBUG\n//msg.test_sensorReadTime = sensorReadTime;\n//msg.test_lastUpdateTime = lastUpdateTime;\n//msg.test_math = (sensorReadTime - lastUpdateTime);\n\n\n// NOTE: Over A Period Of A Year This Data Will Add Up & Your Disk Space Will Disappear!!!\n// Times Are Up To You And Your Available Disk Storage Space! (Default Is: MIN5)\n// Setup Possible Times For Updating\nconst SEC10 = 10 * 1000;\nconst SEC30 = 30 * 1000;\nconst MIN5 = 5 * 60 * 1000;\nconst MIN10 = 10 * 60 * 1000;\nconst MIN30 = 30 * 60 * 1000;\nconst HOUR1 = 60 * 60 * 1000;\n\n// If Time Is Greater Or Equal To Our Desired Update Time, RUN\nif ((sensorReadTime - lastUpdateTime) >= MIN5) {\n // ---------------------------------------------------------------------------\n // Isolate Out The Humidor Name Based Off Your MQTT Topic Name.\n // This Will Allow You To Push Data To The Same Table From Multiple Humidors.\n // ---------------------------------------------------------------------------\n let topic = msg.topic;\n let humidorName = topic.slice((topic.indexOf(\"/\") + 1) , topic.lastIndexOf(\"/\"));\n\n const HUMIDOR_TEMP_ADJUSTMENT = global.get(\"ifHumidorGTETemperature\");\n const HUMIDOR_HUMIDITY_ADJUSTMENT = global.get(\"adjustHumidorHumidity\");\n\n\n // Turn our payload into an object.\n msg.payload = JSON.parse(msg.payload);\n // Need to adjust since this sensor acts weird when the temps hit 80+ degrees.\n if(msg.payload.HTU21.Temperature >= HUMIDOR_TEMP_ADJUSTMENT) {\n msg.payload.HTU21.Humidity = (msg.payload.HTU21.Humidity + HUMIDOR_HUMIDITY_ADJUSTMENT);\n }\n // Turn our payload back into a string.\n msg.payload = JSON.stringify(msg.payload);\n\n\n // ---------------------------------------------------------------------------\n // Overwrite msg.topic & Then MySQL / MariaDB INSERT Call\n // ---------------------------------------------------------------------------\n msg.topic = \"INSERT INTO `cigar_delta` (`humidor_name`, `sensor_data`) VALUES ('\" + humidorName + \"', '\" + msg.payload + \"')\";\n\n // ---------------------------------------------------------------------------\n // Reset Our Global Sensor Last Updated Time!\n // ---------------------------------------------------------------------------\n global.set(\"mysqlSensorLastUpdated\", sensorReadTime);\n \n // ---------------------------------------------------------------------------\n // Only Return If We Are Allowed To Update\n // ---------------------------------------------------------------------------\n return msg;\n}\n","outputs":1,"noerr":0,"x":260,"y":120,"wires":[["f2cd8065.e0726","9903a2c0.c0fe58"]]},{"id":"46dfe1b9.78c4f","type":"comment","z":"df46081d.8c876","name":"Humidor DB: Save Historical Sensor Data","info":"","x":180,"y":60,"wires":[]},{"id":"cc321846.b3247","type":"comment","z":"df46081d.8c876","name":"Humidor Fan Control: On / Off","info":"","x":590,"y":620,"wires":[]},{"id":"fc18a51e.64267","type":"comment","z":"df46081d.8c876","name":"Forcing A Reset So We Don't Get Too Humid Or Too Dry","info":"","x":1050,"y":1240,"wires":[]},{"id":"49128669.9cb21","type":"function","z":"df46081d.8c876","name":"Humidity: Limit points in chart graph","func":"const DEBUG = false;\n\n// Time Sent In From Sensor\nlet humiditySensorReadTime = new Date(msg.payload.Time);\n// If on reboot \"humiditySensorLastUpdated\" doesn't exist ... set it to the current \"humiditySensorReadTime\".\nif(!global.get(\"humiditySensorLastUpdated\")) { global.set(\"humiditySensorLastUpdated\", humiditySensorReadTime); }\n// Last Update To MySQL\nlet lastHumidityUpdateTime = new Date(global.get(\"humiditySensorLastUpdated\"));\n\n\n// Trying to optimize page load times by sending in less data\n// Setup Possible Times For Updating\nconst SEC10 = 10 * 1000;\nconst SEC30 = 30 * 1000;\nconst MIN05 = 5 * 60 * 1000;\nconst MIN10 = 10 * 60 * 1000;\nconst MIN30 = 30 * 60 * 1000;\nconst HOUR1 = 60 * 60 * 1000;\n\n\nmsg.topic = \"Humidity\";\nmsg.label = \"Humidity\";\n\nif(DEBUG) {\n msg.test_humiditySensorReadTime = humiditySensorReadTime;\n msg.test_lastHumidityUpdateTime = lastHumidityUpdateTime;\n msg.test_math = (humiditySensorReadTime - lastHumidityUpdateTime);\n return msg;\n \n} else {\n // If Time Is Greater Or Equal To Our Desired Update Time, RUN\n if ((humiditySensorReadTime - lastHumidityUpdateTime) >= MIN05) {\n // Set our new global value\n global.set(\"humiditySensorLastUpdated\", humiditySensorReadTime);\n\n const HUMIDOR_TEMP_ADJUSTMENT = global.get(\"ifHumidorGTETemperature\");\n const HUMIDOR_HUMIDITY_ADJUSTMENT = global.get(\"adjustHumidorHumidity\");\n\n // Need to adjust since this sensor acts weird when the temps hit 80+ degrees.\n if(msg.payload.HTU21.Temperature >= HUMIDOR_TEMP_ADJUSTMENT) {\n // Set the humidity to be the only payload\n msg.payload = (msg.payload.HTU21.Humidity + HUMIDOR_HUMIDITY_ADJUSTMENT);\n } else {\n // Set the humidity to be the only payload\n msg.payload = msg.payload.HTU21.Humidity;\n }\n\n\n\n // Only return if we are beyond the specified timing.\n return msg;\n }\n}","outputs":1,"noerr":0,"x":750,"y":520,"wires":[["712f073.106c7f8","b348a80a.6ac33"]]},{"id":"b9e2e168.a7ca68","type":"function","z":"df46081d.8c876","name":"Temperature: Limit points in chart graph","func":"const DEBUG = false;\n\n// Time Sent In From Sensor\nlet tempSensorReadTime = new Date(msg.payload.Time);\n// If on reboot \"tempSensorLastUpdated\" doesn't exist ... set it to the current \"tempSensorReadTime\".\nif(!global.get(\"tempSensorLastUpdated\")) { global.set(\"tempSensorLastUpdated\", tempSensorReadTime); }\n// Last Update To MySQL\nlet lastTempUpdateTime = new Date(global.get(\"tempSensorLastUpdated\"));\n\n\n// Trying to optimize page load times by sending in less data\n// Setup Possible Times For Updating\nconst SEC10 = 10 * 1000;\nconst SEC30 = 30 * 1000;\nconst MIN05 = 5 * 60 * 1000;\nconst MIN10 = 10 * 60 * 1000;\nconst MIN30 = 30 * 60 * 1000;\nconst HOUR1 = 60 * 60 * 1000;\n\n\nmsg.topic = \"Temperature\";\nmsg.label = \"Temperature\";\n\n\nif(DEBUG) {\n msg.test_tempSensorReadTime = tempSensorReadTime;\n msg.test_lastTempUpdateTime = lastTempUpdateTime;\n msg.test_math = (tempSensorReadTime - lastTempUpdateTime);\n return msg;\n \n} else {\n // If Time Is Greater Or Equal To Our Desired Update Time, RUN\n if ((tempSensorReadTime - lastTempUpdateTime) >= MIN05) {\n // Set our new global value\n global.set(\"tempSensorLastUpdated\", tempSensorReadTime);\n\n // Set the temperature to be the only payload\n msg.payload = msg.payload.HTU21.Temperature;\n \n // Only return if we are beyond the specified timing.\n return msg;\n }\n}","outputs":1,"noerr":0,"x":760,"y":400,"wires":[["b348a80a.6ac33","712f073.106c7f8"]]},{"id":"9903a2c0.c0fe58","type":"debug","z":"df46081d.8c876","name":"DEBUG: Database Entry","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":690,"y":200,"wires":[]},{"id":"398659a.3bbfaa6","type":"inject","z":"df46081d.8c876","name":"Inject To Set Our Globals","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":1270,"y":120,"wires":[["5b9e228.7ac835c"]]},{"id":"5b9e228.7ac835c","type":"function","z":"df46081d.8c876","name":"Global: Humidor Adjustment Globals","func":"// Set Some Humidor Adjustment Globals\n\n// Temp value to adjust for >= value\nglobal.set(\"ifHumidorGTETemperature\", 80.1);\n\n// Add value to humidity \"ifHumidorGTETemperature\" is greater than or equal to value.\nglobal.set(\"adjustHumidorHumidity\", 8);\n","outputs":1,"noerr":0,"x":1570,"y":120,"wires":[[]]},{"id":"92e7ef98.128c9","type":"mqtt-broker","z":"","name":"pubsub.bracketninja.com","broker":"localhost","port":"1883","tls":"","clientid":"Node-Red-1883","usetls":false,"verifyservercert":true,"compatmode":true,"keepalive":"15","cleansession":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","closeTopic":"","closePayload":"","willTopic":"","willQos":"0","willRetain":null,"willPayload":""},{"id":"abd78d69.a66928","type":"ui_group","z":"","name":"Humidor - Status","tab":"d39c7e2f.9587d","order":1,"disp":true,"width":"7","collapse":false},{"id":"f7076b84.7de6b8","type":"ui_group","z":"","name":"Humidor - 24 Hour Charts","tab":"d39c7e2f.9587d","order":2,"disp":true,"width":"12","collapse":false},{"id":"f383da68.29d5d","type":"ui_group","z":"","name":"Humidor - Config","tab":"d39c7e2f.9587d","order":4,"disp":true,"width":"9","collapse":false},{"id":"d87c8e79.24a86","type":"MySQLdatabase","z":"","host":"127.0.0.1","port":"3306","db":"iot_humidor","tz":"EDT"},{"id":"d39c7e2f.9587d","type":"ui_tab","z":"","name":"Cigar Delta","icon":"dashboard","order":2}]