09-23-2009, 03:20 PM
Having upgraded just recently from CF 2.2.3 to the latest 3.1.1, I seem to have - possibly coincidentally? - suffered a raft of failures, some of which probably aren\'t related, but this one I\'m fairly certain is...
Some time ago I modified the keySwitchArm responses to test which keypad was being used to arm the system, so that I could ensure that KP2 - which is by my bedside could only ever arm to night mode.. (prior to this, I had inadvertantly set to away mode by mistake). This had been working perfectly until the first time I uploaded a config with the new version of comfigurator...
In CF 2, - using the response wizard - if you go through the wizard and select the appropriate options to test for (say) \"IF KeypadID = 1\" - when you hit OK to save that command into the response, the actual code that appears is: \"IF KeypadID=65\"
I.E. ID 1 is translated to the value 65, ID 2 to value 66, and so on... Upload this, and it worked perfectly, and my keypads behaved in the manner I required. I then subsequently opened that CCL file with CF 3.1.1, made a few tiny changes, and saved it as a new CCLX, and uploaded that. Only later - the next time I left the house, - did I notice that the away arm sequence at the final exit door was \"different\" - i.e. it wasn\'t announcing \"please exit\", and when I opened the door to leave I got a zone open error, and when I finally left the building the arm completed but there was no chirp from the external bellbox.
Only after I returned & checked the logs did I notice that it had armed to night mode instead of away mode. Obviously I initially doubted myself, and thought that I must have hit the wrong keypad button by mistake, but the next time I left I was very deliberate and double-checked my actions, and sure enough it was definately arming to night mode when it should have been going to away mode. So I checked the code in the response, and I noticed that ALL the If...Then conditionals were missing! Instead of containing this code: (which is what appears in CF2)
If SecurityMode = SecurityOff Then
If KeypadId = 65 Then
KeySwitchArm VacationMode
Do AwayModeResponse
End If
If KeypadId = 66 Then
KeySwitchArm NightMode
Do NightModeRespons
End If
End If
The response actually contained this code:
KeySwitchArm VacationMode
Do AwayModeResponse
KeySwitchArm NightMode
Do NightModeRespons
What I then did was to open my old CCL file with CF 3.1.1 to go & look at the response, and the attached graphic shows what I saw...
Clearly it didn\'t like the translated values for the keypad ID\'s that the older version of CF had substituted in the code in place of the 1-8 that were offered in the wizard and as a consequence, it looks like it just completely removed all the conditional statements from the response!
The most annoying thing about this is that as far as I can recall, there was absolutely no warning whatosever from CF 3.1.1 at any point that there were what it considered to be errors in the responses... - it perfectly happily opened the older CCL, (no warning), saved it as a new CCLX (no warning) and uploaded the config to Comfort (no warning). As a result some fairly crucial behaviour was FUBAR\'ed.
I\'m guessing that the values of 65, 66, etc. are the internal values for the keypads that correspond to ID\'s 1, 2, etc. and that Comfigurator has always translated the human-friendly ID number into the internal value? - and that older versions did that translation right when the response is being edited so that the modifed values are visible to the user straight away? - Has the new version changed this behaviour perhaps? - and potentially introduced a bug in the process such that any reference in a CCL file to a keypad ID value will be rejected as invalid?
To fix it I basically had to re-write the response using the response wizard in CF 3.1.1, reselecting the IF keypadID conditions, at which point CF3.1.1 saved the human-readable ID value in the response code shown in the UI - i.e...
If SecurityMode = SecurityOff Then
If KeypadId = 1 Then
KeyswitchArm VacationMode
Do AwayModeResponse
End If
If KeypadId = 2 Then
KeyswitchArm NightMode
Do NightModeRespons
End If
End If
Paul G.
Some time ago I modified the keySwitchArm responses to test which keypad was being used to arm the system, so that I could ensure that KP2 - which is by my bedside could only ever arm to night mode.. (prior to this, I had inadvertantly set to away mode by mistake). This had been working perfectly until the first time I uploaded a config with the new version of comfigurator...
In CF 2, - using the response wizard - if you go through the wizard and select the appropriate options to test for (say) \"IF KeypadID = 1\" - when you hit OK to save that command into the response, the actual code that appears is: \"IF KeypadID=65\"
I.E. ID 1 is translated to the value 65, ID 2 to value 66, and so on... Upload this, and it worked perfectly, and my keypads behaved in the manner I required. I then subsequently opened that CCL file with CF 3.1.1, made a few tiny changes, and saved it as a new CCLX, and uploaded that. Only later - the next time I left the house, - did I notice that the away arm sequence at the final exit door was \"different\" - i.e. it wasn\'t announcing \"please exit\", and when I opened the door to leave I got a zone open error, and when I finally left the building the arm completed but there was no chirp from the external bellbox.
Only after I returned & checked the logs did I notice that it had armed to night mode instead of away mode. Obviously I initially doubted myself, and thought that I must have hit the wrong keypad button by mistake, but the next time I left I was very deliberate and double-checked my actions, and sure enough it was definately arming to night mode when it should have been going to away mode. So I checked the code in the response, and I noticed that ALL the If...Then conditionals were missing! Instead of containing this code: (which is what appears in CF2)
If SecurityMode = SecurityOff Then
If KeypadId = 65 Then
KeySwitchArm VacationMode
Do AwayModeResponse
End If
If KeypadId = 66 Then
KeySwitchArm NightMode
Do NightModeRespons
End If
End If
The response actually contained this code:
KeySwitchArm VacationMode
Do AwayModeResponse
KeySwitchArm NightMode
Do NightModeRespons
What I then did was to open my old CCL file with CF 3.1.1 to go & look at the response, and the attached graphic shows what I saw...
Clearly it didn\'t like the translated values for the keypad ID\'s that the older version of CF had substituted in the code in place of the 1-8 that were offered in the wizard and as a consequence, it looks like it just completely removed all the conditional statements from the response!
The most annoying thing about this is that as far as I can recall, there was absolutely no warning whatosever from CF 3.1.1 at any point that there were what it considered to be errors in the responses... - it perfectly happily opened the older CCL, (no warning), saved it as a new CCLX (no warning) and uploaded the config to Comfort (no warning). As a result some fairly crucial behaviour was FUBAR\'ed.
I\'m guessing that the values of 65, 66, etc. are the internal values for the keypads that correspond to ID\'s 1, 2, etc. and that Comfigurator has always translated the human-friendly ID number into the internal value? - and that older versions did that translation right when the response is being edited so that the modifed values are visible to the user straight away? - Has the new version changed this behaviour perhaps? - and potentially introduced a bug in the process such that any reference in a CCL file to a keypad ID value will be rejected as invalid?
To fix it I basically had to re-write the response using the response wizard in CF 3.1.1, reselecting the IF keypadID conditions, at which point CF3.1.1 saved the human-readable ID value in the response code shown in the UI - i.e...
If SecurityMode = SecurityOff Then
If KeypadId = 1 Then
KeyswitchArm VacationMode
Do AwayModeResponse
End If
If KeypadId = 2 Then
KeyswitchArm NightMode
Do NightModeRespons
End If
End If
Paul G.

