Elk M1 & Ocelot: Got it working!!!

electron

Administrator
Staff member
So I finally ordered my serial expander, and received it yesterday. The goal was to test it with the W800, but while waiting for the new firmware, Guy mentioned that the Ocelot can be controlled with ascii commands (a feature from the older Ocelot models, which was never removed when they switched to the binary protocol). The reason I want to talk to the Ocelot is so my Elk M1EZ8 can issue IR commands, without having to rely on a PC. This is all I had to do to get this to work!

1) order, receive & unpack ELK M1XSP
2) power down the M1EZ8
3) connect 4 wires to the databus (and in my case, terminate the M1XSP by placing a jumper on JP1)
4) enroll M1XSP (there is an enroll function in ElkRP, or you can use the keypad to do this)
5) move the serial cable connected to the Ocelot from the PC to the M1XSP
6) add the ASCII string which tells the Ocelot to send IR #51 (in my case, this mutes the TV): +T000051^M^J (edit: looks like the ^M^J CRLF code isn't needed)
7) create a rule to send that ASCII string, and 'test' the rule

The M1XSP was already configured for 9600bps, so I didn't have to make any changes (a simple jumper setting).

I still have to do some more testing, but this looks pretty promising!

I'll try to post better instructions in the next few days, I need to do some more playing first ;)
 
Sweet - I guess I have to order another serial expander now.

So soon I'll be using the M1G to control the Ocelot, W800, UPB and Thermostat.

They should have designed/built a 'super' serial module for the panels.
 
Keep in mind that this only allows you to control the Ocelot, you can't monitor it, since status changes aren't reported in a simple ASCII format (as far as I know). But this does provide the IR functionality many people were looking for.
 
While I hate responding to myself, I am doing it anyways, in case anyone subscribed to this thread. It looks like there might be a way to have the Elk monitor the SECU16 inputs after all. The Ocelot can transmit ASCII messages as well, so I should be able to have the Elk react to status changes by looking for certain ASCII messages from the Ocelot.
 
Set up the ASCII Text string(s) that you want to receive in the Text setup area of ELKRP and write a rule such that WHENEVER it receives the text string, THEN do some. Remember to put a "carriage return", (0d hex) at the end of the Ocelot text string so the M1 will know when the text string is finished receiving.

I think the Ocelot makes a great IR controller for the M1.
 
It's a great combo, and it also makes it easier for people to consider the M1 without having to worry about their Ocelot having duplicate functionality.
 
A combination of many expert manufacturers in their field is far better than trying to use one manufacturer attempting to do it all.

It has taken a while to see that vision, but now it is crystal clear. ;)
 
hehe, guess I don't have any excuses not to buy an Ocelot too.

A question though Electron: You have homeseer and an elk. How do you use the two? Are you setup so either homeseer or the elk can respond as may be appropriate on what you are trying to do?

I know some just use an Elk (Martin for example), so I'm thinking it depends on how you want to use it.

Just curious as to how you have found it to be most effective as I'm hoping to move to that in the near future once I get my initial setup complete.
 
Once the W800 is supported, I am planning on moving most of the HA stuff to the M1. The PC will only be needed to do TTS, process internet data, and other non critical stuff. I use the my.Elk script with Homeseer, which can trigger events and stuff in HS based on changes in the Elk M1.
 
You might even find you want to offload most of the TTS stuff to hardware. You can use the M1 to control an ELK MV480 which will let you record all the custom messages you will ever need. The advantage of this over TTS is that you can still use a TTS engine to create your message but then you can tweak it to make it easier to understand (add pauses, change pitch, or whatever) before recording it to the voice module.

I use TextAloud with AT&T voices this way and can almost always imprrove the message over the way it sounds as straight TTS.
 
upstatemike said:
You can use the M1 to control an ELK MV480 which will let you record all the custom messages you will ever need. The advantage of this over TTS is that you can still use a TTS engine to create your message but then you can tweak it to make it easier to understand (add pauses, change pitch, or whatever) before recording it to the voice module.

I use TextAloud with AT&T voices this way and can almost always imprrove the message over the way it sounds as straight TTS.
Hmmm, that's an interesting concept. While the M1 does have a nice built in vocabulary and voice, one of the things I wanted to do was personalize things a bit more. For example - "Paul's Room". Also, for announcing reminders. The M1 doesn't have a number of the words I would be looking for. I know I can custom record things into the M1 but thought it would be weird to have my voice for certain things, and the system voice for others. It would be awesome to have TTS or a way to have the M1 use any good synthesized voice. I keep trying to find ways to use the M1 without having to do a SW package as well.

I looked briefly at the MV480 and not sure how that would work with the M1 but it sounds like a great idea. Can you explain in a little more depth for dummies like me how you would do this? Thanks!
 
electron said:
While I hate responding to myself, I am doing it anyways, in case anyone subscribed to this thread. It looks like there might be a way to have the Elk monitor the SECU16 inputs after all. The Ocelot can transmit ASCII messages as well, so I should be able to have the Elk react to status changes by looking for certain ASCII messages from the Ocelot.
You could use the embedded variable feature of C-Max 2.00 with your ASCII strings to cut down on the number of ASCII messages needed to send back status information from the Ocelot to the Elk. Since only a total of 128 ASCII strings can be stored in the Ocelot, this will quickly become necessary if you are planning on monitoring lots of SECU16 inputs this way. In the same manner, you can also send ASCII messages when the Ocelot recognizes a received IR code, so you could control or trigger something in the Elk with a handheld remote sending IR to the Ocelot.
 
I looked at th Cmax software to see how to embed a variable, but I am not sure if I understand. Is the variable apppended to the ASCII message, or are certain keywords replaced?
 
Ah, you need to read the manual! ;)

But basically, you create and ASCII string like this:

The value is %2d

This is just like the C language "printf" command. Then in C-Max you prepare the variable that you want to plug in and then specify it as the embedded variable, so if its set to 3, the string comes out as "The value is 3".

This is very handy when you combine it with the feature that captures things like the received IR code or whatever to a variable. For SECU16 inputs, you could do something like this: Suppose that ASCII string #1 is defined as "+I%1d" and ASCII string #2 is defined as "%1d^013", then you could encode both the input number and the status in one string by concatenating them like this:

+I00<cr> for input 0 turning off
+I01<cr> for input 0 turning on
+I40<cr> for input 4 turning off
+I71<cr> for input 7 turning on

etc.

The C-Max code would then go like this:

IF SECU16 input #0 turns OFF
THEN Variable #1 = 0
THEN Variable #2 = 0
THEN Transmit ASCII message 1 w/variable #1
THEN Transmit ASCII message 2 w/variable #2
IF SECU16 input #0 turns ON
THEN Variable #1 = 0
THEN Variable #2 = 1
THEN Transmit ASCII message 1 w/variable #1
THEN Transmit ASCII message 2 w/variable #2
IF SECU16 input #1 turns OFF
THEN Variable #1 = 1
THEN Variable #2 = 0
THEN Transmit ASCII message 1 w/variable #1
THEN Transmit ASCII message 2 w/variable #2
IF SECU16 input #1 turns ON
THEN Variable #1 = 1
THEN Variable #2 = 1
THEN Transmit ASCII message 1 w/variable #1
THEN Transmit ASCII message 2 w/variable #2
...etc.

Get the idea?

To really understand it, read the "Formatted Variables" application note in section 5 of the manual.
 
Back
Top