KNX configuration: group addresses used for multiple devices without status

Hi,

my KNX-Installation has some group addresses used by more than one appliance for simultaneous switching of these appliances, eg. lights.

This works fine as long as the actors used have a state object which then can be used to update the openHAB items.

For those actors without a state object, I configured the common GA to update channel and item

    Thing device Actor_without_status [
        address="1.1.1"
    ] {
        Type switch:    Channel_Common   [ ga="12/0/0"]
        Type switch:    Channel_A        [ ga="12/0/1+12/0/0"]
        Type switch:    Channel_B        [ ga="12/0/2+12/0/0"]
    }
Switch Item_Common            "Item_Common"              <light>                                   { channel="knx:device:bridge:VirtualDevice:Channel_Common" }
Switch Item_A                 "Item_A"                   <light>                                   { channel="knx:device:bridge:VirtualDevice:Channel_A" }
Switch Item_B                 "Item_B"                   <light>                                   { channel="knx:device:bridge:VirtualDevice:Channel_B" }

This works well as long the common GA is sent by devices other than openHAB. The openHAB log shows:

13:56:36.669 [INFO ] [smarthome.event.ItemStateChangedEvent] - Item_Common changed from OFF to ON
13:56:36.687 [INFO ] [smarthome.event.ItemStateChangedEvent] - Item_A changed from OFF to ON
13:56:36.698 [INFO ] [smarthome.event.ItemStateChangedEvent] - Item_B changed from OFF to ON

If Item_Common is assigned a value with sendCommand() or through the BasicUI, a GroupWrite is done on the KNX bus, but the listening GA of the channel does not change Item_A nor Item_B.

14:42:19.668 [INFO ] [smarthome.event.ItemCommandEvent     ] - Item 'Item_Common' received command ON
14:42:19.689 [INFO ] [smarthome.event.ItemStateChangedEvent] - Item_Common changed from OFF to ON

Is this behaviour intentional to avoid race conditions?

My workaround for this is a rule triggered by sendCommand, since this exactly the condition as described above.

rule common_command
    when
        Item Item_Common received command
    then
        val command = receivedCommand.toString()
        for (i : Group_Common.members) {
            i.postUpdate(command)
        }
    end

My question: is there another way to achieve this without having to duplicate the configuration in knx.things, items file and rule?

Thank you in advance!

Basic Information:
openHAB 2.3.0 Release Build, KNX Binding 2.3.0 on an Intel Celeron J3455, 2GB RAM

The point is, the GA is not a status. You have to setup knx correctly first :wink:

I doubt that there is an knx actuator which does not provide its status (maybe it has to be activated via ETS first).
A GA used to control more than one Channel has per definition no status at all.
When sending an ON to such a GA, all connected actuators will switch to ON (and therefor state their new status through their own status objects).
Now when switching one of the connected actuators to OFF (manually or via exclusive GA), how to set the status of the ‘Group’ GA? It’s neither ON nor OFF anymore!

Another point is, openHAB will not react to messages sent from openHAB (and that’s correct behavior).

Thank you @Udo_Hartmann for pointing me to the actuator!

The actuators are ABB switching actuators from ancient times, when ABB named them still AT/S, which had an application loaded which did not have communication objects for status. I turned to the documentation and found a different application providing status information.

Like you said, in the example above, Item_Common is used to send a GA which will cause all connected actuators to switch to the given value. The state of this item is not relevant: a sendCommand() from a rule or a Switch in the UI (with a mapping) will generate the required KNX message regardless of the state of this item.