What's in the pipeline?


Senior Member
I took a hiatus from my Home Automation system (just enjoyed the fruits of my labour) and spent the last year with my other love, namely hiking. Before the winter hiking season gets into full swing, I've returned to my HA system and developed a few new things that I will be releasing, as well as a few modules I created in the past. Here's what's in the pipeline:

HAI Omnistat 2
This driver has been working for over a year and provides control over most everything the Omnistat offers (i.e. dozens of properties including scheduling). The only thing it does not have is an AutomationBrowser UI for the scheduling portion. My thermostat is located in a high-traffic area so it lights up when we pass it and we easily notice its background colour. My EnvironmentCanada module monitors Weather Warnings/Watches and alters the Omnistat 2's background accordingly. The Omnistat's background is set to red when there's a Warning, yellow for a Watch, green when the Warning/Watch has ended, and back to blue when all Warnings/Watches have expired. It also displays a short description of the Warning or Watch (in addition to the exterior temperature gleaned from my Wunderground PWS module).

This driver works with VoiceModems and reports CallerID information. Not sexy but it gets the job done. I no longer use it because I've switched to VOIP.

This is a utility tool that can 'rebind' a Device to its Home objects. When you upgrade a device's module you typically lose the device and all its bindings. Rebinding some devices can be tedious and ReBinder automates this chore. Rebinder also reestablishes other properties such as Network (i.e. the COM port used by the Device) and whatever is an ObjectRef (i.e. pointers). Each time you run ReBinder, it makes a time-stamped folder containing one script for each device that, when executed, rebinds the Device. Even if you have no need for ReBinder, it serves as a nice example of Premise's ability to have scripts generate other scripts (i.e. code that builds more code).

This module introduces Door, Window, and GarageDoor that provide superior models of real-world doors and windows because they support multiple bindings. For example, a Composite Door can bind to a DoorSensor, Lock Sensor, Lock Opener, and Lock Closer. Composites also incorporate all functions found in the DoorMinder module and provide a full AutomationBrowser UI that displays daily opening/closings, and the ability to lock/unlock a door (open/close a garage door).

Obihai Obi110
This driver was developed in collaboration with etc6849. The Obi110 is a VOIP telephone adapter and the driver reports inbound and outbound calls. Premise does not have the ability to use UDP to listen to a port (only TCP) so etc6849 developed 'middleware' in the form of a Perl program that listens via UDP and reports via TCP. The Obihai's status messages are very verbose so we developed a simplified reporting protocol for the middleware. As a result, Premise's driver has less junk to process. I also added the ability to activate up to ten ScriptMacros via the telephone. Pick up your house phone's handset, dial *#275# and that will activate ScriptMacro number 2 and pass it a value of 75 (i.e. set a light to 75% brightness or set a thermostat to 75 F).

CallMonitor maintains a log of inbound and outbound calls when used with the Obihai device (inbound only when used with the CallerIDModem). It displays its logs via AutomationBrowser and Minibrowser. It can also report missed-calls (calls from specific callers received but unanswered while we are home) if used with the Contacts module.

This module is an enhancement to the CallMonitor module. It allows CallMonitor to create a list of all contacts based on the information it collects from inbound/outbound calls (i.e. a self-populating list of contacts). You can flag a contact so that if his or her call goes unanswered (i.e. missed-call), CallMonitor will report it (via email, announcement, etc). Contacts also allows CallMonitor to display calls using a custom name, of your choosing, as opposed to the supplied Caller ID Name.

Enhanced UI Controls
When creating user-interfaces for a module, there a few UI Controls that Premise lacks. This module introduces ChildrenListBox and BoundPropertyInputBox. ChildrenListbox displays child-objects in a selectable list (derived from Premise's existing ChildrenComboBox). BoundPropertyInputBox (BPIB) was an S.O.B. to develop but it was sorely needed. It displays an editable text box that, when clicked/touched, displays Premise's pop-up keyboard and allows the user to alter the text box's contents. You don't need to do add any scripting to make it work. Each BPIB's appearance can be tweaked (background/font color, font, size, text-clipping,etc).

My ELK M1 module allows you to display a single message on a keypad. This module creates a queue that can store multiple messages and deliver them in the sequence received (FIFO). When the user presses * to clear the currently displayed message, MessageQueue delivers the next message to be displayed. I use this with CallMonitor to display missed-calls from family members.


Active Member
Glad to see 123 back in town!!!! :pray:
All excellent additions coming down the pike - and emphasizes the extensibilityof Premise...
Now that 123 is back, maybe I can figure out how to get my lightweight stuff done...Video in the MB is almost done; All of the MB device components stuff is done EXCEPT for the help I need from 123 and Etc!!!!

wow. I just reread the enhancements...I didn't think about the UDP issue w/ SYS. Nice work. Telephone Interface? Awesome. Maybe I can make some nice buttons :unsure:

Glad you're back!


Senior Member
The OBi110 works great with Premise. I've been testing 123's beta version and helped write some of the perl script that runs in the background. I don't think there's many home automation systems that work with the OBi110 to gather call data. Since the OBi110 is so affordable, it's is a great option for integrating call logs (outgoing and incoming).

The CallMonitor and Contacts module sounds very innovative. Using OnChangeScripts and these new home objects, I plan to mute or pause all mediazones in use when the phone rings. Since I use media center, a pop up will also appear if a TV is playing that will give the caller's info (I'll clean up the media center module at some point; it uses vmccontroller for ip based control). I also plan to send the caller's info to the Elk keypads (once 123's new Elk M1G module with message queue is finished) and to a betabrite led sign.


