Tuesday, December 29, 2009

Early Access: Damper Multiplexing

Subversion contains code that allows to control more than one physical damper per zone.

Configuration Guide had been updated accordingly (see Damper Controllers 7/8).

Wednesday, December 23, 2009

Early Access: Screen Sizes

Pressing + or - on the keyboard will now cycle the Swing GUI through all screen sizes officially supported by Android. Just in case.

Available from Subversion.

Tuesday, December 22, 2009

DZ 3.3.1 "Housekeeping" Release Is Out

Changes since 3.3-INTERFACE

  • Critical fix: BalancingDamperController was broken - "off by opposite", works now;
  • Bugfix: dampers will now stay open when the HVAC unit is not running, like it was supposed to be to begin with;
  • Servos can now be calibrated and reversed, see detailed instructions in Configuration Guide.

Servomaster released


This is a maintenance release. No significant changes other than finally removing all System.*.println and adjusting log levels to avoid scaring unsuspecting users with transition controller completions.

Monday, December 21, 2009

Early Access: Servo Calibration

Every servo is different, same goes for servo controllers.

Subversion now contains code that allows you to

  • Reverse the servo movement if your mechanical design requires it;
  • Provide servo min/max range calibration for controllers that support it;
  • Provide limit calibration for controllers that don't.
Configuration Guide will be updated with instructions shortly, for now, take a look at DamperFactory source code and use Spring IoC techniques to configure calibration entities.

Thursday, December 17, 2009

Hardware: SheevaPlug


Just bought the SheevaPlug development kit from Globalscale. Will start working on putting DZ3 on it as soon as it arrives (estimate wait is 2-3 weeks).

Feedback from people that have used this device indicates that it is not really usable without external hard drive (either network mount or external USB), you may want to keep that in mind if you decide to follow suit.

On the other hand, changes that are planned for DZ will make disk unnecessary, so you may want to hold that off if running DZ is the only thing you are planning to buy this device for.

Bonus feature for external USB drive would be to find an enclosure that is able to report the disk temperature via smartctl or hddtemp - if you find one, please let me know.

Wednesday, December 16, 2009

DZ3 Configuration Walkthrough

Beware: this is an experiment, and work in progress (I'm writing the presentation as you're reading it). Just following the "release early, release often" policy to maximize the chance of getting useful feedback in time.

UPDATE: Restriction on minimal font size in your browser will affect the presentation view in the small window - maximizing it will fix the issue.

UPDATE: Permanent location for the configuration guide (this one and subsequent): http://www.homeclimatecontrol.com/configuration-guide

The Competition: iComfort™

The Zone Control Blog posted a reference to iComfort™ Communicating Thermostat.

This is the most comprehensive Web application that I've seen so far. There is a demo you can play with (follow the link, there's a username and password for the demo).

The demo vividly reminds me of my experience working with Google Checkout API. Don't know what it is today, but back when I was working with it the callback deadline was 3 seconds.

Three seconds.

You blow the deadline, you don't exist for the Checkout engine, and your customer pays default shipping rate, not the shipping rate that applies to the product you're selling. Oversize product? Extra heavy product? Your problem, you blew the deadline. Go away, you don't exist.

Call me arrogant, and don't forget to throw rocks at me and stick it to my face when the DZ Web application is up and running.

Poll Questions Updated

This project's development is driven by what you want. I can't know what you want unless you tell me. Taking a poll is the fastest way I can hear your voice.

Your vote counts.

If there are things tat you would like to tell me that are not in the poll, please comment on this post, or join the mailing list.

FAQ: minimal sensor hardware

Q: What is the minimal set of sensor hardware do I need to run DZ on?

A: With some luck, you already have it. Look for a DZ entity called ShellSensor, it will allow you to use information provided by lm_sensors or hddtemp to feed the rest of DZ on.

Tuesday, December 15, 2009

DZ 3.3 "Interface" Release Is Out

How To Activate The Interface

This is the configuration snippet that makes it happen:
<bean id="console"
<constructor-arg index="0" type="java.util.Set">
<ref bean="(your-thermostats-here)" />

Right now, only thermostats are supported. Later, all sorts of entities will be supported along with thermostats - just like it's been happening with loggers and JMX instrumentation.

How To Make Sense Out Of It

DIY Zoning Console

There's quite a few things that you see there.
  • There are six zones configured;
  • You're looking at the leftmost;
  • The name of this zone is "Bedroom"
  • Current temperature is 19.6°C - it'll be too cold if it was in Fahrenheit;
  • Setpoint is 20°C;
  • This zone is configured in heating mode - setpoint font is red;
  • Schedule will not affect this zone's setpoint - this is what the lock icon is indicating, also the orange vertical stripe on this zone's bar on top;
  • This zone is not voting (more about it below) - this is what the stop icon is indicating, also the dark red vertical stripe on this zone's bar on the top;
  • Second and third zones from the left are also on hold (orange vertical stripe);
  • Second and third zones from the left are not only on hold, but are also off (bar icons are not green but gray);
  • Fourth from the left zone is not voting, just like the first;
  • Fourth from the left zone is outside of tolerance, a.k.a. "calling" (the bar is yellow, not green);
  • Rightmost zone's sensor is faulty (the bar on top is dark red).
