use of org.eclipse.smarthome.core.thing.Channel in project smarthome by eclipse.
the class ChannelStateDescriptionProvider method getStateDescription.
@Override
public StateDescription getStateDescription(String itemName, Locale locale) {
Set<ChannelUID> boundChannels = itemChannelLinkRegistry.getBoundChannels(itemName);
if (!boundChannels.isEmpty()) {
ChannelUID channelUID = boundChannels.iterator().next();
Channel channel = thingRegistry.getChannel(channelUID);
if (channel != null) {
StateDescription stateDescription = null;
ChannelType channelType = thingTypeRegistry.getChannelType(channel, locale);
if (channelType != null) {
stateDescription = channelType.getState();
if ((channelType.getItemType() != null) && ((stateDescription == null) || (stateDescription.getPattern() == null))) {
String pattern = null;
if (channelType.getItemType().equalsIgnoreCase(CoreItemFactory.STRING)) {
pattern = "%s";
} else if (channelType.getItemType().startsWith(CoreItemFactory.NUMBER)) {
pattern = "%.0f";
}
if (pattern != null) {
logger.trace("Provide a default pattern {} for item {}", pattern, itemName);
if (stateDescription == null) {
stateDescription = new StateDescription(null, null, null, pattern, false, null);
} else {
stateDescription = new StateDescription(stateDescription.getMinimum(), stateDescription.getMaximum(), stateDescription.getStep(), pattern, stateDescription.isReadOnly(), stateDescription.getOptions());
}
}
}
}
StateDescription dynamicStateDescription = getDynamicStateDescription(channel, stateDescription, locale);
if (dynamicStateDescription != null) {
return dynamicStateDescription;
}
return stateDescription;
}
}
return null;
}
use of org.eclipse.smarthome.core.thing.Channel in project smarthome by eclipse.
the class CommunicationManager method determineProfileTypeUID.
@Nullable
private ProfileTypeUID determineProfileTypeUID(ItemChannelLink link, Item item, @Nullable Thing thing) {
ProfileTypeUID profileTypeUID = getConfiguredProfileTypeUID(link);
Channel channel = null;
if (profileTypeUID == null) {
if (thing == null) {
return null;
}
channel = thing.getChannel(link.getLinkedUID().getId());
if (channel == null) {
return null;
}
// ask advisors
profileTypeUID = getAdvice(link, item, channel);
if (profileTypeUID == null) {
// ask default advisor
logger.trace("No profile advisor found for link {}, falling back to the defaults", link);
profileTypeUID = defaultProfileFactory.getSuggestedProfileTypeUID(channel, item.getType());
}
}
return profileTypeUID;
}
use of org.eclipse.smarthome.core.thing.Channel in project smarthome by eclipse.
the class CommunicationManager method handleCallFromHandler.
void handleCallFromHandler(ChannelUID channelUID, @Nullable Thing thing, Consumer<Profile> action) {
itemChannelLinkRegistry.stream().filter(link -> {
// all links for the channel
return link.getLinkedUID().equals(channelUID);
}).forEach(link -> {
Item item = getItem(link.getItemName());
if (item != null) {
Profile profile = getProfile(link, item, thing);
action.accept(profile);
}
});
}
use of org.eclipse.smarthome.core.thing.Channel in project smarthome by eclipse.
the class ThingConfigDescriptionAliasProvider method getChannelConfigDescriptionURI.
@Nullable
private URI getChannelConfigDescriptionURI(URI uri) {
String stringUID = uri.getSchemeSpecificPart();
if (uri.getFragment() != null) {
stringUID = stringUID + "#" + uri.getFragment();
}
ChannelUID channelUID = new ChannelUID(stringUID);
ThingUID thingUID = channelUID.getThingUID();
// First, get the thing so we get access to the channel type via the channel
Thing thing = thingRegistry.get(thingUID);
if (thing == null) {
return null;
}
Channel channel = thing.getChannel(channelUID.getId());
if (channel == null) {
return null;
}
ChannelType channelType = channelTypeRegistry.getChannelType(channel.getChannelTypeUID());
if (channelType == null) {
return null;
}
// Get the config description URI for this channel type
URI configURI = channelType.getConfigDescriptionURI();
return configURI;
}
use of org.eclipse.smarthome.core.thing.Channel in project smarthome by eclipse.
the class ThingFactoryHelper method createChannels.
/**
* Create {@link Channel} instances for the given Thing.
*
* @param thingType the type of the Thing (must not be null)
* @param thingUID the Thing's UID (must not be null)
* @param configDescriptionRegistry {@link ConfigDescriptionRegistry} that will be used to initialize the
* {@link Channel}s with their corresponding default values, if given.
* @return a list of {@link Channel}s
*/
public static List<Channel> createChannels(ThingType thingType, ThingUID thingUID, ConfigDescriptionRegistry configDescriptionRegistry) {
List<Channel> channels = new ArrayList<>();
List<ChannelDefinition> channelDefinitions = thingType.getChannelDefinitions();
for (ChannelDefinition channelDefinition : channelDefinitions) {
Channel channel = createChannel(channelDefinition, thingUID, null, configDescriptionRegistry);
if (channel != null) {
channels.add(channel);
}
}
List<ChannelGroupDefinition> channelGroupDefinitions = thingType.getChannelGroupDefinitions();
withChannelTypeRegistry(channelTypeRegistry -> {
for (ChannelGroupDefinition channelGroupDefinition : channelGroupDefinitions) {
ChannelGroupType channelGroupType = null;
if (channelTypeRegistry != null) {
channelGroupType = channelTypeRegistry.getChannelGroupType(channelGroupDefinition.getTypeUID());
}
if (channelGroupType != null) {
List<ChannelDefinition> channelGroupChannelDefinitions = channelGroupType.getChannelDefinitions();
for (ChannelDefinition channelDefinition : channelGroupChannelDefinitions) {
Channel channel = createChannel(channelDefinition, thingUID, channelGroupDefinition.getId(), configDescriptionRegistry);
if (channel != null) {
channels.add(channel);
}
}
} else {
logger.warn("Could not create channels for channel group '{}' for thing type '{}', because channel group type '{}' could not be found.", channelGroupDefinition.getId(), thingUID, channelGroupDefinition.getTypeUID());
}
}
return null;
});
return channels;
}
Aggregations