* `wlan`
* `cap`
* `pppoe-out`
+* `ppp-out`
+* `lte`
* `l2tp-in`
* `l2tp-out`
import org.openhab.binding.mikrotik.internal.model.RouterosInterfaceBase;
import org.openhab.binding.mikrotik.internal.model.RouterosL2TPCliInterface;
import org.openhab.binding.mikrotik.internal.model.RouterosL2TPSrvInterface;
+import org.openhab.binding.mikrotik.internal.model.RouterosLTEInterface;
+import org.openhab.binding.mikrotik.internal.model.RouterosPPPCliInterface;
import org.openhab.binding.mikrotik.internal.model.RouterosPPPoECliInterface;
import org.openhab.binding.mikrotik.internal.model.RouterosWlanInterface;
import org.openhab.binding.mikrotik.internal.util.RateCalculator;
RouterosInterfaceBase rosInterface = routeros.findInterface(cfg.name);
this.iface = rosInterface;
if (rosInterface == null) {
- String statusMsg = String.format("Interface %s is not found in RouterOS for thing %s", cfg.name,
+ String statusMsg = String.format("RouterOS interface %s is not found for thing %s", cfg.name,
getThing().getUID());
updateStatus(OFFLINE, GONE, statusMsg);
} else {
newState = getCapIterfaceChannelState(channelID);
} else if (iface instanceof RouterosWlanInterface) {
newState = getWlanIterfaceChannelState(channelID);
+ } else if (iface instanceof RouterosPPPCliInterface) {
+ newState = getPPPCliChannelState(channelID);
} else if (iface instanceof RouterosPPPoECliInterface) {
newState = getPPPoECliChannelState(channelID);
} else if (iface instanceof RouterosL2TPSrvInterface) {
newState = getL2TPSrvChannelState(channelID);
} else if (iface instanceof RouterosL2TPCliInterface) {
newState = getL2TPCliChannelState(channelID);
+ } else if (iface instanceof RouterosLTEInterface) {
+ newState = getLTEChannelState(channelID);
}
}
}
}
}
+ protected State getPPPCliChannelState(String channelID) {
+ RouterosPPPCliInterface pppCli = (RouterosPPPCliInterface) this.iface;
+ if (pppCli == null) {
+ return UnDefType.UNDEF;
+ }
+
+ switch (channelID) {
+ case MikrotikBindingConstants.CHANNEL_STATE:
+ return StateUtil.stringOrNull(pppCli.getStatus());
+ case MikrotikBindingConstants.CHANNEL_UP_SINCE:
+ return StateUtil.timeOrNull(pppCli.getUptimeStart());
+ default:
+ return UnDefType.UNDEF;
+ }
+ }
+
protected State getL2TPSrvChannelState(String channelID) {
RouterosL2TPSrvInterface vpnSrv = (RouterosL2TPSrvInterface) this.iface;
if (vpnSrv == null) {
}
}
+ protected State getLTEChannelState(String channelID) {
+ RouterosLTEInterface lte = (RouterosLTEInterface) this.iface;
+ if (lte == null) {
+ return UnDefType.UNDEF;
+ }
+
+ switch (channelID) {
+ case MikrotikBindingConstants.CHANNEL_STATE:
+ return StateUtil.stringOrNull(lte.getStatus());
+ case MikrotikBindingConstants.CHANNEL_UP_SINCE:
+ return StateUtil.timeOrNull(lte.getUptimeStart());
+ default:
+ return UnDefType.UNDEF;
+ }
+ }
+
@Override
protected void executeCommand(ChannelUID channelUID, Command command) {
if (iface == null) {
return Optional.of(new RouterosWlanInterface(interfaceProps));
case PPPOE_CLIENT:
return Optional.of(new RouterosPPPoECliInterface(interfaceProps));
+ case PPP_CLIENT:
+ return Optional.of(new RouterosPPPCliInterface(interfaceProps));
case L2TP_SERVER:
return Optional.of(new RouterosL2TPSrvInterface(interfaceProps));
case L2TP_CLIENT:
return Optional.of(new RouterosL2TPCliInterface(interfaceProps));
+ case LTE:
+ return Optional.of(new RouterosLTEInterface(interfaceProps));
default:
return Optional.empty();
}
BRIDGE("bridge"),
WLAN("wlan"),
CAP("cap"),
+ PPP_CLIENT("ppp-out"),
PPPOE_CLIENT("pppoe-out"),
L2TP_SERVER("l2tp-in"),
- L2TP_CLIENT("l2tp-out");
+ L2TP_CLIENT("l2tp-out"),
+ LTE("lte");
private final String typeName;
--- /dev/null
+/**
+ * Copyright (c) 2010-2021 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.mikrotik.internal.model;
+
+import java.time.LocalDateTime;
+import java.util.Map;
+
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jdt.annotation.Nullable;
+import org.openhab.binding.mikrotik.internal.util.Converter;
+
+/**
+ * The {@link RouterosLTEInterface} is a model class for `lte` interface models having casting accessors for
+ * data that is specific to this network interface kind. Is a subclass of {@link RouterosInterfaceBase}.
+ *
+ * @author Oleg Vivtash - Initial contribution
+ */
+@NonNullByDefault
+public class RouterosLTEInterface extends RouterosInterfaceBase {
+ public RouterosLTEInterface(Map<String, String> props) {
+ super(props);
+ }
+
+ @Override
+ public RouterosInterfaceType getDesignedType() {
+ return RouterosInterfaceType.LTE;
+ }
+
+ @Override
+ public String getApiType() {
+ return "lte";
+ }
+
+ @Override
+ public boolean hasDetailedReport() {
+ return false;
+ }
+
+ @Override
+ public boolean hasMonitor() {
+ return false;
+ }
+
+ public @Nullable String getStatus() {
+ // I only have an RNDIS/HiLink 4G modem which doesn't report status at all. This should be tested/fixed
+ // by someone who has PCIe/serial 4G modem.
+ return getProp("status");
+ }
+
+ public @Nullable String getUptime() {
+ // Same as above. Also a custom info command need to be implemented for this to work.
+ // https://forum.mikrotik.com/viewtopic.php?t=164035#p808281
+ return getProp("session-uptime");
+ }
+
+ public @Nullable LocalDateTime getUptimeStart() {
+ return Converter.routerosPeriodBack(getUptime());
+ }
+}
--- /dev/null
+/**
+ * Copyright (c) 2010-2021 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.mikrotik.internal.model;
+
+import java.time.LocalDateTime;
+import java.util.Map;
+
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jdt.annotation.Nullable;
+import org.openhab.binding.mikrotik.internal.util.Converter;
+
+/**
+ * The {@link RouterosPPPCliInterface} is a model class for `pppoe-out` interface models having casting accessors for
+ * data that is specific to this network interface kind. Is a subclass of {@link RouterosInterfaceBase}.
+ *
+ * @author Oleg Vivtash - Initial contribution
+ */
+@NonNullByDefault
+public class RouterosPPPCliInterface extends RouterosInterfaceBase {
+ public RouterosPPPCliInterface(Map<String, String> props) {
+ super(props);
+ }
+
+ @Override
+ public RouterosInterfaceType getDesignedType() {
+ return RouterosInterfaceType.PPP_CLIENT;
+ }
+
+ @Override
+ public String getApiType() {
+ return "ppp-client";
+ }
+
+ @Override
+ public boolean hasDetailedReport() {
+ return false;
+ }
+
+ @Override
+ public boolean hasMonitor() {
+ return true;
+ }
+
+ public @Nullable String getMacAddress() {
+ return null;
+ }
+
+ public @Nullable String getLocalAddress() {
+ return getProp("local-address");
+ }
+
+ public @Nullable String getRemoteAddress() {
+ return getProp("remote-address");
+ }
+
+ public @Nullable String getStatus() {
+ return getProp("status");
+ }
+
+ public @Nullable String getUptime() {
+ return getProp("uptime");
+ }
+
+ public @Nullable LocalDateTime getUptimeStart() {
+ return Converter.routerosPeriodBack(getUptime());
+ }
+}