mirror of
https://github.com/openhab/openhab-addons.git
synced 2025-01-10 15:11:59 +01:00
[freeboxos] Remove macAddress as thing configuration parameter (#17088)
For server, revolution, player, active-player, repeater and vm thing types Replace it by a thing property. Fix #17076 Signed-off-by: Laurent Garnier <lg.hc@free.fr> Signed-off-by: Ciprian Pascu <contact@ciprianpascu.ro>
This commit is contained in:
parent
6925912f04
commit
0541462a23
@ -85,14 +85,12 @@ public abstract class ApiConsumerHandler extends BaseThingHandler implements Api
|
||||
|
||||
private void initializeOnceBridgeOnline(FreeboxOsHandler bridgeHandler) {
|
||||
Map<String, String> properties = editProperties();
|
||||
if (properties.isEmpty()) {
|
||||
try {
|
||||
initializeProperties(properties);
|
||||
checkAirMediaCapabilities(properties);
|
||||
updateProperties(properties);
|
||||
} catch (FreeboxException e) {
|
||||
logger.warn("Error getting thing {} properties: {}", thing.getUID(), e.getMessage());
|
||||
}
|
||||
try {
|
||||
initializeProperties(properties);
|
||||
checkAirMediaCapabilities(properties);
|
||||
updateProperties(properties);
|
||||
} catch (FreeboxException e) {
|
||||
logger.warn("Error getting thing {} properties: {}", thing.getUID(), e.getMessage());
|
||||
}
|
||||
|
||||
boolean isAudioReceiver = Boolean.parseBoolean(properties.get(MediaType.AUDIO.name()));
|
||||
|
@ -55,8 +55,11 @@ public interface ApiConsumerIntf extends ThingHandler {
|
||||
return ((BigDecimal) getConfig().get(ClientConfiguration.ID)).intValue();
|
||||
}
|
||||
|
||||
default MACAddress getMac() {
|
||||
default @Nullable MACAddress getMac() {
|
||||
String mac = (String) getConfig().get(Thing.PROPERTY_MAC_ADDRESS);
|
||||
return new MACAddressString(mac).getAddress();
|
||||
if (mac == null) {
|
||||
mac = editProperties().get(Thing.PROPERTY_MAC_ADDRESS);
|
||||
}
|
||||
return mac == null ? null : new MACAddressString(mac).getAddress();
|
||||
}
|
||||
}
|
||||
|
@ -33,6 +33,8 @@ import org.openhab.core.thing.binding.ThingHandlerService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import inet.ipaddr.mac.MACAddress;
|
||||
|
||||
/**
|
||||
* The {@link FreeplugHandler} is responsible for handling everything associated to a
|
||||
* powerline gateway managed by the freebox server
|
||||
@ -49,7 +51,13 @@ public class FreeplugHandler extends ApiConsumerHandler {
|
||||
|
||||
@Override
|
||||
void initializeProperties(Map<String, String> properties) throws FreeboxException {
|
||||
getManager(FreeplugManager.class).getPlug(getMac()).ifPresent(plug -> {
|
||||
MACAddress mac = getMac();
|
||||
if (mac == null) {
|
||||
throw new FreeboxException(
|
||||
"initializeProperties is not possible because MAC address is undefined for the thing "
|
||||
+ thing.getUID());
|
||||
}
|
||||
getManager(FreeplugManager.class).getPlug(mac).ifPresent(plug -> {
|
||||
properties.put(Thing.PROPERTY_MODEL_ID, plug.model());
|
||||
properties.put(ROLE, plug.netRole().name());
|
||||
properties.put(NET_ID, plug.netId());
|
||||
@ -59,15 +67,23 @@ public class FreeplugHandler extends ApiConsumerHandler {
|
||||
|
||||
if (plug.local()) { // Plug connected to the freebox does not provide rate up or down
|
||||
List<Channel> channels = new ArrayList<>(getThing().getChannels());
|
||||
int nbInit = channels.size();
|
||||
channels.removeIf(channel -> channel.getUID().getId().contains(RATE));
|
||||
updateThing(editThing().withChannels(channels).build());
|
||||
if (nbInit != channels.size()) {
|
||||
updateThing(editThing().withChannels(channels).build());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void internalPoll() throws FreeboxException {
|
||||
getManager(FreeplugManager.class).getPlug(getMac()).ifPresent(plug -> {
|
||||
MACAddress mac = getMac();
|
||||
if (mac == null) {
|
||||
throw new FreeboxException(
|
||||
"internalPoll is not possible because MAC address is undefined for the thing " + thing.getUID());
|
||||
}
|
||||
getManager(FreeplugManager.class).getPlug(mac).ifPresent(plug -> {
|
||||
updateChannelDateTimeState(LAST_SEEN, ZonedDateTime.now().minusSeconds(plug.inactive()));
|
||||
|
||||
updateChannelString(LINE_STATUS, plug.ethPortStatus());
|
||||
@ -84,11 +100,17 @@ public class FreeplugHandler extends ApiConsumerHandler {
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
MACAddress mac = getMac();
|
||||
if (mac == null) {
|
||||
logger.warn("Freeplug restart is not possible because MAC address is undefined for the thing {}",
|
||||
thing.getUID());
|
||||
return;
|
||||
}
|
||||
try {
|
||||
getManager(FreeplugManager.class).reboot(getMac());
|
||||
logger.debug("Freeplug {} succesfully restarted", getMac());
|
||||
getManager(FreeplugManager.class).reboot(mac);
|
||||
logger.debug("Freeplug {} succesfully restarted", mac);
|
||||
} catch (FreeboxException e) {
|
||||
logger.warn("Error restarting freeplug {}: {}", getMac(), e.getMessage());
|
||||
logger.warn("Error restarting freeplug {}: {}", mac, e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -32,6 +32,8 @@ import org.openhab.core.thing.binding.ThingHandlerService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import inet.ipaddr.mac.MACAddress;
|
||||
|
||||
/**
|
||||
* The {@link HostHandler} is responsible for all network equipments hosted on the network
|
||||
*
|
||||
@ -63,9 +65,10 @@ public class HostHandler extends ApiConsumerHandler {
|
||||
}
|
||||
|
||||
protected void cancelPushSubscription() {
|
||||
if (pushSubscribed) {
|
||||
MACAddress mac = getMac();
|
||||
if (pushSubscribed && mac != null) {
|
||||
try {
|
||||
getManager(WebSocketManager.class).unregisterListener(getMac());
|
||||
getManager(WebSocketManager.class).unregisterListener(mac);
|
||||
} catch (FreeboxException e) {
|
||||
logger.warn("Error unregistering host from the websocket: {}", e.getMessage());
|
||||
}
|
||||
@ -92,7 +95,12 @@ public class HostHandler extends ApiConsumerHandler {
|
||||
}
|
||||
|
||||
protected LanHost getLanHost() throws FreeboxException {
|
||||
return getManager(LanBrowserManager.class).getHost(getMac()).map(hostIntf -> hostIntf.host())
|
||||
MACAddress mac = getMac();
|
||||
if (mac == null) {
|
||||
throw new FreeboxException(
|
||||
"getLanHost is not possible because MAC address is undefined for the thing " + thing.getUID());
|
||||
}
|
||||
return getManager(LanBrowserManager.class).getHost(mac).map(hostIntf -> hostIntf.host())
|
||||
.orElseThrow(() -> new FreeboxException("Host data not found"));
|
||||
}
|
||||
|
||||
@ -104,9 +112,14 @@ public class HostHandler extends ApiConsumerHandler {
|
||||
}
|
||||
|
||||
public void wol() {
|
||||
MACAddress mac = getMac();
|
||||
if (mac == null) {
|
||||
logger.warn("Waking up host is not possible because MAC address is undefined for the thing {}",
|
||||
thing.getUID());
|
||||
return;
|
||||
}
|
||||
try {
|
||||
getManager(LanBrowserManager.class).wakeOnLan(getMac(),
|
||||
getConfigAs(ApiConsumerConfiguration.class).password);
|
||||
getManager(LanBrowserManager.class).wakeOnLan(mac, getConfigAs(ApiConsumerConfiguration.class).password);
|
||||
} catch (FreeboxException e) {
|
||||
logger.warn("Error waking up host: {}", e.getMessage());
|
||||
}
|
||||
|
@ -57,9 +57,12 @@ public class PlayerHandler extends HostHandler {
|
||||
|
||||
@Override
|
||||
void initializeProperties(Map<String, String> properties) throws FreeboxException {
|
||||
super.initializeProperties(properties);
|
||||
// We need to get and set the MAC address before calling super.initializeProperties
|
||||
Player player = getManager(PlayerManager.class).getDevice(getClientId());
|
||||
properties.put(Thing.PROPERTY_MAC_ADDRESS, player.mac().toColonDelimitedString());
|
||||
properties.put(Thing.PROPERTY_MODEL_ID, player.deviceModel().name());
|
||||
updateProperties(properties);
|
||||
super.initializeProperties(properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -53,12 +53,14 @@ public class RepeaterHandler extends HostHandler implements FreeDeviceIntf {
|
||||
|
||||
@Override
|
||||
void initializeProperties(Map<String, String> properties) throws FreeboxException {
|
||||
super.initializeProperties(properties);
|
||||
|
||||
// We need to get and set the MAC address before calling super.initializeProperties
|
||||
Repeater repeater = getManager(RepeaterManager.class).getDevice(getClientId());
|
||||
properties.put(Thing.PROPERTY_MAC_ADDRESS, repeater.mainMac().toColonDelimitedString());
|
||||
properties.put(Thing.PROPERTY_SERIAL_NUMBER, repeater.sn());
|
||||
properties.put(Thing.PROPERTY_FIRMWARE_VERSION, repeater.firmwareVersion());
|
||||
properties.put(Thing.PROPERTY_MODEL_ID, repeater.model().name());
|
||||
updateProperties(properties);
|
||||
super.initializeProperties(properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -79,22 +79,30 @@ public class ServerHandler extends ApiConsumerHandler implements FreeDeviceIntf
|
||||
properties.put(Thing.PROPERTY_SERIAL_NUMBER, config.serial());
|
||||
properties.put(Thing.PROPERTY_FIRMWARE_VERSION, config.firmwareVersion());
|
||||
properties.put(Thing.PROPERTY_HARDWARE_VERSION, config.modelInfo().prettyName());
|
||||
properties.put(Thing.PROPERTY_MAC_ADDRESS, config.mac().toColonDelimitedString());
|
||||
properties.put(Source.UPNP.name(), lanConfig.name());
|
||||
|
||||
List<Channel> channels = new ArrayList<>(getThing().getChannels());
|
||||
int nbInit = channels.size();
|
||||
config.sensors().forEach(sensor -> {
|
||||
ChannelUID sensorId = new ChannelUID(thing.getUID(), GROUP_SENSORS, sensor.id());
|
||||
channels.add(
|
||||
ChannelBuilder.create(sensorId).withLabel(sensor.name()).withAcceptedItemType("Number:Temperature")
|
||||
.withType(new ChannelTypeUID(BINDING_ID + ":temperature")).build());
|
||||
if (getThing().getChannel(sensorId) == null) {
|
||||
channels.add(ChannelBuilder.create(sensorId).withLabel(sensor.name())
|
||||
.withAcceptedItemType("Number:Temperature")
|
||||
.withType(new ChannelTypeUID(BINDING_ID + ":temperature")).build());
|
||||
}
|
||||
});
|
||||
config.fans().forEach(sensor -> {
|
||||
ChannelUID sensorId = new ChannelUID(thing.getUID(), GROUP_FANS, sensor.id());
|
||||
channels.add(ChannelBuilder.create(sensorId).withLabel(sensor.name())
|
||||
.withAcceptedItemType(CoreItemFactory.NUMBER).withType(new ChannelTypeUID(BINDING_ID + ":fanspeed"))
|
||||
.build());
|
||||
if (getThing().getChannel(sensorId) == null) {
|
||||
channels.add(ChannelBuilder.create(sensorId).withLabel(sensor.name())
|
||||
.withAcceptedItemType(CoreItemFactory.NUMBER)
|
||||
.withType(new ChannelTypeUID(BINDING_ID + ":fanspeed")).build());
|
||||
}
|
||||
});
|
||||
updateThing(editThing().withChannels(channels).build());
|
||||
if (nbInit != channels.size()) {
|
||||
updateThing(editThing().withChannels(channels).build());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -14,6 +14,8 @@ package org.openhab.binding.freeboxos.internal.handler;
|
||||
|
||||
import static org.openhab.binding.freeboxos.internal.FreeboxOsBindingConstants.*;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
import org.openhab.binding.freeboxos.internal.api.FreeboxException;
|
||||
import org.openhab.binding.freeboxos.internal.api.rest.VmManager;
|
||||
@ -40,6 +42,15 @@ public class VmHandler extends HostHandler {
|
||||
super(thing);
|
||||
}
|
||||
|
||||
@Override
|
||||
void initializeProperties(Map<String, String> properties) throws FreeboxException {
|
||||
// We need to get and set the MAC address before calling super.initializeProperties
|
||||
VirtualMachine vm = getManager(VmManager.class).getDevice(getClientId());
|
||||
properties.put(Thing.PROPERTY_MAC_ADDRESS, vm.mac().toColonDelimitedString());
|
||||
updateProperties(properties);
|
||||
super.initializeProperties(properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void internalPoll() throws FreeboxException {
|
||||
super.internalPoll();
|
||||
|
@ -36,6 +36,8 @@ import org.openhab.core.types.UnDefType;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import inet.ipaddr.mac.MACAddress;
|
||||
|
||||
/**
|
||||
* The {@link WifiStationHandler} is responsible for handling everything associated to
|
||||
* any Freebox thing types except the bridge thing type.
|
||||
@ -56,8 +58,14 @@ public class WifiStationHandler extends HostHandler {
|
||||
protected void internalPoll() throws FreeboxException {
|
||||
super.internalPoll();
|
||||
|
||||
MACAddress mac = getMac();
|
||||
if (mac == null) {
|
||||
throw new FreeboxException(
|
||||
"internalPoll is not possible because MAC address is undefined for the thing " + thing.getUID());
|
||||
}
|
||||
|
||||
// Search if the wifi-host is hosted on server access-points
|
||||
Optional<Station> station = getManager(APManager.class).getStation(getMac());
|
||||
Optional<Station> station = getManager(APManager.class).getStation(mac);
|
||||
if (station.isPresent()) {
|
||||
Station data = station.get();
|
||||
updateChannelDateTimeState(CONNECTIVITY, LAST_SEEN, data.getLastSeen());
|
||||
@ -67,7 +75,7 @@ public class WifiStationHandler extends HostHandler {
|
||||
}
|
||||
|
||||
// Search if it is hosted by a repeater
|
||||
Optional<LanHost> wifiHost = getManager(RepeaterManager.class).getHost(getMac());
|
||||
Optional<LanHost> wifiHost = getManager(RepeaterManager.class).getHost(mac);
|
||||
if (wifiHost.isPresent()) {
|
||||
updateChannelDateTimeState(CONNECTIVITY, LAST_SEEN, wifiHost.get().getLastSeen());
|
||||
LanAccessPoint lanAp = wifiHost.get().accessPoint();
|
||||
|
@ -5,10 +5,6 @@
|
||||
xsi:schemaLocation="https://openhab.org/schemas/config-description/v1.0.0 https://openhab.org/schemas/config-description-1.0.0.xsd">
|
||||
|
||||
<config-description uri="thing-type:freeboxos:player">
|
||||
<parameter name="macAddress" type="text" required="true" pattern="([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})">
|
||||
<label>MAC Address</label>
|
||||
<description>The MAC address of the player device</description>
|
||||
</parameter>
|
||||
<parameter name="id" type="integer">
|
||||
<label>ID</label>
|
||||
<description>Id of the player</description>
|
||||
|
@ -11,10 +11,6 @@
|
||||
<description>The refresh interval in seconds which is used to poll the repeater</description>
|
||||
<default>30</default>
|
||||
</parameter>
|
||||
<parameter name="macAddress" type="text" pattern="([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})" required="true">
|
||||
<label>MAC Address</label>
|
||||
<description>The MAC address of the network device</description>
|
||||
</parameter>
|
||||
<parameter name="id" type="integer" required="true">
|
||||
<label>ID</label>
|
||||
<description>Id of the repeater</description>
|
||||
|
@ -11,10 +11,6 @@
|
||||
<description>The refresh interval in seconds which is used to poll given Freebox Server</description>
|
||||
<default>30</default>
|
||||
</parameter>
|
||||
<parameter name="macAddress" type="text" pattern="([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})" required="true">
|
||||
<label>MAC Address</label>
|
||||
<description>The MAC address of the network device</description>
|
||||
</parameter>
|
||||
</config-description>
|
||||
|
||||
</config-description:config-descriptions>
|
||||
|
@ -11,10 +11,6 @@
|
||||
<description>The refresh interval in seconds which is used to poll given virtual machine</description>
|
||||
<default>30</default>
|
||||
</parameter>
|
||||
<parameter name="macAddress" type="text" pattern="([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})" required="true">
|
||||
<label>MAC Address</label>
|
||||
<description>The MAC address of the network device</description>
|
||||
</parameter>
|
||||
<parameter name="id" type="integer" required="true">
|
||||
<label>ID</label>
|
||||
<description>Id of the Virtual Machine</description>
|
||||
|
@ -93,8 +93,6 @@ thing-type.config.freeboxos.player.acceptAllMp3.label = Accept All MP3
|
||||
thing-type.config.freeboxos.player.acceptAllMp3.description = Accept any bitrate for MP3 audio or only bitrates greater than 64 kbps
|
||||
thing-type.config.freeboxos.player.id.label = ID
|
||||
thing-type.config.freeboxos.player.id.description = Id of the player
|
||||
thing-type.config.freeboxos.player.macAddress.label = MAC Address
|
||||
thing-type.config.freeboxos.player.macAddress.description = The MAC address of the player device
|
||||
thing-type.config.freeboxos.player.password.label = Password
|
||||
thing-type.config.freeboxos.player.password.description = AirPlay password
|
||||
thing-type.config.freeboxos.player.port.label = Player port
|
||||
@ -104,18 +102,12 @@ thing-type.config.freeboxos.player.remoteCode.label = Remote Code
|
||||
thing-type.config.freeboxos.player.remoteCode.description = Code associated to remote control
|
||||
thing-type.config.freeboxos.repeater.id.label = ID
|
||||
thing-type.config.freeboxos.repeater.id.description = Id of the repeater
|
||||
thing-type.config.freeboxos.repeater.macAddress.label = MAC Address
|
||||
thing-type.config.freeboxos.repeater.macAddress.description = The MAC address of the network device
|
||||
thing-type.config.freeboxos.repeater.refreshInterval.label = Refresh Interval
|
||||
thing-type.config.freeboxos.repeater.refreshInterval.description = The refresh interval in seconds which is used to poll the repeater
|
||||
thing-type.config.freeboxos.server.macAddress.label = MAC Address
|
||||
thing-type.config.freeboxos.server.macAddress.description = The MAC address of the network device
|
||||
thing-type.config.freeboxos.server.refreshInterval.label = Refresh Interval
|
||||
thing-type.config.freeboxos.server.refreshInterval.description = The refresh interval in seconds which is used to poll given Freebox Server
|
||||
thing-type.config.freeboxos.vm.id.label = ID
|
||||
thing-type.config.freeboxos.vm.id.description = Id of the Virtual Machine
|
||||
thing-type.config.freeboxos.vm.macAddress.label = MAC Address
|
||||
thing-type.config.freeboxos.vm.macAddress.description = The MAC address of the network device
|
||||
thing-type.config.freeboxos.vm.refreshInterval.label = Refresh Interval
|
||||
thing-type.config.freeboxos.vm.refreshInterval.description = The refresh interval in seconds which is used to poll given virtual machine
|
||||
thing-type.config.freeboxos.wifi-host.mDNS.label = mDNS Name
|
||||
|
@ -22,6 +22,8 @@
|
||||
<channel-group typeId="connection-status" id="connection-status"/>
|
||||
</channel-groups>
|
||||
|
||||
<representation-property>macAddress</representation-property>
|
||||
|
||||
<config-description-ref uri="thing-type:freeboxos:server"/>
|
||||
</thing-type>
|
||||
|
||||
@ -42,6 +44,8 @@
|
||||
<channel-group typeId="connection-status" id="connection-status"/>
|
||||
</channel-groups>
|
||||
|
||||
<representation-property>macAddress</representation-property>
|
||||
|
||||
<config-description-ref uri="thing-type:freeboxos:server"/>
|
||||
</thing-type>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user