Actually, the last sendCommand
should not send NULL
.
Instead one should use “” (emtpy string) or 0 or some other value depending on the item type.
NULL
should be only on system startup
Not necessarily. For example, I use the expire binding to set Items back to NULL when the sensor has not reported in a long time. This tells me that the sensor is not functional and therefore whatever it is sensing is in an unknown state and I write my rules accordingly.
You are right one would not want to sendCommand NULL but it is perfectly reasonable to postUpdate(NULL) or let Expire do it for you.
I also implemented the “previousState != NULL” trick to prevent rules from triggering with RestoreOnStartup but the use of the implicit variable previousState is generating an error:
Rule 'Scene CMD_mCR_command': An error occurred during the script execution: index=0, size=0
Below is the rule:
rule "Scene CMD_mCR_command"
when
Item CMD_mCR_command received update 15 //triple-click
then
if(previousState != NULL){
DW_mCR_portail.sendCommand(50)//TOGGLE
}
end
When replacing by CMD_mCR_command.previousState().state it works but this is not what I need.
Any idea?
previousState only exists when a Rule is triggered by a changed trigger.
There is no way I know of to determine if an Item’s previous state was NULL with any other Rule trigger.
Thank you! I should read the doc with more concentration
I applied a workaround with a global boolean variable that is set to true when the rule is first triggered at startup (due to RestoreOnStartup behavior).
var my_item_initialized = new Boolean(false)
rule "Rule that must not be triggered during RestoreOnStartup"
when
Item MyItem_WithRestoreOnStartup received update
then
if(my_item_initialized){
//code that must be executed only after RestoreOnStartup is completed
}
else{
my_item_initialized = true
}
end