From: Piet D. <pi...@ww...> - 2002-12-26 11:43:56
|
On Thu, 2002-12-26 at 00:01, Jason I. Comander wrote: > > Happy holidays to everyone... > > A little progress on Leviton 2-way STATUS and CM11! > > Tonight I spent way too long trying to figure out how mh is parsing the > STATUS commands sent out by my HCS-08-1TW. This is a nice switch that > Leviton newly released, and I think other people might start using it too, > so here goes... Yep, for the price they seem like the best deal in town. > > When the switch is flipped off manually, it sends out "0302f1fe", which to > my surprise shows up as different event_data at different times: > J5JSTATUS_OFF, J5J5STATUS_OFF, J5J2STATUS_OFF. This is weird- why? I haven't seen this. Perhaps it's a windows bug. > Whichever way it comes out, the current code does not parse it correctly: > Line 2783 of mh\mh\bin\mh is > my ($house, $device, $state) = $event_data1 =~ > /(\S)(\S)STATUS_(ON|OFF)/; > which gets the house code and device switched. So if we switch it to: > my ($house, $device, $state) = $event_data1 =~ > /(\S)(\S)\S{0,2}STATUS_(ON|OFF)/; Why add the {0,2} to the regular expression (RE)? The current RE seems fine to me and I don't seen in the mh perl doc what {0,2} means. I'm still bit puzzled by the current RE. The value of $event_data1 when I put a breakpoint at 2783 is "A1ASTATUS_ON". Seems to me the the 1st \S should evaluate to A, the second \S should evaluate to 1. So I guess perl has an implicate ".*" sort of: /.*(\S)(\S)STATUS_(ON|OFF)/ that would explain how $house is being set with "1" and $device with "A". I haven't seen the various forms to the STATUS message showing up in log. I was wondering what Serial_Item.pm'sub serial_items_by_id() is doing. It's returning at line 16 $refs I assume, but I can't see them. $state is set to 'off'. Seems there is only one ref in refs. I'd really like to be able to see the data better. Every time I get to line 2783 $event_data is the same "XA1A1STATUS_ON", or OFF. I'm not seeing any characters being dropped. Why are there two versions of sub serial_items_by_id(). Anyone know how to print $ref into something useful? All I can get is a HASH value: [14237->14237]DB<> print $ref X10_Item=HASH(0x98aa89c) [14237->14237]DB<> print $$ref Not a SCALAR reference at (eval 888)[/usr/lib/perl5/5.8.0/perl5db.pl:17] line 2. > it parses this status request correctly and should be backward-compatible > with whatever hardware the code was originally written for. > > So if I make the change above and put the following line in items.mht, > "X10A, J5, switch2, All_Lights|Office" > then I get a successful debug message > "receive buffer length=3, mask=00000010, data_h=0302f1fe. > CM11 db: data=J5JSTATUS_OFF > Serial data: event_type=X, event_data=XJ5JSTATUS_OFF > CM11 Status results: data=J5JSTATUS_OFF event_data=XJ5JK > state=off" > > Note the last line with "CM11 Status results", which shows that all of the > code around line 2792 is being run. I also get this "CM11 Status results" > message if instead of the line in items.mht, I put in a code file: > "$switch2 = new Serial_Item('XJ5JJ', ON); > $switch2 -> add ('XJ5JK', OFF);" > but the "CM11 Status results" line is NOT displayed if I instead put: > "$switch2 = new Serial_Item('XJ5JSTATUS_ON', ON); > $switch2 -> add ('XJ5JSTATUS_OFF', OFF);" The only items.mht I see in in bruce's example and I have too many problems on my system to run it. It seems to require a lot of stuff. Any chance on using the test directory, then we can compare notes and be on the same page. If someone can tell me what has to be done to get bruce's example working on RedHat 8.0 I'll give it another shot. > > But no matter how I define the item, even if I use the code that produces > the "CM11 Status results" message, I cannot tie together the status of > $switch2 to another item. If I put: > "$switch2 -> tie_items($office_torchiere);" Why are you tieing together the switch and the appliance module? I take it this is suppose to turn off an appliance when the switch is turned off. -piet > it does not really tie the the wall switch ($switch2) and another > appliance module ($office_torchiere) together. But if I use a maxi > controller to send a simple "J5 ON", then the tie works. Does the status > request fail to implement the tie because of the way the status request is > treated as a special case and the code that would execute the tie is not > executed because of the "return" statement on line ~2800? I tried adding > "&Serial_match_hooks($ref, $state, $event_data);" inside the loop to try > to get the tie to work, but it only works halfway: "XJ5JJ: switch2 on" is > printed in the log but the $office_torchiere does not turn on. I haven't > read through the code well enough to understand how the ties are > implemented to nail this problem! Any suggestions? > > Thanks, > Jason > > > On 24 Dec 2002, Piet Delaney wrote: > > > On Tue, 2002-12-24 at 17:07, Jason I. Comander wrote: > > > > > > > Any suggestions? I haven't looked at the cm11 code yet. I was hoping to > > > > avoid trying to figure out how the messages get parsed- it doesn't look > > > > straightforward! > > > > > > Ooops, I didn't mean to imply that I don't want to help figure > > > this out. I do know perl, and if given a start in the right direction I'd > > > be happy to work on getting the problem solved. > > > > Great, I'm learning all of the stuff that's been added to perl in the > > past decade since I last used it. I'm finding using ddd to debug it > > very helpfull. It makes it possible to see some/many of the consequence > > of executing a line of code. For example I'm getting the impression that > > you can assign a list: > > > > (var1, var2) = (var3, var4); # set var1 = var3, > > # set var2 = var4 > > > > I say this being used on returning results from one of the methods, > > cm11 as I recall. > > > > I think the cm11 code need a lot of changes to support the new > > extended commands and integrating the new scene/groups into mh > > groups will be non-trivial. > > > > I'm about to change my configuration a bit. My current configuration > > leds me to believe that the decoding and assignment of the STATUS is > > working on my system. So I suspect that something is likely wrong > > with your test code. I didn't see a problem on a quick look over. > > I don't think the changes I've made would effect the decoding of the > > STATUS from the switch. > > > > Feel free to call. > > > > piet > > (408) 243-8872 > > > > > > > > > > > > > > > > Happy holidays! > > > > > > -Jason > > > > > > > > > On Tue, 24 Dec 2002, Jason I. Comander wrote: > > > > > > > > > > > While we're on the subject of CM11.pm and DHC switches, I have a Leviton > > > > DHC HCS08-1TW two way switch, and I can't figure out how to get > > > > misterhouse to recognize the status commands sent out when the switch is > > > > manually flipped. I tried the code that Bruce suggested > > > > (http://sourceforge.net/mailarchive/message.php?msg_id=2395389) but > > > > nothing is recognized. I unplugged and replugged the CM11a and the way > > > > that the code is parsed seems to change! First it was J5J9STATUS_OFF, then > > > > J5JSTATUS_OFF, now J5J2STATUS_OFF. The data_h in the console window is > > > > the same before and after the cm11 unplugging and replugging, but the > > > > event_data changes. > > > > > > > > Any suggestions? I haven't looked at the cm11 code yet. I was hoping to > > > > avoid trying to figure out how the messages get parsed- it doesn't look > > > > straightforward! > > > > > > > > Thanks! > > > > > > > > -Jason > > > > > > > > Here is the data coming into the CM11: > > > > > > > > When turning J5 off at the switch: > > > > > > > > CM11 data=90 hex=5a > > > > mh CM11 data=Z data_d=90 > > > > > > > > CM11 data=3 hex=03 > > > > receive buffer length=3, mask=00000010, data_h=0302f1fe. > > > > CM11 db: data=J5JSTATUS_OFF > > > > Serial data: event_type=X, event_data=XJ5JSTATUS_OFF > > > > > > > > > > > > When turning J5 on at the switch: > > > > > > > > CM11 data=90 hex=5a > > > > mh CM11 data=Z data_d=90 > > > > > > > > CM11 data=3 hex=03 > > > > receive buffer length=3, mask=00000010, data_h=0302f1fd. > > > > CM11 db: data=J5JSTATUS_ON > > > > Serial data: event_type=X, event_data=XJ5JSTATUS_ON > > > > > > > > > > > > > > > > Here is the code: > > > > > > > > Line in items.mhp: > > > > X10A, J5, office_highhat, All_Lights|Office > > > > > > > > > > > > Code in office_light_tie.pl in code dir: > > > > > > > > $switch2 = new Serial_Item('XJ5JSTATUS_ON', ON); > > > > $switch2 -> add ('XJ5JSTATUS_OFF', OFF); > > > > > > > > if (state_now $switch2 eq "ON") { > > > > print_log "switch2\n"; > > > > print "switch2\n"; > > > > speak "switch 2"; > > > > } > > > > > > > > if (state_now $switch2) { > > > > print_log "switch2\n"; > > > > print "switch2\n"; > > > > speak "switch 2"; > > > > } > > > > > > > > if ($switch2 eq "ON") { > > > > print_log "switch2\n"; > > > > print "switch2\n"; > > > > speak "switch 2"; > > > > } > > > > if (state_now $switch2 'STATUS_ON') { > > > > print_log "office highhat on!!\n"; > > > > } > > > > > > > > > > > > Nothing was printed when switching the lights off and on. > > > > > > > > When I unplugged and replugged the CM11a, the way that the code is parsed > > > > seems to change! > > > > > > > > CM11 data=90 hex=5a > > > > mh CM11 data=Z data_d=90 > > > > > > > > CM11 data=3 hex=03 > > > > receive buffer length=3, mask=00000010, data_h=0302f1fe. > > > > CM11 db: data=J5J2STATUS_OFF > > > > Serial data: event_type=X, event_data=XJ5J2STATUS_OFF > > > > CM11 Status results: data=J5J2STATUS_OFF event_data=XJ2JK state=of > > > > > > > > CM11 data=90 hex=5a > > > > mh CM11 data=Z data_d=90 > > > > > > > > CM11 data=3 hex=03 > > > > receive buffer length=3, mask=00000010, data_h=0302f1fd. > > > > CM11 db: data=J5J2STATUS_ON > > > > Serial data: event_type=X, event_data=XJ5J2STATUS_ON > > > > CM11 Status results: data=J5J2STATUS_ON event_data=XJ2JJ state=on > > > > > > > > > > > > > > > > > > -- > > pi...@ww... > > > > -- pi...@ww... |