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.unifi.internal.api.model;
15 import java.util.Calendar;
17 import org.apache.commons.lang.BooleanUtils;
18 import org.openhab.binding.unifi.internal.api.UniFiException;
19 import org.openhab.binding.unifi.internal.api.util.UniFiTidyLowerCaseStringDeserializer;
20 import org.openhab.binding.unifi.internal.api.util.UniFiTimestampDeserializer;
22 import com.google.gson.annotations.JsonAdapter;
23 import com.google.gson.annotations.SerializedName;
26 * The {@link UniFiClient} is the base data model for any (wired or wireless) connected to a UniFi network.
28 * @author Matthew Bowman - Initial contribution
29 * @author Patrik Wimnell - Blocking / Unblocking client support
31 public abstract class UniFiClient {
33 protected final transient UniFiController controller;
35 @SerializedName("_id")
38 protected String siteId;
40 @JsonAdapter(UniFiTidyLowerCaseStringDeserializer.class)
45 @JsonAdapter(UniFiTidyLowerCaseStringDeserializer.class)
46 protected String hostname;
48 @SerializedName("name")
49 @JsonAdapter(UniFiTidyLowerCaseStringDeserializer.class)
50 protected String alias;
52 protected Integer uptime;
54 @JsonAdapter(UniFiTimestampDeserializer.class)
55 protected Calendar lastSeen;
57 protected boolean blocked;
59 protected UniFiClient(UniFiController controller) {
60 this.controller = controller;
63 public String getId() {
67 public String getMac() {
71 public String getIp() {
75 public String getHostname() {
79 public String getAlias() {
83 public Integer getUptime() {
87 public Calendar getLastSeen() {
91 public boolean isBlocked() {
95 public abstract Boolean isWired();
97 public final Boolean isWireless() {
98 return BooleanUtils.negate(isWired());
101 protected abstract String getDeviceMac();
103 public UniFiSite getSite() {
104 return controller.getSite(siteId);
107 public UniFiDevice getDevice() {
108 return controller.getDevice(getDeviceMac());
113 public void block(boolean blocked) throws UniFiException {
114 controller.block(this, blocked);
117 public void reconnect() throws UniFiException {
118 controller.reconnect(this);
122 public String toString() {
123 return String.format(
124 "UniFiClient{mac: '%s', ip: '%s', hostname: '%s', alias: '%s', wired: %b, blocked: %b, device: %s}",
125 mac, ip, hostname, alias, isWired(), blocked, getDevice());