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.openhab.binding.unifi.internal.api.UniFiException;
18 import org.openhab.binding.unifi.internal.api.util.UniFiTidyLowerCaseStringDeserializer;
19 import org.openhab.binding.unifi.internal.api.util.UniFiTimestampDeserializer;
21 import com.google.gson.annotations.JsonAdapter;
22 import com.google.gson.annotations.SerializedName;
25 * The {@link UniFiClient} is the base data model for any (wired or wireless) connected to a UniFi network.
27 * @author Matthew Bowman - Initial contribution
28 * @author Patrik Wimnell - Blocking / Unblocking client support
30 public abstract class UniFiClient {
32 protected final transient UniFiController controller;
34 @SerializedName("_id")
37 protected String siteId;
39 @JsonAdapter(UniFiTidyLowerCaseStringDeserializer.class)
44 @JsonAdapter(UniFiTidyLowerCaseStringDeserializer.class)
45 protected String hostname;
47 @SerializedName("name")
48 @JsonAdapter(UniFiTidyLowerCaseStringDeserializer.class)
49 protected String alias;
51 protected Integer uptime;
53 @JsonAdapter(UniFiTimestampDeserializer.class)
54 protected Calendar lastSeen;
56 protected boolean blocked;
58 protected UniFiClient(UniFiController controller) {
59 this.controller = controller;
62 public String getId() {
66 public String getMac() {
70 public String getIp() {
74 public String getHostname() {
78 public String getAlias() {
82 public Integer getUptime() {
86 public Calendar getLastSeen() {
90 public boolean isBlocked() {
94 public abstract Boolean isWired();
96 public final Boolean isWireless() {
97 return isWired() == null ? null : (isWired().booleanValue() ? Boolean.FALSE : Boolean.TRUE);
100 protected abstract String getDeviceMac();
102 public UniFiSite getSite() {
103 return controller.getSite(siteId);
106 public UniFiDevice getDevice() {
107 return controller.getDevice(getDeviceMac());
112 public void block(boolean blocked) throws UniFiException {
113 controller.block(this, blocked);
116 public void reconnect() throws UniFiException {
117 controller.reconnect(this);
121 public String toString() {
122 return String.format(
123 "UniFiClient{id: '%s', mac: '%s', ip: '%s', hostname: '%s', alias: '%s', wired: %b, blocked: %b, device: %s}",
124 id, mac, ip, hostname, alias, isWired(), blocked, getDevice());