{"id":469,"date":"2015-04-10T12:45:11","date_gmt":"2015-04-10T17:45:11","guid":{"rendered":"http:\/\/kylegabriel.com\/projects\/?p=469"},"modified":"2021-09-04T10:09:18","modified_gmt":"2021-09-04T15:09:18","slug":"mushroom-cultivation-revisited","status":"publish","type":"post","link":"https:\/\/kylegabriel.com\/projects\/2015\/04\/mushroom-cultivation-revisited.html","title":{"rendered":"Mushroom Cultivation Revisited"},"content":{"rendered":"\n<p class=\"has-medium-font-size\"><span style=\"color: red; font-weight: bold\">Update: A newer version of this project has been released.<\/span> <a href=\"https:\/\/kylegabriel.com\/projects\/2021\/09\/mushroom-cultivation-automation.html\">Read More &gt;&gt;<\/a><\/p>\n\n\n\n<p>There have been many initiatives undertaken to maximize mushroom cultivation productivity, and although variations exist between species, manipulation of environmental conditions has demonstrated some of the most dramatic effects on yield. Temperature, humidity, and carbon dioxide concentration have been identified as some of the most crucial factors for promoting mycelial colonization, primordia formation, and growth of fruiting bodies, or mushrooms. Additionally, each stage of development requires specific conditions for optimal growth. As such, the more precise these conditions can be controlled, the greater the yields that are possible.<\/p>\n\n\n\n<!--more-->\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube\"><div style=\"display: contents;\" >\n<div class=\"arve\" data-mode=\"normal\" data-oembed=\"1\" data-provider=\"youtube\" id=\"arve-youtube-uqpemuywpbc\">\n<div class=\"arve-inner\">\n<div class=\"arve-embed arve-embed--has-aspect-ratio\" style=\"aspect-ratio: 500 \/ 281\">\n<span class=\"arve-ar\" style=\"padding-top:56.200000%\"><\/span><iframe credentialless referrerpolicy=\"strict-origin-when-cross-origin\" allow=\"accelerometer &#039;none&#039;;ambient-light-sensor &#039;none&#039;;autoplay &#039;none&#039;;battery &#039;none&#039;;bluetooth &#039;none&#039;;browsing-topics &#039;none&#039;;camera &#039;none&#039;;ch-ua &#039;none&#039;;clipboard-read &#039;none&#039;;clipboard-write;display-capture &#039;none&#039;;document-domain &#039;none&#039;;domain-agent &#039;none&#039;;encrypted-media &#039;none&#039;;execution-while-not-rendered &#039;none&#039;;execution-while-out-of-viewport &#039;none&#039;;gamepad &#039;none&#039;;geolocation &#039;none&#039;;gyroscope &#039;none&#039;;hid &#039;none&#039;;identity-credentials-get &#039;none&#039;;idle-detection &#039;none&#039;;keyboard-map &#039;none&#039;;local-fonts &#039;none&#039;;magnetometer &#039;none&#039;;microphone &#039;none&#039;;midi &#039;none&#039;;navigation-override &#039;none&#039;;otp-credentials &#039;none&#039;;payment &#039;none&#039;;picture-in-picture;publickey-credentials-create &#039;none&#039;;publickey-credentials-get &#039;none&#039;;screen-wake-lock &#039;none&#039;;serial &#039;none&#039;;speaker-selection;sync-xhr &#039;none&#039;;usb &#039;none&#039;;web-share;window-management &#039;none&#039;;xr-spatial-tracking &#039;none&#039;;\" allowfullscreen class=\"arve-iframe fitvidsignore\" data-arve=\"arve-youtube-uqpemuywpbc\" data-src-no-ap=\"https:\/\/www.youtube-nocookie.com\/embed\/UQpemuywpBc?feature=oembed&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;autohide=1&amp;playsinline=0&amp;autoplay=0\" frameborder=\"0\" height=\"0\" name sandbox=\"allow-scripts allow-same-origin allow-presentation allow-popups allow-popups-to-escape-sandbox\" scrolling=\"no\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/UQpemuywpBc?feature=oembed&#038;iv_load_policy=3&#038;modestbranding=1&#038;rel=0&#038;autohide=1&#038;playsinline=0&#038;autoplay=0\" width=\"0\" title loading=\"lazy\"><\/iframe>\n\n<\/div>\n\n<\/div>\n<script type=\"application\/ld+json\">{\"@context\":\"http:\\\/\\\/schema.org\\\/\",\"@id\":\"https:\\\/\\\/kylegabriel.com\\\/projects\\\/2015\\\/04\\\/mushroom-cultivation-revisited.html#arve-youtube-uqpemuywpbc\",\"type\":\"VideoObject\",\"embedURL\":\"https:\\\/\\\/www.youtube-nocookie.com\\\/embed\\\/UQpemuywpBc?feature=oembed&iv_load_policy=3&modestbranding=1&rel=0&autohide=1&playsinline=0&autoplay=0\"}<\/script>\n<\/div>\n\n<\/div><\/figure>\n\n\n\n\n\n<h3 class=\"wp-block-heading\">History<\/h3>\n\n\n\n<p>In 2009 I created my first automated mushroom cultivator using an ATMega328 and networked Linux computer. It monitored and regulated the temperature and humidity of a growth chamber with the use of a humidifier and heater attached to individually-controlled 120-VAC relays, with a simple web control interface. In 2012 I redesigned the software to run entirely on the Raspberry Pi (RPi) and <a href=\"http:\/\/kylegabriel.com\/projects\/2015\/02\/automated-mushroom-cultivation.html\" target=\"_blank\" rel=\"noreferrer noopener\">documented the build<\/a> shortly after. Although the system worked, it was still very basic and lacked some crucial features I desired. Over the past couple months I&#8217;ve been redesigning both the hardware and the software. I&#8217;m writing to present the third milestone in development.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"changelog\">Mycodo Changelog<\/h3>\n\n\n\n<h6 class=\"wp-block-heading\">Current version<\/h6>\n\n\n\n<p>\nTo see the latest features of the current version of Mycodo, go to <a href=\"https:\/\/github.com\/kizniche\/Mycodo\">github.com\/kizniche\/Mycodo<\/a><\/p>\n\n\n\n<h6 class=\"wp-block-heading\">version 3.0 (this article&#8217;s version)<\/h6>\n\n\n\n<p>\nSwitch up to eight 120-volt AC relays<br>Support for up to 8 simple timers (define on duration, off duration)<br>True PID control for temperature and humidity regulation<br>Support more humidity &amp; temperature sensors (DHT11, DHT22, and AM2302)<br>Multi-sensors support to regulate multiple environments<br>TempFS to reduce writes to and extend the life of the SD card<br>Lock files to prevent sensor read and file access conflicts<br>New logs to view: login authorization, daemon, sensor, and relay logs<br>Generate new types of graphs<br>Combined: generate a graph combining all temperatures or humidities<br>Separate: generate a graph of the temperature, humidity, and dew point of each sensor<br>Define graph image width (custom graph only)<br>Acquire still image or stream live video using the Raspberry Pi camera module<br>Set relay (light) to be burned on while camera is capturing<br>New web interface<br>Tabs allow everything to be loaded on one page<br>Easy change any variable in the configuration file<br>Login Authentication (written by php-login.net)<br>Optional cookie to keep session authenticated<br>Guest account for viewing only (no config changes permitted) (user: guest, password: anonymous)<br>Authorization log of successful and unsuccessful login attempts<br>User profile, gravatar support (from email), lost\/forgot email password reset\n\n<\/p>\n\n\n\n<h6 class=\"wp-block-heading\">version 2.0<\/h6>\n\n\n\n<p>\nAll software running on a Raspberry Pi version 1 Model B<br>Support for the DHT22 digital humidity and temperature sensor<br>Manual or automatic switching of up to four 120-volt AC relays<br>Automatic operation by simple proportional temperature\/humidity regulation<br>Temperature, humidity, and relay state-change logging<br>Basic web interface<br>Configure variables related to sensor reading, log writing, and graph generation<br>Generate custom graphs of current and past data<br>Presets of pre-defined time periods (past 1 hour, 6 hours, 1 day, 3 days&#8230;)<br>Specify specific time period to generate graph\n\n<\/p>\n\n\n\n<h6 class=\"wp-block-heading\">version 1.0<\/h6>\n\n\n\n<p>\nRead humidity &amp; temperature sensor with an ATMega<br>ATMega connected by serial USB to a network-enabled computer running linux<br>Linux periodically read humidity\/temperature sensor and write log<br>ATMega modulate relays for simple proportional humidity\/temperature regulation<br>Simple web interface to view historical data and generate graphs with gnuplot\n<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hardware\">Hardware (Bill of Materials)<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>Part<\/td><td class=\"has-text-align-right\" data-align=\"right\">Quantity<\/td><td class=\"has-text-align-right\" data-align=\"right\">Purchase<\/td><\/tr><tr><td>Raspberry Pi 1 B (it&#8217;s now recommended to use the newer Raspberry Pi 3 B+ or Raspberry Pi 4)<\/td><td class=\"has-text-align-right\" data-align=\"right\">1<\/td><td class=\"has-text-align-right\" data-align=\"right\"><a href=\"https:\/\/amzn.to\/3untZX1\" data-eafl-id=\"6236\" data-eafl-parsed=\"1\" class=\"eafl-link eafl-link-text eafl-link-direct\" target=\"_blank\" rel=\"nofollow\">Amazon<\/a>, <a href=\"https:\/\/amzn.to\/3fnUoxB\" data-eafl-id=\"6237\" data-eafl-parsed=\"1\" class=\"eafl-link eafl-link-text eafl-link-direct\" target=\"_blank\" rel=\"nofollow\">Amazon<\/a><\/td><\/tr><tr><td>Micro SD Card (32 GB)<\/td><td class=\"has-text-align-right\" data-align=\"right\">1<\/td><td class=\"has-text-align-right\" data-align=\"right\"><a href=\"https:\/\/amzn.to\/3oQQpg9\" data-eafl-id=\"6235\" data-eafl-parsed=\"1\" class=\"eafl-link eafl-link-text eafl-link-direct\" target=\"_blank\" rel=\"nofollow\">Amazon<\/a><\/td><\/tr><tr><td>Raspberry Pi V2 Camera Module<\/td><td class=\"has-text-align-right\" data-align=\"right\">1<\/td><td class=\"has-text-align-right\" data-align=\"right\"><a href=\"https:\/\/amzn.to\/3oZCNPB\" data-eafl-id=\"6234\" data-eafl-parsed=\"1\" class=\"eafl-link eafl-link-text eafl-link-direct\" target=\"_blank\" rel=\"nofollow\">Amazon<\/a><\/td><\/tr><tr><td>5-volt 2-Amp DC Power Supply (CUI VOF-10-5 in photos)<\/td><td class=\"has-text-align-right\" data-align=\"right\">1<\/td><td class=\"has-text-align-right\" data-align=\"right\"><\/td><\/tr><tr><td>8-Channel Relay Module (Mechanical relays at 10 Amps max each or Solid-state relays at 2 Amps max each)<\/td><td class=\"has-text-align-right\" data-align=\"right\">1<\/td><td class=\"has-text-align-right\" data-align=\"right\"><a href=\"https:\/\/amzn.to\/3voJWLT\" data-eafl-id=\"6276\" data-eafl-parsed=\"1\" class=\"eafl-link eafl-link-text eafl-link-direct\" target=\"_blank\" rel=\"nofollow\">Amazon<\/a>, <a href=\"https:\/\/amzn.to\/34SsgA3\" data-eafl-id=\"6277\" data-eafl-parsed=\"1\" class=\"eafl-link eafl-link-text eafl-link-direct\" target=\"_blank\" rel=\"nofollow\">Amazon<\/a><\/td><\/tr><tr><td>Crydom 40-Amp Relays<\/td><td class=\"has-text-align-right\" data-align=\"right\">2<\/td><td class=\"has-text-align-right\" data-align=\"right\"><a href=\"https:\/\/amzn.to\/3hVVbHK\" data-eafl-id=\"6311\" data-eafl-parsed=\"1\" class=\"eafl-link eafl-link-text eafl-link-direct\" target=\"_blank\" rel=\"nofollow\">Amazon<\/a><\/td><\/tr><tr><td>Humidity\/Temperature Sensor (HTU21DF, AM2315, SHT31, or BME280, etc.)<\/td><td class=\"has-text-align-right\" data-align=\"right\">1<\/td><td class=\"has-text-align-right\" data-align=\"right\"><a href=\"https:\/\/amzn.to\/2QZQjGw\" data-eafl-id=\"6293\" data-eafl-parsed=\"1\" class=\"eafl-link eafl-link-text eafl-link-direct\" target=\"_blank\" rel=\"nofollow\">Amazon<\/a>, <a href=\"https:\/\/amzn.to\/3N3pbOT\" data-eafl-id=\"6294\" data-eafl-parsed=\"1\" class=\"eafl-link eafl-link-text eafl-link-direct\" target=\"_blank\" rel=\"nofollow\">Amazon<\/a>, <a href=\"https:\/\/amzn.to\/3yEF0V2\" data-eafl-id=\"6295\" data-eafl-parsed=\"1\" class=\"eafl-link eafl-link-text eafl-link-direct\" target=\"_blank\" rel=\"nofollow\">Amazon<\/a>, <a href=\"https:\/\/amzn.to\/3wFOi1n\" data-eafl-id=\"6312\" data-eafl-parsed=\"1\" class=\"eafl-link eafl-link-text eafl-link-direct\" target=\"_blank\" rel=\"nofollow\">Amazon<\/a><\/td><\/tr><tr><td>Electrical Box Enclosure<\/td><td class=\"has-text-align-right\" data-align=\"right\">1<\/td><td class=\"has-text-align-right\" data-align=\"right\"><\/td><\/tr><tr><td>8-Outlet Power Strip<\/td><td class=\"has-text-align-right\" data-align=\"right\">1<\/td><td class=\"has-text-align-right\" data-align=\"right\"><a href=\"https:\/\/amzn.to\/3bXDtjb\" data-eafl-id=\"6313\" data-eafl-parsed=\"1\" class=\"eafl-link eafl-link-text eafl-link-direct\" target=\"_blank\" rel=\"nofollow\">Amazon<\/a><\/td><\/tr><tr><td>Nuts, Bolts, Standoffs, Wire<\/td><td class=\"has-text-align-right\" data-align=\"right\">1<\/td><td class=\"has-text-align-right\" data-align=\"right\"><\/td><\/tr><tr><td>Terminal Blocks and Jumpers (4-Position, 6-Position, and 8-Position)<\/td><td class=\"has-text-align-right\" data-align=\"right\">1<\/td><td class=\"has-text-align-right\" data-align=\"right\"><a href=\"https:\/\/amzn.to\/2RRwu4m\" data-eafl-id=\"6314\" data-eafl-parsed=\"1\" class=\"eafl-link eafl-link-text eafl-link-direct\" target=\"_blank\" rel=\"nofollow\">Amazon<\/a>, <a href=\"https:\/\/amzn.to\/3fLrKW0\" data-eafl-id=\"6315\" data-eafl-parsed=\"1\" class=\"eafl-link eafl-link-text eafl-link-direct\" target=\"_blank\" rel=\"nofollow\">Amazon<\/a>, <a href=\"https:\/\/amzn.to\/3fobk79\" data-eafl-id=\"6316\" data-eafl-parsed=\"1\" class=\"eafl-link eafl-link-text eafl-link-direct\" target=\"_blank\" rel=\"nofollow\">Amazon<\/a><\/td><\/tr><tr><td>Growing Gourmet and Medicinal Mushrooms by Paul Stamets<\/td><td class=\"has-text-align-right\" data-align=\"right\">1<\/td><td class=\"has-text-align-right\" data-align=\"right\"><a href=\"https:\/\/amzn.to\/3hX37Zk\" data-eafl-id=\"6317\" data-eafl-parsed=\"1\" class=\"eafl-link eafl-link-text eafl-link-direct\" target=\"_blank\" rel=\"nofollow\">Amazon<\/a><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"construction\">Construction<\/h5>\n\n\n\n<p>I started with a lockable electrical box with ground connections on the body and door. Holes were drilled and knockouts were removed to feed 12-gauge wire between the 8-outlet strip to the box. The relay board, RPi, and terminal blocks were bolted to the back plate, with the RPi and relay board raised off the plate with stand-offs. The 5-volt power supply was soldered into a circuit with and an in-line 2A fuse and screw-terminals. The terminal blocks were used to distribute power through the relay switches on the relay board, and the 5-volt DC to power the RPi and relay coils. I chose to use six of the eight 10-amp relays to directly switch six outlets, and the remaining two 10-amp relays to control the 40-amp relays, which were wired to switch the remaining two outlets. This allows up to six devices to be used that have a maximum current draw each of 10 Amps and two devices up to 40 Amps. Last, the main box, door, outlet strip, and outlets were grounded.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<style type=\"text\/css\">\r\n\t#foogallery-gallery-556 .fg-image {\r\n        width: 400px;\r\n    }\r\n<\/style>\r\n\t\t\t\t<div class=\"foogallery foogallery-container foogallery-default foogallery-lightbox-foobox-free fg-gutter-25 fg-center fg-default fg-light fg-border-thin fg-shadow-small fg-loading-default fg-loaded-fade-in fg-caption-hover fg-hover-fade fg-hover-zoom fg-ready\" id=\"foogallery-gallery-556\" data-foogallery=\"{&quot;item&quot;:{&quot;showCaptionTitle&quot;:true,&quot;showCaptionDescription&quot;:true},&quot;lazy&quot;:true}\" >\r\n\t<div class=\"fg-item fg-type-image fg-idle\"><figure class=\"fg-item-inner\"><a href=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/2015\/04\/DSC_6703_4_5_tonemapped-20150405-14-18-02.jpg\" data-attachment-id=\"572\" data-type=\"image\" class=\"fg-thumb\"><span class=\"fg-image-wrap\"><img fetchpriority=\"high\" decoding=\"async\" width=\"400\" height=\"480\" class=\"skip-lazy fg-image\" data-src-fg=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/cache\/2015\/04\/DSC_6703_4_5_tonemapped-20150405-14-18-02\/2604487335.jpg\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22400%22%20height%3D%22480%22%20viewBox%3D%220%200%20400%20480%22%3E%3C%2Fsvg%3E\" loading=\"eager\"><\/span><span class=\"fg-image-overlay\"><\/span><\/a><figcaption class=\"fg-caption\"><div class=\"fg-caption-inner\"><\/div><\/figcaption><\/figure><div class=\"fg-loader\"><\/div><\/div><div class=\"fg-item fg-type-image fg-idle\"><figure class=\"fg-item-inner\"><a href=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/2015\/04\/DSC_6688_89_90_91_tonemapped-20150405-14-09-38.jpg\" data-attachment-id=\"571\" data-type=\"image\" class=\"fg-thumb\"><span class=\"fg-image-wrap\"><img decoding=\"async\" width=\"400\" height=\"480\" class=\"skip-lazy fg-image\" data-src-fg=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/cache\/2015\/04\/DSC_6688_89_90_91_tonemapped-20150405-14-09-38\/3669076341.jpg\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22400%22%20height%3D%22480%22%20viewBox%3D%220%200%20400%20480%22%3E%3C%2Fsvg%3E\" loading=\"eager\"><\/span><span class=\"fg-image-overlay\"><\/span><\/a><figcaption class=\"fg-caption\"><div class=\"fg-caption-inner\"><\/div><\/figcaption><\/figure><div class=\"fg-loader\"><\/div><\/div><div class=\"fg-item fg-type-image fg-idle\"><figure class=\"fg-item-inner\"><a href=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/2015\/04\/DSC_6693-20150405-14-11-10.jpg\" data-attachment-id=\"570\" data-type=\"image\" class=\"fg-thumb\"><span class=\"fg-image-wrap\"><img decoding=\"async\" width=\"400\" height=\"480\" class=\"skip-lazy fg-image\" data-src-fg=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/cache\/2015\/04\/DSC_6693-20150405-14-11-10\/2365200500.jpg\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22400%22%20height%3D%22480%22%20viewBox%3D%220%200%20400%20480%22%3E%3C%2Fsvg%3E\" loading=\"eager\"><\/span><span class=\"fg-image-overlay\"><\/span><\/a><figcaption class=\"fg-caption\"><div class=\"fg-caption-inner\"><\/div><\/figcaption><\/figure><div class=\"fg-loader\"><\/div><\/div><div class=\"fg-item fg-type-image fg-idle\"><figure class=\"fg-item-inner\"><a href=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/2015\/07\/Mycodo-Schematic.png\" data-attachment-id=\"1099\" data-type=\"image\" class=\"fg-thumb\"><span class=\"fg-image-wrap\"><img decoding=\"async\" width=\"400\" height=\"480\" class=\"skip-lazy fg-image\" data-src-fg=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/cache\/2015\/07\/Mycodo-Schematic\/195961774.png\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22400%22%20height%3D%22480%22%20viewBox%3D%220%200%20400%20480%22%3E%3C%2Fsvg%3E\" loading=\"eager\"><\/span><span class=\"fg-image-overlay\"><\/span><\/a><figcaption class=\"fg-caption\"><div class=\"fg-caption-inner\"><\/div><\/figcaption><\/figure><div class=\"fg-loader\"><\/div><\/div><\/div>\r\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"sensors-and-relays\">Sensor and Relays<\/h5>\n\n\n\n<p>The DHT22 sensor has pins for ground, power, and data. Data connects to a GPIO and though a 10k resistor to DC+. I&#8217;m using a Sainsmart 8-relay module, however any opto-isolated relays should suffice. In the case of this relay board, JD-VCC should be connected to the power supply and VCC connected to the RPi VCC to ensures proper isolation of the RPi. The newest version of Mycodo supports better humidity\/temperature sensors than the DHT22, including the BME280, AM2315, and HTU21D.<\/p>\n\n\n\n<p>Each relay control pin on the relay board will need to be connected to a GPIO pin on the RPi. Ensure your relays are properly opto-isolated (or otherwise have a very low input current) to prevent drawing too much current from the RPi. Avoid connecting to GPIOs that are normally HIGH or LOW at boot, as this can inadvertently turn your relay on until the GPIO initialization script is executed. Depending on the relay board or custom circuit you end up using, your relays will turn on with either a HIGH (5-volts) or LOW (ground) signal from the RPi. This relay board energizes the relays when a LOW signal is provided. Upon bootup, the voltages of the GPIOs connected to the relays are floating, meaning they are neither HIGH nor LOW but somewhere in between. The initialization script sets all connected GPIOs to output, then sets them LOW from their floating state.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><a href=\"http:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/2015\/04\/RPi-GPIO-revi2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/2015\/04\/RPi-GPIO-revi2.png\" alt=\"RPi-GPIO-revi2\" class=\"wp-image-651\" width=\"528\" height=\"249\" srcset=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/2015\/04\/RPi-GPIO-revi2.png 1000w, https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/2015\/04\/RPi-GPIO-revi2-300x142.png 300w\" sizes=\"(max-width: 528px) 100vw, 528px\" \/><\/a><figcaption>Raspberry Pi 1 pins.<\/figcaption><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"software\">Software<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Mycodo (source code on <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/kizniche\/Mycodo\" target=\"_blank\">GitHub<\/a>)<\/li><\/ul>\n\n\n\n<p>There are two main components of the Mycodo system, the Mycodo daemon and the Mycodo client. The daemon performs all critical tasks, such as periodically reading sensors, writing logs, reading\/writing the configuration file, turning relays on and off to regulate temperature, humidity, and airflow, among other functions. The client application issues commands for the daemon to carry out. This is the link from the web interface to the daemon, communicating configuration changes, manual relay switching, modifying automation, and other information. Common usage is to continually run the daemon in the background and use the client to communicate with the daemon.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"installation\">Installation<\/h4>\n\n\n\n<p>I&#8217;ve taken the install instructions out of this publication because this is an old version of Mycodo. To find the install instructions to install the latest version of Mycodo, go to <a href=\"https:\/\/github.com\/kizniche\/Mycodo\">github.com\/kizniche\/Mycodo<\/a>.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"daemon\">Daemon<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">mycodo.py: Reads sensors, writes logs, and operates relays to maintain set environmental conditions.\n\nUsage:  mycodo.py [OPTION]...\n\nOptions:\n    -d, --daemon v\/s w\/i\/d\n           Start program as daemon that monitors conditions and modulates relays\n           v enables log output to the console, s silences\n           Log level: w: &gt;= warnings, i: &gt;= info, d: &gt;= debug\n    -h, --help\n           Display this help and exit\n\nDefault: mycodo.py -d s w\nDebugging: mycodo.py -d v d\n<\/pre>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"client\">Client<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">mycodo-client.py: Client for mycodo.py (must be running in daemon mode -d)\n\nUsage:  mycodo-client.py [OPTION]...\n\nOptions:\n        --modtempOR sensor state\n           Temperature PID control: 0=enable, 1=disable\n        --modtempPID sensor relay set p i d period\n           Change Temperature PID variables\n        --modhumOR sensor state\n           Humidity PID control: 0=enable, 1=disable\n        --modhumPID sensor relay set p i d period\n           Change Humidity PID variables\n        --modrelaynames name1 name2 name3 name4 name5 name6 name7 name8\n           Modify relay names (Restrict to a maximum of 12 characters each)\n        --modrelaypins pin1 pin2 pin3 pin4 pin5 pin6 pin7 pin8\n           Modify relay pins Using BCM numbering)\n        --modrelaytrigger trig1 trig2 trig3 trig4 trig5 trig6 trig7 trig8\n           Modify the relay trigger states (0=low, 1=high; turns relay on)\n        --modsensor sensor name device pin period activated graph\n           Modify sensor variables\n        --modtimer timer state relay on off\n           Modify custom timers, State can be 0=off 1=on, on\/off durations in seconds\n    -m, --modvar name1 value1 [name2] [value2]...\n           Modify any configuration variable or variables (multiple allowed, must be paired input)\n    -r, --relay relay state\n           Turn a relay on or off. state can be 0, 1, or X.\n           0=OFF, 1=ON, or X number of seconds On\n    -s, --sensor pin device\n           Returns the temperature and humidity of of the DHT sensor on GPIO pin\n           Device options are DHT22, DHT11, or AM2302\n    -t, --terminate\n           Terminate the communication service and daemon\n    -w, --writelog sensor\n           Read from sensor number and append log file, 0 to write all.\n<\/pre>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"screenshots\">Screenshots<\/h4>\n\n\n\n<p>The web interface provides a way to view and change all aspects of the system as well as generate graphs from current and past sensor data.<\/p>\n\n\n<style type=\"text\/css\">\r\n\t#foogallery-gallery-726 .fg-image {\r\n        width: 220px;\r\n    }\r\n<\/style>\r\n\t\t\t\t<div class=\"foogallery foogallery-container foogallery-default foogallery-lightbox-foobox-free fg-gutter-15 fg-center fg-default fg-light fg-border-thin fg-shadow-small fg-loading-default fg-loaded-fade-in fg-caption-hover fg-hover-fade fg-hover-zoom fg-ready\" id=\"foogallery-gallery-726\" data-foogallery=\"{&quot;item&quot;:{&quot;showCaptionTitle&quot;:true,&quot;showCaptionDescription&quot;:true},&quot;lazy&quot;:true}\" >\r\n\t<div class=\"fg-item fg-type-image fg-idle\"><figure class=\"fg-item-inner\"><a href=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/2015\/04\/Main1.png\" data-attachment-id=\"824\" data-type=\"image\" class=\"fg-thumb\"><span class=\"fg-image-wrap\"><img decoding=\"async\" width=\"220\" height=\"220\" class=\"skip-lazy fg-image\" data-src-fg=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/cache\/2015\/04\/Main1\/2609305573.png\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22220%22%20height%3D%22220%22%20viewBox%3D%220%200%20220%20220%22%3E%3C%2Fsvg%3E\" loading=\"eager\"><\/span><span class=\"fg-image-overlay\"><\/span><\/a><figcaption class=\"fg-caption\"><div class=\"fg-caption-inner\"><\/div><\/figcaption><\/figure><div class=\"fg-loader\"><\/div><\/div><div class=\"fg-item fg-type-image fg-idle\"><figure class=\"fg-item-inner\"><a href=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/2015\/04\/Main2.png\" data-attachment-id=\"825\" data-type=\"image\" class=\"fg-thumb\"><span class=\"fg-image-wrap\"><img decoding=\"async\" width=\"220\" height=\"220\" class=\"skip-lazy fg-image\" data-src-fg=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/cache\/2015\/04\/Main2\/3851650218.png\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22220%22%20height%3D%22220%22%20viewBox%3D%220%200%20220%20220%22%3E%3C%2Fsvg%3E\" loading=\"eager\"><\/span><span class=\"fg-image-overlay\"><\/span><\/a><figcaption class=\"fg-caption\"><div class=\"fg-caption-inner\"><\/div><\/figcaption><\/figure><div class=\"fg-loader\"><\/div><\/div><div class=\"fg-item fg-type-image fg-idle\"><figure class=\"fg-item-inner\"><a href=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/2015\/04\/Config.png\" data-attachment-id=\"818\" data-type=\"image\" class=\"fg-thumb\"><span class=\"fg-image-wrap\"><img decoding=\"async\" width=\"220\" height=\"220\" class=\"skip-lazy fg-image\" data-src-fg=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/cache\/2015\/04\/Config\/1221224421.png\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22220%22%20height%3D%22220%22%20viewBox%3D%220%200%20220%20220%22%3E%3C%2Fsvg%3E\" loading=\"eager\"><\/span><span class=\"fg-image-overlay\"><\/span><\/a><figcaption class=\"fg-caption\"><div class=\"fg-caption-inner\"><\/div><\/figcaption><\/figure><div class=\"fg-loader\"><\/div><\/div><div class=\"fg-item fg-type-image fg-idle\"><figure class=\"fg-item-inner\"><a href=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/2015\/04\/Graph2.png\" data-attachment-id=\"820\" data-type=\"image\" class=\"fg-thumb\"><span class=\"fg-image-wrap\"><img decoding=\"async\" width=\"220\" height=\"220\" class=\"skip-lazy fg-image\" data-src-fg=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/cache\/2015\/04\/Graph2\/1356465570.png\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22220%22%20height%3D%22220%22%20viewBox%3D%220%200%20220%20220%22%3E%3C%2Fsvg%3E\" loading=\"eager\"><\/span><span class=\"fg-image-overlay\"><\/span><\/a><figcaption class=\"fg-caption\"><div class=\"fg-caption-inner\"><\/div><\/figcaption><\/figure><div class=\"fg-loader\"><\/div><\/div><div class=\"fg-item fg-type-image fg-idle\"><figure class=\"fg-item-inner\"><a href=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/2015\/04\/Graph1.png\" data-attachment-id=\"819\" data-type=\"image\" class=\"fg-thumb\"><span class=\"fg-image-wrap\"><img decoding=\"async\" width=\"220\" height=\"220\" class=\"skip-lazy fg-image\" data-src-fg=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/cache\/2015\/04\/Graph1\/4163796893.png\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22220%22%20height%3D%22220%22%20viewBox%3D%220%200%20220%20220%22%3E%3C%2Fsvg%3E\" loading=\"eager\"><\/span><span class=\"fg-image-overlay\"><\/span><\/a><figcaption class=\"fg-caption\"><div class=\"fg-caption-inner\"><\/div><\/figcaption><\/figure><div class=\"fg-loader\"><\/div><\/div><div class=\"fg-item fg-type-image fg-idle\"><figure class=\"fg-item-inner\"><a href=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/2015\/04\/CamStill.png\" data-attachment-id=\"837\" data-type=\"image\" class=\"fg-thumb\"><span class=\"fg-image-wrap\"><img decoding=\"async\" width=\"220\" height=\"220\" class=\"skip-lazy fg-image\" data-src-fg=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/cache\/2015\/04\/CamStill\/2356181333.png\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22220%22%20height%3D%22220%22%20viewBox%3D%220%200%20220%20220%22%3E%3C%2Fsvg%3E\" loading=\"eager\"><\/span><span class=\"fg-image-overlay\"><\/span><\/a><figcaption class=\"fg-caption\"><div class=\"fg-caption-inner\"><\/div><\/figcaption><\/figure><div class=\"fg-loader\"><\/div><\/div><div class=\"fg-item fg-type-image fg-idle\"><figure class=\"fg-item-inner\"><a href=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/2015\/04\/Log1.png\" data-attachment-id=\"821\" data-type=\"image\" class=\"fg-thumb\"><span class=\"fg-image-wrap\"><img decoding=\"async\" width=\"220\" height=\"220\" class=\"skip-lazy fg-image\" data-src-fg=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/cache\/2015\/04\/Log1\/550625378.png\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22220%22%20height%3D%22220%22%20viewBox%3D%220%200%20220%20220%22%3E%3C%2Fsvg%3E\" loading=\"eager\"><\/span><span class=\"fg-image-overlay\"><\/span><\/a><figcaption class=\"fg-caption\"><div class=\"fg-caption-inner\"><\/div><\/figcaption><\/figure><div class=\"fg-loader\"><\/div><\/div><div class=\"fg-item fg-type-image fg-idle\"><figure class=\"fg-item-inner\"><a href=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/2015\/04\/Log2.png\" data-attachment-id=\"822\" data-type=\"image\" class=\"fg-thumb\"><span class=\"fg-image-wrap\"><img decoding=\"async\" width=\"220\" height=\"220\" class=\"skip-lazy fg-image\" data-src-fg=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/cache\/2015\/04\/Log2\/3412580464.png\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22220%22%20height%3D%22220%22%20viewBox%3D%220%200%20220%20220%22%3E%3C%2Fsvg%3E\" loading=\"eager\"><\/span><span class=\"fg-image-overlay\"><\/span><\/a><figcaption class=\"fg-caption\"><div class=\"fg-caption-inner\"><\/div><\/figcaption><\/figure><div class=\"fg-loader\"><\/div><\/div><div class=\"fg-item fg-type-image fg-idle\"><figure class=\"fg-item-inner\"><a href=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/2015\/04\/Log3.png\" data-attachment-id=\"823\" data-type=\"image\" class=\"fg-thumb\"><span class=\"fg-image-wrap\"><img decoding=\"async\" width=\"220\" height=\"220\" class=\"skip-lazy fg-image\" data-src-fg=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/cache\/2015\/04\/Log3\/2450141310.png\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22220%22%20height%3D%22220%22%20viewBox%3D%220%200%20220%20220%22%3E%3C%2Fsvg%3E\" loading=\"eager\"><\/span><span class=\"fg-image-overlay\"><\/span><\/a><figcaption class=\"fg-caption\"><div class=\"fg-caption-inner\"><\/div><\/figcaption><\/figure><div class=\"fg-loader\"><\/div><\/div><div class=\"fg-item fg-type-image fg-idle\"><figure class=\"fg-item-inner\"><a href=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/2015\/04\/Advanced.png\" data-attachment-id=\"816\" data-type=\"image\" class=\"fg-thumb\"><span class=\"fg-image-wrap\"><img decoding=\"async\" width=\"220\" height=\"220\" class=\"skip-lazy fg-image\" data-src-fg=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/cache\/2015\/04\/Advanced\/2246873191.png\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22220%22%20height%3D%22220%22%20viewBox%3D%220%200%20220%20220%22%3E%3C%2Fsvg%3E\" loading=\"eager\"><\/span><span class=\"fg-image-overlay\"><\/span><\/a><figcaption class=\"fg-caption\"><div class=\"fg-caption-inner\"><\/div><\/figcaption><\/figure><div class=\"fg-loader\"><\/div><\/div><\/div>\r\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"fruits-of-my-labor\">The Fruits of My Labor<\/h3>\n\n\n\n<p>What project would be complete without some great mushroom photos? I haven&#8217;t had a chance to grow with this new controller yet, so these are from a previous harvest. I hope you enjoyed this trip though automated mushroom cultivation.<\/p>\n\n\n<style type=\"text\/css\">\r\n\t#foogallery-gallery-728 .fg-image {\r\n        width: 400px;\r\n    }\r\n<\/style>\r\n\t\t\t\t<div class=\"foogallery foogallery-container foogallery-default foogallery-lightbox-foobox-free fg-gutter-15 fg-center fg-default fg-light fg-border-thin fg-shadow-small fg-loading-default fg-loaded-fade-in fg-caption-hover fg-hover-fade fg-hover-zoom fg-ready\" id=\"foogallery-gallery-728\" data-foogallery=\"{&quot;item&quot;:{&quot;showCaptionTitle&quot;:true,&quot;showCaptionDescription&quot;:true},&quot;lazy&quot;:true}\" >\r\n\t<div class=\"fg-item fg-type-image fg-idle\"><figure class=\"fg-item-inner\"><a href=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/2015\/04\/Pink-Oyster-Mushrooms.jpg\" data-attachment-id=\"731\" data-type=\"image\" class=\"fg-thumb\"><span class=\"fg-image-wrap\"><img decoding=\"async\" width=\"400\" height=\"360\" class=\"skip-lazy fg-image\" data-src-fg=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/cache\/2015\/04\/Pink-Oyster-Mushrooms\/2726783310.jpg\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22400%22%20height%3D%22360%22%20viewBox%3D%220%200%20400%20360%22%3E%3C%2Fsvg%3E\" loading=\"eager\"><\/span><span class=\"fg-image-overlay\"><\/span><\/a><figcaption class=\"fg-caption\"><div class=\"fg-caption-inner\"><\/div><\/figcaption><\/figure><div class=\"fg-loader\"><\/div><\/div><div class=\"fg-item fg-type-image fg-idle\"><figure class=\"fg-item-inner\"><a href=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/2015\/04\/White-Oyster-Mushrooms-2.jpg\" data-attachment-id=\"730\" data-type=\"image\" class=\"fg-thumb\"><span class=\"fg-image-wrap\"><img decoding=\"async\" width=\"400\" height=\"360\" class=\"skip-lazy fg-image\" data-src-fg=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/cache\/2015\/04\/White-Oyster-Mushrooms-2\/4177710534.jpg\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22400%22%20height%3D%22360%22%20viewBox%3D%220%200%20400%20360%22%3E%3C%2Fsvg%3E\" loading=\"eager\"><\/span><span class=\"fg-image-overlay\"><\/span><\/a><figcaption class=\"fg-caption\"><div class=\"fg-caption-inner\"><\/div><\/figcaption><\/figure><div class=\"fg-loader\"><\/div><\/div><div class=\"fg-item fg-type-image fg-idle\"><figure class=\"fg-item-inner\"><a href=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/2015\/04\/White-Oyster-Mushrooms-1.jpg\" data-attachment-id=\"729\" data-type=\"image\" class=\"fg-thumb\"><span class=\"fg-image-wrap\"><img decoding=\"async\" width=\"400\" height=\"360\" class=\"skip-lazy fg-image\" data-src-fg=\"https:\/\/kylegabriel.com\/projects\/wp-content\/uploads\/sites\/3\/cache\/2015\/04\/White-Oyster-Mushrooms-1\/3126885757.jpg\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22400%22%20height%3D%22360%22%20viewBox%3D%220%200%20400%20360%22%3E%3C%2Fsvg%3E\" loading=\"eager\"><\/span><span class=\"fg-image-overlay\"><\/span><\/a><figcaption class=\"fg-caption\"><div class=\"fg-caption-inner\"><\/div><\/figcaption><\/figure><div class=\"fg-loader\"><\/div><\/div><\/div>\r\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">A Call for Experimentation<\/h3>\n\n\n\n<p>Well, you made it to the end of the page. I may end up regretting this, but for now, for science, you can log in to my control interface as a spectator with the user<code>guest<\/code> and password<code>anonymous<\/code> at [redacted]. If you notice any discrepancies or issues with any of the content, please leave a comment below or use the contact form in the top menu.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Update (4\/12\/2015)<\/h4>\n\n\n\n<p>As expected, my RPi has had an onslaught of attempts to breach the security since featured on hackaday.com. However, it has remained strong.<\/p>\n\n\n\n<p>Here&#8217;s a small excerpt of my auth.log. It&#8217;s been steady like this for the past 8 hours, before unleashing fail2ban to monitor my auth.log and manage bans in iptables.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Apr 12 13:55:30 sshd[11026]: Failed password for root from 182.100.67.113 port 34509 ssh2\nApr 12 13:55:31 sshd[11034]: Failed password for root from 43.255.190.162 port 35661 ssh2\nApr 12 13:55:31 sshd[11030]: Failed password for root from 221.229.166.27 port 44507 ssh2\nApr 12 13:55:32 sshd[11018]: Failed password for root from 43.255.190.183 port 49051 ssh2\nApr 12 13:55:32 sshd[11017]: Failed password for root from 43.255.190.156 port 50272 ssh2\nApr 12 13:55:34 sshd[11030]: Failed password for root from 221.229.166.27 port 44507 ssh2\nApr 12 13:55:34 sshd[11018]: Failed password for root from 43.255.190.183 port 49051 ssh2\nApr 12 13:55:35 sshd[11043]: Failed password for root from 43.255.190.156 port 45633 ssh2\nApr 12 13:55:36 sshd[11018]: Failed password for root from 43.255.190.183 port 49051 ssh2\nApr 12 13:55:37 sshd[11014]: Failed password for root from 210.220.248.162 port 42025 ssh2\n<\/pre>\n\n\n\n<p>Here&#8217;s an excerpt from iptables after fail2ban:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Chain fail2ban-ssh (1 references)\ntarget     prot opt source               destination\nDROP       all  --  210.220.248.162      anywhere\nDROP       all  --  221.229.166.27       anywhere\nDROP       all  --  43.255.190.183       anywhere\nDROP       all  --  182.100.67.113       anywhere\nDROP       all  --  43.255.190.156       anywhere\nDROP       all  --  43.255.190.162       anywhere\nDROP       all  --  43.255.190.145       anywhere\nDROP       all  --  218.87.109.60        anywhere\nDROP       all  --  43.255.190.160       anywhere\nDROP       all  --  43.255.190.177       anywhere\nDROP       all  --  43.255.190.161       anywhere\nDROP       all  --  43.255.190.151       anywhere\nDROP       all  --  43.255.190.186       anywhere\nDROP       all  --  43.255.190.150       anywhere\nDROP       all  --  222.186.51.228       anywhere\n<\/pre>\n\n\n\n<p>Here&#8217;s an excerpt from the Mycodo auth log. Its formatted by CSV, with the entry after NOUSER being the user name that the user attempted to log in with.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">2015 04 12 08:16:31, NOUSER, fungi, 23.233.2.92\n2015 04 12 13:39:44, NOUSER, #, 80.109.109.80, chello080109109080.16.15.vie.surfer.at\n2015 04 12 13:39:50, NOUSER, --, 80.109.109.80, chello080109109080.16.15.vie.surfer.at\n2015 04 12 13:40:02, NOUSER, ' or '1'='1, 80.109.109.80, chello080109109080.16.15.vie.surfer.at\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Update (7\/02\/2015)<\/h4>\n\n\n\n<p>Thank you to all who tested Mycodo while I enabled guest login on my system. I&#8217;ve received a lot of feedback that has greatly improved the system. Guest access is currently disabled while I test new features with the 3.5 experimental branch.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Affiliate links<\/strong><\/p>\n\n\n\n<p>I participant in the Amazon Services LLC Associates Program, an affiliate advertising program designed to provide a means for sites to earn advertising fees by advertising and linking to Amazon.com, and I make a commission for sales made through affiliate links posted on this website. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Update: A newer version of this project has been released. Read More &gt;&gt; There have been many initiatives undertaken to maximize mushroom cultivation productivity, and although variations exist between species, manipulation of environmental conditions has demonstrated some of the most dramatic effects on yield. Temperature, humidity, and carbon dioxide concentration have been identified as some [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":571,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,9,26,12],"tags":[],"class_list":["post-469","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-automation","category-cultivation","category-mycodo","category-raspberry-pi"],"_links":{"self":[{"href":"https:\/\/kylegabriel.com\/projects\/wp-json\/wp\/v2\/posts\/469"}],"collection":[{"href":"https:\/\/kylegabriel.com\/projects\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kylegabriel.com\/projects\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kylegabriel.com\/projects\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kylegabriel.com\/projects\/wp-json\/wp\/v2\/comments?post=469"}],"version-history":[{"count":0,"href":"https:\/\/kylegabriel.com\/projects\/wp-json\/wp\/v2\/posts\/469\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kylegabriel.com\/projects\/wp-json\/wp\/v2\/media\/571"}],"wp:attachment":[{"href":"https:\/\/kylegabriel.com\/projects\/wp-json\/wp\/v2\/media?parent=469"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kylegabriel.com\/projects\/wp-json\/wp\/v2\/categories?post=469"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kylegabriel.com\/projects\/wp-json\/wp\/v2\/tags?post=469"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}