Background will also change depending on current operating mode, whether the HVAC unit is working, and where exactly the current zone is within the tolerance limits, but one picture is worth a thousand words - you'll see what I'm talking about when you watch it work.

Fair warning: the background behavior will change in future releases, don't get used to it too much.

How To Control It

The only way to control the application at this time is with keyboard shortcuts:
  • Left/Right arrows change the currently selected zone;
  • Up/Down arrows change the setpoint for the currently selected zone;
  • H puts the zone on hold or takes it off it;
  • V toggles voting status;
  • O toggles the zone on and off;
  • C and F toggle display between Celsius and Fahrenheit for all zones.

What Is "Voting"?

Simplest explanation is this: you won't want to turn on the HVAC because the temperature in your walk-in closet is too high/low, but if the HVAC already working, it'll be nice to have the temperature in the closet decent enough before it stops. A good reason to have a non-voting zone in the first place is that it is by implication a dump zone.

Look At The Bars Again

DIY Zoning Console
Upon close consideration, you might notice that each zone bar has a level indicator. It shows where within te tolerance limit each zone is, so you will have a good understanding how your whole house feels just by looking at this contraption.

One of reasons this is done this way is an observation on how people behave given dull thermostat reaction to slowly changing conditions (this haunts everyone in mid-season): sometimes it takes hours for your thermostat to realize that the temperature's been a hairdrop from triggering the HVAC all along. And what unhappy people do is start pressing buttons hoping to coax their thermostat to make something happen - even if it was already about to do that anyway. And of course, then they complain that now it's too cold or hot, and have to "fix" thermostat settings again.

With this display being there, they will hopefully see what the system is about to do and, knowing that, will have less inclination to fiddle with it, upsetting the balance.


Silk icon set by Mark James was used in this release.

Monday, December 14, 2009

The Competition: X300™

A representative of an interesting product family.

I don't quite understand the rationale for feature set selection - the device supports

  • Eternet connector (very nice),
  • relays (very nice),
  • email alerts (that I can understand),
  • Modbus/TCP (that's an impressive industrial protocol, but I don't remeber any home automation application that suports it),
  • SNMP (same as Modbus),
  • BASIC interpreter (why would anyone want that today???),
  • but just 8 sensors. Eight? While using DS18B20, implying 1-Wire, which is potentially unlimited? You're kidding. I'd say this is a deal breaker.
Tihs device smells of an identity crisis to me - ask yourself a question, who is the consumer of this device? Too heavily loaded with industrial features for consumer market, too limited hardware for industrial. Or maybe the overall state of affairs in industrial applications is more grim than I thought.

This is the only device to date (that I have found so far) that has a mobile application. Or, should I say, has a picture of an application running on an iPhone - App Store search yielded no results, and there were no application links that I could find.

Saturday, December 12, 2009

Early Access: Usable GUI Again

Subversion contains code for still ugly GUI that can do three things right:

  • Display the zone name, current temperature and setpoint for the selected zone;
  • Flip back and forth through zones (left/right arrows);
  • Change setpoint for the currently selected zone (up/down arrows).
There are also subtle visual cues to what the system is currently doing, and there will be more and more as time goes by.

New features would be available via keystrokes. Feel free to try all keys on the keyboard, you're unlikely to break something and you'll see what's happening. There's a good time that by the time you read this, hold, voting, off and Fahrenheit vs. Celsius switches will be already implemented.

No mouse interaction other than gestures (drag left, right, up and down) and possibly a right click menu will be provided. It is planned that all major features will be available via single key press - or there will be advanced interface for the feature that will not be a part of the GUI.

Tuesday, December 8, 2009

Saturation Limit, Configuration Testing and Other Disasters


This is what happens when you forget to specify the saturation limit. P=-1, I=-0.0000002, D=0, no saturation limit is specified. Oops...

Wonder how many hours it'll take to get back in shape - no big deal, since HVAC is not controlled by DZ at this time, tit's just working as a testbed at this location. But a runaway condition like that on real hardware would have cost you a pretty dime, and possibly damaged hardware.

A saturation limit of, say, 3 would've fixed the situation.

Which brings up a question - how do you test configuration changes without jeopardizing very expensive hardware? The answer is trivial - you clone control elements of the configuration, use elements that havbe been tried and found correct to control the hardware, and use untested elements for monitoring only. Yes, there will be differentces between real behavior and tested behavior later due to the fact that control outputs from elements out of feedback loop (actual hardware control) are ignored, but you will at least get a rough idea of how they will perform.

