đź”´ Note: You are 100% responsible for ensuring safe food practices are followed.
đź”´ Check and modify temperatures as appropriate
- Problem Statement
- Design
- Equipment
- Requirements
- Installation
- Software Setup
- Using iGrill Mini
- Grill Setup
- Running
- Lighttpd Setup
- Project Notes
- iGrill Smoker Board Rev. *A
- iGrill Smoker Board Rev. *B
- iGrill Smoker Board Rev. *C
- iGrill Smoker Board Rev. *D
- iGrill Smoker Board Rev. *E
Create a low cost smoking unit that can be controlled/monitored via the internet.
See the design document.
Prices as of June 10th, 2019. Some items like the hotplates or skillet can be found at Goodwill instead. Total cost (new) $287.96. Every item can be used for more than one task. Meat, wood chips, and extension cords not included.
- Weber Grill - $109
- iGrill2 - $64.99
- Hotplate - 2x @ $12.96
- TP-Link Kasa - $14.69
- Raspberry Pi - $34.49
- SD Card - $3.99
- Skillets - 2x @ $10.93
- 8 inch rings - 2x @ $6.51
You must have:
- Raspberry Pi 3
- TP-Link Kasa
- iGrill2 or iGrill3 (iGrill mini coming soon for time based smoking)
Optional items:
- LEDs with current limiting resistors
- Speaker with 3.5 mm stereo jack input
Note: This has been tested using a Raspberry Pi B 3 with Raspian Stretch. Your milage may vary.
This guide assumes you've done the basic setup of network and updated the system on your Raspberry Pi. Remember, you probably want to enable ssh access. You must have your iGrill ready to complete the installation and setup. This does require python 3 to be installed.
Either download and run auto-install.sh
from the installation directory or run the following commands:
git clone https://git.kins.dev/igrill-smoker
cd igrill-smoker/install
bash run-install.sh
After starting the run-install.sh
script, you should turn on your iGrill v2. Installation shouldn't take long and the device is needed for setup.
Copy config/iGrill_config.example.ini
to config/iGrill_config.ini
. Update iGrill_config.ini
with any system settings you want to change.
Here is what that file looks like:
# Copyright (c) 2019: Scott Atkins <scott@kins.dev>
# (https://git.kins.dev/igrill-smoker)
# License: MIT License
# See the LICENSE file
[iGrill]
# can be Standard or Mini
Type=Standard
[Probes]
# For iGrill mini set food probe to 0 and smoke probe to 1
# Food probe must be set between 0 and 4, where 0 means the
# probe is disabled. The left most probe is 1 and right most
# is 4 on the iGrill 2/3
#
# If you disable the food probe, you must use a stage that
# is iGrill mini compatible (see stage file) or disable stages
FoodProbe=1
# Smoke probe must be set between 1 and 4. The left most probe
# is 1 and right most is 4 on the iGrill 2/3
SmokeProbe=4
[Logging]
LogLevel=INFO
LogFile=
[Kasa]
# Name of your plug in the Kasa app, case sensitive
Name=iGrill-smoker
[Smoking]
MaxTempChange=2
TempBandSize=7
# Can be the name of any file in the stages directory (excluding the .sh) or None
Food=brisket
# Only valid if Food=None
SmokeMid=225
InternalTarget=185
[Reporting]
# time in seconds between polls of the iGrill
# faster polling means more power use
PollTime=20
ResultsDirectory=/var/www/html
CSVFile=current.csv
StateFile=state.json
Edit the chart.html file in the website_example directory to suit your needs and copy it to your /var/www/html
directory.
The iGrill mini has a single probe. That means you can either monitor the smoke temperature or the food temperature. Since this is controlling a plug for the smoke, you should not monitor the food temperature via the iGrill mini probe. Follow the instructions in iGrill_config.example.ini for setting the probe values.
Start a smoking session by running:
./start_smoking.sh
Secure your instance of lighttpd using the instructions at https://github.com/galeone/letsencrypt-lighttpd/blob/master/renew.sh. You may want a wildcard certificate and you can find instructions via https://asknetsec.com/generate-lets-encrypt-free-wildcard-certificate-using-certbot-ubuntu-16-04/. Check your SSL setup via https://www.ssllabs.com/ssltest/index.html.
Also, it may be a good idea to setup lighttpd such that *.csv
/*.json
is not cached. Here's an example lighttpd config file:
server.modules = (
"mod_expire",
"mod_access",
"mod_alias",
"mod_compress",
"mod_redirect",
"mod_setenv",
"mod_dirlisting",
)
server.document-root = "/var/www/html"
server.upload-dirs = ( "/var/cache/lighttpd/uploads" )
server.errorlog = "/var/log/lighttpd/error.log"
server.pid-file = "/var/run/lighttpd.pid"
server.username = "www-data"
server.groupname = "www-data"
server.port = 80
index-file.names = ( "index.php", "index.html", "index.lighttpd.html" )
url.access-deny = ( "~", ".inc" )
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
compress.cache-dir = "/var/cache/lighttpd/compress/"
compress.filetype = ( "application/javascript", "text/css", "text/html", "text/plain" )
# default listening port for IPv6 falls back to the IPv4 port
## Use ipv6 if available
#include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
# SSL Config
$SERVER["socket"] == ":443" {
protocol = "https://"
ssl.engine = "enable"
ssl.ca-file = "/etc/lighttpd/fullchain.pem"
ssl.pemfile = "/etc/lighttpd/wildcard.cert.pem"
setenv.add-environment = (
"HTTPS" => "on"
)
setenv.add-response-header = (
# Allow cross domain access
# Safari requires *
"Access-Control-Allow-Origin" => "*",
# Used to identify the server based on headers
"Server" => "Server name",
# Set timeout for ssl access
"Strict-Transport-Security" => "max-age=15768000;"
)
# Mitigate BEAST attack:
#
# A stricter base cipher suite. For details see:
# http://blog.ivanristic.com/2011/10/mitigating-the-beast-attack-on-tls.html
ssl.cipher-list = "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256"
# Make the server prefer the order of the server side cipher suite instead of the client suite.
# This is necessary to mitigate the BEAST attack (unless you disable all non RC4 algorithms).
# This option is enabled by default, but only used if ssl.cipher-list is set.
ssl.honor-cipher-order = "enable"
# Mitigate CVE-2009-3555 by disabling client triggered renegotiation
# This is enabled by default.
ssl.disable-client-renegotiation = "enable"
ssl.ec-curve = "secp384r1"
ssl.use-compression = "disable"
# Disable SSLv2 because is insecure
ssl.use-sslv2 = "disable"
# Disable SSLv3 (can break compatibility with some old browser) /cares
ssl.use-sslv3 = "disable"
}
# Prevent caching of json/csv files
$HTTP["url"] =~ "/.*\.(json|csv)$" {
expire.url = (
"" => "access 0 seconds",
)
}
1.3 Uses TP-Link Kasa for power control. 1.4 includes a brand new power control board that plugs into the Raspberry Pi which will allow much more fine grain control of the smoker temperature.
This is necessary because the relay in the TP-Link won't handle the number of on/off cycles required. Instead a solid state relay is used. A word of caution, this is not UL rated or certified. If you don't know which end of the soldering iron to hold, then you probably should just stick with 1.3.
The TP-Link Kasa plug will still be used as a failsafe device in the system.
This board has a buzzer, two LEDs and connection points for the solid state relay. It sits off the edge of the Raspberry Pi GPIOs.
This board should not be used.
Features
- Two LEDs
- Buzzer
- Small design
Defects
- The spacing for the resistors is off
- Hard to hand solder
- Hangs off the board the wrong way
- Red LED stays on due to leakage current
- Leakage current to the SSR
- Header (2x20): DigiKey $1.94
- LED (Green): DigiKey $0.36
- LED (Red): DigiKey $0.15
- Resistors (100 ohm x2): DigiKey $0.10
- Buzzer: DigiKey $0.68
This board has a buzzer, two LEDs and connection points for the solid state relay. It sits on the Raspberry Pi GPIOs.
This board should not be used.
New Features
- Sits over the Pi with mounting holes
- Board auto detect works
- Buzzer switch
Defects
- The spacing for the resistors is off
- The QR code doesn't always read correctly
- The solder mask makes it hard to read the @ symbol
- Red LED stays on due to leakage current
- Buzzer makes a sound when it shouldn't
- Leakage current to the SSR
- Header (2x20): DigiKey $1.94
- LED (Green): DigiKey $0.36
- LED (Red): DigiKey $0.15
- Resistors (100 ohm x2): DigiKey $0.10
- Buzzer: DigiKey $0.68
- Switch: DigiKey $0.43
This board has a buzzer, two LEDs and a terminal block for the solid state relay. It sits on the Raspberry Pi GPIOs.
This board is currently in production and has not been tested.
New Features
- NPN transistors to remove leakage
Fixes
- QR Code
- Resistor spacing
- Solder mask changed to silk screen for fine pitch
- Using suggested design for the buzzer
Defects
- Leakage current to the SSR
- Missing resistors on NPN transistor base (good design practice)
- Header (2x20): DigiKey $1.94
- LED (Green): DigiKey $0.36
- LED (Red): DigiKey $0.15
- Resistors (100 ohm x3): DigiKey $0.10
- Buzzer: DigiKey $0.68
- Switch: DigiKey $0.43
- Transistors (NPN x3): DigiKey $0.19
This board has a buzzer, seven LEDs and connection points for the solid state relay. It sits on the Raspberry Pi GPIOs.
The boards back from production are bad
New Features
- Five new LEDs for temperature monitoring
- Surface mount parts
- Mosfet transistors so a resistor is no longer needed
- Transistor to prevent SSR leakage
- Cheaper parts
Defects
- Silk screen issue
- QR Code issue (too small, inverted on back)
- Transistors wired backwards
TODO: Add part list
This board has a buzzer, seven LEDs and connection points for the solid state relay. It sits on the Raspberry Pi GPIOs. It also has jumpers for a board id number
This board is not yet in production and has not been tested.
New Features
- New QR code
- Pull down resistors for all transistors
Defects
- None found yet
TODO: Add part list