thank you @rlkoshak for your hints. I went through persistency of the Item, made some tests and stucked.
Goal: store all Item configuration and restore after condition occures.
My Thermostate Items:
// Thermostat SPIRIT
Dimmer BS_Office_Thermostat_Valve "Office Valve [%d %%]" <radiator> (BS_Office) ["Valve"] {channel="zwave:device:8985008e:node6:switch_dimmer"}
Number BS_Office_Thermostat_Temp "Office Thermostat Temp. [%.1f °C]" <temperature> (BS_Office, gTemperature, gHeating) ["Themostat Temp."] {channel="zwave:device:8985008e:node6:sensor_temperature"}
Number BS_Office_Thermostat_Mode "Office Thermostat Mode" <settings> (BS_Office, gThermostatMode) ["Themostat Mode"] {channel="zwave:device:8985008e:node6:thermostat_mode"}
Number BS_Office_Thermostat_SetpointHeat "Office Thermostat Setpoint Heat [%.1f °C]" <temperature> (BS_Office, gHeating) ["Set Point (heat)"] {channel="zwave:device:8985008e:node6:thermostat_setpoint_heating"}
Number BS_Office_Thermostat_SetpointEHeat "Office Thermostat Setpoint EHeat [%.1f °C]" <temperature> (BS_Office, gHeating) ["Set Point (EHeat)"] {channel="zwave:device:8985008e:node6:thermostat_setpoint_heating_econ"}
Number BS_Office_Thermostat_Battery "Office Thermostat" <batterylevel> (BS_Office, gHeating, gBattery) ["Battery"] {channel="zwave:device:8985008e:node6:battery-level"}
Switch BS_Office_Thermostat_AlarmSystem "Office Thermostat System [%s]" <alarm> (BS_Office, gHeating, gAlarm) ["Alarm System"] {channel="zwave:device:8985008e:node6:alarm_system"}
Switch BS_Office_Thermostat_AlarmPower "Office Thermostat Power [%s]" <alarm> (BS_Office, gHeating, gAlarm) ["Alarm Power"] {channel="zwave:device:8985008e:node6:alarm_power"}
//Test button
Switch TestButton "test button" <switch>
My rule:
import java.util.Map
val Map ThermostatOfficePresistency = null
rule "Test"
when
Item TestButton received update
then
if (TestButton.state == ON){
ThermostatOfficePresistency = storeStates(BS_Office_Thermostat_Valve, BS_Office_Thermostat_Temp, BS_Office_Thermostat_Mode, BS_Office_Thermostat_SetpointHeat, BS_Office_Thermostat_SetpointEHeat)
logInfo("test:", "Thermostat Persistency (ON): " + ThermostatOfficePresistency )
}
else if
(TestButton.state == OFF){
logInfo("test:", "Thermostate Mode " + BS_Office_Thermostat_Mode )
restoreStates(BS_Office_Thermostat_Valve, BS_Office_Thermostat_Temp, BS_Office_Thermostat_Mode, BS_Office_Thermostat_SetpointHeat, BS_Office_Thermostat_SetpointEHeat)
logInfo("test:", "Thermostat Mode after restore: " + BS_Office_Thermostat_Mode )
}
end
My intention is
- when switch is ON -> Items and their states are going to be stored -> this works perfectly
- after values stored I am changing the state of TempSet manualy and check it in the log before restoring items. Results ov the manual change and later restoring shall be visible in logs.
I do sth wrong with restore states. I am not sure if I can write this way. I assume there is an error between defined variables.
Logfile:
2020-10-28 18:09:25.246 [vent.ItemStateChangedEvent] - TestButton changed from OFF to ON
==> /var/log/openhab2/openhab.log <==
2020-10-28 18:09:27.526 [INFO ] [eclipse.smarthome.model.script.test:] - Thermostat Persistency (ON): {BS_Office_Thermostat_Temp (Type=NumberItem, State=20.16, Label=Office Thermostat Temp., Category=temperature, Tags=[Themostat Temp.], Groups=[BS_Office, gTemperature, gHeating])=20.16, BS_Office_Thermostat_Valve (Type=DimmerItem, State=16, Label=Office Valve, Category=radiator, Tags=[Valve], Groups=[BS_Office])=16, BS_Office_Thermostat_Mode (Type=NumberItem, State=1, Label=Office Thermostat Mode, Category=settings, Tags=[Themostat Mode], Groups=[BS_Office, gThermostatMode])=1, BS_Office_Thermostat_SetpointHeat (Type=NumberItem, State=19, Label=Office Thermostat Setpoint Heat, Category=temperature, Tags=[Set Point (heat)], Groups=[BS_Office, gHeating])=19, BS_Office_Thermostat_SetpointEHeat (Type=NumberItem, State=19, Label=Office Thermostat Setpoint EHeat, Category=temperature, Tags=[Set Point (EHeat)], Groups=[BS_Office, gHeating])=19}
==> /var/log/openhab2/events.log <==
2020-10-28 18:09:29.434 [ome.event.ItemCommandEvent] - Item 'TestButton' received command OFF
2020-10-28 18:09:29.458 [vent.ItemStateChangedEvent] - TestButton changed from ON to OFF
==> /var/log/openhab2/openhab.log <==
2020-10-28 18:09:29.475 [INFO ] [eclipse.smarthome.model.script.test:] - Thermostate Mode BS_Office_Thermostat_Mode (Type=NumberItem, State=1, Label=Office Thermostat Mode, Category=settings, Tags=[Themostat Mode], Groups=[BS_Office, gThermostatMode])
2020-10-28 18:09:29.487 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Test': An error occurred during the script execution: Could not invoke method: org.eclipse.smarthome.model.script.actions.BusEvent.restoreStates(java.util.Map) on instance: null