Chat transcript 05/28/2005


Staff member
<WayneW> welcome Dean
<DeanRoddey> So, what can I do fer yous guys? Any questions?
<GuyLavoie> sure...any cookies?
<DeanRoddey> My, what big hands I have...
<GuyLavoie> ok, how about starting with a general description of what your software does, in a down to earth, practical sense
<hotwire> Any plans to add support for the Ocelot or the Barionet?
<DeanRoddey> Easy one first... Barionet yes probably, Ocelot no immediate plans
<DeanRoddey> In terms of practical description, it's difficult to get it down to a few words, but basically it's what Crestron or AMX are, but you add the hardware.
<DeanRoddey> That's not much of an answer, but the real answer would be kind of long for this format.
<GuyLavoie> well, is it a rules engine, a user interface, a media player?
<GuyLavoie> that kind of thing
<DeanRoddey> All of the above.
<DeanRoddey> Well, it's not a media *player*, it controls media players
<DeanRoddey> If you want to know what bits and pieces it contains, check the first post of the giveaway thread. That first diagram shows a lot
<GuyLavoie> So does it accept i/o input or touch button presses and then perform if/then/else logic to control other things
<DeanRoddey> That's at the core of what it does, as it is with all automation systems pretty much, yes.
<GuyLavoie> what types of input triggers does it accept or support? web based? hardware devices?
<DeanRoddey> It's fully driver based, so potentially anything. It has no 'built in' support for anything really, it does everything to do with the outside world via drivres.
<DeanRoddey> The primary input mechanisms are usually touch screens and IR remotes, but potentially anything.
<DeanRoddey> And of course a standard keyboard and mouse for folks who aren't looking to use it in an appliance type of mode.
<WayneW> what is the process or interface for creating or editing rules?
<electron> hey Dean, glad to see you could make it!
<DeanRoddey> It is our CML macro language. It's a simple object oriented language. You can do very powerful things with it.
<GuyLavoie> so which outside world drivers are currenty available for the hardware that is typically famiiar t us?
<DeanRoddey> The supported devices page is here:
<WayneW> are the macros/rules all in one big file?
<DeanRoddey> Two important ones not in that list, coming up soon, are the Escient Fireball and Elk M1
<DeanRoddey> No, it's an object oriented language, so you can create reusable classes to your heart's content.
<WayneW> Dean, how would you compare the HAI and the Elk panels?
<DeanRoddey> We have a graphical IDE that you can write, debug, and deploy macros in. It works in terms of the central Master Server, so you can edit from any machine.
<GuyLavoie> could you type up a typical simple macro (like if A/1 on received, turn on a TV with an IR code
<DeanRoddey> On the HAI/Elk thing, I'm not really a good person to ask that, since I've only done drivers, not used them in the real world.
<GuyLavoie> hi ski
<Skibum> Hey Guy
<DeanRoddey> On the macro example, why don't you post that on the CQC thread and we'll do there later, to avoid cluttering up things here.
<GuyLavoie> well, just to see it an example
<WayneW> do you really mean "any" machine for editing? I assume it needs something installed first, or it is web based?
<DeanRoddey> Yeh, you need to install the appropriate tool for macro editing. But not the whole product. It's very modular.
<GuyLavoie> How do you program macros? with a special editor (a bit like C-Max) or with a general text editor and then compile it?
<DeanRoddey> As mentioned above, we have our own graphical IDE, which allows you to edit, debug, and deploy all from a single tool. You can also create CML drevice drivers in that same IDE.
<DeanRoddey> On the 'what is a reusable class' question, it just means you can create chunks of logic and use them over and over.
<DeanRoddey> You can create macros that take parameters, so that you can use them from various places to do the same logic in various ways.
<GuyLavoie> nice...if you know what an IDE and a CML is, but in a down to earth sense, how do you go about creating a macro? open an editor? type text or some kind of wizrd tool?
<DeanRoddey> And if you are a developer, it supports inhiertance and polymorphism, to create some truely flexible control logic.
<DeanRoddey> I'll upload a snap of the IDE later for folks to look at.
<electron> it definitely would be interesting
<electron> I assume there is no ActiveX interface?
<GuyLavoie> and would help to know what you are referring to during the discussion!
<DeanRoddey> Not currently. There is a simple XML over Sockets interface, that can easily be wrapped in various types of packages.
<electron> similar to xAP ?
<DeanRoddey> You could create an xAP wrapper to talk to CQC by wrapping xAP around the XML Gateway if you wanted. But I'll probably end up providing that interface myself.
<GuyLavoie> is there a link that we could look at *now* that would help us understand the rest of the discussion?
<DeanRoddey> There are a lot of snaps of things in the CQC thread on this forum
<electron> hey Dean, did I read it right that you were running all this stuff on a mini-itx box?
<GuyLavoie> yes, but those screen shots are user interfaces. I'd like to see something related to *programming*, like an editor or a code sample
<DeanRoddey> I am personally. Here is the gallery for my personal system:
<DeanRoddey> I'm working on getting a snap of the IDE. I'm multitasking here...
<DeanRoddey> Other user galleries are on step up:
<DeanRoddey> Here is a snap of the IDE
<DeanRoddey> The particular macro I'm editing there is just a helper class that comes with CQC. IT's used for dealing with IR devices that don't provide 2 way control.
<DeanRoddey> It helps keep track of the previous state written so that you can implement a toggle if the device doesn't have a toggle command.
<electron> It looks like that could be a little overwhelming for the typical DIY user
<DeanRoddey> It probably is, but you don't really need to do much in the way of macros to do a nice system. Those systems you see in the user galleries (besides mine) we all done strictly through configuration.
<GuyLavoie> what does that particular example do? It looks more like a database program then a device control script
<DeanRoddey> I explained it above. It is a helper for implementing a toggle for an IR based device that doesn't support toggling. It lets you remember the last state your wrote to that field and to write the opposite next time.
<Skibum> hehe
<WayneW> so I could have a light (or whatever) come on for 5 minutes after motion was detected without using that complicated thing?
<DeanRoddey> Not in the current version, you'd have to wait for the next version for that. Currently, for that, you'd have to write a simple macro. But I or others are always happy to help with that. Usually, we'd just do one that can be reused so it doesn't have to be done again.
<DeanRoddey> Once the macro is there, you can use it without having to know what's inside it or how macros are written and whatnot.
<GuyLavoie> So this is more like a raw C compiler then a scripting language, right?
<DeanRoddey> Well, more like Java/C# really. It's very high level and won't let you play any tricks like most comletely general purpose langauges would
<DeanRoddey> Keep in mind that drivers are also written in this same language, so it has to be pretty powerful.
<GuyLavoie> like which ones?
<DeanRoddey> Which ones what?
<GuyLavoie> like which languages that let you play tricks?
<DeanRoddey> Pretty much all truely general purpose langauges do. For instance, CML has zero aliasing, no pointers, no automation conversions, etc...
<DeanRoddey> To get back to how you make things happen, less technical users do everything through 'actions'.
<GuyLavoie> In my mind, a high level language is one where you don't need to define all the variable types, etc. It usually makes an abstraction of that to allow simpler scripting
<DeanRoddey> Actions consist of a sequence of things you want to happen, either a pause, a write toa device field, or the invocation of a macro.
<DeanRoddey> You don't need to know what's ina macro to invoke it via an action, you just select it and type in any parameter values it might need.
<GuyLavoie> For example, in C-Max on the Ocelot, a toggle can be written like this:
<GuyLavoie> IF Variable #1 = 1
<GuyLavoie> THEN variable 1 = 2
<GuyLavoie> ELSE Variable #1 = 1
<GuyLavoie> that's what I mean
<DeanRoddey> The bulk of what happens in CQC is done that way. Buttons on an interface invoke an action. Scheduled events are actions. You associated IR signals with actions to do, etc...
<GuyLavoie> internally, the variable is a 16 bit unsigned value, but the scripting language "assumes" that for you
<DeanRoddey> A toggle in any language would be similar. But you have to remember CQC is not a device, it's a network distributed system with potentially multiple simultaneous users.
<GuyLavoie> Ok, do you have an example of that type of macro?
<DeanRoddey> So the concept is similar but the details are just different. In the end, it comes down to the same basically IF statement though.
<DeanRoddey> You can basically see most of it in the snap I posted. It reads the current state of a field that is holding the previous value, and if the new value passed to the macro is different, it writes the new state.
<GuyLavoie> yes, but that example looks like a callable function that you would call from some main program somewhere...
<GuyLavoie> I'd like to see that main program and the high level logic flow
<DeanRoddey> It's actually a 'main program' itself. Though it could also be called if you wanted to.
<DeanRoddey> It would normally, as mentioned above, be invoked from an 'action', and it is an executable thing itself.
<DeanRoddey> If you look, you'll see a Start() method. Any class that has one of those can be invokved from the outside as a top level macro.
<GuyLavoie> Am I the only one that's feeling a little unsure about getting the big picture?
<DeanRoddey> But there's nothing to stop another macro from loading this one and calling that Start method itself.
<smee> I think the question is "How would you set up reactions to events like you can in HomeSeer or with C-Max on an Ocelot?"
<smee> How do I make the lights in my office turn on when motion is detected in the room?
<smee> Since the lights just went out :)
<Skibum> you know what they say about the lights being out
<WayneW> should have put them on a UPS
<Skibum> hehe
<DeanRoddey> As I was mentioning above, that's something that will come in the upcoming release. Currently, everything in CQC is 'proactive', not reactive. The upcoming release will provide an 'events' system to provide for that.
<smee> So right now CQC is not so much home automation as it is home control.
<DeanRoddey> Currently, those types of things are done with a scheduled event that checks periodically if something of interest has happened and reacts to it.
<GuyLavoie> Do you have an example of that to show us?
<smee> Would the system be overloaded if I started adding scheduled events that ran every second - there's a limit to how long I want to wait for the light to come on.
<Skibum> anyone see that circular logic slide rule I misplaced?
<DeanRoddey> I don't use any myself, so I'd have to write one just for show. But it's doing to be just like what you've already seen. You'll then just configure it to be run in the scheduled events configuration.
<DeanRoddey> You wouldn't want to run them every second. For that, you'd definitely want to use the upcoming events system.
<DeanRoddey> As of the previous version, we had basically two things on the top of the list. Media control and events. WE polled our current users and they chose media control, so that's what's been done first.
<DeanRoddey> The events stuff is fairly complex because, again, CQC isn't just a box, it's a multi-user sysetm spread out around the network. So we've had to think quite a lot about how to do it right.
<Skibum> You mention We.. who else is developing this system?
<DeanRoddey> There are currently two people in the company. Myself and Mark Stega.
<GuyLavoie> and who does what?
<DeanRoddey> I do the core product development, web site, docs, and most support. Mark is working on hardware platform development, the .Net Interface viewer we just put out for alpha testing, and the business/paperwork stuff.
<DeanRoddey> I'm uploading the text of that macro we discussed, so that you can see the whole thing.
<GuyLavoie> go ahead
<GuyLavoie> what is the "hardware platform development" that Mark works on? actual hardware or drivers?
<DeanRoddey> here is it is:
<DeanRoddey> It's pretty large because it's heavily commented, so as to also be a good sample to show to people.
<DeanRoddey> The hardware stuff is three pronged. First was the HusPC configuration you see in my Demo1 gallery
<Skibum> so you are building your own custom hardware?
<DeanRoddey> Second is a rack mounted, badged system with a solid state disk, i.e. a back end 'appliance'
<DeanRoddey> Third is basically the same but in a front end type machine.
<DeanRoddey> So basically we are looking to get a front and back end scheme that runs on Embedded XP and which has no hard drive.
<DeanRoddey> Oh, and the other variant of that is the rack mount with large hard drive to act as a media server for our media control stuff about to come out.
<DeanRoddey> I wouldn't say 'building' really. Few people really build their own hardware anymore, they just put together pieces that you buy off the shelf, ina custom enclosure if they can afford that kind of thing.
<Skibum> what brand of solid state disk are you using?
<DeanRoddey> You'd have to ask Mark about that. I've just been watching from the side as he's explored that issue.
<Skibum> and what is it's capacity?
<DeanRoddey> It doesn't need much capacity. The OS image is on a flash card or other read only memory. Only the application and configuration data need to go onto the soild state disk. So it'll have plenty of room.
<Skibum> explored, or built?
<Skibum> how are you managing flash memory burn?
<DeanRoddey> Again, you'll have to ask Mark about that. This kind of configuration is a widely done thing these days, so we aren't breaking any new ground by any means.
<Skibum> no new ground using a solid state flash memory disk?
<DeanRoddey> It's similar to what is in hundreds of devices, from routers to video scalers, AFAIK.
<GuyLavoie> yes, that type of hardware has become common
<DeanRoddey> I think that, just speaking generally, the issue here is that you guys are coming from the standalone, single box world, and CQC is just a completely different animal, encompasing a lot larger world. So it's going to be very different from what you are used to.
<DeanRoddey> The event system obviously is something that you guys are into more than most of our customers, so we've put it off until after other things. But that will be dealt with soon.
<GuyLavoie> well, who are your typical customers? A/V system integrators?
<DeanRoddey> Well, most of them are of the DIY type who could be custom installers, but do other things for their day job. They aren't tweakers really, they want to just set it up and forget it. UNtil we get the hardware platform in place, custom intsallers will be a hard sell.
<GuyLavoie> hi bsr
<bravesirrobbin> Hi
<DeanRoddey> I uploaded another macro:
<DeanRoddey> This particular one is from my own system. It powers my home theater up and does the lighting for the power up sequence.
<DeanRoddey> In this case, it works in terms of another macro class that encapsualtes the details of the parituclar devices I use. So this high level logic stays unchanged if hardware changes.
<GuyLavoie> I still think it looks more like raw C code then a scripting language...
<DeanRoddey> It's more like Java/C# than a scripting language, that is true.
<DeanRoddey> And here's the customization macro:
<Skibum> see you all...getting too deep. Night
<GuyLavoie> bye ski
<bravesirrobbin> Dean: Do you have some type of editing tool for your product. It might help with the code syntax
<DeanRoddey> And here you can see why the power is required. This is the kind of thing that a custom installer wants. It allows them to create generic logic that they can reuse over and over.
<bravesirrobbin> something like the VB environment, where you could select some options after the "dot"
<DeanRoddey> And here is another:
<GuyLavoie> This is the type of thing that needs a "hello world" type of example for the person who wants to learn it from scratch. Adding that to your site would really help get a handle on it
<DeanRoddey> This is a driver for the Lutron Radio RA sysetm written in CML
<DeanRoddey> Oh, there's a whole tutorial on the CML language, so it's well documented with annotated examples and so forth.
<DeanRoddey> The need to allow third parties to write device drivers, without the dependence on third party languages, is oen of the reasons that CML has to be so powerful.
<DeanRoddey> But I'd just like to say again, that you don't need to understand macros to do a very nice control system. I'm just dwelling on it because of the questions. Most of our customers don't write any macros at all.
<GuyLavoie> what do they do with it then?
<DeanRoddey> Not sure what you mean?
<GuyLavoie> if they don't write any macros, then what do they use it for?
<DeanRoddey> What is 'it'? You meah CQC or CML?
<GuyLavoie> the whole product...
<DeanRoddey> For home control. Look at the galleries I pointed you to. They'll provide you more info than I could ever type here. They are real world examples of what it's used for.
<GuyLavoie> I thought that home control was somewhat synonymous with macros, like if you press this button on the screen, then turn on these lights...
<DeanRoddey> I kind of covered that above. Macros are a low level thing. 'Actions' are what users actually configure. Actions can invoke macros, but they can also write values to devices to change their state. So mostly, users configure actions to be invokved when they press a button, or configure actions to kick off on an IR signal, or to run on a scheduled, and so forth.
<DeanRoddey> So their 'sequence of things to do' is just something that they configure via a dialog box. If there are stanard helper macros to do things they want to do, they can invoke them from their actions as well.
<DeanRoddey> An action might be like "write 50 to field Zwave.Unit5, write DVD to field AVProc.Input' that kind of thing.
<DeanRoddey> That's all done at the dialog box level.
<DeanRoddey> For an advanced user, their actions are comonly just one step, i.e. invoke macro X with these parameters, and they write macros to do what hey want.
<GuyLavoie> In most people's mind, macro and actions are mainly synonymous...
<DeanRoddey> Every system has it's nomenclature. It does act as a barrier to understanding sometimes, but it's hard to avoid.
<smee> From an HS point of view, it sounds like action=event and macro=script.
<electron> hey spanky
<david0126> Been trying to get on for a while. Would not let me into the chat room.
<DeanRoddey> Not really. Action is an interactively created list of things to do. I.e. no decidsions, just a linear list. So it's a very simple script. But, macros that are provided can be invoked in that list, and they can do fancy stuff. So they are kind of high level script and low level macro I guess.
<smee> I think that fits my comparison - if you are familiar with HS.
<smee> Except events can get pretty fancy without needing a script behind them.
<DeanRoddey> Like I said, barriers to understanding :)
<tonyno> wow. i have a lot to catch up on!
<DeanRoddey> I'm looking for a snap of the event configuration screen, hang on...
<DeanRoddey> I scarfed the one I had, I'll do another one now..
<electron> hey Dean, don't forget, you still have to pick a winner ;)
<DeanRoddey> Yep, I wrote a little randum number generator. So, I might as well do it now. I generates a number from 1 to the count of entries... I'll run it now.
<DeanRoddey> I'm triple tasking...
<electron> lol
<DeanRoddey> And the winner is post #14
<david0126> For us late comers, what should we be looking at?
<tonyno> looks like fitzpatri8
<electron> fitzpatri8
<electron> right
<electron> david0126
<DeanRoddey> Here is a screen cap:
<DeanRoddey> This is an event configuration for a media cover art browser. The event scheme is also used in the user interface system.
<electron> hey Dean, what player software does it interface
<electron> jrmc?
<GuyLavoie> well, Its almost 11 PM here. gotta go. thanks Dean.
<DeanRoddey> Like everything, the media player and repository supoprt is driver based. The first one is the Escient Fireball. Next is the WMP10 rip format.
<DeanRoddey> Then, we are going to add UPnP support and we'll support JRMC11 through that.
<fitzpatri8> what? I stepped away...
<electron> looks like you are the winner ;)
<electron> congrats!
<fitzpatri8> Great! Thanks!
<DeanRoddey> And here is the actually configuration dialog for the event from the previous dialog:
<electron> Dean, which software manages the music tho, CQC or the backend?
<DeanRoddey> CQC just acts as a mediator. It allows browsing of repositories,a nd invoke renders to play selected media.
<DeanRoddey> In the case of, say, the Escient, it is both the repository and render. So we ask it what's available, let you browse it, and when you select something, we ask the Escient to play it.
<electron> so which software is responsible for indexing/cataloging it
<DeanRoddey> That is outside of our control. We work in terms of existing repositories. So for Escient, it does that. For JRMC it does that, and so forth.
<DeanRoddey> We just look at existing repositories and allow you to browse them, and to invoke renders to access that repository and play things.
<electron> in that case, I am rather surprised you support WMP10 instead of JRMC, considering how many known problems WMP has when it comes to being your music library engine
<DeanRoddey> We'll support both. It's all just driver based. There's no built in support for any device or any repository or anything else. It's all through drivers that you configure to load.
<DeanRoddey> The reason we've not done JMRC alreayd is that we need the UPnP and that's a fairly big chunk to bite off, so we put it off to after the Escient. The WMP10 one is simple and we want that as a canonical example repository driver.
<DeanRoddey> You'll be able to write your own repository drivers in CML just like for devices. So we wanted to have a simple example for people to see how they work.
<electron> ah ok
<DeanRoddey> Also, the UPnP in JRMC is new for V11, and we wanted to wait till it was fully baked.
<DeanRoddey> The nice thing about UPnP is that there are a number of renders and repositories out there we can control via a single driver (with some tweaking.)
<DeanRoddey> Oh, Mr. Fitz, send me an e-mail at [email protected] about getting your license.
<electron> he got disconnected a minute ago
<electron> might want to PM him
<DeanRoddey> Ok.
<DeanRoddey> Back to the event example... In that example, you can see 4 steps being taken.
<DeanRoddey> This event is for a 'cover art browser' interface widget. When the user clicks on a cover art item, the widget's Select event is triggered.
<DeanRoddey> 1. A write is do to the PlayTitle field of the Escient device driver. It passes the <Title Cookie>. The <> means it's a value provided by the widet, not somethign you typed in. This causes the esicent to start playing this title.
<DeanRoddey> 2. It then pauses for a couple seconds, to give things tiem to get going
<DeanRoddey> 3. It then loads up a new template into an area of the current interface. It loads a 'What's playing' template to replace the current template that allowed them to select the cover art.
<DeanRoddey> 4. This is not done on select, it's done when the cover art browser is told to start browing a a new category (on set),a nd it is sending the category name to a text widget so that that the name of the cateogry being browsed is displayed.
<electron> wb fitzpatri8
<DeanRoddey> Keep in mind that this is the event system as it exists in the upcoming 1.4 system. It's far more powerful than the existing scheme, when it comes to the user interface. The old scheme didn't allow events to affect user interface widgets.
<DeanRoddey> This keypad:
<DeanRoddey> Was done completely with the new event scheme. The buttons send commands to the static text widget at the top, and the Set Ch. button tells that widget to send it's current text toa paritcular device field.
<DeanRoddey> So you can build your own keypads that let the user type in values and have them sent toa particular device. This means that you don't have to have a popup key pad that doesn't look anything like the rest of your user interface. YOu can make them look just like you want them to.
<DeanRoddey> Does this stuff get saved anywhere?
<electron> yep
<electron> once we are done, I will export and format the log
<electron> then post it tonight or tomorrow
<DeanRoddey> Any other questoins or anything?
<electron> actually yea
<electron> how come you are supporting the barionet before the Ocelot
<DeanRoddey> Because they are doing the driver probably.
<DeanRoddey> Those types of devices can be time consuming, so their heavy interest in it makes the difference.
<electron> oh
<electron> cool
<DeanRoddey> They also loaned me some Exstreamers, which I'll also be doing a media renderer driver for, so that we can control them.
<electron> have you gotten a chance to play with the barionet?
<DeanRoddey> No, I haven't gotten one yet. If they decide to do the driver, I'll get them to send me one so that i can help them if they have problems.
<DeanRoddey> But I probably won't be able to do anything really meaningful with it. I live in a one bedroom, small apartment. My sauna is imaginary only
<electron> lol
<DeanRoddey> I also have an Elk M1 and HAI Omni, but I don't really have anything I could use them for.
<electron> what did you automate in yoru apartment?
<DeanRoddey> Lighting and the home theater. The theater automation is pretty fancy. It's what I care about the most also. Lighting is via Z-Wave.
<DeanRoddey> I'll also be utilizing the media stuff in my own system as well.
<electron> got any pictures of your setup?
<DeanRoddey> It's in the gallery section
<DeanRoddey> It's the Charmed Quark Demo 1 system. Keep in mind that I have't completely updated it yet to use my new user interfaces taht you see in my CQC thread here on CCT.
<david0126> Are you doing an interface for the ELK M1?
<DeanRoddey> Yeh. I'm working on it a little along rigth now, but it should be done in a couple weeks.
<david0126> Good, Thanks
<DeanRoddey> It will support both serial and ethernet connections, using the same driver
<electron> hey David, quick question, I just finished building my main wall for my server room, and installed my structured wiring panel. Does the Elk come in a panel which is designed to fit in between studs which are 16" off center, or is it supposed to be surface mounted?
<david0126> The panel width gives you 1/4" clearance between studs.
<electron> cool
<electron> I should take a picture, write on it "Elk goes here" with an arrow and print it out so I got something to think about until I can actually order one
<electron> lol
<electron> dean, are you planning on supporting any of the newer protocols out there, such as UPB, ZigBee (Control4), Insteon etc ?
<david0126> Good idea.
<DeanRoddey> Probably UPB first. Zigbee as more stuff becomes available. Insteon, probably last to give it some maturing time.
<DeanRoddey> Z-Wave is pretty much Zigbee thoguh not directly compatible. So I'm assuming that that experience will help with the Zigbee stuff.
<electron> I was surprised to see support for z-wave, it isn't cheap to get involved with that
<DeanRoddey> Well, after screaming and whining and threatening to hold my breath till I turned blue, they cut me some slack. Else we couldn't ahve done it. And I had to do it with very little support, so it was quit a slog.
<DeanRoddey> Well, I'm outie. If anyone has any other questions, feel free to post them in the CQC thread in the Software section here on Cocoontech. I'll be happy to answer them.

I read your message in the transcript about the size of the M1 panel. I think David mis-understood your question. When he said
The panel width gives you 1/4" clearance between studs.

What he meant was that is the width in the can that comes with the package. If you are mounting it in your own can, you'll have a lot more room than that. The base panel is 8 inches wide by a little over 9 inches tall.