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.somfytahoma.internal.discovery;
15 import java.util.Enumeration;
17 import javax.jmdns.ServiceEvent;
18 import javax.jmdns.ServiceInfo;
19 import javax.jmdns.ServiceListener;
21 import org.eclipse.jdt.annotation.NonNullByDefault;
22 import org.eclipse.jdt.annotation.Nullable;
23 import org.openhab.binding.somfytahoma.internal.handler.SomfyTahomaBridgeHandler;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
28 * The {@link SomfyTahomaMDNSDiscoveryListener} represents a mDNS listener
29 * for a mDNS discovery.
31 * @author Ondrej Pecta - Initial contribution
34 public class SomfyTahomaMDNSDiscoveryListener implements ServiceListener {
36 private final Logger logger = LoggerFactory.getLogger(SomfyTahomaMDNSDiscoveryListener.class);
37 private final SomfyTahomaBridgeHandler handler;
39 public SomfyTahomaMDNSDiscoveryListener(SomfyTahomaBridgeHandler handler) {
40 this.handler = handler;
44 public void serviceAdded(@Nullable ServiceEvent event) {
46 logger.trace("Service added: {}", event.getInfo());
51 public void serviceRemoved(@Nullable ServiceEvent event) {
53 logger.trace("Service removed: {}", event.getInfo());
58 public void serviceResolved(@Nullable ServiceEvent event) {
59 if (event == null || event.getInfo() == null) {
60 logger.debug("Null event received");
64 ServiceInfo info = event.getInfo();
65 logger.trace("Service resolved: {}", info);
66 if (info.getInet4Addresses().length > 0) {
67 logger.debug("Server address: {}", info.getInet4Addresses()[0].getHostAddress());
68 handler.setGatewayIPAddress(info.getInet4Addresses()[0].getHostAddress());
70 Enumeration<String> e = info.getPropertyNames();
72 while (e.hasMoreElements()) {
73 String name = e.nextElement();
74 if ("gateway_pin".equals(name)) {
75 String pin = info.getPropertyString(name);
76 logger.debug("Gateway PIN: {}", pin);
77 handler.setGatewayPin(pin);
78 handler.updateConfiguration();