With JSR223, you could iterate through the ItemChannelLinkRegistry, but I decided it was more efficient (and easier) to have some sort of mapping from ThingUID to Item name. Here are two examples using JSR223-Jython and openhab2-Jython. The first uses a dictionary for the mapping, the second uses another Item.
@rule("Alert: Kodi system status update")
@when("Thing kodi:kodi:familyroom changed")
@when("Thing kodi:kodi:bedroomupstairs changed")
@when("Thing kodi:kodi:bedroomdownstairs changed")
def kodiSystemStatusUpdate(event):
kodiMap = {"kodi:kodi:familyroom" : "DS_FamilyRoom_Kodi_System",
"kodi:kodi:bedroomupstairs" : "US_MasterBedroom_Kodi_System",
"kodi:kodi:bedroomdownstairs" : "DS_MasterBedroom_Kodi_System"}
kodiName = kodiMap[str(event.thingUID)]
log.debug("JSR223: Kodi system update: [{}]: [{}]".format(kodiName, event.statusInfo))
if str(event.statusInfo) == "ONLINE":
events.sendCommand(kodiName,"ON")
log.info("JSR223: Kodi system update: [{}]: ON".format(kodiName))
elif str(event.statusInfo) == "OFFLINE (COMMUNICATION_ERROR): No connection established":
events.sendCommand(kodiName,"OFF")
log.info("JSR223: Kodi system update: [{}]: OFF".format(kodiName))
@rule("Alert: Speaker system status update")
@when("Thing upnpcontrol:upnprenderer:5f9ec1b3-ed59-1900-4530-0007f521099e changed")
@when("Thing upnpcontrol:upnprenderer:5f9ec1b3-ed59-1900-4530-0007f521366d changed")
@when("Thing upnpcontrol:upnprenderer:5f9ec1b3-ed59-1900-4530-0007f522dcaf changed")
@when("Thing upnpcontrol:upnprenderer:5f9ec1b3-ed59-1900-4530-0007f5207868 changed")
@when("Thing upnpcontrol:upnprenderer:5f9ec1b3-ed59-1900-4530-0007f520f682 changed")
@when("Thing upnpcontrol:upnprenderer:5f9ec1b3-ed59-1900-4530-0007f5210909 changed")
@when("Thing upnpcontrol:upnprenderer:5f9ec1b3-ed59-1900-4530-0007f52220b3 changed")
@when("Thing upnpcontrol:upnprenderer:5f9ec1b3-ed59-1900-4530-0007f52109de changed")
def speakerSystemStatusUpdate(event):
speakerName = filter(lambda item: str(item.state).replace("uuid:", "") == str(event.thingUID).split(":")[2], ir.getItem("gSpeakerUUID").members)[0].name.replace("UUID", "System")
log.debug("JSR223: Speaker system update [{}]: [{}]".format(speakerName, event.statusInfo))
if str(event.statusInfo) == "ONLINE":
events.sendCommand(speakerName,"ON")
log.info("JSR223: Speaker system update [{}]: ON".format(speakerName))
elif str(event.statusInfo) == "OFFLINE (COMMUNICATION_ERROR): No connection established":
events.sendCommand(speakerName,"OFF")
log.info("JSR223: Speaker system update [{}]: OFF".format(speakerName))