]> git.basschouten.com Git - openhab-addons.git/blob
d37334601a4b03a2218f8ab7b695712546dd2d78
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2023 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
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
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.ojelectronics.internal.services;
14
15 import static org.openhab.binding.ojelectronics.internal.BindingConstants.*;
16
17 import java.util.Collection;
18 import java.util.List;
19 import java.util.Set;
20
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;
33
34 /**
35  * DiscoveryService for OJ Components
36  *
37  * @author Christian Kittel - Initial Contribution
38  */
39 @NonNullByDefault
40 @Component(service = DiscoveryService.class, immediate = true, configurationPid = "discovery.ojelectronics")
41 public final class OJDiscoveryService extends AbstractDiscoveryService implements ThingHandlerService {
42
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;
46
47     /**
48      * Creates a new instance of {@link OJDiscoveryService}
49      *
50      */
51     public OJDiscoveryService() throws IllegalArgumentException {
52         super(SUPPORTED_THING_TYPES_UIDS, 10);
53     }
54
55     /**
56      * Sets the scan result for discovering
57      *
58      * @param groupContents Content from API
59      */
60     public void setScanResultForDiscovery(List<GroupContentModel> groupContents) {
61         this.groupContents = groupContents;
62     }
63
64     @Override
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));
71         }
72     }
73
74     @Override
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);
80         }
81     }
82
83     @Override
84     public @Nullable ThingHandler getThingHandler() {
85         return bridgeHandler;
86     }
87
88     @Override
89     public void deactivate() {
90         super.deactivate();
91     }
92
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());
97     }
98 }