The Stoker is a really well engineered device. Any BBQ’ing hacker type will appreciate the implementation.
My setup is as follows:
- Egg with one Grid Probe to monitor cooking temperature (probe wire wrapped in aluminum to prevent heat damage in case of flare up)
- One or two meat probes (or three, if needed) to monitor internal temperature(s) of food item
- One 5 CFM fan controlled by the Stoker
- Ethernet cable between an AirPort Express and the Stoker. While the Stoker has a fairly easy to use menuing system, it has a built in web server that offers up a much better GUI for monitoring and adjusting the cook.
Now, that sounds like a lot of potential “get the right wire in the right hole” problems. It isn’t. The Stoker uses a single wire serial network to connect to each external device. As such, it has 5 1/4″ stereo plugs on the unit and you can plug any device into any plug. Each device has a unique identifier and the Stoker will recognize any device no matter where it is plugged in.
This has a number of advantages:
(1) Obviously, you don’t have to worry about connecting things incorrectly.
(2) The “network” is stupid simple. To build an extender or to connect more devices is just a matter of adding more 1/4″ stereo plugs in parallel. Soon, my Stoker will be hidden away in a utility closet with a few feet of cheap cable leading to a breakout box of 1/4″ jacks.
(3) Expansion is trivial; just add more plugs. I think the Stoker can handle up to 32 devices. In other words, I can control more than one grilling device with a single stoker.
(4) The Stoker pushes data from analog to digital very quickly. Data tends to be more accurate because there is less analog stuff to get out of whack. Likewise, this increases flexibility.
The serial bus, the ethernet port, the menuing system, and the web GUI implies that the Stoker is not just a simple analog controller. And it isn’t.
When I first received the unit, I powered up the unit, dropped it on my home LAN and port scanned it. Actually, the first thing I did was use the front panel to tell the unit to set the date/time via NTP!
The port scan revealed that there were several more ports open beyond port 80.
Port Scanning host: 10.0.1.6 Open TCP Port: 21 (ftp) Open TCP Port: 23 (telnet) Open TCP Port: 80 (http) Open TCP Port: 12346 (????)
Interesting; the box has both ftp and telnet ports open. And mystery port 12346?
Obviously, the first thing to do is telnet to the Stoker:
% telnet 10.0.1.6 Trying 10.0.1.6... Connected to 10.0.1.6. Escape character is '^]'. Welcome to slush. (Version 1.16) tini04952a login:
A login prompt! Neat! I have not a clue as to what accounts might be on the Stoker. That isn’t true, actually. I know that it is running something called “slush” and the login is identified as a “tini04952a”.
Plugging the two into Google doesn’t reveal anything, but dropping the “04952a” from the search terms hits a treasure trove of information.
In particular, it indicates that the Stoker appears to be implemented using a Maxim/Dallas Semiconductor TINI controller. Too Cool!
So, the Stoker is based around:
The TINI platform is a microcontroller-based development platform that executes code for embedded web servers. The platform is a combination of the broad-based I/0, a full TCP/IP stack, and an extensible Java runtime environment that simplifies development of the network connected equipment.
Reading through the manuals reveals that a typical Tini configuration includes two user/password combinations;
% telnet 10.0.1.6 Trying 10.0.1.6... Connected to 10.0.1.6. Escape character is '^]'. Welcome to slush. (Version 1.16) tini04952a login: root tini04952a password: tini04952a />
Cool. Now what? Beyond the login info, the Tini Specification and Developer’s Guide contains a trove of information about the slush shell and commands that should be present. The Stoker appears to be missing many commands, including those used to explore the filesystem. I don’t believe this is for security reasons as much as it is to maximize memory available to the Stoker’s custom Java control program (which is pretty rich!).
I can see the processes running on the device, though:
tini04952a /> ps 3 processes 1: Java GC (Owner root) 2: init (Owner root) 3: /flash.tini (Owner root)
I exchanged email with John — the owner of Rock’s BBQ, maker of the Stoker — and he pointed me to this forum post which describes how to log in to the Stoker and put the bbq control program into “logging mode”.
tini04952a /> bbq -k bbq stopped tini04952a /> gc tini04952a /> bbq -st bbq: create stoker: stoker stoker: db stoker: lcd stoker: sw stoker: controller stoker: www bbq: start tini04952a /> stoker: start query: begin add: stoker.Sensor_Entry@6e684a8 add: stoker.Sensor_Entry@a510340 add: stoker.Sensor_Entry@afdae60 add: stoker.Switch_Entry@bcd8a3b set_switch:D20000116F0B2530+DC0000002C96A005 set_switch:stoker.Switch_Entry@bcd8a3b+stoker.Sensor_Entry@a510340 set_switch:A30000116F1AD330+DC0000002C96A005 set_switch:stoker.Switch_Entry@bcd8a3b+stoker.Sensor_Entry@afdae60 SEN:3 SWT:1 370000116F1AC930: 3 17 62.6 -6.3 0.2 0 0.7 0.5 16.1 60.9 D20000116F0B2530: 3 17.4 63.3 -6.9 0.2 0 0.7 0.5 16.1 60.9 67108864 67108864 100 A30000116F1AD330: 3 16.8 62.2 -7.5 0.2 0 0.7 0.5 15.1 59.1 query: begin SEN:3 SWT:1 370000116F1AC930: 3 16.9 62.4 -6.3 0.2 0 0.7 0.5 15.9 60.7 D20000116F0B2530: 3 17.5 63.5 -6.9 0.2 0 0.7 0.5 16.2 61.2 67108864 67108864 100 A30000116F1AD330: 3 16.8 62.2 -6.9 0.2 0 0.7 0.5 15.4 59.8 query: begin SEN:3 SWT:1 370000116F1AC930: 3 17 62.6 -6.3 0.2 0 0.7 0.5 16.1 60.9 D20000116F0B2530: 3 17.4 63.3 -6.3 0.2 0 0.7 0.5 16.4 61.6 67108864 67108864 100 A30000116F1AD330: 3 16.8 62.2 -6.9 0.2 0 0.7 0.5 15.4 59.8
The Stoker is now logging probe data. The last number in the line with all the space separated data is the current temperature for that probe. I have no idea what the rest of the numbers are (yet). Interestingly, the “bbq” process doesn’t seem to show up in the list of processes running via “ps”.
Very interesting stuff. Now that I have the full SDK and instructions for building Tini apps from Mac OS X, I have quite a few options open to me. I’m particularly interested in figuring out how to both monitor and control the device in a fashion that could be integrated into a Cocoa app. I could just scrap HTML, but I hate scraping HTML.
However, first things first, I am going to use the Stoker and the BGE to cook about 40 lbs of pork butt.