OK, maybe I misunderstood the questions in your first post. Perhaps you weren’t asking about the GPIO stations. In any case, I think there were only 4 unused pins on the main PCF8574 — for DC-powered OpenSprinkler 3, it needs two additional pins from the main PCF8574 for voltage booster control, so including B1 and B3 these are 4 pins being used.
Also, because OS 3 uses two layer design, if you want to map any unused pin on the main PCF8574 to the bottom layer for zone control, it would have to be through the pin header between the top and bottom layers. I didn’t want to have that many pins between the two layers. And since the first version of OpenSprinkler, the main controller always has 8 and only 8 zones, so I just left the 4 unused pins on the main PCF8574 as is.
The current OpenSprinkler 3.2 uses a single PCA9555 on the bottom layer, so there is no more PCF8574. PCA9555 is more cost effective than two separate PCF8574s, and it can both source and sink large amount of currents, which is desirable. If you are interested in reading the design choices, I’ve just recently published a blog post about IO expanders (https://opensprinkler.com/i-o-expander-options/).
This may not be obvious at first: but leaving some unused pins can come quite handy when there is need to expand the controller’s functionality. For example, while AC-powered OpenSprinkler 3.2 leaves 7 unused pins on PCA9555, the Latch OpenSprinkler 3.2 uses all the spare pins because it needs several additional pins for controlling the H-bridge of the COM line, and controlling a 74HC595 shift register. So in a way it’s good that there were unused pins on PCA9555, as they have been necessary by the time that I designed the latch version.