In order to ease items file definitions, did I propose this tools that create a group for each installed binding, containing a group for each thing defined, containing the list of linked items :
from core.log import logging, LOG_PREFIX, log_traceback
from core.items import add_item, remove_item
from core.utils import validate_item
import requests
import sys
# Modify these variables to fit your system
URL_OPENHAB = "http://localhost:8080"
bindingTag = "BindingDiscovery"
def normalizeBindingId(id):
id = "g" + id.capitalize()
return id
def cleanBindingName(name):
name = name.replace("Binding","").replace("Extensions","").replace("Extension","")
name = name.strip()
return name
def normalizeThingId(uid):
groupname = []
for element in uid:
groupname.append(element.capitalize().replace("-","_"))
groupname[0] = "g"
return "".join(groupname)
def discoverLinks(log):
log.info(u"Linked items discovery....")
links = requests.get(url=URL_OPENHAB + "/rest/links").json()
count = 0
for link in links:
count += 1
channelUID = link["channelUID"]
itemName = link["itemName"]
thingUID = channelUID.split(":")
del thingUID[-1]
thingGroupName = normalizeThingId(thingUID)
group = validate_item(thingGroupName)
item = validate_item(itemName)
if group != None and item != None:
group.addMember(item)
log.info(u"Discovered {} links.".format(count))
def discoverThings(log):
log.info(u"Installed things discovery....")
things = requests.get(url=URL_OPENHAB + "/rest/things").json()
count = 0
for thing in things:
count += 1
uid = thing["UID"].replace(":"," ").split(" ")
bindingId = normalizeBindingId(uid[0])
id = normalizeThingId(uid)
name = thing["label"]
add_item(id, item_type="Group", label=name, groups=[bindingId], category=uid[-1], tags=[bindingTag])
log.info(u"Discovered {} things.".format(count))
def discoverBindings(log):
log.info(u"Installed bindings discovery.....")
bindings = requests.get(url=URL_OPENHAB + "/rest/bindings").json()
count = 0
for binding in bindings:
count += 1
id = normalizeBindingId(binding["id"])
name = cleanBindingName(binding["name"])
add_item(id, item_type="Group", label=name, groups=["gBindings"], category=binding["id"], tags=[bindingTag])
log.info(u"Discovered {} bindings.".format(count))
def scriptLoaded(id):
log = logging.getLogger("{}.autoDiscovery".format(LOG_PREFIX))
try:
log.info("Removing all auto generated groups and items...")
for item in ir.getItemsByTag(bindingTag):
remove_item(item)
log.info("Creating top level group...")
add_item("gBindings", item_type="Group", label="Installed bindings", groups=["gSystem"], category="api",tags=[bindingTag])
discoverBindings(log)
discoverThings(log)
discoverLinks(log)
except:
log.error(sys.exc_info())
Hope this can help somebody