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.ojelectronics.internal.services;
15 import static org.openhab.binding.ojelectronics.internal.BindingConstants.*;
17 import java.util.Collection;
18 import java.util.List;
21 import org.eclipse.jdt.annotation.NonNullByDefault;
22 import org.eclipse.jdt.annotation.Nullable;
23 import org.openhab.binding.ojelectronics.internal.OJCloudHandler;
24 import org.openhab.binding.ojelectronics.internal.models.groups.GroupContentModel;
25 import org.openhab.core.config.discovery.AbstractDiscoveryService;
26 import org.openhab.core.config.discovery.DiscoveryResultBuilder;
27 import org.openhab.core.config.discovery.DiscoveryService;
28 import org.openhab.core.thing.ThingTypeUID;
29 import org.openhab.core.thing.ThingUID;
30 import org.openhab.core.thing.binding.ThingHandler;
31 import org.openhab.core.thing.binding.ThingHandlerService;
32 import org.osgi.service.component.annotations.Component;
35 * DiscoveryService for OJ Components
37 * @author Christian Kittel - Initial Contribution
40 @Component(service = DiscoveryService.class, immediate = true, configurationPid = "discovery.ojelectronics")
41 public final class OJDiscoveryService extends AbstractDiscoveryService implements ThingHandlerService {
43 private static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Set.of(THING_TYPE_OJCLOUD);
44 private @Nullable OJCloudHandler bridgeHandler;
45 private @Nullable Collection<GroupContentModel> groupContents;
48 * Creates a new instance of {@link OJDiscoveryService}
51 public OJDiscoveryService() throws IllegalArgumentException {
52 super(SUPPORTED_THING_TYPES_UIDS, 10);
56 * Sets the scan result for discovering
58 * @param groupContents Content from API
60 public void setScanResultForDiscovery(List<GroupContentModel> groupContents) {
61 this.groupContents = groupContents;
65 protected void startScan() {
66 final OJCloudHandler bridgeHandler = this.bridgeHandler;
67 final Collection<GroupContentModel> groupContents = this.groupContents;
68 if (groupContents != null && bridgeHandler != null) {
69 groupContents.stream().flatMap(content -> content.thermostats.stream())
70 .forEach(thermostat -> thingDiscovered(bridgeHandler.getThing().getUID(), thermostat.serialNumber));
75 public void setThingHandler(@Nullable ThingHandler handler) {
76 if (handler instanceof OJCloudHandler) {
77 final OJCloudHandler bridgeHandler = (OJCloudHandler) handler;
78 this.bridgeHandler = bridgeHandler;
79 bridgeHandler.setDiscoveryService(this);
84 public @Nullable ThingHandler getThingHandler() {
89 public void deactivate() {
93 private void thingDiscovered(ThingUID bridgeUID, String serialNumber) {
94 thingDiscovered(DiscoveryResultBuilder.create(new ThingUID(THING_TYPE_OWD5, bridgeUID, serialNumber))
95 .withBridge(bridgeUID).withRepresentationProperty("serialNumber")
96 .withProperty("serialNumber", serialNumber).withLabel("Thermostat " + serialNumber).build());