2 * Copyright (c) 2010-2021 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.yeelight.internal.lib.device;
15 import java.util.HashMap;
18 import org.openhab.binding.yeelight.internal.lib.enums.DeviceType;
19 import org.slf4j.Logger;
20 import org.slf4j.LoggerFactory;
23 * The {@link DeviceFactory} creates device handler classes.
25 * @author Coaster Li - Initial contribution
26 * @author Nikita Pogudalov - Added CeilingDeviceWithNightDevice for Ceiling 1
28 public class DeviceFactory {
29 private static final Logger LOGGER = LoggerFactory.getLogger(DeviceFactory.class);
31 private static final String TAG = DeviceFactory.class.getSimpleName();
33 public static DeviceBase build(String model, String id) {
34 DeviceType type = DeviceType.valueOf(model);
37 return new CeilingDevice(id);
40 return new CeilingDeviceWithNightDevice(id);
42 return new CeilingDeviceWithAmbientDevice(id);
44 return new WonderDevice(id);
46 return new MonoDevice(id);
48 return new CtBulbDevice(id);
50 return new PitayaDevice(id);
52 return new DesklampDevice(id);
58 public static DeviceBase build(Map<String, String> bulbInfo) {
59 DeviceBase device = build(bulbInfo.get("model"), bulbInfo.get("id"));
64 Map<String, Object> infos = new HashMap<>(bulbInfo);
65 device.setBulbInfo(infos);
66 LOGGER.debug("{}: DeviceFactory Device = {}", TAG, bulbInfo.get("Location"));
67 // TODO enhancement!!!
68 String[] addressInfo = bulbInfo.get("Location").split(":");
69 device.setAddress(addressInfo[1].substring(2));
70 device.setPort(Integer.parseInt(addressInfo[2]));
71 device.setOnline(true);
72 LOGGER.debug("{}: DeviceFactory Device info = {}, port = {}", TAG, device.getAddress(), device.getPort());