Hi all,
A toggle switch is turning two lights on / off. All is configured within the OH3-UI. It works stable. But the rule that triggers the script looks “awful”. Do you have a more elegant solution?
Thanks for any hints.
Simon
The hardware
A Toggle Switch is connected to a fibaro ZWAVE dimmer (S2). This THING is only used to deliver the position of the Toggle Switch. The fibaro ZWAVE dimmer has the CHANNEL Scene Number. It provides these numbers based on the interactions with the Toggle Switch: 20 (position 1), 21 (position 2), 24 (fast double push), 25 (fast triple push) and null.
The rule
The rule needs to track when the Scene Number changes from one number to another.
All simpler approaches lead into uncontrolled switching of the light (e.g. switching the light whenever openhab restarts.):
- A simple “update” of the state of the Scene Number, or
- A trigger like “null” to 21
- …
configuration: {}
triggers:
- id: "1"
configuration:
itemName: Bedroom_Scene
state: "21"
previousState: "20"
type: core.ItemStateChangeTrigger
- id: "2"
configuration:
itemName: Bedroom_Scene
state: "21"
previousState: "24"
type: core.ItemStateChangeTrigger
- id: "3"
configuration:
itemName: Bedroom_Scene
state: "21"
previousState: "25"
type: core.ItemStateChangeTrigger
- id: "4"
configuration:
itemName: Bedroom_Scene
state: "20"
previousState: "21"
type: core.ItemStateChangeTrigger
- id: "5"
configuration:
itemName: Bedroom_Scene
state: "20"
previousState: "24"
type: core.ItemStateChangeTrigger
- id: "6"
configuration:
itemName: Bedroom_Scene
state: "20"
previousState: "25"
type: core.ItemStateChangeTrigger
- id: "7"
configuration:
itemName: Bedroom_Scene
state: "24"
previousState: "20"
type: core.ItemStateChangeTrigger
- id: "8"
configuration:
itemName: Bedroom_Scene
state: "24"
previousState: "21"
type: core.ItemStateChangeTrigger
- id: "9"
configuration:
itemName: Bedroom_Scene
state: "24"
previousState: "25"
type: core.ItemStateChangeTrigger
- id: "10"
configuration:
itemName: Bedroom_Scene
state: "25"
previousState: "20"
type: core.ItemStateChangeTrigger
- id: "11"
configuration:
itemName: Bedroom_Scene
state: "25"
previousState: "21"
type: core.ItemStateChangeTrigger
- id: "12"
configuration:
itemName: Bedroom_Scene
state: "25"
previousState: "24"
type: core.ItemStateChangeTrigger
conditions: []
actions:
- inputs: {}
id: "20"
configuration:
considerConditions: true
ruleUIDs:
- Spare_LightScript
type: core.RunRuleAction
The script
var Sensor = 'Bedroom_Scene';
var ItemADimmer = 'SpareCeiling_LightDimmer';
var ItemATemperature = 'SpareCeiling_LightTemperature';
var ItemBDimmer = 'SpareTable_LightDimmer';
var ItemBTemperature = 'SpareTable_LightTemperature';
var BrightItemADimmer = 100;
var BrightItemATemperature = 60;
var BrightItemBDimmer = 80;
var BrightItemBTemperature = 50;
var CosyItemADimmer = 10;
var CosyItemATemperature = 100;
var CosyItemBDimmer = 40;
var CosyItemBTemperature = 100;
if (itemRegistry.getItem(Sensor).getState() == 21 || itemRegistry.getItem(Sensor).getState() == 20) {;
if (itemRegistry.getItem(ItemADimmer).getState() == 0 && itemRegistry.getItem(ItemBDimmer).getState() == 0) {;
events.sendCommand(ItemADimmer, ON);
events.sendCommand(ItemBDimmer, ON);
} else {;
events.sendCommand(ItemADimmer, OFF);
events.sendCommand(ItemBDimmer, OFF);
};
};
if (itemRegistry.getItem(Sensor).getState() == 24) {;
events.sendCommand(ItemADimmer, BrightItemADimmer);
events.sendCommand(ItemATemperature, BrightItemATemperature);
events.sendCommand(ItemBDimmer, BrightItemBDimmer);
events.sendCommand(ItemBTemperature, BrightItemATemperature);
};
if (itemRegistry.getItem(Sensor).getState() == 25) {;
events.sendCommand(ItemADimmer, CosyItemADimmer);
events.sendCommand(ItemATemperature, CosyItemATemperature);
events.sendCommand(ItemBDimmer, CosyItemBDimmer);
events.sendCommand(ItemBTemperature, CosyItemATemperature);
};
The Environment
- Platform information:
- Hardware: Raspberry Pi 4 8GB
- OS: ubuntu server 22.04
- openHAB version: Docker with official image: openhab/openhab:3.2.0