openhab / openhab-js

openHAB JavaScript Library for JavaScript Scripting Automation
https://www.openhab.org/addons/automation/jsscripting/
Eclipse Public License 2.0
38 stars 31 forks source link

Add StateDescription to Item #347

Open wertzui opened 1 week ago

wertzui commented 1 week ago

At the moment, Item in JS does not expose the StateDescription and especially the Options.

According to https://github.com/openhab/openhab-js/pull/109#issuecomment-1100761017 it should be possible to add these through the items metadata which I have not tested, but it is at least not possible to retrieve them that way.

In my use case, I'm looking into items which are bound to a thing's channel that only allows a couple of strings as values (like an enum). Examples are the list of available apps in the lgwebos binding, or the allowedStates in a channel of the mqtt binding. These allowed states are exposed in the item through the getStateDescription().options list.

A workaround at the moment is to get the raw item like below:

const { items, logm, utils} = require("openhab");
const logger = log("Scratchpad");

const itemName = "LivingRoomTvApplication";
const item = items.getItem(itemName);
const rawItem = item.rawItem;
const stateDescription = rawItem.getStateDescription();
const options = stateDescription.options;
options.forEach(option => {
    const label = option.getLabel();
    const value = option.getValue();
    logger.info(`Label: ${label}, Value: ${value}`);
});