2 * Copyright (c) 2010-2023 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.netatmo.internal.api.data;
15 import static org.openhab.binding.netatmo.internal.NetatmoBindingConstants.*;
17 import java.util.Optional;
19 import java.util.stream.Collectors;
21 import org.eclipse.jdt.annotation.NonNullByDefault;
22 import org.openhab.binding.netatmo.internal.api.data.NetatmoConstants.MeasureClass;
23 import org.openhab.binding.netatmo.internal.handler.channelhelper.AirQualityChannelHelper;
24 import org.openhab.binding.netatmo.internal.handler.channelhelper.BatteryChannelHelper;
25 import org.openhab.binding.netatmo.internal.handler.channelhelper.ChannelHelper;
26 import org.openhab.binding.netatmo.internal.handler.channelhelper.EventChannelHelper;
27 import org.openhab.binding.netatmo.internal.handler.channelhelper.HumidityChannelHelper;
28 import org.openhab.binding.netatmo.internal.handler.channelhelper.LocationChannelHelper;
29 import org.openhab.binding.netatmo.internal.handler.channelhelper.MeasuresChannelHelper;
30 import org.openhab.binding.netatmo.internal.handler.channelhelper.NoiseChannelHelper;
31 import org.openhab.binding.netatmo.internal.handler.channelhelper.SignalChannelHelper;
32 import org.openhab.binding.netatmo.internal.handler.channelhelper.TemperatureChannelHelper;
33 import org.openhab.binding.netatmo.internal.handler.channelhelper.TimestampChannelHelper;
34 import org.openhab.binding.netatmo.internal.providers.NetatmoThingTypeProvider;
35 import org.slf4j.Logger;
36 import org.slf4j.LoggerFactory;
39 * The {@link ChannelGroup} makes the link between a channel helper and some group types. It also
40 * defines some standard and common channel groups used by more than one thing.
42 * @author Gaƫl L'hopital - Initial contribution
46 public class ChannelGroup {
47 public static final ChannelGroup SIGNAL = new ChannelGroup(SignalChannelHelper.class, GROUP_SIGNAL);
48 public static final ChannelGroup EVENT = new ChannelGroup(EventChannelHelper.class, GROUP_LAST_EVENT);
49 public static final ChannelGroup MEASURE = new ChannelGroup(MeasuresChannelHelper.class);
50 public static final ChannelGroup BATTERY = new ChannelGroup(BatteryChannelHelper.class, GROUP_BATTERY);
51 public static final ChannelGroup LOCATION = new ChannelGroup(LocationChannelHelper.class, GROUP_LOCATION);
52 public static final ChannelGroup BATTERY_EXT = new ChannelGroup(BatteryChannelHelper.class,
53 GROUP_TYPE_BATTERY_EXTENDED);
54 public static final ChannelGroup TIMESTAMP = new ChannelGroup(TimestampChannelHelper.class, GROUP_TIMESTAMP);
55 public static final ChannelGroup TSTAMP_EXT = new ChannelGroup(TimestampChannelHelper.class,
56 GROUP_TYPE_TIMESTAMP_EXTENDED);
57 public static final ChannelGroup TEMP_OUTSIDE_EXT = new ChannelGroup(TemperatureChannelHelper.class,
58 MeasureClass.OUTSIDE_TEMPERATURE, GROUP_TYPE_TEMPERATURE_OUTSIDE);
59 public static final ChannelGroup TEMP_INSIDE_EXT = new ChannelGroup(TemperatureChannelHelper.class,
60 MeasureClass.INSIDE_TEMPERATURE, GROUP_TYPE_TEMPERATURE_EXTENDED);
61 public static final ChannelGroup TEMP_INSIDE = new ChannelGroup(TemperatureChannelHelper.class,
62 MeasureClass.INSIDE_TEMPERATURE, GROUP_TEMPERATURE);
63 public static final ChannelGroup AIR_QUALITY = new ChannelGroup(AirQualityChannelHelper.class, MeasureClass.CO2,
65 public static final ChannelGroup NOISE = new ChannelGroup(NoiseChannelHelper.class, MeasureClass.NOISE,
67 public static final ChannelGroup HUMIDITY = new ChannelGroup(HumidityChannelHelper.class, MeasureClass.HUMIDITY,
70 private final Logger logger = LoggerFactory.getLogger(ChannelGroup.class);
71 private final Class<? extends ChannelHelper> helper;
72 public final Set<String> groupTypes;
73 public final Set<String> extensions;
75 ChannelGroup(Class<? extends ChannelHelper> helper, String... groupTypes) {
76 this(helper, Set.of(), groupTypes);
79 ChannelGroup(Class<? extends ChannelHelper> helper, MeasureClass measureClass, String... groupTypes) {
80 this(helper, measureClass.channels.keySet(), groupTypes);
83 private ChannelGroup(Class<? extends ChannelHelper> helper, Set<String> extensions, String... groupTypes) {
85 this.groupTypes = Set.of(groupTypes);
86 this.extensions = extensions;
89 public Optional<ChannelHelper> getHelperInstance() {
91 return Optional.of(helper.getConstructor(Set.class).newInstance(
92 groupTypes.stream().map(NetatmoThingTypeProvider::toGroupName).collect(Collectors.toSet())));
93 } catch (ReflectiveOperationException e) {
94 logger.warn("Error creating or initializing helper class : {}", e.getMessage());
96 return Optional.empty();