From: <s-m...@tr...> - 2000-09-27 06:59:09
|
I found some peculiar behavior regarding the LM14 (smart light module) and the CM11 under Misterhouse. Since finding that the LM14 unit code C7 works much better than C4 (thanks Bruce!), I have noticed that the "percentage" settings, like: set $heat_lamp 12% are not very reliable. Sometimes they give a "bad housecode" error, with the CM11 rejecting housecodes of "%". (It's splitting the percentage state into a bogus housecode and unit.) I've traced it a bit through the code, and found that sometimes, just sometimes the Serial_Item.pm code takes a bad path in set(). When it goes to fetch the $serial_data, it can take one of these two paths: my $serial_data; if (defined $self->{id_by_state}{$state}) { # CORRECT $serial_data = $self->{id_by_state}{$state}; } else { # BAD BAD BAD for LM11 percentages, where $state is like "18%" $serial_data = $state; } This is where I get stumped. What determines which state value will be used? How are they different? When the "$self" expression is defined, the code correctly fetches the housecode and setting, like "XC7&P5". When it's not defined, it gets the raw percentage value which doesn't seem to belong. Later in the code, it checks for "&" and does the right thing. I don't think it's supposed to get into this neck of the woods with an uncoverted percentage. Any thoughts on why, only sometimes, "$self->{id_by_state}{$state}" is not defined when I use percentage settings? Thanks, -Steve |
From: Bruce W. <br...@mi...> - 2000-09-28 02:09:20
|
> Since finding that the LM14 unit code C7 works much better than C4 I haven't had time to debug that problem yet. > (thanks Bruce!), I have noticed that the "percentage" settings, like: > set $heat_lamp 12% > are not very reliable. Sometimes they give a "bad housecode" error, > with the CM11 rejecting housecodes of "%". The problem here is we don't have all % numbers defined in mh/lib/X10_Item.pm. Currently it is only defined for every 5%. If we wanted more resolution than 5%, we could either add it to X10_Item.pm, or we could put in a special hook into Serial_Item.pm Do you think < 5% resolution would be useful? I think the LM14 supports 64 levels, so that could give us about 2% resolution. Bruce |
From: Bill S. <bs...@vi...> - 2000-09-28 04:32:23
|
I'd suggest adding 100 mappings, one for each percent (true, 3% and 4% (etc) will likely map to the same level, but it seems easier than remebering that 2, 5, 7, 10 are valid and 4,6,89 are not. Additionally, we may want to add another symbol to directly map all 64 levels, something like L00 - L63, unless there is already an easy way to generate each level. My 2 cents, your mileage may vary. Bill -----Original Message----- From: mis...@li... [mailto:mis...@li...]On Behalf Of Bruce Winter Sent: Wednesday, September 27, 2000 7:09 PM To: mis...@li... Subject: RE: [misterhouse-users] Strange bug regarding LM14 and percentages > Since finding that the LM14 unit code C7 works much better than C4 I haven't had time to debug that problem yet. > (thanks Bruce!), I have noticed that the "percentage" settings, like: > set $heat_lamp 12% > are not very reliable. Sometimes they give a "bad housecode" error, > with the CM11 rejecting housecodes of "%". The problem here is we don't have all % numbers defined in mh/lib/X10_Item.pm. Currently it is only defined for every 5%. If we wanted more resolution than 5%, we could either add it to X10_Item.pm, or we could put in a special hook into Serial_Item.pm Do you think < 5% resolution would be useful? I think the LM14 supports 64 levels, so that could give us about 2% resolution. |
From: Bruce W. <br...@mi...> - 2000-09-30 00:03:05
|
> I'd suggest adding 100 mappings, one for each percent (true, 3% > and 4% (etc) > will likely map to the same level, but it seems easier than > remebering that > 2, 5, 7, 10 are valid and 4,6,89 are not. Additionally, we may > want to add > another symbol to directly map all 64 levels, something like L00 - L63, > unless there is already an easy way to generate each level. They way we have the states set up now, allowing for 100+ states for every X10 item would be pretty memory in-effecient. I'll take a look at coding a check into Serial_Item instead. Bruce |
From: <s-m...@tr...> - 2000-09-28 05:44:40
|
-=> On Wed, 27 Sep 2000 21:09:17 -0500, "Bruce Winter" <br...@mi...> said: >> (thanks Bruce!), I have noticed that the "percentage" settings, like: >> set $heat_lamp 12% >> are not very reliable. Sometimes they give a "bad housecode" error, >> with the CM11 rejecting housecodes of "%". > The problem here is we don't have all % numbers defined in > mh/lib/X10_Item.pm. Currently it is only defined for every 5%. Doh! That would explain it. I was computing the percentage (based on the current heat and the target temperature), as anything from 0 to 100%. I didn't know it had 5% steps only. > Do you think < 5% resolution would be useful? I think the LM14 > supports 64 levels, so that could give us about 2% resolution. Now that I know, I fixed it with just this: sub percentage { my ($percent) = @_; return ("&P" . int ($percent * 63 / 100 + 0.5)); } set $terrarium_heat &percentage($heat_level); etc. Now I send &Pxx levels instead of a percentage, and it works every time. (The finer granularity does seem to make a difference. By tweaking the heater by small steps, I can get pretty tight temperature control.) Thanks for the heads-up. -Steve |