From: Rick D. <den...@ct...> - 2004-02-25 04:55:49
|
Hi, I'm trying to convert from a heyu2 xtend combination to Mister House. I think that I understand the basic concepts of getting x10 events, but I'm having some troubles doing what I had been doing with xtend. I've got more X10 light switches than will fit in a house-code, and several plug-in X10 controllers. Case 1: I've got an IBM home director mini-controller next to the bed. This has 6 rocker switches, four of these send (house code)n on, or (house code) n off, one sends bright or dim, and the last sends (house code) all lights on, or (house code) system off, depending on whether you push the top or the bottom of the switch. I've set the house code to M for this one to represent requests from the master bedroom. Case 2: I've got an old Radio Shack plug n' play remote control center which has 16 buttons for sending the house and unit code, and on, off, bright, dim, all lights on, and system off buttons. I've set the house code for this one to N. With xtend I could detect M system off and send the appropriate commands to turn off all of the lights on all of the house codes I'm using. I could also use M1 on/off to turn the master bath lights on and off respectively, M2 on/off to do the same thing to some lights in the kitchen if I want to go get a drink of water etc. I've got the other controller next to the computer and use it just as a proxy to turn some of the lights in my computer room on and off, having xtend/heyu convert one house code to another. With Mister House, I did some playing around with the N controller. My first code just reported when X10item('N2') changed and it's state. I then added another test to see if the system off or all lights on was pushed by checking the state of X10item('N') (I also tried 'N0'). I noticed that the N2 code is responding when I hit the System off or All lights on buttons. I guess this seems somewhat natural, but is there a way to differentiate the events so that I can do with xtend? I also noticed that with the old radio shack controller if I have code like this: $test_button = new X10_Item('N2'); if (state_now $test_button) { my $state = state $test_button; my $remark = "You just pushed the N2 button and it is $state" print_log "$remark"; speak $remark; } If I push the unit 2 button I will get You just pushed the N2 button and it is manual Unless I push the on or off button very quickly after the unit button. Any insight for this MH newbie? |
From: Kirk B. <ki...@ka...> - 2004-02-25 14:48:48
|
On Tue, 24 Feb 2004, Rick DeNatale wrote: > With Mister House, I did some playing around with the N controller. > My first code just reported when X10item('N2') changed and it's state. > I then added another test to see if the system off or all lights on was > pushed by checking the state of X10item('N') (I also tried 'N0'). I found this to be the best way to watch for all-on/all-off events: Serial_data_add_hook(\&watch_all_on_off) if $Reload; sub watch_all_on_off { my $state = shift; if ($state) { if ($state eq 'XDO') { # House code D, all lights on run_voice_cmd 'All Inside Lights On'; } if ($state eq 'XDP') { # Hous ecode D, all units off run_voice_cmd 'All Lights Off'; } } } To turn off all lights in the house, for example, I do this: my $cmd_all_lights_off = new Voice_Cmd 'All Lights Off'; $cmd_all_lights_off->set_info('Turn off all lights.'); if (said $cmd_all_lights_off) { speak("Turning Off All Lights"); set $house_code_d OFF; set $house_code_c OFF; set $house_code_f OFF; set $house_code_g OFF; set $house_code_i OFF; set $house_code_m OFF; set $house_code_h OFF; set $house_code_o OFF; } > I noticed that the N2 code is responding when I hit the System off or > All lights on buttons. I guess this seems somewhat natural, but is there > a way to differentiate the events so that I can do with xtend? if ($state = state_changed $kitchen_fridge_light) { if (get_set_by $kitchen_fridge_light eq 'serial') { # Add your code here get_set_by is set to 'housecode' if the item's state # was changed as a result of an all-on/all-off command } } > I also noticed that with the old radio shack controller if I have code > like this: > > $test_button = new X10_Item('N2'); > if (state_now $test_button) { > my $state = state $test_button; > my $remark = "You just pushed the N2 button and it is $state" > print_log "$remark"; > speak $remark; > } > > If I push the unit 2 button I will get > > You just pushed the N2 button and it is manual Misterhouse returns this state unless it gets an on/off very quickly. But you should also get an on/off later once you press the on/off button. You should be able to just ignore the first one by adding: unless ($state eq 'manual') { ... } -- Kirk Bauer <ki...@ka...> http://linux.kaybee.org | www.autorpm.org | www.logwatch.org |
From: Rick D. <ri...@de...> - 2004-02-25 19:37:01
|
On Wed, 2004-02-25 at 09:39, Kirk Bauer wrote: > On Tue, 24 Feb 2004, Rick DeNatale wrote: > > > With Mister House, I did some playing around with the N controller. > > My first code just reported when X10item('N2') changed and it's state. > > I then added another test to see if the system off or all lights on was > > pushed by checking the state of X10item('N') (I also tried 'N0'). > > I found this to be the best way to watch for all-on/all-off events: > > Serial_data_add_hook(\&watch_all_on_off) if $Reload; > sub watch_all_on_off { > my $state = shift; > if ($state) { > if ($state eq 'XDO') { > # House code D, all lights on > run_voice_cmd 'All Inside Lights On'; > } > if ($state eq 'XDP') { > # Hous ecode D, all units off > run_voice_cmd 'All Lights Off'; > } > } > } > > To turn off all lights in the house, for example, I do this: > > my $cmd_all_lights_off = new Voice_Cmd 'All Lights Off'; > $cmd_all_lights_off->set_info('Turn off all lights.'); > if (said $cmd_all_lights_off) { > speak("Turning Off All Lights"); > set $house_code_d OFF; > set $house_code_c OFF; > set $house_code_f OFF; > set $house_code_g OFF; > set $house_code_i OFF; > set $house_code_m OFF; > set $house_code_h OFF; > set $house_code_o OFF; > } > > > I noticed that the N2 code is responding when I hit the System off or > > All lights on buttons. I guess this seems somewhat natural, but is there > > a way to differentiate the events so that I can do with xtend? > > if ($state = state_changed $kitchen_fridge_light) { > if (get_set_by $kitchen_fridge_light eq 'serial') { > # Add your code here get_set_by is set to 'housecode' if the item's state > # was changed as a result of an all-on/all-off command > } > } Kurt, Thanks for the reply. I guess I didn't explain well enough what I'm trying to do. Let me explain a bit more about my setup. I've got some housecodes which have X10 devices (lights/appliances) since I've got more than 16 of these I've divided them up either by geographic or functional sub-areas of the house. I want to use a variety of x10 button controllers including the old radio shack with the discrete buttons, the homedirector rocker switch, as well as several leviton universal wallmount controllers which replace the slave switch in 3 and four way circuits. These will have housecodes which don't overlap with the actual lighting control devices. I want to use these to make requests of the home automation system (hopefully mr house). What I'd like is to just get the X10 events from these manual controller devices, and not interpret the state of non-existant controlled devices, I want to let the event receiving code decide what to do on the event. Such event processing might involve sending X10 commands to devices on other house codes, or it might do something totally unrelated to X10. I'm surprised that someone hasn't tried to do this already. I'm actually not all that enamored with the voice control interface, and I'm not sure how I'd implement voice input throughout the house anyway. So if someone else hasn't done it I thought that maybe the thing to do would be to create a new object to represent one of these controllers. I must admit that I'm new to PERL, and I'm a pretty accomplished Object Oriented Programmer having programmed in Smalltalk, and Java since the mid-80s (well Smalltalk since then at least). This may be a good or a bad thing in learning PERL objects. I've noticed that some code for Mister House uses X10_Item('H1') where other code uses Serial_Item('XH1') to refer to house code H, unit 1. I haven't been able yet to decipher why. I printed out X10_Items.pm, Serial_Item.pm, and Generic_Item.pm. I would have expected that the Serial_Item class would handle general serial data, and that the X10_Item subclass would have the X10 handling, but I noticed that the Serial_Item code seems to have the code for propagating states to other X10 units when all-on or all-off is received. Based on my background in Smalltalk and Java, it appears as if this code would benefit from re-factoring to get the X10 processing into the X10_Items class and out of the serial class. Perhaps it's this way do to a legacy of folks using Serial_Item instead of X10_Item. I'd appreciate any guidance or MisterHouse lore in order to understand this. > > > I also noticed that with the old radio shack controller if I have code > > like this: > > > > $test_button = new X10_Item('N2'); > > if (state_now $test_button) { > > my $state = state $test_button; > > my $remark = "You just pushed the N2 button and it is $state" > > print_log "$remark"; > > speak $remark; > > } > > > > If I push the unit 2 button I will get > > > > You just pushed the N2 button and it is manual > > Misterhouse returns this state unless it gets an on/off very quickly. > But you should also get an on/off later once you press the on/off > button. You should be able to just ignore the first one by adding: > > unless ($state eq 'manual') { > ... > } I don't seem to be geting the on/off reliably. Sometimes it works others it doesn't. For example here's a code snippet: $test_button = new X10_Item('N2'); if (state_now $test_button) { my $state = state $test_button; print_log "You just smushed the N2 button and it is $state "; } Here's an example from the log when pushing the 2 button and then the on button on the Radio Shack controller set to house code N when it works: 02/25/04 01:48:22 PM You just smushed the N2 button and it is on 02/25/04 01:48:22 PM XN2NJ: test_button on 02/25/04 01:48:18 PM You just smushed the N2 button and it is manual 02/25/04 01:48:18 PM XN2: test_button manual And when it fails. 02/25/04 01:45:04 PM X10: Unmatched incoming data=XNJ 02/25/04 01:44:58 PM You just smushed the N2 button and it is manual 02/25/04 01:44:58 PM XN2: test_button manual Here's the 2 pause off sequence working: 02/25/04 01:49:58 PM You just smushed the N2 button and it is off 02/25/04 01:49:58 PM XN2NK: test_button off 02/25/04 01:49:54 PM You just smushed the N2 button and it is manual 02/25/04 01:49:53 PM XN2: test_button manual And failing: 02/25/04 01:51:41 PM X10: Unmatched incoming data=XNK 02/25/04 01:51:36 PM You just smushed the N2 button and it is manual 02/25/04 01:51:36 PM XN2: test_button manual It seems to be timing dependent, although I can't prove it. It looks like if the on/off comes within about 4 seconds it works, otherwise it doesn't. It looks like the code which is trying to model the state of the X10 devices after they respond to the inputs is buggy here. Of course for what I'm trying to do I don't want any such modeling, but if I did there are some other issues. For example, X10 devices typically listen for their address, and respond to any commands which follow it so if you send A1 A2 on then A1 and A2 should both turn on. But if I do N1 N2 on then the above code when it works, reports that N2 is on, but if I do N2 N1 on it doesn't, n2 is reported as manual no matter how quickly the sequence comes. |
From: Bruce W. <br...@mi...> - 2004-02-25 21:19:31
|
> > > With Mister House, I did some playing around with the N controller. > > > My first code just reported when X10item('N2') changed and > it's state. > > > I then added another test to see if the system off or all > lights on was > > > pushed by checking the state of X10item('N') (I also tried 'N0'). > > > > I found this to be the best way to watch for all-on/all-off events: Kirk's code should work, but so should your original idea of simply creating a simple X10_Item, like this: $test_x10_n = new X10_Item 'N'; print_log "house=N state=$state" if $state = state_now $test_x10_n; > I'm surprised that someone hasn't tried to do this already. I'm actually > not all that enamored with the voice control interface, and I'm not sure > how I'd implement voice input throughout the house anyway. We use Voice_Cmd objects for creating any arbitrary command, even if we don't use the VR interface (most of us currently don't, due to VR engines not being accurate enough without a dedicated headset mic). All Voice_Cmd commands can be run by a variety of interface (e.g. web, instant messaging, command line). > I've noticed that some code for Mister House uses X10_Item('H1') where > other code uses Serial_Item('XH1') to refer to house code H, unit 1. I > haven't been able yet to decipher why. Either will work. If you look in lib/X10_Item.pm you will see it is a child of Serial_Item, with the X prepended and various suffix postpended (e.g. H1 ON -> XH1AJ, H1 OFF -> XH1AK). If the predefined X10_Item states don't fit well, we use Serial_Item objects instead. > I printed out X10_Items.pm, Serial_Item.pm, and Generic_Item.pm. I would > have expected that the Serial_Item class would handle general serial > data, and that the X10_Item subclass would have the X10 handling, but I > noticed that the Serial_Item code seems to have the code for propagating > states to other X10 units when all-on or all-off is received. Based on > my background in Smalltalk and Java, it appears as if this code would > benefit from re-factoring to get the X10 processing into the X10_Items > class and out of the serial class. Perhaps it's this way do to a legacy > of folks using Serial_Item instead of X10_Item. Yeah, you are right, that X10 code is a bit scattered. There is also some X10 specific code bin/mh module. We could clean that up, but I'm afraid of what we might break, especially on the incoming X10 processing. > It seems to be timing dependent, although I can't prove it. It looks > like if the on/off comes within about 4 seconds it works, otherwise it > doesn't. Yes, you can use the mh.ini x10_multikey_delay parm to control that delay, which delays to 5 seconds. Bruce |
From: Rick D. <den...@ct...> - 2004-02-26 01:33:31
|
On Wed, 2004-02-25 at 16:10, Bruce Winter wrote: > > > It seems to be timing dependent, although I can't prove it. It looks > > like if the on/off comes within about 4 seconds it works, otherwise it > > doesn't. > > Yes, you can use the mh.ini x10_multikey_delay parm to control that delay, > which delays to 5 seconds. There still seems to be a bug in the state tracking. The X10 devices I've seen look like they have a state table which looks like something like this State Input Next State Action Idle myAddress Alert none Alert anyAddr Alert none Alert cmd Alert2 execute cmd Alert2 cmd Alert2 execute cmd Alert2 myAddr Alert1 none Alert2 otherAddr Idle none In other words an device will stay armed for a command from the time it hears its address until it gets a command, and after that will stay armed until it sees another address in which case it will need to see its address again before it arms. The current code seems to only remember the last device addressed, so if it sees a1 a2 on it will only think that a2 is on whereas both a1 and a2 will really be on. The way xtend works it let's you act directly on the x10 signals rather than the x10 device state changes, it also keeps track of what it thinks the state of the actual x10 devices is and lets you query that state. Of course neither xtend nor mister house can really know the state of the real devices which have manual control and no state reporting, but that's the wonderful world of X10. |
From: Bruce W. <br...@mi...> - 2004-02-27 04:41:49
|
> In other words an device will stay armed for a command from the time it > hears its address until it gets a command, and after that will stay > armed until it sees another address in which case it will need to see > its address again before it arms. > > The current code seems to only remember the last device addressed, so if > it sees a1 a2 on it will only think that a2 is on whereas both a1 and a2 > will really be on. I think you are right. If you send A1 A2 ON, the X10 devices A1 and A2 both go on. But mh is only smart enough to register A2 ON. We could probably fix this, but it might be a bit messy. It seems the only time this happens is when you manually use a maxi-controler that has ON/OFF buttons seperate from 1->16 buttons, then select multiple multiple address buttons before pushing ON/OFF. Sound right? Do you do that often? Bruce |
From: Rick D. <ri...@de...> - 2004-02-27 16:32:27
|
Well I used to do this a lot when I was living in a condo and all the X10 devices fit in one house code. It's probably not an issue for me now, maybe for others. I was reading the documentation last night (imagine that!) and ran across the X10_Transmitter item. This looks like what I SHOULD be using to represent my button controllers. I guess I'll have to look at that. I've got things up and running a bit. I seem to be leaking memory at the rate of about 4.5 mb/hour. Any advice on how to track that down? On Thu, 2004-02-26 at 23:31, Bruce Winter wrote: > > In other words an device will stay armed for a command from the time it > > hears its address until it gets a command, and after that will stay > > armed until it sees another address in which case it will need to see > > its address again before it arms. > > > > The current code seems to only remember the last device addressed, so if > > it sees a1 a2 on it will only think that a2 is on whereas both a1 and a2 > > will really be on. > > I think you are right. If you send A1 A2 ON, the X10 devices A1 and A2 both > go on. But mh is only smart enough to register A2 ON. > > We could probably fix this, but it might be a bit messy. It seems the only > time this happens is when you manually use a maxi-controler that has ON/OFF > buttons seperate from 1->16 buttons, then select multiple multiple address > buttons before pushing ON/OFF. Sound right? Do you do that often? > |
From: Rick D. <ri...@de...> - 2004-02-27 20:27:11
|
I've been playing with accessing Mr House through my Apache web server, by putting in a ProxyPass directive pointing to port 8080. It works fine for html. I'd like to get wap access working as well. I've pointed my phone at <myUrlToGetToMisterHouse>/sub?menu_wml But if I try to access it from the phone I get Web response function not authorized: &menu_wml I think I need to set the password_allow_phones setting in mh.private.ini but I can't figure out where to get the value. Is this something I can get out of the Apache log, or somewhere from Mr. House itself? |
From: Domain <do...@va...> - 2004-02-27 21:54:10
|
Sorry to hijack this thread, but can I see the snippet of your apache.conf file that lets MH thru? Many thanks, Lee -----Original Message----- From: Rick DeNatale [mailto:ri...@de...] Sent: 27 February 2004 20:16 To: MisterHouse Users Subject: [misterhouse-users] WAP Phone Access Question I've been playing with accessing Mr House through my Apache web server, by putting in a ProxyPass directive pointing to port 8080. It works fine for html. I'd like to get wap access working as well. I've pointed my phone at <myUrlToGetToMisterHouse>/sub?menu_wml But if I try to access it from the phone I get Web response function not authorized: &menu_wml I think I need to set the password_allow_phones setting in mh.private.ini but I can't figure out where to get the value. Is this something I can get out of the Apache log, or somewhere from Mr. House itself? ------------------------------------------------------- SF.Net is sponsored by: Speed Start Your Linux Apps Now. Build and deploy apps & Web services for Linux with a free DVD software kit from IBM. Click Now! http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click ________________________________________________________ To unsubscribe from this list, go to: http://sourceforge.net/mail/?group_id=1365 |
From: Rick D. <ri...@de...> - 2004-02-28 13:24:53
|
On Fri, 2004-02-27 at 16:46, Domain wrote: > Sorry to hijack this thread, but can I see the snippet of your apache.conf > file that lets MH thru? > Let's say you are running MH on 192.168.0.5 on the default http port of 8080, and that you have a local domain of mydomain.com Just put the following line in your apache http.conf file ProxyPass /mh/ http://192.168.0.5:8080/ Then a url access of http://mydomain.com/mh/whatever would go to your mh http server as http://192.168.0.5:8080/whatever |
From: Rick D. <ri...@de...> - 2004-02-28 13:58:36
|
Oh, I also forgot that you need to load the proxy modules, I've got the following in my httpd.conf file LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_connect_module modules/mod_proxy_connect.so It's been a while since I added this bit to my config file, I suspect that the ftp proxy is not necessary to get to mh. When all else fails read the apache docs. On Sat, 2004-02-28 at 08:13, Rick DeNatale wrote: > On Fri, 2004-02-27 at 16:46, Domain wrote: > > Sorry to hijack this thread, but can I see the snippet of your apache.conf > > file that lets MH thru? > > > > Let's say you are running MH on 192.168.0.5 on the default http port of > 8080, and that you have a local domain of mydomain.com > > Just put the following line in your apache http.conf file > > ProxyPass /mh/ http://192.168.0.5:8080/ > > Then a url access of http://mydomain.com/mh/whatever > would go to your mh http server as http://192.168.0.5:8080/whatever > > > > ------------------------------------------------------- > SF.Net is sponsored by: Speed Start Your Linux Apps Now. > Build and deploy apps & Web services for Linux with > a free DVD software kit from IBM. Click Now! > http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click > ________________________________________________________ > To unsubscribe from this list, go to: http://sourceforge.net/mail/?group_id=1365 |
From: Bruce W. <br...@mi...> - 2004-02-29 05:33:54
|
> I've been playing with accessing Mr House through my Apache web server, > by putting in a ProxyPass directive pointing to port 8080. It works fine > for html. > > I'd like to get wap access working as well. I've pointed my phone at > > <myUrlToGetToMisterHouse>/sub?menu_wml > > But if I try to access it from the phone I get > > Web response > function not > authorized: > &menu_wml > > I think I need to set the password_allow_phones setting in > mh.private.ini but I can't figure out where to get the value. > > Is this something I can get out of the Apache log, or somewhere from Mr. > House itself? The simple fix is to add these to the file pointed to with password_allow_file: menu.pl &menu_html &menu_wml &menu_run &menu_run_response The fancier way is to set this mh.ini parm: @ - password_allow_phones enables menu commands to be run without a @ password from specified wap cell phones. Enter a comma delimited @ list of phone IDs from the the x-up-subno field echoed in @ mh/data/logs/menu_wml log files. @ password_allow_phones = your_uniq_id_.upl.sprintpcs.com password_allow_phones = But that subno field check, in lib/menu_code.pl, might need some updating to work with other phones if they don't have that field. Bruce |
From: Rick D. <den...@ct...> - 2004-02-27 16:20:42
|
Well I used to do this a lot when I was living in a condo and all the X10 devices fit in one house code. It's probably not an issue for me now, maybe for others. I was reading the documentation last night (imagine that!) and ran across the X10_Transmitter item. This looks like what I SHOULD be using to represent my button controllers. I guess I'll have to look at that. I've got things up and running a bit. I seem to be leaking memory at the rate of about 4.5 mb/hour. Any advice on how to track that down? On Thu, 2004-02-26 at 23:31, Bruce Winter wrote: > > In other words an device will stay armed for a command from the time it > > hears its address until it gets a command, and after that will stay > > armed until it sees another address in which case it will need to see > > its address again before it arms. > > > > The current code seems to only remember the last device addressed, so if > > it sees a1 a2 on it will only think that a2 is on whereas both a1 and a2 > > will really be on. > > I think you are right. If you send A1 A2 ON, the X10 devices A1 and A2 both > go on. But mh is only smart enough to register A2 ON. > > We could probably fix this, but it might be a bit messy. It seems the only > time this happens is when you manually use a maxi-controler that has ON/OFF > buttons seperate from 1->16 buttons, then select multiple multiple address > buttons before pushing ON/OFF. Sound right? Do you do that often? > > Bruce > > > > > ------------------------------------------------------- > SF.Net is sponsored by: Speed Start Your Linux Apps Now. > Build and deploy apps & Web services for Linux with > a free DVD software kit from IBM. Click Now! > http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click > ________________________________________________________ > To unsubscribe from this list, go to: http://sourceforge.net/mail/?group_id=1365 |
From: Bruce W. <br...@mi...> - 2004-02-29 05:27:33
|
> Well I used to do this a lot when I was living in a condo and all the > X10 devices fit in one house code. It's probably not an issue for me > now, maybe for others. > > I was reading the documentation last night (imagine that!) and ran > across the X10_Transmitter item. This looks like what I SHOULD be using > to represent my button controllers. I guess I'll have to look at that. > > I've got things up and running a bit. I seem to be leaking memory at the > rate of about 4.5 mb/hour. Any advice on how to track that down? There is a 'start the memory leak checker' command that disables one member at a time, logging memory usage. Takes a while to run. Are you on linux? There is a known problem with that you can fix with export LANG=C and/or using the compiled mh. Bruce |