Senior Member
Here's a preview of the new User-Interface Controls that I've created for use with AutomationBrowser (see attached image). The Premise application I created to demonstrate these new Controls doesn't do any practical work but just serves to showcase the Controls.

The listbox is a ChildrenListBox control and is displaying child-objects (Widgets). The child-objects can be children of a parent object or children residing in a container (i.e. folder). Currently, the container must be a child of the parent but I hope to increase its flexibility and allow it to be (almost) any container including Media.

The listbox's size can be adjusted. If set to 1, it becomes a combo-box.

The Description and Details fields are BoundPropertyInputBox controls and can be edited by the end-user using Premise's keyboard. Click/touch the field and the keyboard pops up.

Color is a MultiValueListBox and gets its values from a bound MultiValue property.

Oversized is a CheckBox and now you can specify where you want to place the label (left/left with colon/right/none/custom).

Friend is a ChildrenListBox that lists child-objects residing in a container.

The Plus and Minus buttons add and delete Widgets, respectively. These are existing ScriptButton controls.

The tabs Tab1 and Tab2 are TextScriptButton controls that change the panel's contents.

Although the controls in this example use Premise's 'Cornflower Blue' color, each control has its own CSS so you can customize them individually (size, position, color, font, background color, etc).

Creating these new Controls has been an adventure (and, at times, very frustrating). Using them is fairly easy and requires almost no coding. A BoundPropertyInputBox is used the same way as the existing BoundPropertyControl.

What gets more complicated is when you want to display the properties of a child-object (like Widget's Description, Details, Color, etc). Each one of the child-object's properties that you wish to display needs a separate 'display-field', namely a copy of the property. Then there are PropertyChange scripts needed to keep everything updated and in sync. Anyway, the demo is well-documented and serves as an example of how to go about it.


  • NewUIControls.gif
    67.8 KB · Views: 15


Senior Member
More progress to report.

I've finished the ScriptTextButton Control and now this single control can be displayed two ways:
  1. a simple rectangular button
  2. a standard HTML Button
Gone are the days of having to use the existing ScriptButton control which forces you to create custom GIF files emblazoned with a label. It's a hassle to create a simple button that says "Delete" plus you have to distribute the custom image files with your Module (and the end-user has to install them). I've used the ScriptTextButton control to represent tabs (simple rectangle) and as buttons with labels (vanilla HTML Button).

Now that the new BoundPropertyInputBox control lets the end-user edit text onscreen, it seemed logical to include the ability to display instructional information on the keyboard. The end-user may be unaware that the text must be shorter that a certain length or subject to some other restriction. Having the restriction displayed on the keyboard is a great convenience. Given that each property has an existing Description field, that's precisely what is displayed on the keyboard. In the attached image, the contents of the Note property's Description field are seen on the keyboard: "Enter what's on your mind but keep it under 110 characters!" .

It was easy to alter Premise's keyboard to display the instructional text, the hard part was ensuring it was backward-compatible with other parts of AutomationBrowser and did not break its primary function (to rename objects). The instructional text's location has been optimized to work with Premise's many different keyboard themes. If it seems a little too high for you, and you normally only use one Theme, it is easy to modify the code (BoundPropertyInputBox's Render method) and have the text displayed precisely where you think it looks best.

The last step is to get the ChildrenListBox to acquire objects from use different types of containers and then I'll be releasing the new UI Controls and the demo that shows how to use them. The first place I plan to employ them is in my Contacts module.


  • NewUIKeyboard.gif
    95.3 KB · Views: 2


Active Member
Looks like you have been very busy, I am moving to a different software for H/A and just wanted to say thanks
for the help in the past.