The Competition: Advanced Temperature Control

Doesn't quite look in the same weight category as DZ, but it is. DZ, despite being all primitive and DIYy, is limited only by hardware. Give it commercial class hardware - get commercial class performance.

Just give me a second to finish the UI, all right? :)

Speaking of which, they have a nice touch screen as well.

(Image: Control4)

UPDATE (2012/02/22): All links are gone. Cursory search on their site doesn't produce anything close to original results, so I've decided to just leave them as is, for those with enough time to investigate. Oh, and by the way, DZ has a shiny UI now as well.

Monday, December 7, 2009

DZ 3.2.2 "Humidor" Release Is Out


Added ability to use a humidity sensor based on com.dalsemi.onewire.container.HumidityContainer to operate a humidifier and/or dehumidifier.

This is a snippet of configuration that makes it work:
<bean id="device_factory"
<constructor-arg index="0" value="/dev/ttyUSB0" />
<constructor-arg index="1" value="regular" />

<bean id="humidity_sensor-6500000055FF1A26"
<constructor-arg value="6500000055FF1A26" />
The humidity_sensor-6500000055FF1A26 bean is further used to feed te thermostat bean that is, however, not controlling the heating or cooling device, but a humidifier or dehumidifier instead - the control chain is identical.

UPDATE: It was reported that there is at least one humidity sensor reported as a temperature sensor - the HT3-R1-A board. In this case, you don't even need to change the factory-method attribute.

Sunday, December 6, 2009

DZ3 As A LEGO Construction Set

Q: Can I use DZ3 to run a humidifier?

A: Yes.

Q: Can I do it so the humidifier runs only when the furnace is on?

A: Yes, but some tinkering with relays is necessary today.

Q: But it is not documented!!!

A: So what? There's a thousand things that DZ3 is supposed to do when it is done and finished, most of them unpublished for this or that reason (sometimes as simple as "I didn't get to writing about that yet").

The architecture was intentionally created as generic, transparent and extensible and as possible, and if you want to do something that hasn't yet been documented as "released", sometimes all you have to do is to take a second look at components that are already available.
So, back to the original question, how do you run DZ as a humidifier? You use the OwapiDeviceFactory with getHumiditySensor (I don't remember if I even implemented it yet, but even if I didn't, it's a no-brainer change - look at how getTemperatureSensor is implemented. In any case, it'll be in within a couple of days for sure UPDATE: fixed). Then you feed the output of that sensor into a virtual thermostat - but with the setpoint being a humidity, not temperature. The rest of the chain is obvious - just like with heating and cooling, only this time the output device is the humidifier.

Q: Can I use DZ3 to run a dehumidifier?

A: Yes, invert P and I components of the thermostat PID controller.

Saturday, December 5, 2009

Not Quite Competition: What Other Geeks Do

A pretty long article comes with the picture. The device resolves as Programmable Communicating Thermostat. Just like with ENV-VST-C, California Title 24 is mentioned.

They call the interface simple, but I think it recembles the DZ1 interface (scroll down a bit to find it, it has an unmistakably mainframe feel to it).

Whereas other manufacturers loudly proclaim "money saving features" with pretty vague claims of "up to" "if used correctly", I have a gut feeling that this device does indeed have an emphasis on actual energy conservation.

(Image: Physorg)

The Competition: ecobee

Pretty interesting feature set, including Internet access. Features are well documented, with video presentations. Site navigation is pretty crowded, though, be careful not to miss important links just below the green header.

Terms of sale call for advanced law degree, which makes me a bit nervous.

(Image: ecobee)

The Competition: Emme


Allegedly coming April July August 2010, reservation is encouraged.

Favorite quote (emphasis mine):

Three wireless temperature sensors...
(Image: Emme)

The Competition: ENV-VST-C

Apparently, doesn't support zoning per se. On the other hand, lots of interesting features, and pretty complete documentation. Along with other interesting things.

Some things in it are hilarious, though - I'm still waiting for feedback from a HVAC expert on some of them, will publish conclusions when I get it back.

In any case, merits thorough investigation. I don't think you can buy it though - let me know if you learn otherwise.

(Image: AMX)

New Label: Competition

Lately, I'm finding quite a few new designs that weren't around last time when DIY Zoning was in active development. Keeping the traditions of full disclosure, I'm planning to publish links to products and/or product reviews that are in direct competition to DZ - let's face it, not everyone is a DIY type, but everyone needs to stay cool (or warm, pick your poison).

So, there: http://diy-zoning.blogspot.com/search/label/competition.

Friday, December 4, 2009

The Competition: Honeywell Prestige HD

