Search in sources :

Example 1 with YamahaReceiverProxy

use of org.openhab.binding.yamahareceiver.internal.hardware.YamahaReceiverProxy in project openhab1-addons by openhab.

the class YamahaReceiverBinding method execute.

@Override
protected void execute() {
    try {
        // Iterate through all proxies
        for (Map.Entry<String, YamahaReceiverProxy> entry : proxies.entrySet()) {
            String deviceUid = entry.getKey();
            YamahaReceiverProxy receiverProxy = entry.getValue();
            sendUpdates(receiverProxy, deviceUid);
        }
    } catch (Throwable t) {
        logger.error("Error polling devices for " + getName(), t);
    }
}
Also used : HashMap(java.util.HashMap) Map(java.util.Map) YamahaReceiverProxy(org.openhab.binding.yamahareceiver.internal.hardware.YamahaReceiverProxy)

Example 2 with YamahaReceiverProxy

use of org.openhab.binding.yamahareceiver.internal.hardware.YamahaReceiverProxy in project openhab1-addons by openhab.

the class YamahaReceiverBinding method updated.

@Override
public void updated(Dictionary<String, ?> config) throws ConfigurationException {
    logger.debug(BINDING_NAME + " updated");
    try {
        // Process device configuration
        if (config != null) {
            String refreshIntervalString = (String) config.get("refresh");
            if (StringUtils.isNotBlank(refreshIntervalString)) {
                refreshInterval = Long.parseLong(refreshIntervalString);
            }
            // parse all configured receivers
            // ( yamahareceiver:<uid>.host=10.0.0.2 )
            Enumeration<String> keys = config.keys();
            while (keys.hasMoreElements()) {
                String key = keys.nextElement();
                if (key.endsWith(CONFIG_KEY_HOST)) {
                    // parse host
                    String host = (String) config.get(key);
                    int separatorIdx = key.indexOf('.');
                    // no uid => one device => use default UID
                    String uid = separatorIdx == -1 ? DEFAULT_DEVICE_UID : key.substring(0, separatorIdx);
                    // proxy is stateless. keep them in a map in the
                    // binding.
                    proxies.put(uid, new YamahaReceiverProxy(host));
                }
            }
            setProperlyConfigured(true);
        }
    } catch (Throwable t) {
        logger.error("Error configuring " + getName(), t);
    }
}
Also used : YamahaReceiverProxy(org.openhab.binding.yamahareceiver.internal.hardware.YamahaReceiverProxy)

Example 3 with YamahaReceiverProxy

use of org.openhab.binding.yamahareceiver.internal.hardware.YamahaReceiverProxy in project openhab1-addons by openhab.

the class YamahaReceiverBinding method internalReceiveCommand.

@Override
protected void internalReceiveCommand(String itemName, Command command) {
    YamahaReceiverBindingConfig config = getConfigForItemName(itemName);
    if (config == null) {
        logger.error("Received command for unknown item '" + itemName + "'");
        return;
    }
    YamahaReceiverProxy proxy = proxies.get(config.getDeviceUid());
    if (proxy == null) {
        logger.error("Received command for unknown device uid '" + config.getDeviceUid() + "'");
        return;
    }
    if (logger.isDebugEnabled()) {
        logger.debug(BINDING_NAME + " processing command '" + command + "' of type '" + command.getClass().getSimpleName() + "' for item '" + itemName + "'");
    }
    try {
        Zone zone = config.getZone();
        BindingType type = config.getBindingType();
        if (type == BindingType.power) {
            if (command instanceof OnOffType) {
                proxy.setPower(zone, command == OnOffType.ON);
            }
        } else if (type == BindingType.volumePercent || type == BindingType.volumeDb) {
            if (command instanceof IncreaseDecreaseType || command instanceof UpDownType) {
                // increase/decrease dB by .5 dB
                float db = proxy.getState(zone).getVolume();
                float adjAmt;
                if (command == IncreaseDecreaseType.INCREASE || command == UpDownType.UP) {
                    adjAmt = .5f;
                } else {
                    adjAmt = -.5f;
                }
                float newDb = db + adjAmt;
                proxy.setVolume(zone, newDb);
                // send new value as update
                State newState = new DecimalType(newDb);
                eventPublisher.postUpdate(itemName, newState);
            } else if (command instanceof PercentType) {
                // set dB from percent
                byte percent = ((PercentType) command).byteValue();
                int db = percentToDB(percent);
                proxy.setVolume(zone, db);
            } else {
                // set dB from value
                float db = Float.parseFloat(command.toString());
                proxy.setVolume(zone, db);
            }
            // Volume updates multiple values => send update now
            sendUpdates(proxy, config.getDeviceUid());
        } else if (type == BindingType.mute) {
            if (command instanceof OnOffType) {
                proxy.setMute(zone, command == OnOffType.ON);
            }
        } else if (type == BindingType.input) {
            proxy.setInput(zone, parseString(command.toString()));
        } else if (type == BindingType.surroundProgram) {
            proxy.setSurroundProgram(zone, parseString(command.toString()));
        } else if (type == BindingType.netRadio) {
            if (command instanceof DecimalType) {
                proxy.setNetRadio(((DecimalType) command).intValue());
            }
        }
    } catch (IOException e) {
        logger.warn("Cannot communicate with " + proxy.getHost() + " (uid: " + config.getDeviceUid() + ")");
    } catch (Throwable t) {
        logger.error("Error processing command '" + command + "' for item '" + itemName + "'", t);
    }
}
Also used : Zone(org.openhab.binding.yamahareceiver.internal.YamahaReceiverBindingConfig.Zone) UpDownType(org.openhab.core.library.types.UpDownType) PercentType(org.openhab.core.library.types.PercentType) IOException(java.io.IOException) OnOffType(org.openhab.core.library.types.OnOffType) BindingType(org.openhab.binding.yamahareceiver.internal.YamahaReceiverBindingConfig.BindingType) YamahaReceiverState(org.openhab.binding.yamahareceiver.internal.hardware.YamahaReceiverState) State(org.openhab.core.types.State) DecimalType(org.openhab.core.library.types.DecimalType) IncreaseDecreaseType(org.openhab.core.library.types.IncreaseDecreaseType) YamahaReceiverProxy(org.openhab.binding.yamahareceiver.internal.hardware.YamahaReceiverProxy)

Aggregations

YamahaReceiverProxy (org.openhab.binding.yamahareceiver.internal.hardware.YamahaReceiverProxy)3 IOException (java.io.IOException)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1 BindingType (org.openhab.binding.yamahareceiver.internal.YamahaReceiverBindingConfig.BindingType)1 Zone (org.openhab.binding.yamahareceiver.internal.YamahaReceiverBindingConfig.Zone)1 YamahaReceiverState (org.openhab.binding.yamahareceiver.internal.hardware.YamahaReceiverState)1 DecimalType (org.openhab.core.library.types.DecimalType)1 IncreaseDecreaseType (org.openhab.core.library.types.IncreaseDecreaseType)1 OnOffType (org.openhab.core.library.types.OnOffType)1 PercentType (org.openhab.core.library.types.PercentType)1 UpDownType (org.openhab.core.library.types.UpDownType)1 State (org.openhab.core.types.State)1