2 * Copyright (c) 2010-2024 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.*;
18 import java.util.stream.Collectors;
20 import org.eclipse.jdt.annotation.NonNullByDefault;
21 import org.openhab.binding.netatmo.internal.api.data.NetatmoConstants.MeasureClass;
22 import org.openhab.binding.netatmo.internal.handler.channelhelper.AirQualityChannelHelper;
23 import org.openhab.binding.netatmo.internal.handler.channelhelper.BatteryChannelHelper;
24 import org.openhab.binding.netatmo.internal.handler.channelhelper.ChannelHelper;
25 import org.openhab.binding.netatmo.internal.handler.channelhelper.EventChannelHelper;
26 import org.openhab.binding.netatmo.internal.handler.channelhelper.HumidityChannelHelper;
27 import org.openhab.binding.netatmo.internal.handler.channelhelper.LocationChannelHelper;
28 import org.openhab.binding.netatmo.internal.handler.channelhelper.MeasuresChannelHelper;
29 import org.openhab.binding.netatmo.internal.handler.channelhelper.NoiseChannelHelper;
30 import org.openhab.binding.netatmo.internal.handler.channelhelper.SignalChannelHelper;
31 import org.openhab.binding.netatmo.internal.handler.channelhelper.TemperatureChannelHelper;
32 import org.openhab.binding.netatmo.internal.handler.channelhelper.TimestampChannelHelper;
33 import org.openhab.binding.netatmo.internal.providers.NetatmoThingTypeProvider;
36 * The {@link ChannelGroup} makes the link between a channel helper and some group types. It also
37 * defines some standard and common channel groups used by more than one thing.
39 * @author Gaƫl L'hopital - Initial contribution
43 public class ChannelGroup {
44 public static final ChannelGroup SIGNAL = new ChannelGroup(SignalChannelHelper.class, GROUP_SIGNAL);
45 public static final ChannelGroup EVENT = new ChannelGroup(EventChannelHelper.class, GROUP_LAST_EVENT);
46 public static final ChannelGroup MEASURE = new ChannelGroup(MeasuresChannelHelper.class);
47 public static final ChannelGroup BATTERY = new ChannelGroup(BatteryChannelHelper.class, GROUP_BATTERY);
48 public static final ChannelGroup LOCATION = new ChannelGroup(LocationChannelHelper.class, GROUP_LOCATION);
49 public static final ChannelGroup BATTERY_EXT = new ChannelGroup(BatteryChannelHelper.class,
50 GROUP_TYPE_BATTERY_EXTENDED);
51 public static final ChannelGroup TIMESTAMP = new ChannelGroup(TimestampChannelHelper.class, GROUP_TIMESTAMP);
52 public static final ChannelGroup TSTAMP_EXT = new ChannelGroup(TimestampChannelHelper.class,
53 GROUP_TYPE_TIMESTAMP_EXTENDED);
54 public static final ChannelGroup TEMP_OUTSIDE_EXT = new ChannelGroup(TemperatureChannelHelper.class,
55 MeasureClass.OUTSIDE_TEMPERATURE, GROUP_TYPE_TEMPERATURE_OUTSIDE);
56 public static final ChannelGroup TEMP_INSIDE_EXT = new ChannelGroup(TemperatureChannelHelper.class,
57 MeasureClass.INSIDE_TEMPERATURE, GROUP_TYPE_TEMPERATURE_EXTENDED);
58 public static final ChannelGroup TEMP_INSIDE = new ChannelGroup(TemperatureChannelHelper.class,
59 MeasureClass.INSIDE_TEMPERATURE, GROUP_TEMPERATURE);
60 public static final ChannelGroup AIR_QUALITY = new ChannelGroup(AirQualityChannelHelper.class, MeasureClass.CO2,
62 public static final ChannelGroup NOISE = new ChannelGroup(NoiseChannelHelper.class, MeasureClass.NOISE,
64 public static final ChannelGroup HUMIDITY = new ChannelGroup(HumidityChannelHelper.class, MeasureClass.HUMIDITY,
66 public static final ChannelGroup ALARM_LAST_EVENT = new ChannelGroup(EventChannelHelper.class,
67 GROUP_ALARM_LAST_EVENT);
69 private final Class<? extends ChannelHelper> helper;
70 public final Set<String> groupTypes;
71 public final Set<String> extensions;
73 ChannelGroup(Class<? extends ChannelHelper> helper, String... groupTypes) {
74 this(helper, Set.of(), groupTypes);
77 ChannelGroup(Class<? extends ChannelHelper> helper, MeasureClass measureClass, String... groupTypes) {
78 this(helper, measureClass.channels.keySet(), groupTypes);
81 private ChannelGroup(Class<? extends ChannelHelper> helper, Set<String> extensions, String... groupTypes) {
83 this.groupTypes = Set.of(groupTypes);
84 this.extensions = extensions;
87 public ChannelHelper getHelperInstance() {
89 return helper.getConstructor(Set.class).newInstance(
90 groupTypes.stream().map(NetatmoThingTypeProvider::toGroupName).collect(Collectors.toSet()));
91 } catch (ReflectiveOperationException e) {
92 throw new IllegalArgumentException(
93 "Error creating or initializing helper class : %s".formatted(e.getMessage()));