The best things to do with competition are to know them and to respect them.

Here's what our competition is, sort of:

Honeywell Prestige HD Thermostat

Go read the Honeywell Touchscreen Thermostat and Portable Remote Review and keep in mind that there is a subtle distinction between Prestige HD and Prestige SD (about a hundred dollars or so).

Then go do some shopping (zoning system not included) and hopefully come back - if not today, then in a few weeks or months when the GUI (and other unannounced bells and whistles) is back to its former glory and beyond, for the price of Prestige with comparable feature set is steep indeed.

By the way, DZ is going to look nothing like Prestige :)

UPDATE: This is what it looks like. This is what it looks like :)
Favorite quote from the Homeowner Brochure (emphasis mine):
You can even name each of your zones on the Portable Comfort Control by having your contractor customize it with more than 60 different naming options - upstairs, master bedroom, office - even wine cellar and home theater!
(Image Credit: Gizmodo.com)

Early Access: Swing GUI Back From The Dead

Subversion contains code for extremely ugly GUI that is able to do one thing: display current and setpoint temperature for all configured zones, and change color depending on whether DZ is configured for cooling and heating mode and whether the zone is calling.

Ugly or not, it sure beats using JMX to see the current temperature and setpoints.

Here's a configuration snippet that makes this happen:

<bean id="console" class="net.sf.dz3.view.swing.Console"
<constructor-arg index="0" type="java.util.Set">
<ref bean="thermostat-6500000055FF1A26" />
<ref bean="thermostat-0500080021C9B810" />
Not just thermostats may be added, but any DZ objects - if they can't be displayed, they will be simply ignored with an error message in the log.

Next Step

Providing controls to change the setpoint, of course. Working on it.

Thursday, December 3, 2009

Note on Register Mechanical Design

Register controlled by Futaba S3003 servo
I've just been told by one of DZ users that his design uses about 90° of servo motion to move from totally open to totally closed position. My kneejerk reaction was -

Design your registers so 180° of servo travel is necessary to move the damper from fully closed to fully open position.
Primary reason for this is that the torque required from the servo is proportionally less, hence, less stress, longer usable life and quieter operation - servos are becoming to growl as the load goes up, and as their age goes up.

There are several things you need to keep in mind when you're designing products using servos.

Servo range of motion

All servos, being analog devices, are different. Normally, servos are supposed to work with PWM control signal being between 200μsec and 2000μsec, but there are instances that can go as low as 160μsec and as high as 2300μsec.

Servo controller signal range

Not all servo controllers are created equal, either. Some of them support advanced range limiting and calibration options, some of them are incapable of producing anything other than a predefined range of signals with no calibration options whatsoever - the only calibration option would be to design the device in such a way that the servo travel is artificially limited, and later use software controlled range limiting to make things work properly.

Hardware vs. Software

DZ3 will support both range limit and calibration within coming weeks (DZ2 supported it already, and it's just a matter of porting it over), so your hardware (both servos and controllers) is the only limitation for your design.

On the picture: existing register designed to utilize 180° of servo travel.

FAQ: Switch Between Heating & Cooling

Q: How do I switch DZ into heating or cooling mode?

A: For cooling, values of P and I for the PID controller associated with the thermostat have to be positive, for heating, negative.

IMPORTANT: Make sure that P and I values for all thermostats are on the same side, and that they are synchronized with the operation of the actual HVAC device, or you will have a runaway condition in zones that are on the wrong side. In other words, your HVAC will run forever.
Q: Why is it so complicated?

A: Because it makes things much, much simpler in the bigger picture, the time for which hasn't come yet - but I'm working on it.

Are you ever going to make it so normal people can use it?

A: Yes.

FAQ: Thermostat Sensitivity

Q: Default thermostat settings cause too much of a temperature swing, how do I make my thermostat more sensitive?

A: You increase the value of P for the PID controller associated with this thermostat. Default value of P (1.0) corresponds to a deadband from 1°C below the setpoint to 1°C above. Increasing P to 2 will cause that to change to a range from 0.5°C below the setpoint to 0.5°C above.

Likewise, if you want to dumb down your thermostat because the HVAC switches on and off too often, you need to decrease the value of P. However, be careful, for short cycling (the HVAC term for this phenomenon) may have different causes - but you'll be able to easily see the cause for them on charts DZ generates.

Q: Will there be a UI control for that?

A: Yes.

Wednesday, December 2, 2009

DZ 3.2.1 Maintenance Release


  • Race condition was preventing normal initialization of Parallax and possibly other serial servo controllers;
  • NaN damper position was being generated in BalancingDamperController, passed down to dampers and accepted by them under some circumstances.


  • OwapiDeviceFactory now reports devices present on 1-Wire bus via JMX;
  • Damper controllers now support JMX insrumentation.