Senior Member

You're welcome! Sorry to see you go but our loss is CQC's gain. Good luck!

For the handful of you that are sticking around, here's the final appearance of UIControlsDemo's first tab-page featuring all four new user-interface Controls (see attached image). The second tab-page (not shown) has more examples of the new controls in action.
  1. The list of Widgets is a ChildrenListBox (ListSize=8). It is populated by objects (Widgets) that are children of UIControlsDemo (see attached treeview).
  2. The Add and Delete buttons are ScriptTextButton controls (UseHTMLButton = true).
  3. Tab 1 and Tab 2 are also ScriptTextButton controls (UseHTMLButton = false).
  4. Description and Details are BoundPropertyInputBox controls and can be edited onscreen.
  5. Color is a MultivalueListBox control rendered as a combo-box (ListSize=1)
  6. Oversized is a CheckBox control.
  7. Friend is a ChildrenListBox control rendered as a combo-box (ListSize=1). It is populated by objects (Foo) that are contained in a folder (Foos) that is a child of UIControlsDemo (see attached treeview).


  • NewUIControls2.gif
    89.9 KB · Views: 1
  • UICDemo.png
    6.7 KB · Views: 1


Senior Member
I gave etc6849 a copy of the new UI Controls, the UI Controls Demo, and documentation ... and he confirmed it all works on his system. I was about to release it and then decided to add one more feature.

The new UI Controls can now be disabled (they appear dimmed and the cursor reverts from a hand to a pointer). The BoundPropertyInputBox has a third state called 'Locked' (not dimmed but the field cannot be edited).

A fourth tab page has been added to UI Controls Demo to demonstrate how the 'Disabled' mode can be employed. It also shows how one can use the 'CanRender' property to selectively show or hide a Control. For example, in the attached image, the flame icon appears when HVAC is set to 'Heat' and changes to a fan when HVAC is 'Cool'. When HVAC is 'Off', the fan speed buttons are disabled and the icon disappears. Naturally, all of this happens without requiring a complete page-refresh (Premise's AutomationBrowser was AJAX-like before the term 'AJAX' was invented).

The fourth tab page also demonstrates how one can emulate Radio Buttons using several ScriptTextButton Controls. Touch the 'Medium' button and its label color becomes red and all others are set to black.

The ability to disable/lock a Control is probably not something Premise's designers had envisioned and for good reason. A single Control is meant to be used by multiple instances of a given Home object (i.e. an instance of a Control is meant to handle the needs of a Home class). If you alter a Control's appearance, it will be seen by all Home objects using that Control and that's not a desirable effect. Modifying a Control's properties 'on-the-fly', such as disabling it or changing it appearance, should be used very judiciously, typically when only one Home object will use the Control. On the other hand, the ability to modify, even add Controls, 'on-the-fly' is incredibly powerful.

Along the way I discovered that the existing Image Control does not work and never did. Its rendering code had several obvious bugs. I fixed it and it'll be included in the release.

In other news, the CallMonitor module is nearly finished (and uses the new Controls) and the Obihai driver can now report the number of new voicemail messages. I have a functional version of the Contacts module but I have several enhancements in mind that will delay its release (multiple phone numbers per contact and the ability to export/import contacts in CSV format).


  • UICDTab4.gif
    60.5 KB · Views: 3


Senior Member
The Contacts module is now working in my home. You can add/delete contacts via Premise Browser as well as associated phone numbers. Although there's a 'Sort' button shown, each new contact is automatically placed in alphabetical order. The attached image is a screenshot with bogus contacts.

CallMonitor is a module that lists inbound and outbound calls. When paired with the Contacts module, it displays the caller's Display name as opposed to the Caller ID information. You can also use the Announcement field to announce the caller.

Incoming callers are automatically added to the Contacts module (i.e. Caller ID name and number). Afterwards, you can update the contact entry with the caller's full name, display name, and other information.


  • Contacts 1.gif
    Contacts 1.gif
    89.7 KB · Views: 4


Senior Member
Screenshot of the CallMonitor (Outbound calls view).


  • CallMonitor 1.gif
    CallMonitor 1.gif
    55.6 KB · Views: 7


Active Member
As always, wonderful work...you're getting way ahead of MY ability to convert these to the MB...your contribution, as well!!!


Senior Member
This looks awesome. It's very clean and shows a lot of data on one screen. If only the AB would have been designed like this instead of the drill down approach. Why should a user have to click to see a motion sensor state and date/time of last trigger, then have to click more to see the same for a door in the same room?!? I like your UI's much better (this one included).