A very interesting application of the M1 with a bluetooth-equipped phone!
I don't have the requisite phone to test this but I noticed something in the code you may want to alter. You are instantiating an ElkM1::Control object within "while" loops (i.e. $elk = ElkM1::Control->new) . This means you are opening a new connection to the M1 each time the loop executes and that's unnecessary.
Open a single connection at the beginning of the program (i.e. before all of the loops) and close it at the end of the program. While the connection is open, you can send commands and listen for messages.
It doesn't have to be a phone, could be mp3 player, car radio ...
The opening and closing was written that way on purpose, as it the program never end's. I don't know enough about the elk's ethernet server's ability to would handle a connection held open for months or longer, weather it would suffer from some sort of memory leak or it's impact on other client connections.
It's a first cut so people can see another possible use for this interface, so with a bit more experience and testing a more elegant solution could be crafted.