@ysc @danielwalters86
Having played around a bit the following, crude & thrown together, Javascript extracts the metadata from the registry and identifies the namespaces for a particular Item and therefore could presumably be used as a basis for providing a list of custom namespaces:
var logger = Java.type('org.slf4j.LoggerFactory').getLogger('org.openhab.rule.' + ctx.ruleUID);
var FrameworkUtil = Java.type("org.osgi.framework.FrameworkUtil");
var _bundle = FrameworkUtil.getBundle(scriptExtension.class);
var bundle_context = _bundle.getBundleContext()
var MetadataRegistry_Ref = bundle_context.getServiceReference("org.openhab.core.items.MetadataRegistry");
var MetadataRegistry = bundle_context.getService(MetadataRegistry_Ref);
var Metadata = Java.type("org.openhab.core.items.Metadata");
var MetadataKey = Java.type("org.openhab.core.items.MetadataKey");
var ItemOfInterest = "gStudy";
var i=0;
var ArrayOfMetadata = [];
var Namespace = [];
var Item = [];
var a = 0;
var b= 0;
var returnvalue = MetadataRegistry.getAll().stream().forEach(function(metadata){ArrayOfMetadata[i] = String(metadata);
a = ArrayOfMetadata[i].indexOf("key=")+ 4;
b = ArrayOfMetadata[i].indexOf(":");
Namespace[i] = ArrayOfMetadata[i].slice(a,b);
a = b + 1;
b = ArrayOfMetadata[i].indexOf(",");
Item[i] = ArrayOfMetadata[i].slice(a,b);
i++;
}); // Get all Metadata
logger.info("MetadataRegContent type is: " +typeof ArrayOfMetadata);
for (var j=0; j<i; j++){logger.info("MetadataRegContent keys are: " +ArrayOfMetadata[j])};
logger.info("\n\n");
for (var j=0; j<i; j++){logger.info("Metadata namespaces for Item (" +Item[j] +") are: " +Namespace[j]);};
logger.info("\n\n");
logger.info("Metadata namespaces for Item (" +ItemOfInterest +") are: ");
for (var j=0; j<i; j++){if (Item[j] == ItemOfInterest)logger.info(" " + Namespace[j]);};
logger.info("\n\n");
The logger output is:
2021-01-25 12:52:32.842 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'PIR01_MotionIntrusion' changed from OFF to ON
==> /var/log/openhab/openhab.log <==
2021-01-25 12:52:43.959 [INFO ] [org.openhab.rule.1ac199dff6 ] - ArrayOfMetadata type is: object
2021-01-25 12:52:44.021 [INFO ] [org.openhab.rule.1ac199dff6 ] - ArrayOfMetadata elements are: Metadata [key=semantics:gBirchcroft, value=Location, configuration=[]]
2021-01-25 12:52:44.054 [INFO ] [org.openhab.rule.1ac199dff6 ] - ArrayOfMetadata elements are: Metadata [key=semantics:Desk, value=Location, configuration=[isPartOf=gStudy]]
2021-01-25 12:52:44.077 [INFO ] [org.openhab.rule.1ac199dff6 ] - ArrayOfMetadata elements are: Metadata [key=semantics:InLineSwitch01_Switch, value=Point, configuration=[hasLocation=gStudy]]
2021-01-25 12:52:44.095 [INFO ] [org.openhab.rule.1ac199dff6 ] - ArrayOfMetadata elements are: Metadata [key=semantics:LocalSun_Rise_Start, value=Point, configuration=[isPointOf=LocalSun]]
2021-01-25 12:52:44.111 [INFO ] [org.openhab.rule.1ac199dff6 ] - ArrayOfMetadata elements are: Metadata [key=semantics:gStudyStatus, value=Point, configuration=[hasLocation=gStudy]]
2021-01-25 12:52:44.128 [INFO ] [org.openhab.rule.1ac199dff6 ] - ArrayOfMetadata elements are: Metadata [key=MotionParameters:Study_TestSwitch2, value= , configuration=[]]
2021-01-25 12:52:44.145 [INFO ] [org.openhab.rule.1ac199dff6 ] - ArrayOfMetadata elements are: Metadata [key=OccupancyParameters:gStudy, value=Test Namespace, configuration=[OccupiedDelay=0.0, UnoccupiedDelay=4.0]]
2021-01-25 12:52:44.163 [INFO ] [org.openhab.rule.1ac199dff6 ] - ArrayOfMetadata elements are: Metadata [key=semantics:PIR01_MotionIntrusion, value=Point, configuration=[hasLocation=gStudy]]
2021-01-25 12:52:44.194 [INFO ] [org.openhab.rule.1ac199dff6 ] - ArrayOfMetadata elements are: Metadata [key=Motion:Study_TestSwitch2, value= , configuration=[]]
2021-01-25 12:52:44.212 [INFO ] [org.openhab.rule.1ac199dff6 ] - ArrayOfMetadata elements are: Metadata [key=semantics:LocalSun_CivilDusk_Start, value=Point, configuration=[isPointOf=LocalSun]]
2021-01-25 12:52:44.228 [INFO ] [org.openhab.rule.1ac199dff6 ] - ArrayOfMetadata elements are: Metadata [key=semantics:TestSwitch_01, value=Point, configuration=[hasLocation=gLounge]]
2021-01-25 12:52:44.246 [INFO ] [org.openhab.rule.1ac199dff6 ] - ArrayOfMetadata elements are: Metadata [key=semantics:gDownstairs, value=Location, configuration=[isPartOf=gBirchcroft]]
2021-01-25 12:52:44.262 [INFO ] [org.openhab.rule.1ac199dff6 ] - ArrayOfMetadata elements are: Metadata [key=semantics:LocalSun, value=Equipment, configuration=[hasPoint=LocalSun_Rise_Start]]
2021-01-25 12:52:44.280 [INFO ] [org.openhab.rule.1ac199dff6 ] - ArrayOfMetadata elements are: Metadata [key=semantics:gStudy, value=Location, configuration=[isPartOf=gDownstairs]]
2021-01-25 12:52:44.296 [INFO ] [org.openhab.rule.1ac199dff6 ] - ArrayOfMetadata elements are: Metadata [key=semantics:gLounge, value=Location, configuration=[isPartOf=gDownstairs]]
2021-01-25 12:52:44.313 [INFO ] [org.openhab.rule.1ac199dff6 ] - ArrayOfMetadata elements are: Metadata [key=semantics:LocalSun_CivilDawn_Start, value=Point, configuration=[isPointOf=LocalSun]]
2021-01-25 12:52:44.329 [INFO ] [org.openhab.rule.1ac199dff6 ] - ArrayOfMetadata elements are: Metadata [key=semantics:ExtensionLead01_3_Switch, value=Point, configuration=[hasLocation=gStudy]]
2021-01-25 12:52:44.347 [INFO ] [org.openhab.rule.1ac199dff6 ] - ArrayOfMetadata elements are: Metadata [key=semantics:ExtensionLead01_2_Switch, value=Point, configuration=[hasLocation=gStudy]]
2021-01-25 12:52:44.363 [INFO ] [org.openhab.rule.1ac199dff6 ] - ArrayOfMetadata elements are: Metadata [key=semantics:ExtensionLead01_1_Switch, value=Point, configuration=[hasLocation=gStudy]]
2021-01-25 12:52:44.380 [INFO ] [org.openhab.rule.1ac199dff6 ] - ArrayOfMetadata elements are: Metadata [key=semantics:LocalSun_Set_Start, value=Point, configuration=[isPointOf=LocalSun]]
2021-01-25 12:52:44.397 [INFO ] [org.openhab.rule.1ac199dff6 ] - ArrayOfMetadata elements are: Metadata [key=OccupancyParameters:gLounge, value= , configuration=[OccupiedDelay=0.0, UnoccupiedDelay=3.0]]
2021-01-25 12:52:44.414 [INFO ] [org.openhab.rule.1ac199dff6 ] - ArrayOfMetadata elements are: Metadata [key=semantics:gLoungeStatus, value=Point, configuration=[hasLocation=gLounge]]
2021-01-25 12:52:44.441 [INFO ] [org.openhab.rule.1ac199dff6 ] -
2021-01-25 12:52:44.510 [INFO ] [org.openhab.rule.1ac199dff6 ] - Metadata namespaces for Item (gBirchcroft) are: semantics
2021-01-25 12:52:44.534 [INFO ] [org.openhab.rule.1ac199dff6 ] - Metadata namespaces for Item (Desk) are: semantics
2021-01-25 12:52:44.552 [INFO ] [org.openhab.rule.1ac199dff6 ] - Metadata namespaces for Item (InLineSwitch01_Switch) are: semantics
2021-01-25 12:52:44.568 [INFO ] [org.openhab.rule.1ac199dff6 ] - Metadata namespaces for Item (LocalSun_Rise_Start) are: semantics
2021-01-25 12:52:44.586 [INFO ] [org.openhab.rule.1ac199dff6 ] - Metadata namespaces for Item (gStudyStatus) are: semantics
2021-01-25 12:52:44.602 [INFO ] [org.openhab.rule.1ac199dff6 ] - Metadata namespaces for Item (Study_TestSwitch2) are: MotionParameters
2021-01-25 12:52:44.624 [INFO ] [org.openhab.rule.1ac199dff6 ] - Metadata namespaces for Item (gStudy) are: OccupancyParameters
2021-01-25 12:52:44.641 [INFO ] [org.openhab.rule.1ac199dff6 ] - Metadata namespaces for Item (PIR01_MotionIntrusion) are: semantics
2021-01-25 12:52:44.659 [INFO ] [org.openhab.rule.1ac199dff6 ] - Metadata namespaces for Item (Study_TestSwitch2) are: Motion
2021-01-25 12:52:44.676 [INFO ] [org.openhab.rule.1ac199dff6 ] - Metadata namespaces for Item (LocalSun_CivilDusk_Start) are: semantics
2021-01-25 12:52:44.693 [INFO ] [org.openhab.rule.1ac199dff6 ] - Metadata namespaces for Item (TestSwitch_01) are: semantics
2021-01-25 12:52:44.710 [INFO ] [org.openhab.rule.1ac199dff6 ] - Metadata namespaces for Item (gDownstairs) are: semantics
2021-01-25 12:52:44.728 [INFO ] [org.openhab.rule.1ac199dff6 ] - Metadata namespaces for Item (LocalSun) are: semantics
2021-01-25 12:52:44.747 [INFO ] [org.openhab.rule.1ac199dff6 ] - Metadata namespaces for Item (gStudy) are: semantics
2021-01-25 12:52:44.769 [INFO ] [org.openhab.rule.1ac199dff6 ] - Metadata namespaces for Item (gLounge) are: semantics
2021-01-25 12:52:44.789 [INFO ] [org.openhab.rule.1ac199dff6 ] - Metadata namespaces for Item (LocalSun_CivilDawn_Start) are: semantics
2021-01-25 12:52:44.836 [INFO ] [org.openhab.rule.1ac199dff6 ] - Metadata namespaces for Item (ExtensionLead01_3_Switch) are: semantics
2021-01-25 12:52:44.863 [INFO ] [org.openhab.rule.1ac199dff6 ] - Metadata namespaces for Item (ExtensionLead01_2_Switch) are: semantics
2021-01-25 12:52:44.898 [INFO ] [org.openhab.rule.1ac199dff6 ] - Metadata namespaces for Item (ExtensionLead01_1_Switch) are: semantics
2021-01-25 12:52:44.915 [INFO ] [org.openhab.rule.1ac199dff6 ] - Metadata namespaces for Item (LocalSun_Set_Start) are: semantics
2021-01-25 12:52:44.945 [INFO ] [org.openhab.rule.1ac199dff6 ] - Metadata namespaces for Item (gLounge) are: OccupancyParameters
2021-01-25 12:52:44.972 [INFO ] [org.openhab.rule.1ac199dff6 ] - Metadata namespaces for Item (gLoungeStatus) are: semantics
2021-01-25 12:52:45.019 [INFO ] [org.openhab.rule.1ac199dff6 ] -
2021-01-25 12:52:45.074 [INFO ] [org.openhab.rule.1ac199dff6 ] - Metadata namespaces for Item (gStudy) are:
2021-01-25 12:52:45.164 [INFO ] [org.openhab.rule.1ac199dff6 ] - OccupancyParameters
2021-01-25 12:52:45.184 [INFO ] [org.openhab.rule.1ac199dff6 ] - semantics
2021-01-25 12:52:45.216 [INFO ] [org.openhab.rule.1ac199dff6 ] -
Where:
-
the first block are the data extracted from the Metadata Registry and converted to an array of strings.
-
the second block is a list of all Item/Namespace pairs
-
and the third block is a list of namespaces for a particular Item (gStudy)
I’m sure there is room for improvement. In particular by accessing “ArrayOfMetadata” directly as an object rather than converting to a string. Unfortunately as I am just teaching myself JS as I go I’ve not managed to crack that yet since although it says it of type object, when I try an operation such as Object.keys(ArrayOfMetadata) eg:
ArrayOfMetadata = MetadataRegistry.getAll();
logger.info("ArrayOfMetadata type is: " +typeof ArrayOfMetadata);
var ArrayOfKeys = Object.keys(ArrayOfMetadata);
logger.info("MetadataRegContent keys are: " +ArrayOfKeys);
it crashes with a type error
2021-01-25 13:09:46.624 [INFO ] [org.openhab.rule.1ac199dff6 ] - ArrayOfMetadata type is: object
2021-01-25 13:09:46.669 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID '1ac199dff6' failed: TypeError: [Metadata [key=semantics:gBirchcroft, value=Location, configuration=[]], Metadata [key=semantics:Desk, value=Location, configuration=[isPartOf=gStudy]], Metadata [key=semantics:InLineSwitch01_Switch, value=Point, configuration=[hasLocation=gStudy]], Metadata [key=semantics:LocalSun_Rise_Start, value=Point, configuration=[isPointOf=LocalSun]], Metadata [key=semantics:gStudyStatus, value=Point, configuration=[hasLocation=gStudy]], Metadata [key=MotionParameters:Study_TestSwitch2, value= , configuration=[]], Metadata [key=OccupancyParameters:gStudy, value=Test Namespace, configuration=[OccupiedDelay=0.0, UnoccupiedDelay=4.0]], Metadata [key=semantics:PIR01_MotionIntrusion, value=Point, configuration=[hasLocation=gStudy]], Metadata [key=Motion:Study_TestSwitch2, value= , configuration=[]], Metadata [key=semantics:LocalSun_CivilDusk_Start, value=Point, configuration=[isPointOf=LocalSun]], Metadata [key=semantics:TestSwitch_01, value=Point, configuration=[hasLocation=gLounge]], Metadata [key=semantics:gDownstairs, value=Location, configuration=[isPartOf=gBirchcroft]], Metadata [key=semantics:LocalSun, value=Equipment, configuration=[hasPoint=LocalSun_Rise_Start]], Metadata [key=semantics:gStudy, value=Location, configuration=[isPartOf=gDownstairs]], Metadata [key=semantics:gLounge, value=Location, configuration=[isPartOf=gDownstairs]], Metadata [key=semantics:LocalSun_CivilDawn_Start, value=Point, configuration=[isPointOf=LocalSun]], Metadata [key=semantics:ExtensionLead01_3_Switch, value=Point, configuration=[hasLocation=gStudy]], Metadata [key=semantics:ExtensionLead01_2_Switch, value=Point, configuration=[hasLocation=gStudy]], Metadata [key=semantics:ExtensionLead01_1_Switch, value=Point, configuration=[hasLocation=gStudy]], Metadata [key=semantics:LocalSun_Set_Start, value=Point, configuration=[isPointOf=LocalSun]], Metadata [key=OccupancyParameters:gLounge, value= , configuration=[OccupiedDelay=0.0, UnoccupiedDelay=3.0]], Metadata [key=semantics:gLoungeStatus, value=Point, configuration=[hasLocation=gLounge]]] is not an Object in <eval> at line number 183